iOS:
- add jobs with autotools, CMake, CMake Xcode generator.
The Xcode generator is >10x slower than Unix Makefiles. Keep it
because it's the one recommended by CMake and for having its own
quirks we may want to know about.
- build, cache and use LibreSSL for these jobs.
With workaround for an iOS build issue fixed in master.
- make Xcode generator work by explicitly disabling code signing.
- make tests and examples build with the Xcode generator by setting
`-DMACOSX_BUNDLE_GUI_IDENTIFIER=se.curl`, to avoid
"Bundle identifier is missing" errors.
- cmake: disable `CURL_USE_PKGCONFIG` by default for Apple device.
- cmake: add `stdc++` library for BoringSSL and AWS-LC, with
`OPENSSL_USE_STATIC_LIBS=ON` set.
- cmake: add workaround for Xcode generator issue, where it cannot
handle two targets depending on one custom command. A better fix may
be dropping `tool_hugehelp.c` and `tool_ca_embed.c` from curltool
library. For a future PR.
Android:
- add vcpkg to Android jobs, enable dependencies.
Assisted-by: Tal Regev via #16045
- make vcpkg work with autotools.
- pass `--with-brotli` to autotools to detect the vcpkg-supplied brotli.
- enable BoringSSL for Android and add a job with it.
- silence 457 CMake configure warnings about the Android NDK CMake
scripts targeting freshly deprecated CMake versions.
These were much more involved than imagined. Basically nothing works out
of the box, and when combined, everything becomes a unique edge case.
autotools builds were a much easier to make work than CMake ones.
Also:
- GHA/non-native: re-sync names to be shorter and more aligned with
other workflows.
- GHA: add `persist-credentials: false` where missing.
Unresolved issues:
- `OPENSSL_ROOT_DIR` ignored/mis-used when pointing it to LibreSSL.
CMake seems to prepend the sysroot to the passed absolute directory.
Found no workaround.
- CMake when combined with Android, both the Google-recommended method
and the built-in CMake method fail to provide a way to avoid
`pkg-config` packages at system directories. Failed to find a knob
that can remove `/usr/include` from the search path. The workaround is
to disable zstd. (I enabled it by default in this release, maybe
premature?: f2adb3b6d7 #15431)
Disabling `pkg-config` doesn't work because vcpkg dependencies do not
link without it.
- CMake's Xcode generator is slow because each `try_compile()` feature
check springs a new CMake + Xcode project taking a long time to run,
just to compile single-liner C files. A known issue, with no solution.
`-DCMAKE_MACOSX_BUNDLE=OFF` did not help, limiting build types to
a single one (e.g. `Debug`) also had no effect.
make | Xcode | GHA run
:---- | :---- | :--------------------------------------------------------------------
16s | 2m57s | https://github.com/curl/curl/actions/runs/12866334102/job/35868712426
23s | 4m13s | https://github.com/curl/curl/actions/runs/12868128013/job/35874212461
16s | 3m39s | https://github.com/curl/curl/actions/runs/12859073531/job/35849041880
14s | 2m23s | https://github.com/curl/curl/actions/runs/12858298423/job/35847201313
15s | 2m36s | https://github.com/curl/curl/actions/runs/12858058492/job/35846669761
19s | 3m19s | https://github.com/curl/curl/actions/runs/12868919430/job/35876601168
Closes #16043
705 lines
29 KiB
YAML
705 lines
29 KiB
YAML
# Copyright (C) Viktor Szakats
|
|
#
|
|
# SPDX-License-Identifier: curl
|
|
|
|
name: non-native
|
|
|
|
'on':
|
|
push:
|
|
branches:
|
|
- master
|
|
- '*/ci'
|
|
paths-ignore:
|
|
- '**/*.md'
|
|
- '.circleci/**'
|
|
- 'appveyor.*'
|
|
- 'packages/**'
|
|
- 'plan9/**'
|
|
- 'projects/**'
|
|
- 'winbuild/**'
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
paths-ignore:
|
|
- '**/*.md'
|
|
- '.circleci/**'
|
|
- 'appveyor.*'
|
|
- 'packages/**'
|
|
- 'plan9/**'
|
|
- 'projects/**'
|
|
- 'winbuild/**'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
|
|
cancel-in-progress: true
|
|
|
|
permissions: {}
|
|
|
|
jobs:
|
|
netbsd:
|
|
name: 'NetBSD, CM clang openssl ${{ matrix.arch }}'
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
strategy:
|
|
matrix:
|
|
arch: ['x86_64']
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- name: 'cmake'
|
|
uses: cross-platform-actions/action@a0672d7f6de3a78e7784bbaf491c7303f68d94b3 # v0.26.0
|
|
with:
|
|
operating_system: 'netbsd'
|
|
version: '10.0'
|
|
architecture: ${{ matrix.arch }}
|
|
run: |
|
|
# https://pkgsrc.se/
|
|
time sudo pkgin -y install cmake ninja-build pkg-config perl brotli heimdal openldap-client libssh2 libidn2 libpsl nghttp2 py311-impacket
|
|
time cmake -B bld -G Ninja \
|
|
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
|
-DCURL_WERROR=ON \
|
|
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
|
|
-DCURL_USE_OPENSSL=ON \
|
|
-DCURL_USE_GSSAPI=ON \
|
|
|| { cat bld/CMakeFiles/CMake*.yaml; false; }
|
|
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
|
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
|
|
time cmake --build bld --config Debug
|
|
bld/src/curl --disable --version
|
|
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
|
time cmake --build bld --config Debug --target testdeps
|
|
export TFLAGS='-j4'
|
|
time cmake --build bld --config Debug --target test-ci
|
|
fi
|
|
echo '::group::build examples'
|
|
time cmake --build bld --config Debug --target curl-examples
|
|
echo '::endgroup::'
|
|
|
|
openbsd:
|
|
name: 'OpenBSD, CM clang libressl ${{ matrix.arch }}'
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
strategy:
|
|
matrix:
|
|
arch: ['x86_64']
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- name: 'cmake'
|
|
uses: cross-platform-actions/action@a0672d7f6de3a78e7784bbaf491c7303f68d94b3 # v0.26.0
|
|
with:
|
|
operating_system: 'openbsd'
|
|
version: '7.5'
|
|
architecture: ${{ matrix.arch }}
|
|
run: |
|
|
# https://openbsd.app/
|
|
# https://www.openbsd.org/faq/faq15.html
|
|
time sudo pkg_add cmake ninja brotli openldap-client-- libssh2 libidn2 libpsl nghttp2 python3 py3-impacket
|
|
time cmake -B bld -G Ninja \
|
|
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
|
-DCURL_WERROR=ON \
|
|
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
|
|
-DCURL_USE_OPENSSL=ON \
|
|
|| { cat bld/CMakeFiles/CMake*.yaml; false; }
|
|
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
|
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
|
|
time cmake --build bld --config Debug
|
|
bld/src/curl --disable --version
|
|
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
|
time cmake --build bld --config Debug --target testdeps
|
|
export TFLAGS='-j8 ~3017 ~TFTP ~FTP' # FIXME: TFTP requests executed twice? Related: `curl: (69) TFTP: Access Violation`?
|
|
time cmake --build bld --config Debug --target test-ci
|
|
fi
|
|
echo '::group::build examples'
|
|
time cmake --build bld --config Debug --target curl-examples
|
|
echo '::endgroup::'
|
|
|
|
freebsd:
|
|
name: "FreeBSD, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.compiler }} openssl ${{ matrix.arch }}"
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 20
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- { build: 'autotools', arch: 'x86_64', compiler: 'clang' }
|
|
- { build: 'autotools', arch: 'arm64', compiler: 'clang' }
|
|
- { build: 'cmake' , arch: 'arm64', compiler: 'clang' }
|
|
fail-fast: false
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- name: 'autotools'
|
|
if: ${{ matrix.build == 'autotools' }}
|
|
uses: cross-platform-actions/action@a0672d7f6de3a78e7784bbaf491c7303f68d94b3 # v0.26.0
|
|
with:
|
|
operating_system: 'freebsd'
|
|
version: '14.1'
|
|
architecture: ${{ matrix.arch }}
|
|
run: |
|
|
# https://ports.freebsd.org/
|
|
time sudo pkg install -y autoconf automake libtool \
|
|
pkgconf brotli openldap26-client libidn2 libnghttp2 stunnel py311-impacket
|
|
time autoreconf -fi
|
|
export CC='${{ matrix.compiler }}'
|
|
mkdir bld && cd bld && time ../configure --enable-unity --enable-test-bundles --enable-debug --enable-warnings --enable-werror \
|
|
--prefix="${HOME}"/install \
|
|
--with-openssl \
|
|
--with-brotli --enable-ldap --enable-ldaps --with-libidn2 --with-libssh2 --with-nghttp2 --with-gssapi \
|
|
--disable-dependency-tracking || { tail -n 1000 config.log; false; }
|
|
echo '::group::curl_config.h (raw)'; cat lib/curl_config.h || true; echo '::endgroup::'
|
|
echo '::group::curl_config.h'; grep -F '#define' lib/curl_config.h | sort || true; echo '::endgroup::'
|
|
time make -j3 install
|
|
src/curl --disable --version
|
|
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
|
time make -j3 -C tests
|
|
time make test-ci V=1 TFLAGS='-j4'
|
|
fi
|
|
echo '::group::build examples'
|
|
time make -j3 examples
|
|
echo '::endgroup::'
|
|
|
|
- name: 'cmake'
|
|
if: ${{ matrix.build == 'cmake' }}
|
|
uses: cross-platform-actions/action@a0672d7f6de3a78e7784bbaf491c7303f68d94b3 # v0.26.0
|
|
with:
|
|
operating_system: 'freebsd'
|
|
version: '14.1'
|
|
architecture: ${{ matrix.arch }}
|
|
run: |
|
|
# https://ports.freebsd.org/
|
|
time sudo pkg install -y cmake-core ninja perl5 \
|
|
pkgconf brotli openldap26-client libidn2 libnghttp2 stunnel py311-impacket
|
|
time cmake -B bld -G Ninja \
|
|
-DCMAKE_C_COMPILER='${{ matrix.compiler }}' \
|
|
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
|
-DCURL_WERROR=ON \
|
|
-DENABLE_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG= \
|
|
-DCURL_USE_OPENSSL=ON \
|
|
-DCURL_USE_GSSAPI=ON \
|
|
|| { cat bld/CMakeFiles/CMake*.yaml; false; }
|
|
echo '::group::curl_config.h (raw)'; cat bld/lib/curl_config.h || true; echo '::endgroup::'
|
|
echo '::group::curl_config.h'; grep -F '#define' bld/lib/curl_config.h | sort || true; echo '::endgroup::'
|
|
time cmake --build bld --config Debug
|
|
bld/src/curl --disable --version
|
|
if [ '${{ matrix.arch }}' = 'x86_64' ]; then # Slow on emulated CPU
|
|
time cmake --build bld --config Debug --target testdeps
|
|
time cmake --build bld --config Debug --target test-ci
|
|
fi
|
|
echo '::group::build examples'
|
|
time cmake --build bld --config Debug --target curl-examples
|
|
echo '::endgroup::'
|
|
|
|
omnios:
|
|
name: 'OmniOS, AM gcc openssl amd64'
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 15
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
- name: 'autotools'
|
|
uses: vmactions/omnios-vm@8eba2a9217262f275d4566751a92d6ef2f433d00 # v1
|
|
with:
|
|
usesh: true
|
|
# https://pkg.omnios.org/r151052/core/en/index.shtml
|
|
prepare: pkg install build-essential libtool nghttp2
|
|
run: |
|
|
set -e
|
|
ln -s /usr/bin/gcpp /usr/bin/cpp # Some tests expect `cpp`, which is named `gcpp` in this env.
|
|
time autoreconf -fi
|
|
mkdir bld && cd bld && time ../configure --enable-unity --enable-test-bundles --enable-debug --enable-warnings --enable-werror \
|
|
--prefix="${HOME}"/install \
|
|
--with-openssl \
|
|
--disable-dependency-tracking || { tail -n 1000 config.log; false; }
|
|
echo '::group::curl_config.h (raw)'; cat lib/curl_config.h || true; echo '::endgroup::'
|
|
echo '::group::curl_config.h'; grep -F '#define' lib/curl_config.h | sort || true; echo '::endgroup::'
|
|
time gmake -j3 install
|
|
src/curl --disable --version
|
|
time gmake -j3 -C tests
|
|
time gmake test-ci V=1
|
|
echo '::group::build examples'
|
|
time gmake -j3 examples
|
|
echo '::endgroup::'
|
|
|
|
ios:
|
|
name: "iOS, ${{ (matrix.build.generator && format('CM-{0}', matrix.build.generator)) || (matrix.build.generate && 'CM' || 'AM' )}} ${{ matrix.build.name }} arm64"
|
|
runs-on: 'macos-latest'
|
|
timeout-minutes: 10
|
|
env:
|
|
DEVELOPER_DIR: "/Applications/Xcode${{ matrix.build.xcode && format('_{0}', matrix.build.xcode) || '' }}.app/Contents/Developer"
|
|
CC: ${{ matrix.build.compiler || 'clang' }}
|
|
MAKEFLAGS: -j 4
|
|
# renovate: datasource=github-tags depName=libressl-portable/portable versioning=semver registryUrl=https://github.com
|
|
libressl-version: 4.0.0
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build:
|
|
- name: 'libressl'
|
|
install_steps: libressl
|
|
configure: --with-openssl="$HOME/libressl" --without-libpsl
|
|
|
|
- name: 'libressl'
|
|
install_steps: libressl
|
|
# FIXME: Could not make OPENSSL_ROOT_DIR work. CMake seems to prepend sysroot to it.
|
|
generate: >-
|
|
-DOPENSSL_INCLUDE_DIR="$HOME/libressl/include"
|
|
-DOPENSSL_SSL_LIBRARY="$HOME/libressl/lib/libssl.a"
|
|
-DOPENSSL_CRYPTO_LIBRARY="$HOME/libressl/lib/libcrypto.a"
|
|
-DCURL_USE_LIBPSL=OFF
|
|
|
|
- name: 'libressl'
|
|
install_steps: libressl
|
|
generator: Xcode
|
|
generate: >-
|
|
-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=OFF
|
|
-DMACOSX_BUNDLE_GUI_IDENTIFIER=se.curl
|
|
-DOPENSSL_INCLUDE_DIR="$HOME/libressl/include"
|
|
-DOPENSSL_SSL_LIBRARY="$HOME/libressl/lib/libssl.a"
|
|
-DOPENSSL_CRYPTO_LIBRARY="$HOME/libressl/lib/libcrypto.a"
|
|
-DCURL_USE_LIBPSL=OFF
|
|
|
|
steps:
|
|
- name: 'brew install'
|
|
if: ${{ matrix.build.configure }}
|
|
run: |
|
|
echo automake libtool | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
|
|
while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done
|
|
|
|
- name: 'toolchain versions'
|
|
run: |
|
|
which "${CC}"; "${CC}" --version || true
|
|
xcodebuild -version || true
|
|
xcodebuild -sdk -version | grep '^Path:' || true
|
|
xcrun --sdk iphoneos --show-sdk-path 2>/dev/null || true
|
|
xcrun --sdk iphoneos --show-sdk-version || true
|
|
echo '::group::macros predefined'; "${CC}" -dM -E - < /dev/null | sort || true; echo '::endgroup::'
|
|
echo '::group::brew packages installed'; ls -l "$(brew --prefix)/opt"; echo '::endgroup::'
|
|
|
|
- name: 'cache libressl'
|
|
if: contains(matrix.build.install_steps, 'libressl')
|
|
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
|
|
id: cache-libressl
|
|
env:
|
|
cache-name: cache-libressl
|
|
with:
|
|
path: ~/libressl
|
|
key: iOS-${{ env.cache-name }}-${{ env.libressl-version }}
|
|
|
|
- name: 'build libressl'
|
|
if: contains(matrix.build.install_steps, 'libressl') && steps.cache-libressl.outputs.cache-hit != 'true'
|
|
run: |
|
|
curl -LsSf --retry 6 --retry-connrefused --max-time 999 \
|
|
https://github.com/libressl/portable/releases/download/v${{ env.libressl-version }}/libressl-${{ env.libressl-version }}.tar.gz | tar -x
|
|
cd libressl-${{ env.libressl-version }}
|
|
# FIXME: on the 4.0.1 release, delete '-DHAVE_ENDIAN_H=0'
|
|
cmake . \
|
|
-DHAVE_ENDIAN_H=0 \
|
|
-DCMAKE_INSTALL_PREFIX="$HOME/libressl" \
|
|
-DCMAKE_SYSTEM_NAME=iOS \
|
|
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
|
|
-DBUILD_SHARED_LIBS=OFF \
|
|
-DLIBRESSL_APPS=OFF \
|
|
-DLIBRESSL_TESTS=OFF
|
|
cmake --build .
|
|
cmake --install . --verbose
|
|
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: 'autoreconf'
|
|
if: ${{ matrix.build.configure }}
|
|
run: autoreconf -fi
|
|
|
|
- name: 'configure'
|
|
run: |
|
|
if [ -n '${{ matrix.build.configure }}' ]; then
|
|
mkdir bld && cd bld && ../configure --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
|
|
--disable-dependency-tracking \
|
|
CFLAGS="-isysroot $(xcrun --sdk iphoneos --show-sdk-path 2>/dev/null)" \
|
|
--host=aarch64-apple-darwin \
|
|
--with-apple-idn \
|
|
${{ matrix.build.configure }}
|
|
else
|
|
export OPENSSL_DIR=/
|
|
# https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-ios-tvos-visionos-or-watchos
|
|
[ -n '${{ matrix.build.generator }}' ] && options='-G ${{ matrix.build.generator }}'
|
|
cmake -B bld -DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON -DCURL_WERROR=ON \
|
|
-DCMAKE_SYSTEM_NAME=iOS \
|
|
-DUSE_APPLE_IDN=ON \
|
|
${{ matrix.build.generate }} ${options}
|
|
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: 'build'
|
|
run: |
|
|
if [ -n '${{ matrix.build.configure }}' ]; then
|
|
make -C bld V=1
|
|
else
|
|
cmake --build bld --verbose
|
|
fi
|
|
|
|
- name: 'curl info'
|
|
run: find . -type f \( -name curl -o -name '*.dylib' -o -name '*.a' \) -exec file '{}' \;
|
|
|
|
- name: 'build tests'
|
|
run: |
|
|
if [ -n '${{ matrix.build.configure }}' ]; then
|
|
make -C bld V=1 -C tests
|
|
else
|
|
cmake --build bld --target testdeps --verbose
|
|
fi
|
|
|
|
- name: 'build examples'
|
|
run: |
|
|
if [ -n '${{ matrix.build.configure }}' ]; then
|
|
make -C bld examples V=1
|
|
else
|
|
cmake --build bld --target curl-examples --verbose
|
|
fi
|
|
|
|
android:
|
|
name: "Android ${{ matrix.platform }}, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} ${{ matrix.name }} arm64"
|
|
runs-on: 'ubuntu-latest'
|
|
timeout-minutes: 25
|
|
env:
|
|
VCPKG_BINARY_SOURCES: 'clear;x-gha,readwrite'
|
|
VCPKG_DISABLE_METRICS: '1'
|
|
MAKEFLAGS: -j 5
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- { build: 'autotools', platform: '21', name: "libressl" , install: 'brotli zstd libpsl nghttp2 openssl libssh2',
|
|
options: '--with-openssl --with-brotli' }
|
|
|
|
- { build: 'cmake' , platform: '21', name: "libressl" , install: 'brotli zstd libpsl nghttp2 openssl libssh2',
|
|
options: '-DCURL_USE_OPENSSL=ON' }
|
|
|
|
- { build: 'autotools', platform: '35', name: "libressl" , install: 'brotli zstd libpsl nghttp2 openssl libssh2',
|
|
options: '--with-openssl --with-brotli' }
|
|
|
|
- { build: 'cmake' , platform: '35', name: "libressl" , install: 'brotli zstd libpsl nghttp2 openssl libssh2',
|
|
options: '-DCURL_USE_OPENSSL=ON' }
|
|
|
|
# FIXME: Must disable zstd explicitly, otherwise cmake/pkg-config finds it in /usr/include
|
|
# and the build fails. I had found no option to disable this behavior. Other default
|
|
# dependencies not offered via vcpkg may also need this.
|
|
- { build: 'cmake' , platform: '35', name: "boringssl !zstd", install: ' libpsl boringssl',
|
|
options: '-DCURL_USE_OPENSSL=ON -DOPENSSL_USE_STATIC_LIBS=ON -DCURL_ZSTD=OFF' }
|
|
|
|
fail-fast: false
|
|
steps:
|
|
- name: 'vcpkg cache setup'
|
|
if: ${{ matrix.install }}
|
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
|
|
with:
|
|
script: |
|
|
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
|
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
|
|
|
- name: 'vcpkg versions'
|
|
if: ${{ matrix.install }}
|
|
timeout-minutes: 1
|
|
run: |
|
|
git -C "$VCPKG_INSTALLATION_ROOT" show --no-patch --format='%H %ai'
|
|
vcpkg version
|
|
|
|
- name: 'install prereqs for vcpkg'
|
|
if: contains(matrix.install, 'boringssl')
|
|
timeout-minutes: 5
|
|
run: |
|
|
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
|
|
sudo apt-get update -y
|
|
sudo apt-get install -y --no-install-suggests --no-install-recommends nasm
|
|
|
|
- name: 'vcpkg build'
|
|
if: ${{ matrix.install }}
|
|
timeout-minutes: 20
|
|
run: vcpkg x-set-installed ${{ matrix.install }} '--triplet=arm64-android'
|
|
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: 'autoreconf'
|
|
if: ${{ matrix.build == 'autotools' }}
|
|
run: autoreconf -fi
|
|
|
|
- name: 'configure'
|
|
run: |
|
|
export PKG_CONFIG_PATH="$VCPKG_INSTALLATION_ROOT/installed/arm64-android/lib/pkgconfig"
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then # https://developer.android.com/ndk/guides/cmake
|
|
cmake -B bld \
|
|
-DANDROID_ABI=arm64-v8a \
|
|
-DANDROID_PLATFORM='android-${{ matrix.platform }}' \
|
|
-DCMAKE_TOOLCHAIN_FILE="$VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" \
|
|
-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake -DCMAKE_WARN_DEPRECATED=OFF \
|
|
-DVCPKG_INSTALLED_DIR="$VCPKG_INSTALLATION_ROOT/installed" \
|
|
-DVCPKG_TARGET_TRIPLET=arm64-android \
|
|
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
|
-DCURL_WERROR=ON \
|
|
${{ matrix.options }}
|
|
else
|
|
TOOLCHAIN="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64"
|
|
mkdir bld && cd bld && ../configure --disable-dependency-tracking --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
|
|
CC="$TOOLCHAIN/bin/aarch64-linux-android${{ matrix.platform }}-clang" \
|
|
AR="$TOOLCHAIN/bin/llvm-ar" \
|
|
RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
|
|
--host=aarch64-linux-android${{ matrix.platform }} \
|
|
${{ matrix.options }}
|
|
fi
|
|
|
|
- name: 'configure log'
|
|
if: ${{ !cancelled() }}
|
|
run: cat bld/config.log bld/CMakeFiles/CMake*.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: 'build'
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake --build bld --verbose
|
|
else
|
|
make -j5 -C bld V=1
|
|
fi
|
|
|
|
- name: 'curl info'
|
|
run: find . -type f \( -name curl -o -name '*.so' -o -name '*.a' \) -exec file '{}' \;
|
|
|
|
- name: 'build tests'
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake --build bld --target testdeps
|
|
else
|
|
make -j5 -C bld -C tests
|
|
fi
|
|
|
|
- name: 'build examples'
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake --build bld --target curl-examples
|
|
else
|
|
make -j5 -C bld examples
|
|
fi
|
|
|
|
amiga:
|
|
name: "AmigaOS, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} gcc AmiSSL m68k"
|
|
runs-on: 'ubuntu-latest'
|
|
timeout-minutes: 5
|
|
env:
|
|
amissl-version: 5.18
|
|
strategy:
|
|
matrix:
|
|
build: [autotools, cmake]
|
|
fail-fast: false
|
|
steps:
|
|
- name: 'install compiler'
|
|
if: ${{ steps.cache-compiler.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd "${HOME}" || exit 1
|
|
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 3 \
|
|
--location https://github.com/bebbo/amiga-gcc/releases/download/Mechen/amiga-gcc.tgz | tar -xz
|
|
cd opt/appveyor || exit 1
|
|
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 60 --retry 3 \
|
|
--location https://github.com/jens-maus/amissl/releases/download/${{ env.amissl-version }}/AmiSSL-${{ env.amissl-version }}-SDK.lha --output bin.lha
|
|
7z x -bd -y bin.lha
|
|
rm -f bin.lha
|
|
mv "$HOME/opt/appveyor" /opt
|
|
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: 'configure'
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake -B bld \
|
|
-DAMIGA=1 \
|
|
-DCMAKE_SYSTEM_NAME=Generic \
|
|
-DCMAKE_SYSTEM_PROCESSOR=m68k \
|
|
-DCMAKE_C_COMPILER_TARGET=m68k-unknown-amigaos \
|
|
-DCMAKE_C_COMPILER=/opt/appveyor/build-agent/opt/amiga/bin/m68k-amigaos-gcc \
|
|
-DCMAKE_C_FLAGS='-O0 -msoft-float -mcrt=clib2' \
|
|
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
|
-DCURL_WERROR=ON \
|
|
-DCURL_USE_LIBPSL=OFF \
|
|
-DAMISSL_INCLUDE_DIR=/opt/appveyor/AmiSSL/Developer/include \
|
|
-DAMISSL_STUBS_LIBRARY=/opt/appveyor/AmiSSL/Developer/lib/AmigaOS3/libamisslstubs.a \
|
|
-DAMISSL_AUTO_LIBRARY=/opt/appveyor/AmiSSL/Developer/lib/AmigaOS3/libamisslauto.a
|
|
else
|
|
autoreconf -fi
|
|
mkdir bld && cd bld && ../configure --disable-dependency-tracking --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
|
|
CC=/opt/appveyor/build-agent/opt/amiga/bin/m68k-amigaos-gcc \
|
|
AR=/opt/appveyor/build-agent/opt/amiga/bin/m68k-amigaos-ar \
|
|
RANLIB=/opt/appveyor/build-agent/opt/amiga/bin/m68k-amigaos-ranlib \
|
|
--host=m68k-amigaos \
|
|
--disable-shared \
|
|
--without-libpsl \
|
|
--with-amissl \
|
|
LDFLAGS=-L/opt/appveyor/AmiSSL/Developer/lib/AmigaOS3 \
|
|
CPPFLAGS=-I/opt/appveyor/AmiSSL/Developer/include \
|
|
CFLAGS='-O0 -msoft-float -mcrt=clib2' \
|
|
LIBS='-lnet -lm -latomic'
|
|
fi
|
|
|
|
- name: 'configure log'
|
|
if: ${{ !cancelled() }}
|
|
run: cat bld/config.log bld/CMakeFiles/CMake*.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: 'build'
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake --build bld --parallel 5
|
|
else
|
|
make -j5 -C bld
|
|
fi
|
|
|
|
- name: 'curl info'
|
|
run: find . -type f \( -name curl -o -name '*.a' \) -exec file '{}' \;
|
|
|
|
- name: 'build tests'
|
|
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake --build bld --parallel 5 --target testdeps
|
|
else
|
|
make -j5 -C bld -C tests
|
|
fi
|
|
|
|
- name: 'build examples'
|
|
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake --build bld --parallel 5 --target curl-examples
|
|
else
|
|
make -j5 -C bld examples
|
|
fi
|
|
|
|
msdos:
|
|
name: "MS-DOS, ${{ matrix.build == 'cmake' && 'CM' || 'AM' }} djgpp openssl i586"
|
|
runs-on: 'ubuntu-latest'
|
|
timeout-minutes: 5
|
|
env:
|
|
toolchain-version: '3.4'
|
|
strategy:
|
|
matrix:
|
|
build: [autotools, cmake]
|
|
fail-fast: false
|
|
steps:
|
|
- name: 'install packages'
|
|
run: sudo apt-get --quiet 2 --option Dpkg::Use-Pty=0 install libfl2 ${{ matrix.build == 'cmake' && 'ninja-build' || '' }}
|
|
|
|
- name: 'cache compiler (djgpp)'
|
|
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4
|
|
id: cache-compiler
|
|
with:
|
|
path: ~/djgpp
|
|
key: ${{ runner.os }}-djgpp-${{ env.toolchain-version }}-amd64
|
|
|
|
- name: 'install compiler (djgpp)'
|
|
if: ${{ steps.cache-compiler.outputs.cache-hit != 'true' }}
|
|
run: |
|
|
cd "${HOME}" || exit 1
|
|
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 120 --retry 3 \
|
|
--location 'https://github.com/andrewwutw/build-djgpp/releases/download/v${{ env.toolchain-version }}/djgpp-linux64-gcc1220.tar.bz2' | tar -xj
|
|
cd djgpp || exit 1
|
|
for f in wat3211b.zip zlb13b.zip ssl102ub.zip; do
|
|
curl --disable --fail --silent --show-error --connect-timeout 15 --max-time 60 --retry 3 \
|
|
"https://www.delorie.com/pub/djgpp/current/v2tk/$f" --output bin.zip
|
|
unzip -q bin.zip
|
|
rm -f bin.zip
|
|
done
|
|
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: 'configure'
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake -B bld -G Ninja \
|
|
-DCMAKE_SYSTEM_NAME=DOS \
|
|
-DCMAKE_SYSTEM_PROCESSOR=x86 \
|
|
-DCMAKE_C_COMPILER_TARGET=i586-pc-msdosdjgpp \
|
|
-DCMAKE_C_COMPILER="$HOME/djgpp/bin/i586-pc-msdosdjgpp-gcc" \
|
|
-DCMAKE_UNITY_BUILD=ON -DCURL_TEST_BUNDLES=ON \
|
|
-DCURL_WERROR=ON \
|
|
-DCURL_USE_LIBPSL=OFF \
|
|
-DOPENSSL_INCLUDE_DIR="$HOME/djgpp/include" \
|
|
-DOPENSSL_SSL_LIBRARY="$HOME/djgpp/lib/libssl.a" \
|
|
-DOPENSSL_CRYPTO_LIBRARY="$HOME/djgpp/lib/libcrypto.a" \
|
|
-DZLIB_INCLUDE_DIR="$HOME/djgpp/include" \
|
|
-DZLIB_LIBRARY="$HOME/djgpp/lib/libz.a" \
|
|
-DWATT_ROOT="$HOME/djgpp/net/watt"
|
|
else
|
|
autoreconf -fi
|
|
mkdir bld && cd bld && ../configure --disable-dependency-tracking --enable-unity --enable-test-bundles --enable-warnings --enable-werror \
|
|
CC="$HOME/djgpp/bin/i586-pc-msdosdjgpp-gcc" \
|
|
AR="$HOME/djgpp/bin/i586-pc-msdosdjgpp-ar" \
|
|
RANLIB="$HOME/djgpp/bin/i586-pc-msdosdjgpp-ranlib" \
|
|
WATT_ROOT="$HOME/djgpp/net/watt" \
|
|
--host=i586-pc-msdosdjgpp \
|
|
--with-openssl="$HOME/djgpp" \
|
|
--with-zlib="$HOME/djgpp" \
|
|
--without-libpsl \
|
|
--disable-shared
|
|
fi
|
|
|
|
- name: 'configure log'
|
|
if: ${{ !cancelled() }}
|
|
run: cat bld/config.log bld/CMakeFiles/CMake*.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: 'build'
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake --build bld
|
|
else
|
|
make -j5 -C bld
|
|
fi
|
|
|
|
- name: 'curl info'
|
|
run: find . \( -name '*.exe' -o -name '*.a' \) -exec file '{}' \;
|
|
|
|
- name: 'build tests'
|
|
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake --build bld --target testdeps
|
|
else
|
|
make -j5 -C bld -C tests
|
|
fi
|
|
|
|
- name: 'build examples'
|
|
if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time
|
|
run: |
|
|
if [ '${{ matrix.build }}' = 'cmake' ]; then
|
|
cmake --build bld --target curl-examples
|
|
else
|
|
make -j5 -C bld examples
|
|
fi
|