You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
10 KiB
YAML
270 lines
10 KiB
YAML
name: Libobjc2 CI
|
|
|
|
# Controls when the workflow will run
|
|
on:
|
|
# Triggers the workflow on push or pull request events but only for the master branch
|
|
push:
|
|
branches: [ master ]
|
|
pull_request:
|
|
branches: [ master ]
|
|
# Automatically run the workflow once a month
|
|
schedule:
|
|
- cron: '0 4 1 * *'
|
|
# Allow running the workflow manually
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
ubuntu:
|
|
strategy:
|
|
matrix:
|
|
# Build each combination of OS and release/debug variants
|
|
os: [ "ubuntu-22.04", "ubuntu-20.04" ]
|
|
build-type: [ Release, Debug ]
|
|
blocks-runtime: [ "EMBEDDED", "swift-5.10-RELEASE" ]
|
|
cxxlib: [ "libc++", "libstdc++" ]
|
|
llvm-version: [10, 11, 12, 13, 14, 15]
|
|
# Don't bother testing the LLVM versions that aren't in the default image for the different platforms
|
|
exclude:
|
|
- os: "ubuntu-22.04"
|
|
llvm-version: 10
|
|
- os: "ubuntu-22.04"
|
|
llvm-version: 11
|
|
- os: "ubuntu-22.04"
|
|
llvm-version: 12
|
|
- os: "ubuntu-20.04"
|
|
llvm-version: 11
|
|
- os: "ubuntu-20.04"
|
|
llvm-version: 13
|
|
- os: "ubuntu-20.04"
|
|
llvm-version: 14
|
|
- os: "ubuntu-20.04"
|
|
llvm-version: 15
|
|
# Don't abort runners if a single one fails
|
|
fail-fast: false
|
|
runs-on: ${{ matrix.os }}
|
|
name: ${{ matrix.os }} ${{ matrix.build-type }} LLVM-${{ matrix.llvm-version }} ${{ matrix.cxxlib }} BlocksRuntime-${{ matrix.blocks-runtime }}
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt install ninja-build
|
|
if [ "${{ matrix.cxxlib }}" = "libc++" ]; then
|
|
sudo apt remove -y 'libc++*'
|
|
apt search libunwind
|
|
sudo apt install libc++-${{matrix.llvm-version}}-dev libc++abi-${{matrix.llvm-version}}-dev
|
|
sudo apt install libunwind-${{matrix.llvm-version}}-dev || true
|
|
fi
|
|
if [ "${{ matrix.blocks-runtime }}" != "EMBEDDED" ]; then
|
|
git clone --depth 1 --branch "${{ matrix.blocks-runtime }}" https://github.com/apple/swift-corelibs-libdispatch.git ${{github.workspace}}/swift-corelibs-libdispatch
|
|
cmake -B ${{github.workspace}}/swift-corelibs-libdispatch/build -G Ninja -DINSTALL_PRIVATE_HEADERS=ON -DCMAKE_C_COMPILER=clang-${{matrix.llvm-version}} -DCMAKE_CXX_COMPILER=clang++-${{matrix.llvm-version}} -S ${{github.workspace}}/swift-corelibs-libdispatch
|
|
pushd ${{github.workspace}}/swift-corelibs-libdispatch/build
|
|
ninja
|
|
sudo ninja install
|
|
popd
|
|
fi
|
|
- name: Configure CMake
|
|
run: |
|
|
export LDFLAGS=-L/usr/lib/llvm-${{ matrix.llvm-version }}/lib/
|
|
if [ "${{ matrix.blocks-runtime }}" != "EMBEDDED" ]; then
|
|
export EMBEDDED_BLOCKS_RUNTIME=OFF
|
|
else
|
|
export EMBEDDED_BLOCKS_RUNTIME=ON
|
|
fi
|
|
ls -lahR /usr/lib/llvm-${{ matrix.llvm-version }}/lib/
|
|
cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.build-type}} -G Ninja -DTESTS=ON -DEMBEDDED_BLOCKS_RUNTIME=$EMBEDDED_BLOCKS_RUNTIME -DCMAKE_C_COMPILER=clang-${{matrix.llvm-version}} -DCMAKE_OBJC_COMPILER=clang-${{matrix.llvm-version}} -DCMAKE_ASM_COMPILER=clang-${{matrix.llvm-version}} -DCMAKE_CXX_COMPILER=clang++-${{matrix.llvm-version}} -DCMAKE_OBJCXX_COMPILER=clang++-${{matrix.llvm-version}} -DCMAKE_CXX_FLAGS="-stdlib=${{matrix.cxxlib}}"
|
|
# Build with a nice ninja status line
|
|
- name: Build
|
|
working-directory: ${{github.workspace}}/build
|
|
run: |
|
|
NINJA_STATUS="%p [%f:%s/%t] %o/s, %es" ninja
|
|
- name: Test
|
|
working-directory: ${{github.workspace}}/build
|
|
run: |
|
|
ctest --output-on-failure -j 4
|
|
|
|
qemu-crossbuild:
|
|
strategy:
|
|
matrix:
|
|
build-type: [ Release, Debug ]
|
|
llvm-version: [13, 14, 15]
|
|
arch:
|
|
- name: armhf
|
|
system-processor: arm
|
|
triple: arm-linux-gnueabihf
|
|
rtld: ld-linux-armhf.so.3
|
|
# The C++ exception tests are failing, disable them until they are debugged.
|
|
unsupported: -E CXX
|
|
- name: arm64
|
|
system-processor: aarch64
|
|
triple: aarch64-linux-gnu
|
|
rtld: ld-linux-aarch64.so.1
|
|
- name: riscv64
|
|
system-processor: riscv64
|
|
triple: riscv64-linux-gnu
|
|
rtld: ld-linux-riscv64-lp64d.so.1
|
|
- name: ppc64el
|
|
system-processor: powerpc64le
|
|
triple: powerpc64le-linux-gnu
|
|
rtld: ld64.so.2
|
|
# lld versions prior to 15 do not support R_RISCV_ALIGN relocations
|
|
exclude:
|
|
- llvm-version: 13
|
|
arch:
|
|
name: riscv64
|
|
- llvm-version: 14
|
|
arch:
|
|
name: riscv64
|
|
# Don't abort runners if a single one fails
|
|
fail-fast: false
|
|
runs-on: ubuntu-latest
|
|
name: Cross-build for ${{ matrix.arch.triple }} LLVM-${{ matrix.llvm-version}} ${{ matrix.build-type }}
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Install cross-compile toolchain and QEMU
|
|
run: |
|
|
sudo apt update
|
|
sudo apt install libstdc++-9-dev-${{ matrix.arch.name }}-cross qemu-user ninja-build
|
|
- name: Configure CMake
|
|
run: |
|
|
export LDFLAGS="-L/usr/lib/llvm-${{ matrix.llvm-version }}/lib/ -fuse-ld=lld-${{ matrix.llvm-version}} -Wl,--dynamic-linker=/usr/${{ matrix.arch.triple }}/lib/${{ matrix.arch.rtld }},-rpath,/usr/${{ matrix.arch.triple }}/lib"
|
|
cmake -B ${{github.workspace}}/build \
|
|
-DCMAKE_SYSTEM_NAME=Linux \
|
|
-DCMAKE_SYSTEM_PROCESSOR=${{ matrix.arch.system-processor }} \
|
|
-DCMAKE_C_COMPILER=clang-${{ matrix.llvm-version }} \
|
|
-DCMAKE_CXX_COMPILER=clang++-${{ matrix.llvm-version }} \
|
|
-DCMAKE_ASM_COMPILER=clang-${{ matrix.llvm-version }} \
|
|
-DCMAKE_C_COMPILER_TARGET=${{ matrix.arch.triple }} \
|
|
-DCMAKE_CXX_COMPILER_TARGET=${{ matrix.arch.triple }} \
|
|
-DCMAKE_OBJC_COMPILER_TARGET=${{ matrix.arch.triple }} \
|
|
-DCMAKE_OBJCXX_COMPILER_TARGET=${{ matrix.arch.triple }} \
|
|
-DCMAKE_ASM_COMPILER_TARGET=${{ matrix.arch.triple }} \
|
|
-DCMAKE_BUILD_TYPE=${{matrix.build-type}} \
|
|
-DTESTS=ON \
|
|
-G Ninja \
|
|
# Build with a nice ninja status line
|
|
- name: Build
|
|
working-directory: ${{github.workspace}}/build
|
|
run: |
|
|
NINJA_STATUS="%p [%f:%s/%t] %o/s, %es" ninja -v
|
|
- name: Test
|
|
working-directory: ${{github.workspace}}/build
|
|
run: |
|
|
ctest --output-on-failure -j 4 ${{ matrix.arch.unsupported }}
|
|
|
|
windows:
|
|
strategy:
|
|
matrix:
|
|
# Build each combination of OS and release/debug variants
|
|
os: [ windows-2022, windows-2019 ]
|
|
build-type: [ Release, Debug ]
|
|
arch: [ x64_x86, x64 ]
|
|
include:
|
|
- arch: x64_x86
|
|
flags: -m32
|
|
- arch: x64
|
|
flags: -m64
|
|
- os: windows-2022
|
|
vspath: C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build
|
|
- os: windows-2019
|
|
vspath: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build
|
|
# Don't abort runners if a single one fails
|
|
fail-fast: false
|
|
runs-on: ${{ matrix.os }}
|
|
name: ${{ matrix.os }} ${{ matrix.build-type }} ${{ matrix.arch }}
|
|
steps:
|
|
- name: look at VS install
|
|
shell: cmd
|
|
run: |
|
|
dir "${{ matrix.vspath }}"
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
submodules: true
|
|
- name: Install dependencies
|
|
run: |
|
|
choco.exe install ninja
|
|
- name: Configure CMake
|
|
shell: cmd
|
|
run: |
|
|
call "${{ matrix.vspath }}\vcvarsall.bat" ${{ matrix.arch }}
|
|
set CFLAGS=${{ matrix.flags }}
|
|
set CXXFLAGS=${{ matrix.flags }}
|
|
set OBJCFLAGS=${{ matrix.flags }}
|
|
set OBJCXXFLAGS=${{ matrix.flags }}
|
|
set ASMFLAGS=${{ matrix.flags }}
|
|
mkdir build
|
|
cd build
|
|
cmake .. -G Ninja -DTESTS=ON -DCMAKE_C_COMPILER="c:/Program Files/LLVM/bin/clang.exe" -DCMAKE_CXX_COMPILER="c:/Program Files/LLVM/bin/clang.exe" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }}
|
|
- name: Build
|
|
shell: cmd
|
|
working-directory: build
|
|
run: |
|
|
call "${{ matrix.vspath }}\vcvarsall.bat" ${{ matrix.arch }}
|
|
ninja
|
|
- name: Test
|
|
shell: cmd
|
|
working-directory: build
|
|
run: |
|
|
ctest -j 4 --output-on-failure -T test
|
|
|
|
mingw:
|
|
strategy:
|
|
matrix:
|
|
# Build each combination of OS and release/debug variants
|
|
os: [ windows-2019 ]
|
|
msystem: [ ucrt64, mingw64, clang64 ]
|
|
build-type: [ Release, Debug ]
|
|
include:
|
|
- msystem: ucrt64
|
|
package-prefix: ucrt-x86_64
|
|
cmake-flags: LDFLAGS="-fuse-ld=lld -lstdc++ -lgcc_s"
|
|
- msystem: mingw64
|
|
package-prefix: x86_64
|
|
cmake-flags: LDFLAGS="-fuse-ld=lld -lstdc++ -lgcc_s"
|
|
- msystem: clang64
|
|
package-prefix: clang-x86_64
|
|
cmake-flags: LDFLAGS="-lc++"
|
|
# Don't abort runners if a single one fails
|
|
fail-fast: false
|
|
runs-on: ${{ matrix.os }}
|
|
name: ${{ matrix.os }} ${{ matrix.msystem }} ${{ matrix.build-type}}
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: ${{ matrix.msystem }}
|
|
update: true
|
|
install: git mingw-w64-${{ matrix.package-prefix }}-clang mingw-w64-${{ matrix.package-prefix }}-lld mingw-w64-${{ matrix.package-prefix }}-cmake
|
|
- name: Configure CMake
|
|
run: |
|
|
mkdir build
|
|
cd build
|
|
${{ matrix.cmake-flags }} cmake .. -DTESTS=ON -DCMAKE_C_COMPILER="clang" -DCMAKE_CXX_COMPILER="clang++" -DCMAKE_BUILD_TYPE=${{ matrix.build-type }}
|
|
- name: Build
|
|
working-directory: build
|
|
run: |
|
|
cmake --build .
|
|
- name: Test
|
|
working-directory: build
|
|
run: |
|
|
ctest -j 4 --output-on-failure -T test ${{ matrix.ctest-flags }}
|
|
- name: Install
|
|
working-directory: build
|
|
run: |
|
|
cmake --install . --prefix=../dist
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ matrix.msystem }}-${{ matrix.build-type }}
|
|
path: dist/
|
|
|
|
# Fake check that can be used as a branch-protection rule.
|
|
all-checks:
|
|
needs: [ubuntu, windows, qemu-crossbuild]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Dummy step
|
|
run: true
|
|
|