diff --git a/.docker/build-linux.sh b/.docker/build-linux.sh index 596a2110..86ab8d6b 100644 --- a/.docker/build-linux.sh +++ b/.docker/build-linux.sh @@ -32,12 +32,14 @@ esac case "-$BUILD_TYPE-" in *-gcc-*) export CC=gcc-13 CXX=g++-13 + export COMPILER=gcc ;; *-oldgcc-*) export CC=gcc-12 CXX=g++-12 ;; *-clang-*) export CC=clang-17 CXX=clang++-17 + export COMPILER=clang ;; *-oldclang-*) export CC=clang-16 CXX=clang++-16 @@ -85,7 +87,7 @@ fi if [[ "-$BUILD_TYPE-" == *-static-* ]]; then CMAKE_ARGS="${CMAKE_ARGS} -DSTATIC_BUILD_DO_NOT_USE=1" - CMAKE_ARGS="${CMAKE_ARGS} -DSTATIC_BUILD_EXTRA_PREFIX=/opt/static-libs" + CMAKE_ARGS="${CMAKE_ARGS} -DSTATIC_BUILD_EXTRA_PREFIX=/opt/static-libs/$COMPILER" else CMAKE_ARGS="${CMAKE_ARGS} -DWITH_BENCHMARKS=1" fi @@ -115,7 +117,8 @@ if [[ "-$BUILD_TYPE-" == *-coverage-* ]]; then fi if [[ "-$BUILD_TYPE-" == *-static-* ]]; then - if [[ "-$BUILD_TYPE-" == *-release-* ]]; then + # in the clang-release-static case, we also try to build from the source tarball + if [[ "-$BUILD_TYPE-" == *-release-* ]] && [[ "-$BUILD_TYPE-" == *-clang-* ]]; then $BUILD_TOOL package_source if [[ "$BUILD_ARCH" == "amd64" ]]; then diff --git a/.docker/install-static-libs.sh b/.docker/install-static-libs.sh index 185acb5d..c4eeced8 100644 --- a/.docker/install-static-libs.sh +++ b/.docker/install-static-libs.sh @@ -10,11 +10,9 @@ FILE_VERSION=5.45 FILE_SHA512=12611a59ff766c22a55db4b4a9f80f95a0a2e916a1d8593612c6ead32c247102a8fdc23693c6bf81bda9b604d951a62c0051e91580b1b79e190a3504c0efc20a LIBARCHIVE_VERSION=3.7.2 FLAC_VERSION=1.4.3 +LIBUNWIND_VERSION=1.7.2 # BENCHMARK_VERSION=1.8.2 -export CC=clang-17 -export CXX=clang++-17 - RETRY=0 while true; do rm -f file-${FILE_VERSION}.tar.gz @@ -31,36 +29,63 @@ done wget https://github.com/libarchive/libarchive/releases/download/v${LIBARCHIVE_VERSION}/libarchive-${LIBARCHIVE_VERSION}.tar.xz wget https://github.com/xiph/flac/releases/download/${FLAC_VERSION}/flac-${FLAC_VERSION}.tar.xz +wget https://github.com/libunwind/libunwind/releases/download/v${LIBUNWIND_VERSION}/libunwind-${LIBUNWIND_VERSION}.tar.gz # wget https://github.com/google/benchmark/archive/refs/tags/v${BENCHMARK_VERSION}.tar.gz -tar xf libarchive-${LIBARCHIVE_VERSION}.tar.xz -cd libarchive-${LIBARCHIVE_VERSION} -./configure --prefix=/opt/static-libs --without-iconv --without-xml2 --without-expat -make -j$(nproc) -make install +for COMPILER in clang gcc; do + if [[ "$COMPILER" == "clang" ]]; then + export CC=clang-17 + export CXX=clang++-17 + elif [[ "$COMPILER" == "gcc" ]]; then + export CC=gcc-13 + export CXX=g++-13 + else + echo "Unknown compiler: $COMPILER" + exit 1 + fi -cd "$HOME/pkgs" -tar xf file-${FILE_VERSION}.tar.gz -cd file-${FILE_VERSION} -./configure --prefix=/opt/static-libs --enable-static=yes --enable-shared=no -make -j$(nproc) -make install + cd "$HOME/pkgs" + mkdir $COMPILER + cd $COMPILER -cd "$HOME/pkgs" -tar xf flac-${FLAC_VERSION}.tar.xz -cd flac-${FLAC_VERSION} -./configure --prefix=/opt/static-libs --enable-static=yes --enable-shared=no --disable-doxygen-docs --disable-ogg --disable-programs --disable-examples -make -j$(nproc) -make install + INSTALL_DIR=/opt/static-libs/$COMPILER -# cd "$HOME/pkgs" -# tar xf v${BENCHMARK_VERSION}.tar.gz -# cd benchmark-${BENCHMARK_VERSION} -# mkdir build -# cd build -# cmake .. -DBENCHMARK_DOWNLOAD_DEPENDENCIES=1 -DCMAKE_INSTALL_PREFIX=/opt/static-libs -# make -j$(nproc) -# make install + tar xf ../libarchive-${LIBARCHIVE_VERSION}.tar.xz + cd libarchive-${LIBARCHIVE_VERSION} + ./configure --prefix="$INSTALL_DIR" --without-iconv --without-xml2 --without-expat + make -j$(nproc) + make install + + cd "$HOME/pkgs/$COMPILER" + tar xf ../file-${FILE_VERSION}.tar.gz + cd file-${FILE_VERSION} + ./configure --prefix="$INSTALL_DIR" --enable-static=yes --enable-shared=no + make -j$(nproc) + make install + + cd "$HOME/pkgs/$COMPILER" + tar xf ../flac-${FLAC_VERSION}.tar.xz + cd flac-${FLAC_VERSION} + ./configure --prefix="$INSTALL_DIR" --enable-static=yes --enable-shared=no --disable-doxygen-docs --disable-ogg --disable-programs --disable-examples + make -j$(nproc) + make install + + cd "$HOME/pkgs/$COMPILER" + tar xf ../libunwind-${LIBUNWIND_VERSION}.tar.gz + cd libunwind-${LIBUNWIND_VERSION} + ./configure --prefix="$INSTALL_DIR" + make -j$(nproc) + make install + + # cd "$HOME/pkgs" + # tar xf v${BENCHMARK_VERSION}.tar.gz + # cd benchmark-${BENCHMARK_VERSION} + # mkdir build + # cd build + # cmake .. -DBENCHMARK_DOWNLOAD_DEPENDENCIES=1 -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" + # make -j$(nproc) + # make install +done cd "$HOME" rm -rf pkgs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 659ce5df..6a7c19c4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -105,6 +105,7 @@ jobs: - gcc-release-ninja - oldgcc-debug-make - clang-release-ninja + - gcc-release-ninja-static - clang-release-ninja-static - clang-reldbg-ninja-static - clang-debug-ninja-static diff --git a/CMakeLists.txt b/CMakeLists.txt index ddfe5ebd..1d36047a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -975,7 +975,7 @@ if(STATIC_BUILD_DO_NOT_USE) import_static_lib(static_libflac "libFLAC++.a") set_target_properties(static_libunwind PROPERTIES INTERFACE_LINK_LIBRARIES - PkgConfig::LIBLZMA) + "${LIBLZMA_LIBRARIES};static_libz") set_target_properties(static_libglog PROPERTIES INTERFACE_LINK_LIBRARIES static_libgflags) set_target_properties(static_librt PROPERTIES INTERFACE_LINK_LIBRARIES @@ -1091,6 +1091,11 @@ endif() if(PRJ_VERSION_FULL) set(DWARFS_ARTIFACT_ID "${PRJ_VERSION_FULL}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}") + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(DWARFS_ARTIFACT_ID "${DWARFS_ARTIFACT_ID}-gcc") + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(DWARFS_ARTIFACT_ID "${DWARFS_ARTIFACT_ID}-clang") + endif() if(DWARFS_OPTIMIZE) set(DWARFS_ARTIFACT_ID "${DWARFS_ARTIFACT_ID}-O${DWARFS_OPTIMIZE}") endif()