From: Viktor Szakats Date: Thu, 6 Nov 2025 22:59:16 +0000 (+0100) Subject: GHA/linux: add minimal Fil-C build with tests X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=16c6ea36cca6684aacbcb33578af61b28e3fee0d;p=thirdparty%2Fcurl.git GHA/linux: add minimal Fil-C build with tests Requirements for Fil-C: - not to accidentally pick up system headers. E.g. from `/usr/include` on Linux. It can happen when any dependency is auto-detected on this header path. This makes Fil-C find the wrong system headers, which in turn breaks the configuration step in subtle ways (with CMake) and less subtle ways (autotools). Then CMake ends up running into an error while compiling. - build all dependencies with Fil-C too. (this patch doesn't build any dependencies yet.) - "unity" mode disabled. It should work, but needs a lot of memory and slower than a standard compiler, or a Fil-C non-unity build. - x86_64 Linux host platform when using the pre-built toolchain. Observations on a minimal, static build made with no dependencies and Fil-C 0.674 (based on clang 20.1.8). - curl tool sizes: - cmake, default, w/o -O: 30 MB (gcc 14.2.0: 1.7 MB) - cmake, default, w/o -O, stripped: 29.6 MB (gcc: 1.4 MB) - cmake, Release, -O3: 7.2 MB (gcc: 1 MB) - cmake, Release, -O3, stripped: 6.8 MB (gcc: 0.93 MB) - autotools, default, -O2: 7 MB - libcurl.a size is 32 MB (cmake, default, w/o -O) (gcc: 2.7 MB) - build times 3-3.5x longer (compared to system gcc 14.2.0): - all runtests available pass OK. - all pytests skipped due to missing features/dependencies. - shared libcurl builds also work (cmake, default: 25 MB libcurl.so and 5.75 MB (5.6 stripped) curl tool) - autotools works fine too, with dependencies disabled or set to avoid `/usr/include`. Closes #19391 --- diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 6eeb6b697e..ccf171d932 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -55,6 +55,8 @@ env: RUSTLS_VERSION: 0.15.0 # handled in renovate.json OPENLDAP_VERSION: 2.6.10 + # renovate: datasource=github-tags depName=pizlonator/fil-c versioning=semver-partial registryUrl=https://github.com + FIL_C_VERSION: 0.674 jobs: linux: @@ -213,6 +215,15 @@ jobs: - name: '!ssl !http !smtp !imap' configure: --without-ssl --enable-debug --disable-http --disable-smtp --disable-imap --disable-unity + - name: 'Fil-C' + install_steps: filc + CC: /home/runner/filc/build/bin/filcc + generate: >- + -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_UNITY_BUILD=OFF + -DCURL_ENABLE_SSL=OFF -DCURL_USE_LIBPSL=OFF + -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF + -DUSE_NGHTTP2=OFF -DCURL_DISABLE_LDAP=ON -DUSE_LIBIDN2=OFF -DCURL_USE_LIBSSH2=OFF + - name: 'clang-tidy' install_packages: clang-tidy libssl-dev libidn2-dev libssh2-1-dev libnghttp2-dev libldap-dev libkrb5-dev librtmp-dev libgnutls28-dev install_steps: skipall mbedtls rustls wolfssl-opensslextra @@ -351,7 +362,7 @@ jobs: HOMEBREW_NO_AUTO_UPDATE=1 /home/linuxbrew/.linuxbrew/bin/brew install ${INSTALL_PACKAGES_BREW} fi - - name: 'install prereqs' + - name: 'install prereqs (i686)' if: ${{ contains(matrix.build.name, 'i686') }} run: | sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list @@ -363,7 +374,7 @@ jobs: libpsl-dev:i386 libbrotli-dev:i386 libzstd-dev:i386 \ ${MATRIX_INSTALL_PACKAGES} - - name: 'install dependencies' + - name: 'install prereqs (alpine)' if: ${{ startsWith(matrix.build.container, 'alpine') }} run: | apk add --no-cache build-base autoconf automake libtool perl openssl-dev \ @@ -372,6 +383,16 @@ jobs: py3-impacket py3-asn1 py3-six py3-pycryptodomex \ perl-time-hires openssh stunnel sudo git openssl + - name: 'install Fil-C' + if: ${{ contains(matrix.build.install_steps, 'filc') }} + run: | + cd /home/runner + curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 6 --retry-connrefused \ + --location "https://github.com/pizlonator/fil-c/releases/download/v${FIL_C_VERSION}/filc-${FIL_C_VERSION}-linux-x86_64.tar.xz" | tar -xJ + mv "filc-${FIL_C_VERSION}-linux-x86_64" filc + cd filc + ./setup.sh + - name: 'cache libressl' if: ${{ contains(matrix.build.install_steps, 'libressl') }} uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 @@ -652,7 +673,7 @@ jobs: fi - name: 'single-use function check' - if: ${{ contains(matrix.build.configure, '--disable-unity') || contains(matrix.build.generate, '-DCMAKE_UNITY_BUILD=OFF') }} + if: ${{ (contains(matrix.build.configure, '--disable-unity') || contains(matrix.build.generate, '-DCMAKE_UNITY_BUILD=OFF')) && !contains(matrix.build.install_steps, 'filc') }} run: | git config --global --add safe.directory "*" if [ "${MATRIX_BUILD}" = 'cmake' ]; then