mirror of
https://github.com/curl/curl.git
synced 2026-04-15 02:31:40 +03:00
vquic: ngtcp2 + openssl support
With the new addition of OpenSSL QUIC API support and the support in ngtcp2 main branch, make the necessary adjustments in curl to support this combination. - add support in configure.ac to detect the feature OPENSSL_QUIC_API2 in openssl - initialise ngtcp2 properly in this combination - add a Curl_vquic_init() for global initialisation that ngtcp2 likes for performance reasons - add documentation on how to build in docs/HTTP3.md - add CI testing in http3-linux.yml Assisted-by: Viktor Szakats Closes #17027
This commit is contained in:
parent
07cc50f8eb
commit
5eefdd71a3
10 changed files with 223 additions and 40 deletions
77
.github/workflows/http3-linux.yml
vendored
77
.github/workflows/http3-linux.yml
vendored
|
|
@ -49,7 +49,7 @@ env:
|
|||
# renovate: datasource=github-tags depName=ngtcp2/nghttp3 versioning=semver registryUrl=https://github.com
|
||||
nghttp3-version: 1.8.0
|
||||
# renovate: datasource=github-tags depName=ngtcp2/ngtcp2 versioning=semver registryUrl=https://github.com
|
||||
ngtcp2-version: 1.11.0
|
||||
ngtcp2-version: 1.12.0
|
||||
# renovate: datasource=github-tags depName=nghttp2/nghttp2 versioning=semver registryUrl=https://github.com
|
||||
nghttp2-version: 1.65.0
|
||||
# renovate: datasource=github-tags depName=cloudflare/quiche versioning=semver registryUrl=https://github.com
|
||||
|
|
@ -60,6 +60,15 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: 'cache openssl'
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
id: cache-openssl-http3
|
||||
env:
|
||||
cache-name: cache-openssl-http3
|
||||
with:
|
||||
path: ~/openssl/build
|
||||
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.openssl-version }}
|
||||
|
||||
- name: 'cache quictls'
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
id: cache-quictls-no-deprecated
|
||||
|
|
@ -103,7 +112,7 @@ jobs:
|
|||
cache-name: cache-ngtcp2
|
||||
with:
|
||||
path: ~/ngtcp2/build
|
||||
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.ngtcp2-version }}-${{ env.quictls-version }}-${{ env.gnutls-version }}-${{ env.wolfssl-version }}
|
||||
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.ngtcp2-version }}-${{ env.openssl-version }}-${{ env.quictls-version }}-${{ env.gnutls-version }}-${{ env.wolfssl-version }}
|
||||
|
||||
- name: 'cache nghttp2'
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
|
|
@ -116,6 +125,7 @@ jobs:
|
|||
|
||||
- id: settings
|
||||
if: |
|
||||
steps.cache-openssl-http3.outputs.cache-hit != 'true' ||
|
||||
steps.cache-quictls-no-deprecated.outputs.cache-hit != 'true' ||
|
||||
steps.cache-gnutls.outputs.cache-hit != 'true' ||
|
||||
steps.cache-wolfssl.outputs.cache-hit != 'true' ||
|
||||
|
|
@ -140,6 +150,16 @@ jobs:
|
|||
echo 'CC=gcc-12' >> $GITHUB_ENV
|
||||
echo 'CXX=g++-12' >> $GITHUB_ENV
|
||||
|
||||
- name: 'build openssl'
|
||||
if: steps.cache-openssl-http3.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
cd $HOME
|
||||
git clone --quiet --depth=1 -b openssl-${{ env.openssl-version }} https://github.com/openssl/openssl
|
||||
cd openssl
|
||||
./config --prefix=$PWD/build --libdir=lib no-makedepend no-apps no-docs no-tests
|
||||
make
|
||||
make -j1 install_sw
|
||||
|
||||
- name: 'build quictls'
|
||||
if: steps.cache-quictls-no-deprecated.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
|
|
@ -192,13 +212,18 @@ jobs:
|
|||
|
||||
- name: 'build ngtcp2'
|
||||
if: steps.cache-ngtcp2.outputs.cache-hit != 'true'
|
||||
# building twice to get crypto libs for ossl and quictls installed
|
||||
run: |
|
||||
cd $HOME
|
||||
git clone --quiet --depth=1 -b v${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2
|
||||
cd ngtcp2
|
||||
autoreconf -fi
|
||||
./configure --disable-dependency-tracking --prefix=$PWD/build \
|
||||
PKG_CONFIG_PATH="$HOME/quictls/build/lib/pkgconfig:$HOME/gnutls/build/lib/pkgconfig:$HOME/wolfssl/build/lib/pkgconfig" \
|
||||
PKG_CONFIG_PATH="$HOME/quictls/build/lib/pkgconfig" --enable-lib-only --with-quictls
|
||||
make install
|
||||
make clean
|
||||
./configure --disable-dependency-tracking --prefix=$PWD/build \
|
||||
PKG_CONFIG_PATH="$HOME/openssl/build/lib/pkgconfig:$HOME/gnutls/build/lib/pkgconfig:$HOME/wolfssl/build/lib/pkgconfig" \
|
||||
--enable-lib-only --with-openssl --with-gnutls --with-wolfssl
|
||||
make install
|
||||
|
||||
|
|
@ -226,6 +251,15 @@ jobs:
|
|||
fail-fast: false
|
||||
matrix:
|
||||
build:
|
||||
- name: openssl
|
||||
PKG_CONFIG_PATH: '$HOME/openssl/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig'
|
||||
configure: >-
|
||||
LDFLAGS="-Wl,-rpath,$HOME/openssl/build/lib"
|
||||
--with-ngtcp2=$HOME/ngtcp2/build --enable-warnings --enable-werror --enable-debug --disable-ntlm
|
||||
--with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx"
|
||||
--with-openssl=$HOME/openssl/build --enable-ssls-export
|
||||
--with-libuv
|
||||
|
||||
- name: quictls
|
||||
PKG_CONFIG_PATH: '$HOME/quictls/build/lib/pkgconfig:$HOME/nghttp3/build/lib/pkgconfig:$HOME/ngtcp2/build/lib/pkgconfig:$HOME/nghttp2/build/lib/pkgconfig'
|
||||
configure: >-
|
||||
|
|
@ -264,9 +298,9 @@ jobs:
|
|||
-DCURL_USE_LIBUV=ON
|
||||
|
||||
- name: openssl-quic
|
||||
PKG_CONFIG_PATH: '$HOME/openssl/build/lib64/pkgconfig'
|
||||
PKG_CONFIG_PATH: '$HOME/openssl/build/lib/pkgconfig'
|
||||
configure: >-
|
||||
LDFLAGS="-Wl,-rpath,$HOME/openssl/build/lib64"
|
||||
LDFLAGS="-Wl,-rpath,$HOME/openssl/build/lib"
|
||||
--enable-warnings --enable-werror --enable-debug --disable-ntlm
|
||||
--with-test-nghttpx="$HOME/nghttp2/build/bin/nghttpx"
|
||||
--with-openssl=$HOME/openssl/build --with-openssl-quic
|
||||
|
|
@ -309,6 +343,17 @@ jobs:
|
|||
echo 'CC=gcc-12' >> $GITHUB_ENV
|
||||
echo 'CXX=g++-12' >> $GITHUB_ENV
|
||||
|
||||
- name: 'cache openssl'
|
||||
if: matrix.build.name == 'openssl' || matrix.build.name == 'openssl-quic'
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
id: cache-openssl-http3
|
||||
env:
|
||||
cache-name: cache-openssl-http3
|
||||
with:
|
||||
path: ~/openssl/build
|
||||
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.openssl-version }}
|
||||
fail-on-cache-miss: true
|
||||
|
||||
- name: 'cache quictls'
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
id: cache-quictls-no-deprecated
|
||||
|
|
@ -358,7 +403,7 @@ jobs:
|
|||
cache-name: cache-ngtcp2
|
||||
with:
|
||||
path: ~/ngtcp2/build
|
||||
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.ngtcp2-version }}-${{ env.quictls-version }}-${{ env.gnutls-version }}-${{ env.wolfssl-version }}
|
||||
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.ngtcp2-version }}-${{ env.openssl-version }}-${{ env.quictls-version }}-${{ env.gnutls-version }}-${{ env.wolfssl-version }}
|
||||
fail-on-cache-miss: true
|
||||
|
||||
- name: 'cache nghttp2'
|
||||
|
|
@ -371,26 +416,6 @@ jobs:
|
|||
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.nghttp2-version }}-${{ env.quictls-version }}-${{ env.ngtcp2-version }}-${{ env.nghttp3-version }}
|
||||
fail-on-cache-miss: true
|
||||
|
||||
- name: 'cache openssl'
|
||||
if: matrix.build.name == 'openssl-quic'
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
id: cache-openssl
|
||||
env:
|
||||
cache-name: cache-openssl
|
||||
with:
|
||||
path: ~/openssl/build
|
||||
key: ${{ runner.os }}-http3-build-${{ env.cache-name }}-${{ env.openssl-version }}
|
||||
|
||||
- name: 'install openssl'
|
||||
if: matrix.build.name == 'openssl-quic' && steps.cache-openssl.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
git clone --quiet --depth=1 -b openssl-${{ env.openssl-version }} https://github.com/openssl/openssl
|
||||
cd openssl
|
||||
./config --prefix=$HOME/openssl/build no-makedepend no-apps no-docs no-tests
|
||||
make
|
||||
make -j1 install_sw
|
||||
cat exporters/openssl.pc
|
||||
|
||||
- name: 'cache quiche'
|
||||
if: matrix.build.name == 'quiche'
|
||||
uses: actions/cache@d4323d4df104b026a6aa633fdb11d772146be0bf # v4
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue