Ghidra 11.2 (#296) #1071
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: Build | |
on: | |
push: | |
branches: | |
- "*" | |
# Version tags should start with "v" | |
tags: | |
- "v*" | |
pull_request: | |
branches: | |
- "*" | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-13, windows-latest] | |
build_type: [RelWithDebInfo, Debug] | |
release: [stable, HEAD] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Git User for Applying Patches | |
# See this thread for more details https://github.community/t/github-actions-bot-email-address/17204/5 | |
run: | | |
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
git config --global user.name "github-actions[bot]" | |
- name: Install Linux system dependencies | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y rpm ccache doxygen graphviz xdot | |
- name: Install macOS system dependencies | |
if: runner.os == 'macOS' | |
run: | | |
echo "MACOSX_DEPLOYMENT_TARGET=10.15" >> ${GITHUB_ENV} | |
# Install Python separately to workround recurring homebrew CI issue. | |
# See https://github.com/actions/runner-images/issues/9471 for more details. | |
brew install python@3 || true | |
brew link --overwrite python@3 | |
brew install \ | |
ccache \ | |
cmake \ | |
doxygen \ | |
graphviz | |
- name: Install Windows system dependencies | |
if: runner.os == 'Windows' | |
uses: nick-fields/retry@v3 | |
with: | |
timeout_minutes: 10 | |
max_attempts: 3 | |
command: | | |
choco install ccache doxygen.install graphviz | |
vcpkg install zlib:x64-windows-static | |
- name: Generate cache key | |
shell: cmake -P {0} | |
run: | | |
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) | |
file(APPEND "$ENV{GITHUB_ENV}" "CACHE_KEY=build_${{ matrix.os }}_type-${{ matrix.build_type }}-${{ matrix.release }}\n") | |
file(APPEND "$ENV{GITHUB_ENV}" "CACHE_TIMESTAMP=${current_date}\n") | |
- name: Update the cache (ccache) | |
uses: actions/cache@v4 | |
with: | |
path: "${{ github.workspace }}/ccache" | |
key: ${{ env.CACHE_KEY }}_ccache_${{ env.CACHE_TIMESTAMP }} | |
restore-keys: | | |
${{ env.CACHE_KEY }}_ccache_ | |
- name: Setup ccache | |
working-directory: "${{ github.workspace }}" | |
shell: cmake -P {0} | |
run: | | |
file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ccache") | |
file(APPEND "$ENV{GITHUB_ENV}" "CCACHE_BASEDIR=${CMAKE_CURRENT_SOURCE_DIR}\n") | |
file(APPEND "$ENV{GITHUB_ENV}" "CCACHE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/ccache\n") | |
file(APPEND "$ENV{GITHUB_ENV}" "CCACHE_COMPRESS=true\n") | |
# Trial and error to get all files in here | |
file(APPEND "$ENV{GITHUB_ENV}" "CCACHE_COMPRESSLEVEL=10\n") | |
# This should be multiplied by the number of compilation jobs and be no | |
# larger than 5G, which is the cache max size | |
file(APPEND "$ENV{GITHUB_ENV}" "CCACHE_MAXSIZE=400M\n") | |
# Tell CMake to use ccache | |
file(APPEND "$ENV{GITHUB_ENV}" "CMAKE_CXX_COMPILER_LAUNCHER=ccache\n") | |
file(APPEND "$ENV{GITHUB_ENV}" "CMAKE_C_COMPILER_LAUNCHER=ccache\n") | |
# Clear stats before every build | |
execute_process(COMMAND ccache -z) | |
- name: CMake version | |
run: cmake --version | |
- name: Configure the project | |
shell: pwsh | |
run: cmake "--preset=ci-$("${{ matrix.os }}".split("-")[0])" | |
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | |
-Dsleigh_RELEASE_TYPE=${{ matrix.release }} | |
- name: Build the project | |
run: cmake | |
--build build | |
--config ${{ matrix.build_type }} | |
-j 2 | |
-v | |
- name: Test the project | |
working-directory: build | |
run: ctest -VV -C ${{ matrix.build_type }} | |
- name: Build the docs | |
run: cmake | |
--build build | |
--config ${{ matrix.build_type }} | |
--target docs | |
-v | |
- name: Run the example | |
run: cmake | |
--build build | |
-j 2 | |
--config ${{ matrix.build_type }} | |
--target sleigh_example_runner | |
- name: Run the install target | |
run: cmake --install build | |
--config ${{ matrix.build_type }} | |
--prefix install | |
- name: Smoketest sleigh lift | |
run: | | |
./install/bin/sleigh-lift --version | |
./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000 | |
./install/bin/sleigh-lift pcode x86-64.sla 4881ecc00f0000 | |
- name: Test install directory Unix | |
if: runner.os != 'Windows' | |
working-directory: tests/find_package | |
run: | | |
cmake -B build -S . "-Dsleigh_DIR=${{ github.workspace }}/install/lib/cmake/sleigh" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | |
cmake --build build -j 2 --config ${{ matrix.build_type }} | |
cd build | |
ctest -V -C ${{ matrix.build_type }} | |
- name: Test install directory Windows | |
if: runner.os == 'Windows' | |
working-directory: tests/find_package | |
run: | | |
cmake -B build -S . "-Dsleigh_DIR=${{ github.workspace }}/install/lib/cmake/sleigh" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} "-DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=x64-windows-static | |
cmake --build build -j 2 --config ${{ matrix.build_type }} | |
cd build | |
ctest -V -C ${{ matrix.build_type }} | |
- name: Test tool install directory Unix | |
if: runner.os != 'Windows' | |
working-directory: extra-tools/sleigh-lift | |
run: | | |
cmake -B build -S . "-Dsleigh_DIR=${{ github.workspace }}/install/lib/cmake/sleigh" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | |
cmake --build build -j 2 --config ${{ matrix.build_type }} | |
cmake --install build --config ${{ matrix.build_type }} --prefix install | |
./install/bin/sleigh-lift --version | |
./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000 | |
./install/bin/sleigh-lift pcode x86-64.sla 4881ecc00f0000 | |
- name: Test tool install directory Windows | |
if: runner.os == 'Windows' | |
working-directory: extra-tools/sleigh-lift | |
run: | | |
cmake -B build -S . "-Dsleigh_DIR=${{ github.workspace }}/install/lib/cmake/sleigh" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} "-DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=x64-windows-static | |
cmake --build build -j 2 --config ${{ matrix.build_type }} | |
cmake --install build --config ${{ matrix.build_type }} --prefix install | |
./install/bin/sleigh-lift --version | |
./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000 | |
./install/bin/sleigh-lift pcode x86-64.sla 4881ecc00f0000 | |
- name: Create the packages | |
run: cmake | |
--build build | |
-j 2 | |
--config ${{ matrix.build_type }} | |
--target package | |
- name: Test the DEB package | |
if: runner.os == 'Linux' | |
run: | | |
sudo dpkg -i build/*.deb | |
cmake -S tests/find_package -B find_package_build -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | |
cmake --build find_package_build -j 2 --config ${{ matrix.build_type }} --verbose | |
- name: Locate the packages (RelWithDebInfo only) | |
if: matrix.build_type == 'RelWithDebInfo' | |
shell: bash | |
run: | | |
echo "DEB_PACKAGE_PATH=$(ls build/*.deb)" >> $GITHUB_ENV | |
echo "DEB_PACKAGE_NAME=$(cd build && ls *.deb)" >> $GITHUB_ENV | |
echo "RPM_PACKAGE_PATH=$(ls build/*.rpm)" >> $GITHUB_ENV | |
echo "RPM_PACKAGE_NAME=$(cd build && ls *.rpm)" >> $GITHUB_ENV | |
# Rename .tar.gz files for OS | |
pushd build | |
for f in *.tar.gz; do mv "$f" "${{ runner.os }}-$f"; done | |
popd | |
echo "TGZ_PACKAGE_PATH=$(ls build/*.tar.gz)" >> $GITHUB_ENV | |
echo "TGZ_PACKAGE_NAME=$(cd build && ls *.tar.gz)" >> $GITHUB_ENV | |
# DEB Package | |
- name: Upload the DEB package artifact (RelWithDebInfo only) | |
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.DEB_PACKAGE_NAME }} | |
path: ${{ env.DEB_PACKAGE_PATH }} | |
- name: Release DEB package artifact (RelWithDebInfo only) | |
uses: softprops/action-gh-release@v2.0.8 | |
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable' | |
with: | |
files: ${{ env.DEB_PACKAGE_PATH }} | |
# RPM Package | |
- name: Upload the RPM package artifact (RelWithDebInfo only) | |
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.RPM_PACKAGE_NAME }} | |
path: ${{ env.RPM_PACKAGE_PATH }} | |
- name: Release RPM package artifact (RelWithDebInfo only) | |
uses: softprops/action-gh-release@v2.0.8 | |
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable' | |
with: | |
files: ${{ env.RPM_PACKAGE_PATH }} | |
# TGZ Package | |
- name: Upload the TGZ package artifact (RelWithDebInfo only) | |
if: matrix.build_type == 'RelWithDebInfo' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.TGZ_PACKAGE_NAME }} | |
path: ${{ env.TGZ_PACKAGE_PATH }} | |
- name: Release TGZ package artifact (RelWithDebInfo only) | |
uses: softprops/action-gh-release@v2.0.8 | |
if: matrix.build_type == 'RelWithDebInfo' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable' | |
with: | |
files: ${{ env.TGZ_PACKAGE_PATH }} | |
- name: ccache stats | |
run: ccache -s |