mirror of
https://github.com/curl/curl.git
synced 2026-04-11 12:01:42 +08:00
To enable known linker options dropping unused, dead, code and data from the executables built. Useful to reduce binary sizes for curl, libcurl shared lib and apps linking static libcurl. It's effective on both "unity" and non-unity builds. Aligning "unity" build sizes with default, non-unity ones. Supported platforms: Apple, MSVC, llvm/clang and GCC on all tested platforms: Linux, BSDs, Windows, MSYS2/Cygwin, Android, MS-DOS. Notes: - Static libraries grow 20-30% with non-Apple toolchains. This effect is controlled by separate, optional compiler flags on non-Apple. This patch enables them automatically for public binaries (libcurl and curl tool), and leaves them off for internal/test ones. - MSVC enables this option by default for 'Release' configurations. The curl build option has no effect on it. - Observed effect on VS2010 is negligible. VS2012+ is recommended. - Works with LTO, Fil-C. - No observed/conclusive effect on build speed. - On Windows with clang/gcc (mingw-w64/MSYS2/Cygwin) it also enables `-fno-asynchronous-unwind-tables` as a workaround to make the toolchain options actually work. Ref: https://sourceware.org/bugzilla/show_bug.cgi?id=11539 Thanks-to: Andarwinux Also: - GHA: enable in Linux and MinGW jobs to test it. Size changes: - linux aws-lc H3: curl: 2000000 -> 1937152, libcurl.a: 2065724 -> 2716532 bytes - macos clang HTTP-only: curl: 1364376 -> 128799 bytes, libcurl.a: unchanged - macos llvm MultiSSL: curl: 410056 -> 405720, libcurl.dylib: 1350336 -> 1348480 bytes - mingw schannel c-ares U: curl: 1588736 -> 1507328, libcurl-d.a: 3322040 -> 3884746 bytes bld: 34 -> 35MB - GHA: enable in MSVC and Apple jobs to reduce disk footprint, with no obvious downside. Size changes: - AppVeyor CI VS2019: curl: 2339840 -> 1295872, libcurl-d.dll: 3155968 -> 1900544 bytes bld: 161 -> 97MB - AppVeyor CI VS2022 clang-cl: curl: 2933248 -> 2332160, libcurl-d.lib: 4762688 -> 5511330 bytes bld: 133 -> 121MB - AppVeyor CI VS2022 HTTP-only: curl: 3514368 -> 2177024, libcurl-d.lib: 2538420 -> 3151740 bytes bld: 137 -> 83MB - GHA intel: curl: 2629120 -> 2023424, libcurl-d.lib: 4366652 -> 5350670 bytes bld: 86 -> 69MB - GHA arm64: curl: 2832896 -> 2063872, libcurl-d.lib: 4690616 -> 5597250 bytes bld: 82 -> 66MB Refs: https://maskray.me/blog/2021-02-28-linker-garbage-collection https://web.archive.org/web/20110811230637/msdn.microsoft.com/en-us/library/bxwfs976.aspx (VS2010) https://learn.microsoft.com/cpp/build/reference/opt-optimizations https://learn.microsoft.com/cpp/build/reference/gy-enable-function-level-linking Closes #20357
737 lines
32 KiB
YAML
737 lines
32 KiB
YAML
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
#
|
|
# SPDX-License-Identifier: curl
|
|
|
|
name: 'Linux HTTP/3'
|
|
|
|
'on':
|
|
push:
|
|
branches:
|
|
- master
|
|
- '*/ci'
|
|
paths-ignore:
|
|
- '**/*.md'
|
|
- '.circleci/**'
|
|
- 'appveyor.*'
|
|
- 'Dockerfile'
|
|
- 'projects/**'
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
paths-ignore:
|
|
- '**/*.md'
|
|
- '.circleci/**'
|
|
- 'appveyor.*'
|
|
- 'Dockerfile'
|
|
- 'projects/**'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
|
|
cancel-in-progress: true
|
|
|
|
permissions: {}
|
|
|
|
env:
|
|
MAKEFLAGS: -j 5
|
|
CURL_CI: github
|
|
CURL_TEST_MIN: 1600
|
|
# handled in renovate.json
|
|
OPENSSL_VERSION: 3.6.0
|
|
# renovate: datasource=github-tags depName=libressl/portable versioning=semver registryUrl=https://github.com
|
|
LIBRESSL_VERSION: 4.2.1
|
|
# renovate: datasource=github-tags depName=awslabs/aws-lc versioning=semver registryUrl=https://github.com
|
|
AWSLC_VERSION: 1.66.2
|
|
# renovate: datasource=github-tags depName=google/boringssl versioning=semver registryUrl=https://github.com
|
|
BORINGSSL_VERSION: 0.20251124.0
|
|
# renovate: datasource=github-tags depName=gnutls/nettle versioning=semver registryUrl=https://github.com
|
|
NETTLE_VERSION: 3.10.2
|
|
# renovate: datasource=github-tags depName=gnutls/gnutls versioning=semver extractVersion=^nettle_?(?<version>.+)_release_.+$ registryUrl=https://github.com
|
|
GNUTLS_VERSION: 3.8.11
|
|
# renovate: datasource=github-tags depName=wolfSSL/wolfssl versioning=semver extractVersion=^v?(?<version>.+)-stable$ registryUrl=https://github.com
|
|
WOLFSSL_VERSION: 5.8.4
|
|
# renovate: datasource=github-tags depName=ngtcp2/nghttp3 versioning=semver registryUrl=https://github.com
|
|
NGHTTP3_VERSION: 1.15.0
|
|
# renovate: datasource=github-tags depName=ngtcp2/ngtcp2 versioning=semver registryUrl=https://github.com
|
|
NGTCP2_VERSION: 1.20.0
|
|
# renovate: datasource=github-tags depName=nghttp2/nghttp2 versioning=semver registryUrl=https://github.com
|
|
NGHTTP2_VERSION: 1.68.0
|
|
# renovate: datasource=github-tags depName=cloudflare/quiche versioning=semver registryUrl=https://github.com
|
|
QUICHE_VERSION: 0.24.7
|
|
|
|
jobs:
|
|
build-cache:
|
|
name: 'Build caches'
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: 'cache openssl'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-openssl-http3-no-deprecated
|
|
env:
|
|
cache-name: cache-openssl-http3-no-deprecated
|
|
with:
|
|
path: ~/openssl/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.OPENSSL_VERSION }}
|
|
|
|
- name: 'cache libressl'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-libressl
|
|
env:
|
|
cache-name: cache-libressl
|
|
with:
|
|
path: ~/libressl/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.LIBRESSL_VERSION }}
|
|
|
|
- name: 'cache awslc'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-awslc
|
|
env:
|
|
cache-name: cache-awslc
|
|
with:
|
|
path: ~/awslc/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.AWSLC_VERSION }}
|
|
|
|
- name: 'cache boringssl'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-boringssl
|
|
env:
|
|
cache-name: cache-boringssl
|
|
with:
|
|
path: ~/boringssl/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.BORINGSSL_VERSION }}
|
|
|
|
- name: 'cache nettle'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-nettle
|
|
env:
|
|
cache-name: cache-nettle
|
|
with:
|
|
path: ~/nettle/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.NETTLE_VERSION }}
|
|
|
|
- name: 'cache gnutls'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-gnutls
|
|
env:
|
|
cache-name: cache-gnutls
|
|
with:
|
|
path: ~/gnutls/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.GNUTLS_VERSION }}-${{ env.NETTLE_VERSION }}
|
|
|
|
- name: 'cache wolfssl'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-wolfssl
|
|
env:
|
|
cache-name: cache-wolfssl
|
|
with:
|
|
path: ~/wolfssl/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.WOLFSSL_VERSION }}
|
|
|
|
- name: 'cache nghttp3'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-nghttp3
|
|
env:
|
|
cache-name: cache-nghttp3
|
|
with:
|
|
path: ~/nghttp3/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.NGHTTP3_VERSION }}
|
|
|
|
- name: 'cache ngtcp2'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-ngtcp2
|
|
env:
|
|
cache-name: cache-ngtcp2
|
|
with:
|
|
path: ~/ngtcp2/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.NGTCP2_VERSION }}-${{ env.OPENSSL_VERSION }}-${{ env.LIBRESSL_VERSION }}-${{ env.AWSLC_VERSION }}-${{ env.NETTLE_VERSION }}-${{ env.GNUTLS_VERSION }}-${{ env.WOLFSSL_VERSION }}
|
|
|
|
- name: 'cache ngtcp2 boringssl'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-ngtcp2-boringssl
|
|
env:
|
|
cache-name: cache-ngtcp2-boringssl
|
|
with:
|
|
path: ~/ngtcp2-boringssl/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.NGTCP2_VERSION }}-${{ env.BORINGSSL_VERSION }}
|
|
|
|
- name: 'cache nghttp2'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-nghttp2
|
|
env:
|
|
cache-name: cache-nghttp2
|
|
with:
|
|
path: ~/nghttp2/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.NGHTTP2_VERSION }}-${{ env.OPENSSL_VERSION }}-${{ env.NGTCP2_VERSION }}-${{ env.NGHTTP3_VERSION }}
|
|
|
|
- id: settings
|
|
if: >-
|
|
${{ steps.cache-openssl-http3-no-deprecated.outputs.cache-hit != 'true' ||
|
|
steps.cache-libressl.outputs.cache-hit != 'true' ||
|
|
steps.cache-awslc.outputs.cache-hit != 'true' ||
|
|
steps.cache-boringssl.outputs.cache-hit != 'true' ||
|
|
steps.cache-nettle.outputs.cache-hit != 'true' ||
|
|
steps.cache-gnutls.outputs.cache-hit != 'true' ||
|
|
steps.cache-wolfssl.outputs.cache-hit != 'true' ||
|
|
steps.cache-nghttp3.outputs.cache-hit != 'true' ||
|
|
steps.cache-ngtcp2.outputs.cache-hit != 'true' ||
|
|
steps.cache-ngtcp2-boringssl.outputs.cache-hit != 'true' ||
|
|
steps.cache-nghttp2.outputs.cache-hit != 'true' }}
|
|
|
|
run: echo 'needs-build=true' >> "$GITHUB_OUTPUT"
|
|
|
|
- name: 'install build prereqs'
|
|
if: ${{ steps.settings.outputs.needs-build == 'true' }}
|
|
run: |
|
|
sudo rm -f /etc/apt/sources.list.d/{azure-cli.sources,microsoft-prod.list,ondrej-ubuntu-php-noble.sources}
|
|
sudo apt-get -o Dpkg::Use-Pty=0 update
|
|
sudo apt-get -o Dpkg::Use-Pty=0 install \
|
|
libtool autoconf automake pkgconf \
|
|
libbrotli-dev libzstd-dev zlib1g-dev \
|
|
libev-dev \
|
|
libc-ares-dev \
|
|
libp11-kit-dev autopoint bison gperf gtk-doc-tools libtasn1-bin # for GnuTLS
|
|
echo 'CC=gcc-12' >> "$GITHUB_ENV"
|
|
echo 'CXX=g++-12' >> "$GITHUB_ENV"
|
|
|
|
- name: 'build openssl'
|
|
if: ${{ steps.cache-openssl-http3-no-deprecated.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd ~
|
|
git clone --quiet --depth 1 -b "openssl-${OPENSSL_VERSION}" https://github.com/openssl/openssl
|
|
cd openssl
|
|
./config --prefix="$PWD"/build --libdir=lib no-makedepend no-apps no-docs no-tests no-deprecated
|
|
make
|
|
make -j1 install_sw
|
|
|
|
- name: 'build libressl'
|
|
if: ${{ steps.cache-libressl.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd ~
|
|
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 6 --retry-connrefused \
|
|
--location "https://github.com/libressl/portable/releases/download/v${LIBRESSL_VERSION}/libressl-${LIBRESSL_VERSION}.tar.gz" | tar -xz
|
|
cd "libressl-${LIBRESSL_VERSION}"
|
|
cmake -B . -G Ninja -DLIBRESSL_APPS=OFF -DLIBRESSL_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/home/runner/libressl/build
|
|
cmake --build .
|
|
cmake --install .
|
|
|
|
- name: 'build awslc'
|
|
if: ${{ steps.cache-awslc.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd ~
|
|
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 6 --retry-connrefused \
|
|
--location "https://github.com/awslabs/aws-lc/archive/refs/tags/v${AWSLC_VERSION}.tar.gz" | tar -xz
|
|
cd "aws-lc-${AWSLC_VERSION}"
|
|
cmake -B . -G Ninja -DBUILD_SHARED_LIBS=ON -DBUILD_TOOL=OFF -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=/home/runner/awslc/build
|
|
cmake --build .
|
|
cmake --install .
|
|
|
|
- name: 'build boringssl'
|
|
if: ${{ steps.cache-boringssl.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
mkdir boringssl-src
|
|
cd boringssl-src
|
|
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 6 --retry-connrefused \
|
|
"https://boringssl.googlesource.com/boringssl/+archive/${BORINGSSL_VERSION}.tar.gz" | tar -xz
|
|
cmake -B . -G Ninja -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=/home/runner/boringssl/build
|
|
cmake --build .
|
|
cmake --install .
|
|
|
|
- name: 'build nettle'
|
|
if: ${{ steps.cache-nettle.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd ~
|
|
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 6 --retry-connrefused \
|
|
--location "https://ftpmirror.gnu.org/nettle/nettle-${NETTLE_VERSION}.tar.gz" | tar -xz
|
|
cd "nettle-${NETTLE_VERSION}"
|
|
./configure --disable-dependency-tracking --prefix=/home/runner/nettle/build \
|
|
--disable-silent-rules --disable-static --disable-openssl --disable-documentation
|
|
make install
|
|
|
|
- name: 'build gnutls'
|
|
if: ${{ steps.cache-gnutls.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd ~
|
|
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 6 --retry-connrefused \
|
|
"https://www.gnupg.org/ftp/gcrypt/gnutls/v${GNUTLS_VERSION%.*}/gnutls-${GNUTLS_VERSION}.tar.xz" | tar -xJ
|
|
cd "gnutls-${GNUTLS_VERSION}"
|
|
# required: libp11-kit-dev libev-dev autopoint bison gperf gtk-doc-tools libtasn1-bin
|
|
./configure --disable-dependency-tracking --prefix=/home/runner/gnutls/build \
|
|
PKG_CONFIG_PATH=/home/runner/nettle/build/lib64/pkgconfig \
|
|
LDFLAGS=-Wl,-rpath,/home/runner/nettle/build/lib64 \
|
|
--with-included-libtasn1 --with-included-unistring \
|
|
--disable-guile --disable-doc --disable-tests --disable-tools
|
|
make install
|
|
|
|
- name: 'build wolfssl'
|
|
if: ${{ steps.cache-wolfssl.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd ~
|
|
git clone --quiet --depth 1 -b "v${WOLFSSL_VERSION}-stable" https://github.com/wolfSSL/wolfssl
|
|
cd wolfssl
|
|
./autogen.sh
|
|
./configure --disable-dependency-tracking --enable-all --enable-quic \
|
|
--disable-benchmark --disable-crypttests --disable-examples --prefix="$PWD"/build
|
|
make
|
|
make install
|
|
|
|
- name: 'build nghttp3'
|
|
if: ${{ steps.cache-nghttp3.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd ~
|
|
git clone --quiet --depth 1 -b "v${NGHTTP3_VERSION}" https://github.com/ngtcp2/nghttp3
|
|
cd nghttp3
|
|
git submodule update --init --depth 1
|
|
autoreconf -fi
|
|
./configure --disable-dependency-tracking --prefix="$PWD"/build --enable-lib-only
|
|
make
|
|
make install
|
|
|
|
- name: 'build ngtcp2'
|
|
if: ${{ steps.cache-ngtcp2.outputs.cache-hit != 'true' }}
|
|
# building twice to get crypto libs for ossl, libressl and awslc installed
|
|
run: |
|
|
cd ~
|
|
git clone --quiet --depth 1 -b "v${NGTCP2_VERSION}" https://github.com/ngtcp2/ngtcp2
|
|
cd ngtcp2
|
|
autoreconf -fi
|
|
./configure --disable-dependency-tracking --prefix="$PWD"/build \
|
|
PKG_CONFIG_PATH=/home/runner/libressl/build/lib/pkgconfig --enable-lib-only --with-openssl
|
|
make install
|
|
make clean
|
|
./configure --disable-dependency-tracking --prefix="$PWD"/build \
|
|
PKG_CONFIG_PATH=/home/runner/openssl/build/lib/pkgconfig:/home/runner/nettle/build/lib64/pkgconfig:/home/runner/gnutls/build/lib/pkgconfig:/home/runner/wolfssl/build/lib/pkgconfig \
|
|
--enable-lib-only --with-openssl --with-gnutls --with-wolfssl --with-boringssl \
|
|
BORINGSSL_LIBS='-L/home/runner/awslc/build/lib -lssl -lcrypto' \
|
|
BORINGSSL_CFLAGS='-I/home/runner/awslc/build/include'
|
|
make install
|
|
|
|
- name: 'build ngtcp2 boringssl'
|
|
if: ${{ steps.cache-ngtcp2-boringssl.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd ~
|
|
git clone --quiet --depth 1 -b "v${NGTCP2_VERSION}" https://github.com/ngtcp2/ngtcp2 ngtcp2-boringssl
|
|
cd ngtcp2-boringssl
|
|
autoreconf -fi
|
|
./configure --disable-dependency-tracking --prefix="$PWD"/build \
|
|
--enable-lib-only --with-openssl=no --with-boringssl \
|
|
BORINGSSL_LIBS='-L/home/runner/boringssl/build/lib -lssl -lcrypto' \
|
|
BORINGSSL_CFLAGS='-I/home/runner/boringssl/build/include'
|
|
make install
|
|
|
|
- name: 'build nghttp2'
|
|
if: ${{ steps.cache-nghttp2.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd ~
|
|
git clone --quiet --depth 1 -b "v${NGHTTP2_VERSION}" https://github.com/nghttp2/nghttp2
|
|
cd nghttp2
|
|
git submodule update --init --depth 1
|
|
autoreconf -fi
|
|
# required (for nghttpx application): libc-ares-dev libev-dev zlib1g-dev
|
|
# optional (for nghttpx application): libbrotli-dev
|
|
./configure --disable-dependency-tracking --prefix="$PWD"/build \
|
|
PKG_CONFIG_PATH=/home/runner/openssl/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig \
|
|
LDFLAGS=-Wl,-rpath,/home/runner/openssl/build/lib \
|
|
--with-libbrotlienc --with-libbrotlidec \
|
|
--enable-app --enable-http3
|
|
make install
|
|
|
|
linux:
|
|
name: ${{ matrix.build.generate && 'CM' || 'AM' }} ${{ matrix.build.name }}
|
|
needs:
|
|
- build-cache
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
env:
|
|
MATRIX_BUILD: ${{ matrix.build.generate && 'cmake' || 'autotools' }}
|
|
MATRIX_INSTALL_PACKAGES: '${{ matrix.build.install_packages }}'
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build:
|
|
- name: 'openssl'
|
|
PKG_CONFIG_PATH: /home/runner/openssl/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
tflags: '--min=1640'
|
|
configure: >-
|
|
LDFLAGS=-Wl,-rpath,/home/runner/openssl/build/lib
|
|
--with-openssl=/home/runner/openssl/build --with-ngtcp2 --enable-ssls-export
|
|
|
|
- name: 'openssl'
|
|
install_steps: skipall
|
|
PKG_CONFIG_PATH: /home/runner/openssl/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
generate: >-
|
|
-DOPENSSL_ROOT_DIR=/home/runner/openssl/build -DUSE_NGTCP2=ON
|
|
-DCURL_DISABLE_LDAP=ON
|
|
-DCMAKE_UNITY_BUILD=ON
|
|
|
|
- name: 'libressl'
|
|
install_steps: skipall
|
|
PKG_CONFIG_PATH: /home/runner/libressl/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
configure: >-
|
|
LDFLAGS=-Wl,-rpath,/home/runner/libressl/build/lib
|
|
--with-openssl=/home/runner/libressl/build --with-ngtcp2 --enable-ssls-export
|
|
--enable-unity
|
|
|
|
- name: 'libressl'
|
|
PKG_CONFIG_PATH: /home/runner/libressl/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
tflags: '--min=1790'
|
|
generate: >-
|
|
-DOPENSSL_ROOT_DIR=/home/runner/libressl/build -DUSE_NGTCP2=ON
|
|
|
|
- name: 'awslc'
|
|
install_steps: skipall
|
|
PKG_CONFIG_PATH: /home/runner/awslc/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
configure: >-
|
|
LDFLAGS=-Wl,-rpath,/home/runner/awslc/build/lib
|
|
--with-openssl=/home/runner/awslc/build --with-ngtcp2 --enable-ssls-export
|
|
|
|
- name: 'awslc'
|
|
PKG_CONFIG_PATH: /home/runner/awslc/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
tflags: '--min=1790'
|
|
generate: >-
|
|
-DOPENSSL_ROOT_DIR=/home/runner/awslc/build -DUSE_NGTCP2=ON -DBUILD_SHARED_LIBS=OFF
|
|
-DCMAKE_UNITY_BUILD=ON -DCURL_DROP_UNUSED=ON
|
|
|
|
- name: 'boringssl'
|
|
install_steps: skipall
|
|
PKG_CONFIG_PATH: /home/runner/boringssl/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2-boringssl/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
configure: >-
|
|
LDFLAGS=-Wl,-rpath,/home/runner/boringssl/build/lib
|
|
--with-openssl=/home/runner/boringssl/build --with-ngtcp2 --enable-ssls-export
|
|
|
|
- name: 'boringssl'
|
|
PKG_CONFIG_PATH: /home/runner/boringssl/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2-boringssl/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
tflags: '--min=1790'
|
|
generate: >-
|
|
-DOPENSSL_ROOT_DIR=/home/runner/boringssl/build -DUSE_NGTCP2=ON -DBUILD_SHARED_LIBS=OFF
|
|
-DCMAKE_UNITY_BUILD=ON
|
|
|
|
- name: 'gnutls'
|
|
install_packages: libp11-kit-dev libssh-dev
|
|
install_steps: skipall
|
|
PKG_CONFIG_PATH: /home/runner/nettle/build/lib64/pkgconfig:/home/runner/gnutls/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
LDFLAGS: -Wl,-rpath,/home/runner/gnutls/build/lib -Wl,-rpath,/home/runner/nettle/build/lib64 -Wl,-rpath,/home/runner/ngtcp2/build/lib
|
|
configure: >-
|
|
--with-gnutls=/home/runner/gnutls/build --with-ngtcp2 --with-libssh --enable-ssls-export
|
|
|
|
- name: 'gnutls'
|
|
install_packages: libp11-kit-dev libssh-dev
|
|
PKG_CONFIG_PATH: /home/runner/nettle/build/lib64/pkgconfig:/home/runner/gnutls/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
LDFLAGS: -Wl,-rpath,/home/runner/gnutls/build/lib
|
|
tflags: '--min=1840'
|
|
generate: >-
|
|
-DCURL_USE_GNUTLS=ON -DUSE_NGTCP2=ON -DCURL_USE_LIBSSH=ON
|
|
-DCMAKE_UNITY_BUILD=ON
|
|
|
|
- name: 'wolfssl'
|
|
install_packages: libssh2-1-dev
|
|
install_steps: skipall
|
|
PKG_CONFIG_PATH: /home/runner/wolfssl/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
configure: >-
|
|
LDFLAGS=-Wl,-rpath,/home/runner/wolfssl/build/lib
|
|
--with-wolfssl=/home/runner/wolfssl/build --with-ngtcp2 --enable-ech --with-libssh2 --enable-ssls-export
|
|
--enable-unity
|
|
|
|
- name: 'wolfssl'
|
|
install_packages: libssh2-1-dev
|
|
PKG_CONFIG_PATH: /home/runner/wolfssl/build/lib/pkgconfig:/home/runner/nghttp3/build/lib/pkgconfig:/home/runner/ngtcp2/build/lib/pkgconfig:/home/runner/nghttp2/build/lib/pkgconfig
|
|
tflags: '--min=1840'
|
|
generate: >-
|
|
-DCURL_USE_WOLFSSL=ON -DUSE_NGTCP2=ON
|
|
-DUSE_ECH=ON
|
|
|
|
- name: 'quiche'
|
|
install_steps: skipall
|
|
PKG_CONFIG_PATH: /home/runner/nghttp2/build/lib/pkgconfig
|
|
configure: >-
|
|
LDFLAGS=-Wl,-rpath,/home/runner/quiche/target/release
|
|
--with-openssl=/home/runner/quiche/quiche/deps/boringssl/src
|
|
--with-quiche=/home/runner/quiche/target/release
|
|
--with-ca-fallback
|
|
--enable-unity
|
|
|
|
- name: 'quiche'
|
|
PKG_CONFIG_PATH: /home/runner/nghttp2/build/lib/pkgconfig:/home/runner/quiche/target/release
|
|
tflags: '--min=1790'
|
|
generate: >-
|
|
-DOPENSSL_ROOT_DIR=/home/runner/quiche/quiche/deps/boringssl/src
|
|
-DUSE_QUICHE=ON
|
|
-DCURL_CA_FALLBACK=ON
|
|
|
|
steps:
|
|
- name: 'install prereqs'
|
|
env:
|
|
INSTALL_PACKAGES: >-
|
|
${{ !contains(matrix.build.install_steps, 'skipall') && !contains(matrix.build.install_steps, 'skiprun') && 'stunnel4 ' || '' }}
|
|
${{ !contains(matrix.build.install_steps, 'skipall') && !contains(matrix.build.install_steps, 'skiprun') && 'apache2 apache2-dev libnghttp2-dev vsftpd dante-server libev-dev' || '' }}
|
|
|
|
run: |
|
|
sudo rm -f /etc/apt/sources.list.d/{azure-cli.sources,microsoft-prod.list,ondrej-ubuntu-php-noble.sources}
|
|
sudo apt-get -o Dpkg::Use-Pty=0 update
|
|
sudo apt-get -o Dpkg::Use-Pty=0 install \
|
|
libtool autoconf automake pkgconf \
|
|
libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libidn2-0-dev libldap-dev libuv1-dev valgrind \
|
|
${INSTALL_PACKAGES} \
|
|
${MATRIX_INSTALL_PACKAGES}
|
|
echo 'CC=gcc-12' >> "$GITHUB_ENV"
|
|
echo 'CXX=g++-12' >> "$GITHUB_ENV"
|
|
|
|
- name: 'cache openssl'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-openssl-http3-no-deprecated
|
|
env:
|
|
cache-name: cache-openssl-http3-no-deprecated
|
|
with:
|
|
path: ~/openssl/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.OPENSSL_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache libressl'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-libressl
|
|
env:
|
|
cache-name: cache-libressl
|
|
with:
|
|
path: ~/libressl/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.LIBRESSL_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache awslc'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-awslc
|
|
env:
|
|
cache-name: cache-awslc
|
|
with:
|
|
path: ~/awslc/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.AWSLC_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache boringssl'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-boringssl
|
|
env:
|
|
cache-name: cache-boringssl
|
|
with:
|
|
path: ~/boringssl/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.BORINGSSL_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache nettle'
|
|
if: ${{ matrix.build.name == 'gnutls' }}
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-nettle
|
|
env:
|
|
cache-name: cache-nettle
|
|
with:
|
|
path: ~/nettle/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.NETTLE_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache gnutls'
|
|
if: ${{ matrix.build.name == 'gnutls' }}
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-gnutls
|
|
env:
|
|
cache-name: cache-gnutls
|
|
with:
|
|
path: ~/gnutls/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.GNUTLS_VERSION }}-${{ env.NETTLE_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache wolfssl'
|
|
if: ${{ matrix.build.name == 'wolfssl' }}
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-wolfssl
|
|
env:
|
|
cache-name: cache-wolfssl
|
|
with:
|
|
path: ~/wolfssl/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.WOLFSSL_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache nghttp3'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-nghttp3
|
|
env:
|
|
cache-name: cache-nghttp3
|
|
with:
|
|
path: ~/nghttp3/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.NGHTTP3_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache ngtcp2'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-ngtcp2
|
|
env:
|
|
cache-name: cache-ngtcp2
|
|
with:
|
|
path: ~/ngtcp2/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.NGTCP2_VERSION }}-${{ env.OPENSSL_VERSION }}-${{ env.LIBRESSL_VERSION }}-${{ env.AWSLC_VERSION }}-${{ env.NETTLE_VERSION }}-${{ env.GNUTLS_VERSION }}-${{ env.WOLFSSL_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache ngtcp2 boringssl'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-ngtcp2-boringssl
|
|
env:
|
|
cache-name: cache-ngtcp2-boringssl
|
|
with:
|
|
path: ~/ngtcp2-boringssl/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.NGTCP2_VERSION }}-${{ env.BORINGSSL_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache nghttp2'
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-nghttp2
|
|
env:
|
|
cache-name: cache-nghttp2
|
|
with:
|
|
path: ~/nghttp2/build
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.NGHTTP2_VERSION }}-${{ env.OPENSSL_VERSION }}-${{ env.NGTCP2_VERSION }}-${{ env.NGHTTP3_VERSION }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: 'cache quiche'
|
|
if: ${{ matrix.build.name == 'quiche' }}
|
|
uses: actions/cache@9255dc7a253b0ccc959486e2bca901246202afeb # v5.0.1
|
|
id: cache-quiche
|
|
env:
|
|
cache-name: cache-quiche
|
|
with:
|
|
path: ~/quiche
|
|
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.QUICHE_VERSION }}
|
|
|
|
- name: 'build quiche and boringssl'
|
|
if: ${{ matrix.build.name == 'quiche' && steps.cache-quiche.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd ~
|
|
git clone --quiet --depth 1 -b "${QUICHE_VERSION}" --recursive https://github.com/cloudflare/quiche
|
|
cd quiche
|
|
#### Work-around https://github.com/curl/curl/issues/7927 #######
|
|
#### See https://github.com/alexcrichton/cmake-rs/issues/131 ####
|
|
sed -i -e 's/cmake = "0.1"/cmake = "=0.1.45"/' quiche/Cargo.toml
|
|
|
|
cargo build -v --package quiche --release --features ffi,pkg-config-meta,qlog --verbose
|
|
ln -s libquiche.so target/release/libquiche.so.0
|
|
mkdir -v quiche/deps/boringssl/src/lib
|
|
find target/release \( -name libcrypto.a -o -name libssl.a \) -exec ln -vnf -- '{}' quiche/deps/boringssl/src/lib \;
|
|
|
|
# include dir
|
|
# /home/runner/quiche/quiche/deps/boringssl/src/include
|
|
# lib dir
|
|
# /home/runner/quiche/quiche/deps/boringssl/src/lib
|
|
|
|
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: 'autoreconf'
|
|
if: ${{ matrix.build.configure }}
|
|
run: autoreconf -fi
|
|
|
|
- name: 'configure'
|
|
env:
|
|
LDFLAGS: '${{ matrix.build.LDFLAGS }}'
|
|
MATRIX_CONFIGURE: '${{ matrix.build.configure }}'
|
|
MATRIX_GENERATE: '${{ matrix.build.generate }}'
|
|
MATRIX_PKG_CONFIG_PATH: '${{ matrix.build.PKG_CONFIG_PATH }}'
|
|
run: |
|
|
[ -n "${MATRIX_PKG_CONFIG_PATH}" ] && export PKG_CONFIG_PATH="${MATRIX_PKG_CONFIG_PATH}"
|
|
if [ "${MATRIX_BUILD}" = 'cmake' ]; then
|
|
cmake -B bld -G Ninja \
|
|
-DCMAKE_C_COMPILER_TARGET="$(uname -m)-pc-linux-gnu" -DBUILD_STATIC_LIBS=ON \
|
|
-DCURL_WERROR=ON -DENABLE_DEBUG=ON \
|
|
-DCURL_USE_LIBUV=ON \
|
|
-DTEST_NGHTTPX=/home/runner/nghttp2/build/bin/nghttpx \
|
|
-DHTTPD_NGHTTPX=/home/runner/nghttp2/build/bin/nghttpx \
|
|
${MATRIX_GENERATE}
|
|
else
|
|
mkdir bld && cd bld && ../configure --enable-warnings --enable-werror --enable-debug --disable-static \
|
|
--with-libuv \
|
|
--with-test-nghttpx=/home/runner/nghttp2/build/bin/nghttpx \
|
|
--disable-dependency-tracking --enable-option-checking=fatal \
|
|
${MATRIX_CONFIGURE}
|
|
fi
|
|
|
|
- name: 'configure log'
|
|
if: ${{ !cancelled() }}
|
|
run: cat bld/config.log bld/CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true
|
|
|
|
- name: 'curl_config.h'
|
|
run: |
|
|
echo '::group::raw'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
|
grep -F '#define' bld/lib/curl_config.h | sort || true
|
|
|
|
- name: 'test configs'
|
|
run: grep -H -v '^#' bld/tests/config bld/tests/http/config.ini || true
|
|
|
|
- name: 'build'
|
|
run: |
|
|
if [ "${MATRIX_BUILD}" = 'cmake' ]; then
|
|
cmake --build bld --verbose
|
|
else
|
|
make -C bld V=1
|
|
fi
|
|
|
|
- name: 'curl -V'
|
|
run: |
|
|
find . -type f \( -name curl -o -name '*.so.*' -o -name '*.a' \) -print0 | xargs -0 file --
|
|
find . -type f \( -name curl -o -name '*.so.*' -o -name '*.a' \) -print0 | xargs -0 stat -c '%10s bytes: %n' --
|
|
bld/src/curl --disable -V
|
|
|
|
- name: 'build tests'
|
|
if: ${{ !contains(matrix.build.install_steps, 'skipall') }}
|
|
run: |
|
|
if [ "${MATRIX_BUILD}" = 'cmake' ]; then
|
|
cmake --build bld --verbose --target testdeps
|
|
else
|
|
make -C bld V=1 -C tests
|
|
fi
|
|
|
|
- name: 'install test prereqs'
|
|
if: ${{ !contains(matrix.build.install_steps, 'skipall') && !contains(matrix.build.install_steps, 'skiprun') }}
|
|
run: |
|
|
python3 -m venv ~/venv
|
|
~/venv/bin/pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary -r tests/requirements.txt
|
|
|
|
- name: 'run tests'
|
|
if: ${{ !contains(matrix.build.install_steps, 'skipall') && !contains(matrix.build.install_steps, 'skiprun') }}
|
|
env:
|
|
TFLAGS: '${{ matrix.build.tflags }}'
|
|
run: |
|
|
TFLAGS+=' -n'
|
|
source ~/venv/bin/activate
|
|
if [ "${MATRIX_BUILD}" = 'cmake' ]; then
|
|
cmake --build bld --verbose --target test-ci
|
|
else
|
|
make -C bld V=1 test-ci
|
|
fi
|
|
|
|
- name: 'run tests (valgrind)'
|
|
if: ${{ !contains(matrix.build.install_steps, 'skipall') && !contains(matrix.build.install_steps, 'skiprun') }}
|
|
run: |
|
|
export TFLAGS='-j6 --min=4 HTTP/3'
|
|
source ~/venv/bin/activate
|
|
if [ "${MATRIX_BUILD}" = 'cmake' ]; then
|
|
cmake --build bld --verbose --target test-ci
|
|
else
|
|
make -C bld V=1 test-ci
|
|
fi
|
|
|
|
- name: 'install pytest prereqs'
|
|
if: ${{ !contains(matrix.build.install_steps, 'skipall') && !contains(matrix.build.install_steps, 'skiprun') }}
|
|
run: |
|
|
[ -d ~/venv ] || python3 -m venv ~/venv
|
|
~/venv/bin/pip --disable-pip-version-check --no-input --no-cache-dir install --progress-bar off --prefer-binary -r tests/http/requirements.txt
|
|
|
|
- name: 'run pytest (event based)'
|
|
if: ${{ !contains(matrix.build.install_steps, 'skipall') && !contains(matrix.build.install_steps, 'skiprun') }}
|
|
env:
|
|
CURL_TEST_EVENT: 1
|
|
PYTEST_ADDOPTS: '--color=yes'
|
|
PYTEST_XDIST_AUTO_NUM_WORKERS: 4
|
|
run: |
|
|
source ~/venv/bin/activate
|
|
if [ "${MATRIX_BUILD}" = 'cmake' ]; then
|
|
cmake --build bld --verbose --target curl-pytest-ci
|
|
else
|
|
make -C bld V=1 pytest-ci
|
|
fi
|