Skip to content

Commit

Permalink
ci: Update GitHub actions to also build on MacOS
Browse files Browse the repository at this point in the history
  • Loading branch information
DarkaMaul committed Apr 4, 2024
1 parent 2a3027d commit 3deee28
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 18 deletions.
56 changes: 43 additions & 13 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
build:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
os: [ubuntu-latest, windows-latest, macos-latest]
ida_sdk: [74, 77, 80, 81, 82, 83]
include:
- ida_sdk: 74
Expand All @@ -28,18 +28,24 @@ jobs:
ext: so
- os: windows-latest
ext: dll
- os: macos-latest
ext: dylib
exclude:
# We exclude these because ARM libraries were not available in 7.4 and the latest macos runner on GitHub are Mx machines
- os: macos-latest
ida_sdk: 74

runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4.1.1

- name: Setup cmake
uses: jwlawson/actions-setup-cmake@v1.12
uses: jwlawson/actions-setup-cmake@959f1116cf9f1ae42fff8ec1a4aaae6d4a0e348b #v2.0.1

- name: Install Ninja (Linux only)
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: seanmiddleditch/gha-setup-ninja@master
- name: Install Ninja (Linux / MacOS)
if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' }}
uses: seanmiddleditch/gha-setup-ninja@v4

- name: Prepare build environment (Linux)
if: ${{ matrix.os == 'ubuntu-latest' }}
Expand All @@ -52,6 +58,24 @@ jobs:
[ -f third_party/$IDA_SDK_VERSION/include/regex.h ] && mv third_party/$IDA_SDK_VERSION/include/regex.h third_party/$IDA_SDK_VERSION/include/regex.bak
cmake -B $CMAKE_BUILD_DIR -S $GITHUB_WORKSPACE -G Ninja -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DIdaSdk_ROOT_DIR=${GITHUB_WORKSPACE}/third_party/$IDA_SDK_VERSION
# We need to differentiate MacOS build from Linux because we want to use a specific compiler on MacOS
- name: Prepare build environment (MacOS)
if: ${{ matrix.os == 'macos-latest' }}
env:
IDA_SDK_VERSION: idasdk${{ matrix.ida_sdk }}
IDA_SDK_PASSWORD: ${{ secrets[matrix.sdk_password] }}
CMAKE_BUILD_DIR: build${{ matrix.ida_sdk }}
run: |
[ ! -d third_party/$IDA_SDK_VERSION ] && unzip -d third_party -P $IDA_SDK_PASSWORD third_party/$IDA_SDK_VERSION.zip
[ -f third_party/$IDA_SDK_VERSION/include/regex.h ] && mv third_party/$IDA_SDK_VERSION/include/regex.h third_party/$IDA_SDK_VERSION/include/regex.bak
cmake -B $CMAKE_BUILD_DIR \
-S $GITHUB_WORKSPACE \
-G Ninja \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DIdaSdk_ROOT_DIR=${GITHUB_WORKSPACE}/third_party/$IDA_SDK_VERSION \
-DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang \
-DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++
- name: Prepare build environment (Windows)
if: ${{ matrix.os == 'windows-latest' }}
env:
Expand Down Expand Up @@ -80,19 +104,18 @@ jobs:
# We need one action per file
# See https://github.com/actions/upload-artifact/issues/331
- name: Upload Artifacts (64)
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v4.3.1
with:
name: idaplugin-${{ matrix.os }}-${{ matrix.ida_sdk }}
path: ${{ matrix.ida_sdk }}-quokka_plugin0064.${{ matrix.ext }}
if-no-files-found: error

- name: Upload Artifacts (32)
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v4.3.1
with:
name: idaplugin-${{ matrix.os }}-${{ matrix.ida_sdk }}-32
path: ${{ matrix.ida_sdk }}-quokka_plugin0032.${{ matrix.ext }}
if-no-files-found: error


upload:
name: Upload artifacts for Release
Expand All @@ -102,21 +125,28 @@ jobs:

strategy:
matrix:
os: [ubuntu-latest, windows-latest]
os: [ubuntu-latest, windows-latest, macos-latest]
ida_sdk: [74, 77, 80, 81, 82, 83]
bitness: ['', '-32']
include:
- os: windows-latest
ext: dll
- os: ubuntu-latest
ext: so
- os: macos-latest
ext: dylib
exclude:
- os: macos-latest
ida_sdk: 74

steps:
- name: Download Artefact
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4.1.4
with:
name: idaplugin-${{ matrix.os }}-${{ matrix.ida_sdk }}
name: idaplugin-${{ matrix.os }}-${{ matrix.ida_sdk }}${{ matrix.bitness }}

- name: Release
uses: softprops/action-gh-release@v0.1.14
uses: softprops/action-gh-release@9d7c94cfd0a1f3ed45544c887983e9fa900f0564 #v2.0.4
with:
files: ${{ matrix.ida_sdk }}-quokka_*
fail_on_unmatched_files: true
15 changes: 10 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ project(quokka
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

include(FetchContent)
include(CMakePrintHelpers)
include(CheckLinkerFlag)
include(GoogleTest)

if (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
Expand Down Expand Up @@ -49,12 +49,17 @@ if (UNIX)
-gfull
-Wno-nullability-completeness
)

# Originates from google/binexport
# https://github.com/google/binexport/blob/85c89a4ab96febcccc4cdc01ca5fc6c005e9a2cf/cmake/CompileOptions.cmake#L71-L74
check_linker_flag(CXX "LINKER:-ld_classic" _ld_classic_supported)
if(_ld_classic_supported)
add_link_options(LINKER:-ld_classic)
endif()

add_link_options(
-dead_strip
# Work around assertion failure with LTO symbols
# https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#Linking
LINKER:-ld_classic
)
)
else()
endif()
elseif(WIN32)
Expand Down

0 comments on commit 3deee28

Please sign in to comment.