github workflow cross compiling for aarch64 #409
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: cache_llvm | ||
on: | ||
push: | ||
branches: | ||
- main | ||
paths: | ||
- '.github/workflows/create_llvm.yml' | ||
pull_request: | ||
paths: | ||
- '.github/workflows/create_llvm.yml' | ||
workflow_dispatch: | ||
jobs: | ||
create_llvm_cache: | ||
strategy: | ||
matrix: | ||
# version: [17, 18] | ||
version: 18 | ||
os: [ubuntu-22.04] | ||
# build_type: [Release, RelAssert] | ||
build_type: [ReleaseAssert] | ||
# arch : [ x86_64, aarch64 ] | ||
arch : [aarch64] | ||
include: | ||
# We want to set flags related to particular matrix dimensions. To do this | ||
# we need to create default values first, and then against particular matrix | ||
# dimensions. | ||
# Note that we need to use RelAssert as the cache key matching can match Release against ReleaseAssert | ||
- os_flags: | ||
- arch_flags: | ||
- build_type_flags: | ||
- build_type: RelAssert | ||
build_type_flags: -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON | ||
- arch: aarch64 | ||
arch_flags: -DCMAKE_TOOLCHAIN_FILE="$GITHUB_WORKSPACE/ock/platform/arm-linux/aarch64-toolchain.cmake" | ||
-DLLVM_TARGET_ARCH=AArch64 | ||
-DLLVM_HOST_TRIPLE=aarch64-unknown-linux-gnu | ||
-DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-unknown-linux-gnu | ||
-DLLVM_TABLEGEN="$GITHUB_WORKSPACE/build_native/bin/llvm-tblgen" | ||
-DCLANG_TABLEGEN="$GITHUB_WORKSPACE/build_native/bin/clang-tblgen" | ||
# - build_type: Release | ||
# build_type_flags: -DCMAKE_BUILD_TYPE=Release | ||
# exclude: | ||
# # For now just do latest llvm with aarch to reduce cache usage. | ||
# - arch: aarch64 | ||
# version: 17 | ||
# - arch: aarch64 | ||
# build_type: Release | ||
runs-on: ${{ matrix.os }} | ||
steps: | ||
- name: Cache llvm | ||
id: cache | ||
uses: actions/cache@v3 | ||
with: | ||
path: | ||
llvm_install/** | ||
key: llvm-${{ matrix.os }}-${{ matrix.arch }}-v${{ matrix.version }}-${{ matrix.build_type }} | ||
- name: show arch flags | ||
if: steps.cache.outputs.cache-hit != 'true' | ||
run: | ||
echo ${{ matrix.arch_flags }} | ||
# - name: Check ock place | ||
# run: | | ||
# pwd | ||
# ls * | ||
- name: Checkout repo llvm | ||
if: steps.cache.outputs.cache-hit != 'true' | ||
uses: actions/checkout@v4 | ||
with: | ||
repository: llvm/llvm-project | ||
ref: release/${{matrix.version}}.x | ||
- name: output stuff | ||
if: ${{ steps.cache.outputs.cache-hit != 'true' && matrix.arch != 'x86_64' }} | ||
run: | | ||
echo steps.cache.outputs.cache-hit | ||
echo "${{ matrix.arch }}" | ||
- name: Checkout repo ock platform | ||
if: ${{ steps.cache.outputs.cache-hit != 'true' && matrix.arch != 'x86_64' }} | ||
uses: actions/checkout@v4 | ||
with: | ||
sparse-checkout: | | ||
platform | ||
path: ock | ||
- name: Check llvm place | ||
if: ${{ steps.cache.outputs.cache-hit != 'true' && matrix.arch != 'x86_64' }} | ||
run: | | ||
pwd | ||
ls * | ||
ls ock | ||
ls ock/platform | ||
- name: Install Ninja | ||
if: steps.cache.outputs.cache-hit != 'true' | ||
uses: llvm/actions/install-ninja@main | ||
- name: install aarch64 build tools | ||
if: ${{ steps.cache.outputs.cache-hit != 'true' && matrix.arch == 'aarch64' }} | ||
run: | ||
sudo apt-get install --yes gcc-11-aarch64-linux-gnu g++-11-aarch64-linux-gnu | ||
- name: Flags checker | ||
if: steps.cache.outputs.cache-hit != 'true' | ||
run: | ||
echo Building on "${{ matrix.os }}" with os_flags "${{ matrix.os_flags}}" aarch "${{ matrix.arch }}"extra flags "${{ matrix.build_type_flags}}" and build_type "${{matrix.build_type}}" | ||
- name: cmake native for cross | ||
if: ${{ steps.cache.outputs.cache-hit != 'true' && matrix.arch != 'x86_64' }} | ||
run: | ||
cmake llvm | ||
-DLLVM_ENABLE_DIA_SDK=OFF | ||
-DLLVM_ENABLE_ZLIB=FALSE | ||
-DLLVM_ENABLE_ZSTD=FALSE | ||
-DLLVM_ENABLE_Z3_SOLVER=FALSE | ||
-DLLVM_ENABLE_PROJECTS="clang;lld" | ||
-DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64;RISCV" | ||
-Bbuild_native | ||
-GNinja | ||
${{ matrix.build_type_flags }} | ||
${{ matrix.os_flags}} | ||
- name: build native for cross | ||
if: ${{ steps.cache.outputs.cache-hit != 'true' && matrix.arch != 'x86_64' }} | ||
run: | ||
ninja -C build_native llvm-tblgen clang-tblgen llvm-config | ||
- name: Run cmake | ||
if: steps.cache.outputs.cache-hit != 'true' | ||
run: | ||
cmake llvm | ||
-DLLVM_ENABLE_DIA_SDK=OFF | ||
-DCMAKE_INSTALL_PREFIX=llvm_install | ||
-DLLVM_ENABLE_ZLIB=FALSE | ||
-DLLVM_ENABLE_ZSTD=FALSE | ||
-DLLVM_ENABLE_Z3_SOLVER=FALSE | ||
-DLLVM_ENABLE_PROJECTS="clang;lld" | ||
-DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64;RISCV" | ||
-Bbuild | ||
-GNinja | ||
${{ matrix.build_type_flags }} | ||
${{ matrix.os_flags}} | ||
${{ matrix.arch_flags}} | ||
- name: Run build on llvm | ||
if: steps.cache.outputs.cache-hit != 'true' | ||
run: | ||
cmake --build build --target install | ||
- name: Copy lit tools | ||
if: steps.cache.outputs.cache-hit != 'true' | ||
run: | | ||
cp build/bin/FileCheck* llvm_install/bin | ||
cp build/bin/not* llvm_install/bin |