Drop llvm-15 + ubuntu 20.04 #1065
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: MacOS Continuous Integration | |
env: | |
# "Source" is set in the setup-dotnet action | |
VCPKG_BINARY_SOURCES: 'clear;nuget,Source,readwrite;nugettimeout,3601' | |
VCPKG_DEFAULT_HOST_TRIPLET: 'x64-osx-rel' | |
on: | |
release: | |
types: | |
- published | |
pull_request: | |
paths-ignore: | |
- 'docker/**' | |
- '.github/**' | |
- '**.md' | |
- '!.github/workflows/vcpkg_ci_mac.yml' | |
push: | |
paths-ignore: | |
- 'docker/**' | |
- '.github/**' | |
- '**.md' | |
- '!.github/workflows/vcpkg_ci_mac.yml' | |
tags-ignore: | |
- 'v*' | |
branches: | |
- 'master' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- { runner: 'macos-12', xcode: '14.2' } | |
llvm: [ 'llvm-16[pasta]', 'llvm-16' ] | |
target_arch: [ 'x64', 'arm64' ] | |
runs-on: ${{ matrix.os.runner }} | |
steps: | |
- name: Set Artifact Name | |
run: | | |
# Need to fix because paths with brackets cause issues | |
NAME="$(echo 'vcpkg_${{ matrix.os.runner }}_${{ matrix.llvm }}_xcode-${{ matrix.os.xcode }}_${{ matrix.target_arch == 'x64' && 'amd64' || matrix.target_arch }}' | tr '[' '-' | tr -d ']')" | |
echo "ARTIFACT_NAME=${NAME}" >> "$GITHUB_ENV" | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
fetch-depth: 2 | |
# Used to get commit message since PRs are on a merge commit | |
- name: Get commit message | |
run: | | |
echo 'COMMIT_MESSAGE<<EOF' >> "$GITHUB_ENV" | |
if [[ '${{ github.event_name }}' == 'push' ]]; then | |
echo "$(git log --format=%B -n 1 HEAD)" >> "$GITHUB_ENV" | |
elif [[ '${{ github.event_name }}' == 'pull_request' ]]; then | |
echo "$(git log --format=%B -n 1 HEAD^2)" >> "$GITHUB_ENV" | |
fi | |
echo "EOF" >> "$GITHUB_ENV" | |
- uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: '3.1.x' # SDK Version to use. | |
# Sets as "Source" | |
source-url: https://nuget.pkg.github.com/lifting-bits/index.json | |
env: | |
NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Select the XCode version | |
run: | | |
echo "Selecting XCode Version ${{ matrix.os.xcode }}" | |
sudo xcode-select -s /Applications/Xcode_${{ matrix.os.xcode }}.app/Contents/Developer | |
# Crosscompiling LLVM 16 requires a newer clang than available in XCode 14.2 | |
- name: Install latest LLVM | |
if: contains(matrix.llvm, 'llvm-16') && matrix.target_arch == 'arm64' | |
run: | | |
brew install llvm | |
echo "/usr/local/opt/llvm/bin" >> "$GITHUB_PATH" | |
echo "CC=/usr/local/opt/llvm/bin/clang" >> "$GITHUB_ENV" | |
echo "CXX=/usr/local/opt/llvm/bin/clang++" >> "$GITHUB_ENV" | |
- name: Initialize vcpkg | |
shell: bash | |
run: | | |
{ read -r vcpkg_repo_url && read -r vcpkg_commit; } <./vcpkg_info.txt || exit 1 | |
git clone "${vcpkg_repo_url}" | |
git -C vcpkg checkout "${vcpkg_commit}" | |
./vcpkg/bootstrap-vcpkg.sh | |
echo "VCPKG_ROOT=$(pwd)/vcpkg" >> $GITHUB_ENV | |
- name: 'vcpkg install dependencies' | |
shell: 'bash' | |
run: | | |
export VCPKG_DISABLE_METRICS=1 | |
brew install bash ninja | |
# Setup NuGet authentication | |
mono "$(${VCPKG_ROOT}/vcpkg fetch nuget | tail -n 1)" setapikey \ | |
-source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ | |
"${{ secrets.GITHUB_TOKEN }}" | |
./build_dependencies.sh --release --target-arch ${{ matrix.target_arch }} --export-dir ./${{ env.ARTIFACT_NAME }} ${{ matrix.llvm }} --clean-after-build --debug | |
echo "VCPKG_ROOT=$(pwd)/${{ env.ARTIFACT_NAME }}" >> $GITHUB_ENV | |
echo "TARGET_TRIPLET=${{ matrix.target_arch }}-osx-rel" >> $GITHUB_ENV | |
- name: Upload CMake logs on error | |
if: failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.ARTIFACT_NAME }}_logs | |
path: ${{ github.workspace }}/vcpkg/buildtrees/**/*.log | |
- name: 'Adhoc codesign' | |
shell: 'bash' | |
run: | | |
find ./${{ env.ARTIFACT_NAME }} \( -path '**/bin/*' -or -path '**/libexec/*' -or -path '**/tools/*' \) -type f -perm +111 -exec codesign --force -s - \{\} \; | |
- name: 'Export Packages' | |
if: contains(env.COMMIT_MESSAGE, 'debug artifacts') || github.event.release | |
shell: 'bash' | |
run: | | |
brew install pixz | |
tar --use-compress-program pixz -cf "${{ env.ARTIFACT_NAME }}.tar.xz" ./${{ env.ARTIFACT_NAME }} | |
- name: Publish Release Assets | |
if: github.event.release | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: ${{ env.ARTIFACT_NAME }}.tar.xz | |
prerelease: ${{ contains(github.ref, 'pre') || contains(github.ref, 'rc') }} | |
token: ${{ secrets.RELEASE_TOKEN }} | |
- uses: actions/upload-artifact@v3 | |
if: contains(env.COMMIT_MESSAGE, 'debug artifacts') || github.event.release | |
with: | |
name: ${{ env.ARTIFACT_NAME }}.tar.xz | |
path: ${{ env.ARTIFACT_NAME }}.tar.xz | |
- name: 'Install build dependencies' | |
shell: 'bash' | |
run: | | |
brew install ninja ccache | |
- name: Prepare ccache | |
id: ccache_prep | |
shell: bash | |
run: | | |
echo "CCACHE_COMPRESS=true" >> $GITHUB_ENV | |
echo "CCACHE_COMPILERCHECK=content" >> $GITHUB_ENV | |
echo "CCACHE_DIR=${{ github.workspace }}/.ccache" >> $GITHUB_ENV | |
echo "CMAKE_C_COMPILER_LAUNCHER=$(which ccache)" >> $GITHUB_ENV | |
echo "CMAKE_CXX_COMPILER_LAUNCHER=$(which ccache)" >> $GITHUB_ENV | |
echo "timestamp=$(python -c 'from datetime import datetime; print(datetime.utcnow().strftime("%Y-%m-%d-%H:%M:%S"))')" >> ${GITHUB_OUTPUT} | |
- name: ccache cache files | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/.ccache | |
key: ccache-${{ matrix.os.runner }}-${{ matrix.os.xcode }}-${{ matrix.llvm }}-${{ matrix.target_arch }}-${{ steps.ccache_prep.outputs.timestamp }} | |
restore-keys: | | |
ccache-${{ matrix.os.runner }}-${{ matrix.os.xcode }}-${{ matrix.llvm }}-$${{ matrix.target_arch }} | |
- name: ccache Initial stats | |
shell: bash | |
run: | | |
ccache --show-stats | |
- name: 'Rellic build' | |
shell: 'bash' | |
working-directory: rellic | |
if: matrix.target_arch == 'x64' | |
run: | | |
cmake -G Ninja \ | |
-DCMAKE_VERBOSE_MAKEFILE=ON \ | |
"-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" \ | |
-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET} \ | |
-DVCPKG_HOST_TRIPLET=${TARGET_TRIPLET} \ | |
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.target_arch == 'x64' && 'x86_64' || matrix.target_arch }} \ | |
"-DCMAKE_INSTALL_PREFIX=$(pwd)/install" \ | |
-S . -B build | |
cmake --build build | |
cmake --install build | |
- name: 'Rellic test' | |
shell: 'bash' | |
working-directory: rellic/build | |
if: matrix.target_arch == 'x64' | |
run: | | |
# Test only should run when we're not cross compiling | |
../scripts/roundtrip.py ./tools/rellic-decomp ../tests/tools/decomp "${VCPKG_ROOT}/installed/${TARGET_TRIPLET}/bin/clang" | |
- name: 'Remill dependencies' | |
shell: 'bash' | |
working-directory: remill | |
if: matrix.target_arch == 'x64' | |
run: | | |
python3 -m pip install poetry | |
python3 -m pip install --user ./scripts/diff_tester_export_insns | |
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
git config --global user.name "github-actions[bot]" | |
- name: 'Remill build' | |
shell: 'bash' | |
working-directory: remill | |
if: matrix.target_arch == 'x64' | |
run: | | |
cmake -G Ninja \ | |
-DCMAKE_VERBOSE_MAKEFILE=ON \ | |
"-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" \ | |
-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET} \ | |
-DVCPKG_HOST_TRIPLET=${TARGET_TRIPLET} \ | |
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.target_arch == 'x64' && 'x86_64' || matrix.target_arch }} \ | |
"-DCMAKE_INSTALL_PREFIX=$(pwd)/install" \ | |
-S . -B build | |
cmake --build build | |
cmake --install build | |
cmake --build build --target test_dependencies | |
- name: 'Remill test' | |
shell: 'bash' | |
working-directory: remill/build | |
if: matrix.target_arch == 'x64' | |
run: | | |
# Only run test on x64 | |
env CTEST_OUTPUT_ON_FAILURE=1 ctest . | |
- name: 'Anvill build' | |
shell: 'bash' | |
working-directory: anvill | |
if: contains(matrix.llvm, 'llvm-15') && matrix.target_arch == 'x64' | |
run: | | |
cmake -G Ninja \ | |
-DCMAKE_VERBOSE_MAKEFILE=ON \ | |
"-DCMAKE_INSTALL_PREFIX=$(pwd)/install" \ | |
"-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" \ | |
-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET} \ | |
-DVCPKG_HOST_TRIPLET=${TARGET_TRIPLET} \ | |
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.target_arch == 'x64' && 'x86_64' || matrix.target_arch }} \ | |
-DANVILL_ENABLE_TESTS=true \ | |
-DANVILL_ENABLE_INSTALL=true \ | |
-DANVILL_ENABLE_PYTHON3_LIBS=OFF \ | |
"-Dremill_DIR=$(pwd)/../remill/install/lib/cmake/remill" \ | |
"-Dsleigh_DIR=$(pwd)/../remill/install/lib/cmake/sleigh" \ | |
-S . -B build | |
cmake --build build | |
cmake --install build | |
# NOTE: This is an old test that doesn't make sense anymore | |
# Need to find some other way to run a smoketest | |
#- name: 'Anvill test' | |
# shell: 'bash' | |
# working-directory: anvill | |
# # if: contains(matrix.llvm, 'llvm-15') && matrix.target_arch == 'x64' | |
# if: matrix.target_arch == 'x64' | |
# run: | | |
# ./install/bin/anvill-decompile-spec -spec ../bin/Decompile/tests/specs/ret0.json -bc_out ./ret0.bc -ir_out ret0.ir | |
- name: Cache cleanup and reporting | |
shell: 'bash' | |
run: | | |
rm -rf vcpkg/{buildtrees,installed,packages} | |
ccache --show-stats |