athena/.github/workflows/build.yml

265 lines
7.7 KiB
YAML

name: Build
on:
push:
pull_request:
env:
BUILDCACHE_VERSION: v0.28.3
BUILDCACHE_ACCURACY: STRICT
BUILDCACHE_MAX_CACHE_SIZE: 1073741824 # 1GiB
jobs:
build-linux-x86_64:
name: Build Linux (GCC x86_64)
runs-on: ubuntu-20.04
env:
LLVM_MAJOR: 15
BUILDCACHE_DIR: ${{github.workspace}}/.buildcache
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
submodules: recursive
- name: Install dependencies
run: |
sudo apt-get -y update
sudo apt-get -y install cmake ninja-build llvm-$LLVM_MAJOR-dev libclang-$LLVM_MAJOR-dev clang-$LLVM_MAJOR zlib1g-dev
# setup buildcache
curl -LSfs https://github.com/mbitsnbites/buildcache/releases/download/$BUILDCACHE_VERSION/buildcache-linux.tar.gz | tar xz -C "$RUNNER_WORKSPACE"
echo "$RUNNER_WORKSPACE"/buildcache/bin >> $GITHUB_PATH
- name: Restore buildcache
uses: actions/cache@v2
with:
path: ${{env.BUILDCACHE_DIR}}
key: buildcache-ubuntu-20.04-x86_64
- name: Configure CMake
run: |
cmake -B build . -GNinja \
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \
-DATDNA_DYNAMIC_LLVM=OFF \
-DClang_DIR:PATH=/usr/lib/cmake/clang-$LLVM_MAJOR \
-DCMAKE_C_COMPILER_LAUNCHER:STRING=buildcache \
-DCMAKE_CXX_COMPILER_LAUNCHER:STRING=buildcache
- name: Build
run: cmake --build build --target package --verbose
- name: Print buildcache stats
run: buildcache -s
- name: Test
working-directory: build
run: ./atdna-test
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: atdna-linux-x86_64
path: |
build/athena-*.tar.gz
build-linux-aarch64:
name: Build Linux (GCC aarch64)
runs-on: ubuntu-20.04
env:
LLVM_MAJOR: 15
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
submodules: recursive
- uses: uraimo/run-on-arch-action@v2.0.9
name: Build & test
with:
arch: aarch64
distro: ubuntu20.04
githubToken: ${{github.token}}
dockerRunArgs: |
--volume "${PWD}:/workspace"
install: |
apt-get -y update
apt-get -y install build-essential cmake ninja-build llvm-$LLVM_MAJOR-dev libclang-$LLVM_MAJOR-dev clang-$LLVM_MAJOR zlib1g-dev
run: |
cmake -B build . -GNinja \
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \
-DATDNA_DYNAMIC_LLVM:BOOL=OFF \
-DClang_DIR:PATH=/usr/lib/cmake/clang-$LLVM_MAJOR
cmake --build build --target package --verbose
build/atdna-test
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: atdna-linux-aarch64
path: |
build/athena-*.tar.gz
build-macos-universal:
name: Build macOS (AppleClang universal)
runs-on: macos-13
env:
LLVM_MAJOR: 15
LLVM_VERSION: 15.0.7_2
BUILDCACHE_DIR: ${{github.workspace}}/.buildcache
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
submodules: recursive
- name: Install dependencies
run: |
brew update
brew install ninja
# universal clang+llvm from macports
curl -LSfs https://axiodl.com/files/clang-$LLVM_MAJOR-$LLVM_VERSION.mpkg -o /tmp/clang-$LLVM_MAJOR-$LLVM_VERSION.mpkg
sudo installer -pkg /tmp/clang-$LLVM_MAJOR-$LLVM_VERSION.mpkg -target /
# setup buildcache
curl -LSfs https://github.com/mbitsnbites/buildcache/releases/download/$BUILDCACHE_VERSION/buildcache-macos.zip -o /tmp/buildcache-macos.zip
unzip /tmp/buildcache-macos.zip -d "$RUNNER_WORKSPACE"
echo "$RUNNER_WORKSPACE"/buildcache/bin >> $GITHUB_PATH
- name: Restore buildcache
uses: actions/cache@v2
with:
path: ${{env.BUILDCACHE_DIR}}
key: buildcache-macos-12
- name: Configure CMake
run: |
cmake -B build . -GNinja \
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \
-DCMAKE_OSX_ARCHITECTURES:STRING="x86_64;arm64" \
-DLLVM_ROOT_DIR:PATH=/opt/local/libexec/llvm-$LLVM_MAJOR \
-DCMAKE_C_COMPILER_LAUNCHER:STRING=buildcache \
-DCMAKE_CXX_COMPILER_LAUNCHER:STRING=buildcache
- name: Build
run: cmake --build build --target package --verbose
- name: Print buildcache stats
run: buildcache -s
- name: Test
working-directory: build
run: ./atdna-test
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: athena-macos-universal
path: |
build/athena-*.tar.gz
build-win32-amd64:
name: Build Windows (MSVC AMD64)
runs-on: windows-2022
env:
LLVM_VERSION: 15.0.7
BUILDCACHE_DIR: C:\buildcache
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
submodules: recursive
- name: Install LLVM
run: |
$TempDir = "C:\temp" # C: has more space
$Filename = "vcpkg-llvm-$env:LLVM_VERSION-full.7z"
New-Item -Path "$TempDir" -ItemType Directory -ea 0
(New-Object Net.WebClient).DownloadFile("https://axiodl.com/files/$Filename", "$TempDir\$Filename")
7z x "-o$TempDir" -aos "$TempDir\$Filename"
- name: Install dependencies
run: |
choco install ninja
# set up buildcache
$TempDir = "$env:RUNNER_WORKSPACE\temp"
New-Item -Path "$TempDir" -ItemType Directory -ea 0
(New-Object Net.WebClient).DownloadFile("https://github.com/mbitsnbites/buildcache/releases/download/$env:BUILDCACHE_VERSION/buildcache-windows.zip", "$TempDir\buildcache.zip")
Expand-Archive -LiteralPath "$TempDir\buildcache.zip" -DestinationPath "$TempDir"
echo "$TempDir\buildcache\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Restore buildcache
uses: actions/cache@v2
with:
path: ${{env.BUILDCACHE_DIR}}
key: buildcache-windows-2019-msvc-amd64
- name: Enable Visual Studio environment
uses: ilammy/msvc-dev-cmd@v1
- name: Configure CMake
run: |
cmake -B build . -GNinja `
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo `
-DCMAKE_MSVC_RUNTIME_LIBRARY:STRING=MultiThreaded `
-DCMAKE_TOOLCHAIN_FILE:PATH="C:\temp\vcpkg-llvm-$env:LLVM_VERSION\scripts\buildsystems\vcpkg.cmake" `
-DVCPKG_TARGET_TRIPLET:STRING=x64-windows-static
- name: Build
run: cmake --build build --target package --verbose
- name: Print buildcache stats
run: buildcache -s
- name: Test
working-directory: build
run: ./atdna-test.exe
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: athena-win32-amd64
path: |
build/athena-*.7z
release:
name: Release
runs-on: ubuntu-20.04
if:
contains('
refs/heads/master
refs/heads/test
', github.ref)
needs:
- build-linux-x86_64
- build-linux-aarch64
- build-macos-universal
- build-win32-amd64
steps:
- name: Download artifacts
uses: actions/download-artifact@v2
with:
path: artifacts
- name: Create release
uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: ${{github.token}}
automatic_release_tag: latest
prerelease: true
title: Development build
files: |
artifacts/*/*