Last active
November 1, 2025 13:56
-
-
Save yafiyogi/8cc25cca91b6b38f50906ca8d5667bf2 to your computer and use it in GitHub Desktop.
Third Party Library Build Instructions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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