Skip to content

Instantly share code, notes, and snippets.

@yafiyogi
Last active November 1, 2025 13:56
Show Gist options
  • Select an option

  • Save yafiyogi/8cc25cca91b6b38f50906ca8d5667bf2 to your computer and use it in GitHub Desktop.

Select an option

Save yafiyogi/8cc25cca91b6b38f50906ca8d5667bf2 to your computer and use it in GitHub Desktop.
Third Party Library Build Instructions
# Note! change YY_TP_INSTALL_DIR to suit your environment.
export YY_TP_INSTALL_DIR="${HOME}/code/tp"
zlib
====
$ curl -O https://www.zlib.net/current/zlib.tar.gz
$ tar -xvf zlib.tar.gz
$ cd zlib-x.x.x
$ ./configure --prefix=${YY_TP_INSTALL_DIR} --static
... or ...
$ cmake --fresh -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR}-DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DZLIB_BUILD_EXAMPLES=OFF ..
$ make clean && make && make install
# The cmake version creates the dynamic libraries, which I don't want so for MacOs ...
$ rm ${YY_TP_INSTALL_DIR}/lib/libz*.dylib
openssl
=======
$ git clone https://github.com/openssl/openssl.git
$ cd openssl
$ gco tags/openssl-3.3.0 -b openssl-3.3.0
$ PKG_CONFIG=`which pkg-config` PKG_CONFIG_PATH=${YY_TP_INSTALL_DIR}/lib/pkgconfig:${YY_TP_INSTALL_DIR}/share/pkgconfig:${PKG_CONFIG_PATH} ./configure --prefix=${YY_TP_INSTALL_DIR} no-shared zlib threads gcc
$ make clean && make && make install
libressl
========
# PKG_CONFIG=`which pkg-config` PKG_CONFIG_PATH=${YY_TP_INSTALL_DIR}/lib/pkgconfig:${YY_TP_INSTALL_DIR}/share/pkgconfig:${PKG_CONFIG_PATH} ./configure --prefix=${YY_TP_INSTALL_DIR}/libressl --enable-static
$ mkdir -p build && cd build
$ cmake --fresh -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR}/libressl/ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DLIBRESSL_INSTALL_CMAKEDIR=${YY_TP_INSTALL_DIR}/lib/cmake/LibreSSL ..
$ make clean && make && make install
yaml-cpp
========
$ mkdir -p build && cd build
$ cmake --fresh -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DYAML_BUILD_SHARED_LIBS=OFF -DYAML_CPP_BUILD_TESTS=OFF ..
$ make clean && make && make install
fmtlib
======
Build static lib with position independent code:
$ curl -L https://github.com/fmtlib/fmt/archive/refs/tags/11.1.4.tar.gz > fmtlib-11.1.4.tar.gz
$ tar -xzvf fmtlib-11.1.4.tar.gz
$ cd fmtlib-11.1.4
$ mkdir -p build && cd build # Create a directory to hold the build output.
$ cmake --fresh -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DFMT_TEST=OFF ..
$ make clean && make && make install
spdlog
======
Build static lib with position independent code:
$ curl -L https://github.com/gabime/spdlog/archive/refs/tags/v1.15.2.tar.gz > spdlog-1.15.2.tar.gz
$ tar -xvf spdlog-1.15.2.tar.gz
$ cd spdlog-1.15.2 && mkdir -p build && cd build
$ cmake --fresh -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DSPDLOG_FMT_EXTERNAL=ON -DSPDLOG_BUILD_SHARED=OFF -DSPDLOG_BUILD_PIC=ON -DSPDLOG_BUILD_EXAMPLE=OFF ..
$ make clean && make && make install
icu
===
$ curl -L -O https://github.com/unicode-org/icu/releases/download/release-76-1/icu4c-76_1-src.tgz
$ tar -xzvf ../icu4c-76_1-src.tgz
$ cd icu/source
$ chmod +x runConfigureICU configure install-sh
$ ./runConfigureICU macOS/gcc --prefix=${YY_TP_INSTALL_DIR} --enable-static=yes --enable-shared=no --enable-tests=no --enable-samples=no
$ nice gmake && nice gmake install
iconv
=====
$ curl -L -O https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.18.tar.gz
$ tar -xzvf libiconv-1.18.tar.gz
$ cd libiconv-1.18/
$ ./configure --prefix=${YY_TP_INSTALL_DIR} --enable-static=yes --enable-shared=no --enable-year2038
$ make && make install
boost
=====
$ curl -L -O https://archives.boost.io/release/1.84.0/source/boost_1_84_0.tar.gz
$ tar -xvf boost_1_84_0.tar.gz
$ cd boost_1_84_0
$ ./bootstrap.sh --prefix=${YY_TP_INSTALL_DIR} --with-toolset=gcc
# On Raspberry Pi
# - increase swap file size to at least 500mb
# - to limit number of paralell jobs use '-j 1':
# nice ./b2 -j1 -sICU_PATH=${YY_TP_INSTALL_DIR} -sICONV_PATH=${YY_TP_INSTALL_DIR} --build-dir=./build --prefix=${YY_TP_INSTALL_DIR} link=static threading=multi toolset=gcc install
# clean: ./b2 --clean-all -n
$ nice ./b2 -sICU_PATH=${YY_TP_INSTALL_DIR} -sICONV_PATH=${YY_TP_INSTALL_DIR} --build-dir=./build --prefix=${YY_TP_INSTALL_DIR} link=static threading=multi toolset=gcc install
google test
===========
Build static lib with position independent code:
$ curl -L https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz > google_test-1.14.0.tgz
$ tar -xvzf google_test-1.14.0.tgz
$ cd googletest-1.14.0
$ mkdir -p build && cd build
$ cmake --fresh -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE ..
$ make clean && make && make install
google benchmark
================
$ curl -L https://github.com/google/benchmark/archive/refs/tags/v1.8.4.tar.gz > google_benchmark.1.8.4.tgz
$ tar -xzvf googlebenchmark-1.8.4.tgz
$ cd benchmark-1.8.4
$ mkdir -p build && cd build
$ cmake --fresh -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DBENCHMARK_ENABLE_TESTING=OFF -DBENCHMARK_ENABLE_GTEST_TESTS=OFF -DCMAKE_BUILD_TYPE=Release ..
$ make clean && make && make install
nghttp2
=======
With LibreSSL
$ PKG_CONFIG=`which pkg-config` PKG_CONFIG_PATH=${YY_TP_INSTALL_DIR}/libressl/lib/pkgconfig:${YY_TP_INSTALL_DIR}/lib/pkgconfig:${YY_TP_INSTALL_DIR}/share/pkgconfig:${PKG_CONFIG_PATH} ./configure --prefix=${YY_TP_INSTALL_DIR} --enable-shared=no --with-openssl --with-zlib=${YY_TP_INSTALL_DIR}
$ make clean && make && make install
curl
====
With LibreSSL
mkdir build ; cd build
$ PKG_CONFIG=`which pkg-config` PKG_CONFIG_PATH=${YY_TP_INSTALL_DIR}/libressl/lib/pkgconfig:${YY_TP_INSTALL_DIR}/lib/pkgconfig:${YY_TP_INSTALL_DIR}/share/pkgconfig:${PKG_CONFIG_PATH} ./configure --prefix=${YY_TP_INSTALL_DIR} --enable-shared=no --with-openssl --disable-ldap
$ PKG_CONFIG=`which pkg-config` PKG_CONFIG_PATH=${YY_TP_INSTALL_DIR}/libressl/lib/pkgconfig:${YY_TP_INSTALL_DIR}/lib/pkgconfig:${YY_TP_INSTALL_DIR}/share/pkgconfig:${PKG_CONFIG_PATH} ../configure --prefix=${YY_TP_INSTALL_DIR} --enable-shared=no --with-openssl --disable-ldap --srcdir=..
$ make clean && make && make install
civetweb
========
$ mkdir -p build-dir && cd build-dir
# -DCIVETWEB_ENABLE_IPV6=ON -DCIVETWEB_DISABLE_CGI=ON -DCIVETWEB_DISABLE_CACHING=ON -DCIVETWEB_SERVE_NO_FILES=ON -DCIVETWEB_BUILD_TESTING=OFF -DCIVETWEB_ENABLE_ZLIB=ON -DCIVETWEB_ENABLE_LTO=ON -DCIVETWEB_THIRD_PARTY_DIR=${YY_TP_INSTALL_DIR} -DCIVETWEB_ENABLE_CXX=ON -DCIVETWEB_CXX_STANDARD=c++20
$ cmake --fresh -DZLIB_USE_STATIC_LIBS=ON -DZLIB_ROOT=${YY_TP_INSTALL_DIR} -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DCIVETWEB_BUILD_TESTING=OFF -DCIVETWEB_ENABLE_THIRD_PARTY_OUTPUT=OFF -DCIVETWEB_ENABLE_SERVER_EXECUTABLE=OFF -DCIVETWEB_SERVE_NO_FILES=ON -DCIVETWEB_DISABLE_CGI=ON -DCIVETWEB_DISABLE_CACHING=ON -DCIVETWEB_ENABLE_CXX=ON -DCIVETWEB_CXX_STANDARD=c++20 -DCIVETWEB_ENABLE_IPV6=ON -DCIVETWEB_ENABLE_HTTP2=ON -DCIVETWEB_ENABLE_WEBSOCKETS=OFF -DCIVETWEB_ENABLE_SERVER_STATS=OFF -DCIVETWEB_ENABLE_MEMORY_DEBUGGING=OFF -DCIVETWEB_ENABLE_ASAN=OFF -DCIVETWEB_ARCH=OFF -DCIVETWEB_ENABLE_LUA=OFF -DCIVETWEB_ENABLE_ZLIB=ON -DCIVETWEB_INSTALL_EXECUTABLE=OFF -DCIVETWEB_ALLOW_WARNINGS=ON -DCIVETWEB_ENABLE_DUKTAPE=OFF -DCIVETWEB_ENABLE_SSL=ON -DCIVETWEB_SSL_OPENSSL_API_1_0=OFF -DCIVETWEB_SSL_OPENSSL_API_1_1=OFF -DCIVETWEB_SSL_OPENSSL_API_3_0=ON -DCIVETWEB_SSL_SSL_LIB=${YY_TP_INSTALL_DIR}/libressl/lib/libssl.a -DCIVETWEB_SSL_CRYPTO_LIB=${YY_TP_INSTALL_DIR}/libressl/lib/libcrypto.a -DCIVETWEB_ENABLE_LTO=ON -DCIVETWEB_ENABLE_DEBUG_TOOLS=OFF -DCMAKE_BUILD_TYPE=Release ..
$ make clean && make && make install
#$ CFLAGS='-DUSE_HTTP2 -DNO_CGI -DNO_FILES -DUSE_IPV6 -DUSE_SERVER_STATS -DUSE_ZLIB' CXXFLAGS='-DUSE_HTTP2 -DNO_CGI -DNO_FILES -DUSE_IPV6 -DUSE_SERVER_STATS -DUSE_ZLIB' make
#$ make install
#$ make lib WITH_IPV6=1 WITH_X_DOM_SOCKET=1 WITH_SERVER_STATS=1 WITH_CPP=1 SSL_LIB=../../openssl/lib/libssl.a CRYPTO_LIB=../../openssl/lib/libcrypto.a PREFIX=${YY_TP_INSTALL_DIR} OPENSSL_API_3_0=1 COPT='-DUSE_HTTP2 -DNO_CGI -DNO_FILES -DUSE_IPV6 -DUSE_SERVER_STATS -DUSE_ZLIB' VERBOSE=1
#$ make install-lib CAN_INSTALL=1 PREFIX=${YY_TP_INSTALL_DIR}
mosquitto
=========
$ git clone https://github.com/eclipse/mosquitto.git
$ cd mosquitto
$ gco tags/v2.0.21 -b v2.0.21
$ mkdir -p build && cd build
$ PKG_CONFIG=`which pkg-config` PKG_CONFIG_PATH=${YY_TP_INSTALL_DIR}/lib/pkgconfig:${YY_TP_INSTALL_DIR}/share/pkgconfig:${PKG_CONFIG_PATH} cmake --fresh -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DCMAKE_BUILD_TYPE=Release -DDOCUMENTATION=OFF -DWITH_PIC=ON -DWITH_STATIC_LIBRARIES=ON -DWITH_CJSON=OFF ..
$ make clean && make && make install
gperftools
==========
$ PKG_CONFIG=`which pkg-config` PKG_CONFIG_PATH=${YY_TP_INSTALL_DIR}/lib/pkgconfig:${YY_TP_INSTALL_DIR}/share/pkgconfig:${PKG_CONFIG_PATH} ./configure --prefix=${YY_TP_INSTALL_DIR}
$ make clean install
# Run executable:
# CPUPROFILE=prof.out executable
# print output:
# pprof --text benchmarks/benchmark_yy_cpp benchmarks/yy_cpp.prof
absl
====
$ curl -L https://github.com/abseil/abseil-cpp/releases/download/20240116.2/abseil-cpp-20240116.2.tar.gz > abseil-cpp-20240116.2.tar.gz
$ tar -xzvf abseil-cpp-20240116.2.tar.gz
$ mkdir -p build && cd build
$ PKG_CONFIG=`which pkg-config` PKG_CONFIG_PATH=${YY_TP_INSTALL_DIR}/lib/pkgconfig:${YY_TP_INSTALL_DIR}/share/pkgconfig:${PKG_CONFIG_PATH} cmake --fresh -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DCMAKE_BUILD_TYPE=Release -DABSL_PROPAGATE_CXX_STD=ON -DABSL_USE_EXTERNAL_GOOGLETEST=TRUE -DABSL_FIND_GOOGLETEST=ON ..
$ make clean && make && make install
re2
===
$ curl -L https://github.com/google/re2/releases/download/2024-07-02/re2-2024-07-02.tar.gz > re2-2024-07-02.tar.gz
$ tar -xzvf re2-2024-07-02.tar.gz
$ mkdir -p build && cd build
$ ICU_ROOT=${YY_TP_INSTALL_DIR} PKG_CONFIG=`which pkg-config` PKG_CONFIG_PATH=${YY_TP_INSTALL_DIR}/lib/pkgconfig:${YY_TP_INSTALL_DIR}/share/pkgconfig:${PKG_CONFIG_PATH} cmake --fresh -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DRE2_USE_ICU=ON ..
$ make clean && make && make install
grpc
====
# Note! on MacOs I had to:
#- Install XCode
#- sudo port select gcc none
#- sudo port select clang none
#- sudo port select llvm none
#- unset CC
#- unset CXX
$ git clone --recurse-submodules -b v1.65.1 --depth 1 --shallow-submodules https://github.com/grpc/grpc
$ mkdir -p cmake/build && cd cmake/build
$ cmake --fresh -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DgRPC_SSL_PROVIDER=package -DOPENSSL_ROOT_DIR=${YY_TP_INSTALL_DIR}/openssl -DgRPC_RE2_PROVIDER=package -DgRPC_ABSL_PROVIDER=package -DgRPC_ZLIB_PROVIDER=package -DgRPC_BENCHMARK_PROVIDER=package -DCMAKE_MODULE_PATH=${YY_TP_INSTALL_DIR}/lib/cmake:${YY_TP_INSTALL_DIR}/share/cmake -DZLIB_ROOT=${YY_TP_INSTALL_DIR} ../..
$ export CC=$(which clang)
$ export CXX=$(which clang++)
$ CXXFLAGS='-stdlib=libstdc++ -cxx-isystem /opt/local/include/gcc14/c++/x86_64-apple-darwin21 -stdlib++-isystem /opt/local/include/gcc14/c++' LDFLAGS='-stdlib=libstdc++ -L /opt/local/lib/gcc14' cmake --fresh -DgRPC_INSTALL=ON -DgRPC_INSTALL_BINDIR=${YY_TP_INSTALL_DIR}/bin -DgRPC_INSTALL_LIBDIR=${YY_TP_INSTALL_DIR}/lib -DgRPC_INSTALL_INCLUDEDIR=${YY_TP_INSTALL_DIR}/include -DgRPC_INSTALL_CMAKEDIR=${YY_TP_INSTALL_DIR}/lib/cmake/grpc -DgRPC_INSTALL_SHAREDIR=${YY_TP_INSTALL_DIR}/share/grpc -DgRPC_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=${YY_TP_INSTALL_DIR} -DgRPC_SSL_PROVIDER=package -DOPENSSL_ROOT_DIR=${YY_TP_INSTALL_DIR}/openssl -DgRPC_ZLIB_PROVIDER=package -DgRPC_BENCHMARK_PROVIDER=package -DgRPC_RE2_PROVIDER=package -DgRPC_ABSL_PROVIDER=package -DCMAKE_MODULE_PATH=${YY_TP_INSTALL_DIR}/lib/cmake:${YY_TP_INSTALL_DIR}/share/cmake -DZLIB_ROOT=${YY_TP_INSTALL_DIR} -DgRPC_PROTOBUF_PROVIDER=package -DCMAKE_CXX_STANDARD=20 ../..
$ nice make -j 4 && make install
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment