Skip to content

Commit

Permalink
wip: ci
Browse files Browse the repository at this point in the history
Meson wants release types in lowercase, and Cmake needs e.g. 'Debug'.

Do some string maniuplation where required.

Ubuntu-latest: 'focal' -> 'noble' - latest has moved

Meson: Set version range >=majver < majver+1 where reqd

Use pip for msvc (choco doesn't add meson to PATH?)

msys2 is bash?
  • Loading branch information
Kangie committed Jan 20, 2025
1 parent ca3e49b commit 25f6500
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 126 deletions.
132 changes: 61 additions & 71 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: CI

on:
push:
branches: [ master, dev, ci_testing, experiments ]
branches: [ master, dev, ci_testing, experiments, meson ]
pull_request:
branches: [ master, dev ]

Expand All @@ -29,20 +29,25 @@ jobs:
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
if : matrix.build_system == 'meson'
with:
python-version: '3.x'

- name: Install Meson
if: matrix.build_system == 'meson'
run: |
choco install meson ninja
pip install meson ninja
# Note: the meson vs backend is less mature than Ninja, which is typically preferred even when using msvc
# --backend vs to generate VS project files, but we probably don't need that
# "--backend vs" to generate VS project files, but we probably don't need that
- name: build c3c
run: |
if (${{ matrix.build_system }} -eq 'cmake') {
if ('${{ matrix.build_system }}' -eq 'cmake') {
cmake -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
cmake --build build --config ${{ matrix.build_type }}
} else {
meson setup build --buildtype ${{ matrix.build_type }} --backend Ninja
meson setup build --vsenv --buildtype $(("${{ matrix.build_type }}").ToLower()) --backend ninja
ninja -C build
}
shell: pwsh
Expand Down Expand Up @@ -96,7 +101,7 @@ jobs:
run: |
cd resources/examples/dynlib-test
$env:c3c_bin -vv dynamic-lib add.c3
..\..\..\build\${{ matrix.build_type }}\c3c.exe -vv compile-run test.c3 -l ./add.lib
..\..\..\build\${{matrix.build_system == 'cmake' && format('{0}\',matrix.build_type) || '' }}c3c.exe -vv compile-run test.c3 -l ./add.lib
- name: Compile and run staticlib-test
env:
Expand Down Expand Up @@ -134,7 +139,7 @@ jobs:
- name: Compile run unit tests
run: |
cd test
..\build\${{ matrix.build_type }}\c3c.exe compile-test unit -O1
..\build\${{matrix.build_system == 'cmake' && format('{0}\',matrix.build_type) || '' }}c3c.exe compile-test unit -O1
- name: Test python script
run: |
Expand Down Expand Up @@ -175,11 +180,12 @@ jobs:
pacman --noconfirm -U https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-lld-19.1.6-1-any.pkg.tar.zst
- name: Build c3c
run: |
if [[ ${{ matrix.build_system }} == 'cmake']]; then
if ${{ matrix.build_system == 'cmake'}}; then
cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
cmake --build build
else
meson setup build --buildtype ${{ matrix.build_type }}
build_type=$(echo ${{ matrix.build_type }} | tr '[:upper:]' '[:lower:]')
meson setup build --buildtype $build_type
ninja -C build
fi
Expand Down Expand Up @@ -210,12 +216,12 @@ jobs:
- name: run compiler tests
run: |
if [[ ${{ matrix.build_system }} == 'cmake' ]]; then
if [[ ${{ matrix.build_system }} == 'cmake' (
cd test
python3 src/tester.py ../build/c3c.exe test_suite/
else
) else (
meson test -C build
fi
)
build-msys2-clang:
Expand All @@ -242,11 +248,12 @@ jobs:

- name: Build c3c
run: |
if [[ ${{ matrix.build_system }} == 'cmake']]; then
if ${{ matrix.build_system == 'cmake' }}; then
cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
cmake --build build
else
meson setup build --buildtype ${{ matrix.build_type }} --backend ninja
build_type=$(echo ${{ matrix.build_type }} | tr '[:upper:]' '[:lower:]')
meson setup build --buildtype $build_type
ninja -C build
fi
Expand Down Expand Up @@ -286,83 +293,64 @@ jobs:
fail-fast: false
matrix:
build_type: [Release, Debug]
llvm_version: [17, 18, 19, 20]
llvm_version: [18, 19, 20]
build_system: [ cmake, meson ]

steps:
- uses: actions/checkout@v4
- name: Install common deps
run: |
sudo apt-get install zlib1g zlib1g-dev python3 ninja-build curl
sudo apt-get install zlib1g zlib1g-dev python3 ninja-build curl libedit-dev libzstd-dev
- name: Install Meson
if: matrix.build_system == 'meson'
run: |
apt-get install python3 python3-pip python3-setuptools python3-wheel ninja-build
sudo apt-get install python3 python3-pip python3-setuptools python3-wheel
pip3 install meson
- name: Install Clang ${{matrix.llvm_version}}
if : matrix.llvm_version >= 18 # 17 is already installed in noble numbat and trying to install from apt.llvm.org actually causes failures.
run: |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
if [[ "${{matrix.llvm_version}}" < 18 ]]; then
sudo add-apt-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-${{matrix.llvm_version}} main"
if [[ "${{matrix.llvm_version}}" < "${{env.LLVM_DEV_VERSION}}" ]]; then
sudo add-apt-repository "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-${{matrix.llvm_version}} main"
sudo apt-get update
sudo apt-get install -y -t llvm-toolchain-focal-${{matrix.llvm_version}} libpolly-${{matrix.llvm_version}}-dev \
sudo apt-get install -y -t llvm-toolchain-noble-${{matrix.llvm_version}} libpolly-${{matrix.llvm_version}}-dev \
clang-${{matrix.llvm_version}} llvm-${{matrix.llvm_version}} llvm-${{matrix.llvm_version}}-dev \
lld-${{matrix.llvm_version}} liblld-${{matrix.llvm_version}}-dev libmlir-${{matrix.llvm_version}} \
libmlir-${{matrix.llvm_version}}-dev mlir-${{matrix.llvm_version}}-tools
lld-${{matrix.llvm_version}} liblld-${{matrix.llvm_version}}-dev
else
if [[ "${{matrix.llvm_version}}" < "${{env.LLVM_DEV_VERSION}}" ]]; then
sudo add-apt-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-${{matrix.llvm_version}} main"
sudo apt-get update
sudo apt-get install -y -t llvm-toolchain-focal-${{matrix.llvm_version}} libpolly-${{matrix.llvm_version}}-dev \
clang-${{matrix.llvm_version}} llvm-${{matrix.llvm_version}} llvm-${{matrix.llvm_version}}-dev \
lld-${{matrix.llvm_version}} liblld-${{matrix.llvm_version}}-dev
else
sudo add-apt-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal main"
sudo apt-get install -y -t llvm-toolchain-focal libpolly-${{matrix.llvm_version}}-dev \
clang-${{matrix.llvm_version}} llvm-${{matrix.llvm_version}} llvm-${{matrix.llvm_version}}-dev \
lld-${{matrix.llvm_version}} liblld-${{matrix.llvm_version}}-dev
fi
sudo add-apt-repository "deb http://apt.llvm.org/noble/ llvm-toolchain-noble main"
sudo apt-get install -y -t llvm-toolchain-noble libpolly-${{matrix.llvm_version}}-dev \
clang-${{matrix.llvm_version}} llvm-${{matrix.llvm_version}} llvm-${{matrix.llvm_version}}-dev \
lld-${{matrix.llvm_version}} liblld-${{matrix.llvm_version}}-dev
fi
- name: Build (CMake with ${{matrix.llvm_version}})
if: matrix.llvm_version < 18 || matrix.llvm_version == env.LLVM_DEV_VERSION
run: |
cmake -B build \
-G Ninja \
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
-DCMAKE_C_COMPILER=clang-${{matrix.llvm_version}} \
-DCMAKE_CXX_COMPILER=clang++-${{matrix.llvm_version}} \
-DCMAKE_LINKER=lld-link-${{matrix.llvm_version}} \
-DCMAKE_OBJCOPY=llvm-objcopy-${{matrix.llvm_version}} \
-DCMAKE_STRIP=llvm-strip-${{matrix.llvm_version}} \
-DCMAKE_DLLTOOL=llvm-dlltool-${{matrix.llvm_version}} \
-DC3_LLVM_VERSION=${{matrix.llvm_version}}
cmake --build build
- name: Build (CMake with ${{matrix.llvm_version}})
if: matrix.llvm_version >= 18 && matrix.llvm_version != env.LLVM_DEV_VERSION
run: |
cmake -B build \
-G Ninja \
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
-DCMAKE_C_COMPILER=clang-${{matrix.llvm_version}} \
-DCMAKE_CXX_COMPILER=clang++-${{matrix.llvm_version}} \
-DCMAKE_LINKER=lld-link-${{matrix.llvm_version}} \
-DCMAKE_OBJCOPY=llvm-objcopy-${{matrix.llvm_version}} \
-DCMAKE_STRIP=llvm-strip-${{matrix.llvm_version}} \
-DCMAKE_DLLTOOL=llvm-dlltool-${{matrix.llvm_version}} \
-DC3_LLVM_VERSION=${{matrix.llvm_version}}.1
cmake --build build
- name: Build (Meson)
if: matrix.build_system == 'meson'
- name: Build c3c (${{matrix.build_system}} with ${{matrix.llvm_version}})
run: |
export CC=clang-${{matrix.llvm_version}}
export CXX=clang++-${{matrix.llvm_version}}
export CC_LD=lld-link-${{matrix.llvm_version}}
export CXX_LD=lld-link-${{matrix.llvm_version}}
meson setup --builddir build --buildtype ${{ matrix.build_type }} --backend ninja -Dllvm_version=${{ matrix.llvm_version }}
ninja -C build
if ${{ matrix.build_system == 'cmake' }}; then
c3_llvm_ver="${{ matrix.llvm_version }}"
if ${{ matrix.llvm_version >= 18 && matrix.llvm_version != env.LLVM_DEV_VERSION }}; then
c3_llvm_ver="${{ matrix.llvm_version }}.1"
fi
cmake -B build \
-G Ninja \
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
-DCMAKE_C_COMPILER=clang-${{matrix.llvm_version}} \
-DCMAKE_CXX_COMPILER=clang++-${{matrix.llvm_version}} \
-DCMAKE_LINKER=lld-link-${{matrix.llvm_version}} \
-DCMAKE_OBJCOPY=llvm-objcopy-${{matrix.llvm_version}} \
-DCMAKE_STRIP=llvm-strip-${{matrix.llvm_version}} \
-DCMAKE_DLLTOOL=llvm-dlltool-${{matrix.llvm_version}} \
-DC3_LLVM_VERSION=${c3_llvm_ver}
cmake --build build
else
export CC=clang-${{matrix.llvm_version}}
export CXX=clang++-${{matrix.llvm_version}}
build_type=$(echo ${{ matrix.build_type }} | tr '[:upper:]' '[:lower:]')
llvm_ver="['>=${{ matrix.llvm_version }}', '<$((${{ matrix.llvm_version }}+1))']"
meson setup build --buildtype $build_type --backend ninja -Dllvm_version="${llvm_ver}" -Dwith_llvm=enabled
ninja -C build
fi
- name: Compile and run some examples
run: |
Expand Down Expand Up @@ -720,7 +708,9 @@ jobs:
cmake --build build
fi
else
meson setup build --buildtype ${{ matrix.build_type }} --backend ninja -Dllvm_version=${{ matrix.llvm_version }}
build_type=$(echo ${{ matrix.build_type }} | tr '[:upper:]' '[:lower:]')
llvm_ver="['>=${{ matrix.llvm_version }}', '<$((${{ matrix.llvm_version }}+1))']"
meson setup build --buildtype $build_type --backend ninja -Dwith_llvm=enabled -Dllvm_version="${llvm_ver}"
ninja -C build
fi
Expand Down
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,13 @@ $ meson setup build
$ meson compile -C build
```

The build backend may be invoked directly if using Ninja:

```console
$ meson setup build
$ ninja -C build
```

Note that `build` is the name of the build directory and may be changed to any other name, or several build directories may be configured for different build types.

To specify a build type, use the `--buildtype` flag:
Expand Down
Loading

0 comments on commit 25f6500

Please sign in to comment.