improve aarch64 feature gate in rust bindings #1228
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 UC2 | |
on: | |
workflow_dispatch: | |
inputs: | |
buildType: | |
description: 'Build Type' | |
required: false | |
default: '' | |
type: choice | |
options: | |
- 'Debug' | |
- 'Release' | |
push: | |
paths-ignore: | |
- ".gitignore" | |
- "AUTHORS.TXT" | |
- "COPYING" | |
- "COPYING.LGPL2" | |
- "COPYING_GLIB" | |
- "CREDITS.TXT" | |
- "ChangeLog" | |
- "README.md" | |
- "docs/**" | |
pull_request: | |
env: | |
# Specify build type either according to the tag release or manual override | |
BUILD_TYPE: ${{ inputs.buildType != '' && inputs.buildType || startsWith(github.ref, 'refs/tags') && 'Release' || 'Debug' }} | |
jobs: | |
Windows: | |
runs-on: ${{ matrix.config.os }} | |
name: ${{ matrix.config.name }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
os: windows-2019, | |
arch: x64, | |
python-arch: x64, | |
python-ver: '3.8', | |
name: 'windows-x64 MINGW64 shared', | |
shared: 'yes', | |
mingw: MINGW64, | |
mingw-arch: x86_64, | |
artifact: 'windows_mingw64-shared.7z', | |
archiver: '7z a', | |
generators: 'Ninja' | |
} | |
- { | |
os: windows-2019, | |
arch: x64, | |
python-arch: x64, | |
python-ver: '3.8', | |
name: 'windows-x64 MINGW64 static', | |
shared: 'no', | |
mingw: MINGW64, | |
mingw-arch: x86_64, | |
artifact: 'windows_mingw64-static.7z', | |
archiver: '7z a', | |
generators: 'Ninja' | |
} | |
# - { # This fails randomly which can't be reproduced. | |
# os: windows-2019, | |
# arch: x64, | |
# python-arch: x64, | |
# python-ver: '3.8', | |
# name: 'windows-x64 MINGW32 shared', | |
# shared: "yes", | |
# mingw: MINGW32, | |
# mingw-arch: i686, | |
# artifact: 'windows_mingw32.7z', | |
# archiver: '7z a', | |
# generators: 'Ninja' | |
# } | |
# - { # This fails randomly which can't be reproduced. | |
# os: windows-2019, | |
# arch: x64, | |
# python-arch: x64, | |
# python-ver: '3.8', | |
# name: 'windows-x64 MINGW32 static', | |
# shared: "no", | |
# mingw: MINGW32, | |
# mingw-arch: i686, | |
# artifact: 'windows_mingw32.7z', | |
# archiver: '7z a', | |
# generators: 'Ninja' | |
# } | |
- { | |
os: windows-2019, | |
arch: x64, | |
python-arch: x64, | |
python-ver: '3.8', | |
name: 'windows-x64 MSVC 64bit shared', | |
msvc-arch: x64, | |
artifact: 'windows_msvc64_shared.7z', | |
shared: 'yes', | |
archiver: '7z a', | |
generators: 'Visual Studio 16 2019' | |
} | |
- { | |
os: windows-2019, | |
arch: x86, | |
python-arch: x86, | |
python-ver: '3.8', | |
name: 'windows-x86 MSVC 32bit shared', | |
msvc-arch: x86, | |
artifact: 'windows_msvc32_shared.7z', | |
shared: 'yes', | |
archiver: '7z a', | |
generators: 'Visual Studio 16 2019' | |
} | |
- { | |
os: windows-2019, | |
arch: x64, | |
python-arch: x64, | |
python-ver: '3.8', | |
name: 'windows-x64 MSVC 64bit static', | |
msvc-arch: x64, | |
artifact: 'windows_msvc64_static.7z', | |
shared: 'no', | |
archiver: '7z a', | |
generators: 'Visual Studio 16 2019' | |
} | |
- { | |
os: windows-2019, | |
arch: x86, | |
python-arch: x86, | |
python-ver: '3.8', | |
name: 'windows-x86 MSVC 32bit static', | |
msvc-arch: x86, | |
artifact: 'windows_msvc32_static.7z', | |
shared: 'no', | |
archiver: '7z a', | |
generators: 'Visual Studio 16 2019' | |
} | |
compiler: [ gcc ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: '🛠️ Win MINGW setup' | |
if: contains(matrix.config.mingw, 'MINGW') | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: ${{ matrix.config.mingw }} | |
install: >- | |
git | |
mingw-w64-${{ matrix.config.mingw-arch }}-cmake | |
mingw-w64-${{ matrix.config.mingw-arch }}-ninja | |
mingw-w64-${{ matrix.config.mingw-arch }}-cmocka | |
mingw-w64-${{ matrix.config.mingw-arch }}-${{ matrix.compiler }} | |
mingw-w64-${{ matrix.config.mingw-arch }}-toolchain | |
- name: '🛠️ Win MSVC 64 setup' | |
if: contains(matrix.config.name, 'MSVC 64') | |
uses: microsoft/setup-msbuild@v2 | |
- name: '🛠️ Win MSVC 64 dev cmd setup' | |
if: contains(matrix.config.name, 'MSVC 64') | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: x64 | |
- name: '🚧 Win MSVC 64 build' | |
if: contains(matrix.config.name, 'MSVC 64') | |
shell: bash | |
run: | | |
choco install ninja | |
ninja --version | |
cmake --version | |
mkdir build | |
cmake \ | |
-S . \ | |
-B . \ | |
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
-G "${{ matrix.config.generators }}" \ | |
-DCMAKE_INSTALL_PREFIX:PATH=instdir \ | |
-DBUILD_SHARED_LIBS=${{ matrix.config.shared }} | |
cmake --build . --config ${{ env.BUILD_TYPE }} | |
cmake --install . --strip --config ${{ env.BUILD_TYPE }} | |
ctest -VV -C ${{ env.BUILD_TYPE }} | |
mv Debug instdir | |
- name: '🛠️ Win MSVC 32 setup' | |
if: contains(matrix.config.name, 'MSVC 32') | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: x86 | |
- name: '🚧 Win MSVC 32 build' | |
if: contains(matrix.config.name, 'MSVC 32') | |
shell: bash | |
run: | | |
choco install ninja | |
ninja --version | |
cmake --version | |
mkdir build | |
cmake \ | |
-S . \ | |
-B . \ | |
-A "win32" \ | |
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
-G "${{ matrix.config.generators }}" \ | |
-DCMAKE_INSTALL_PREFIX:PATH=instdir \ | |
-DBUILD_SHARED_LIBS=${{ matrix.config.shared }} | |
cmake --build . --config ${{ env.BUILD_TYPE }} | |
cmake --install . --strip --config ${{ env.BUILD_TYPE }} | |
ctest -VV -C ${{ env.BUILD_TYPE }} | |
mv Debug instdir | |
- name: '🚧 Win MINGW build' | |
if: contains(matrix.config.mingw, 'MINGW') | |
shell: msys2 {0} | |
run: | | |
if [ ${{ matrix.config.mingw }} == 'MINGW32' ]; then | |
export CPPFLAGS=-D__USE_MINGW_ANSI_STDIO=1 | |
#export CC=i686-w64-mingw32-gcc | |
export AR=gcc-ar | |
export RANLIB=gcc-ranlib | |
export CFLAGS="-m32 -static" | |
export LDFLAGS="-m32" | |
export LDFLAGS_STATIC="-m32" | |
export UNICORN_QEMU_FLAGS="--cpu=i386" | |
fi | |
mkdir build | |
mkdir instdir | |
cmake \ | |
-S . \ | |
-B . \ | |
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
-G "${{ matrix.config.generators }}" \ | |
-DCMAKE_INSTALL_PREFIX:PATH=instdir \ | |
-DCMAKE_C_FLAGS:STRING="-static" \ | |
-DBUILD_SHARED_LIBS=${{ matrix.config.shared }} | |
cmake --build . --config ${{ env.BUILD_TYPE }} | |
cmake --install . --strip | |
ctest -VV -C ${{ env.BUILD_TYPE }} | |
- name: '📦 Pack artifact' | |
if: always() | |
shell: bash | |
working-directory: instdir | |
run: | | |
ls -laR | |
${{ matrix.config.archiver }} ../${{ matrix.config.artifact }} . ../test* | |
- name: '📤 Upload artifact' | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
path: ./${{ matrix.config.artifact }} | |
name: ${{ matrix.config.artifact }} | |
Macos: | |
runs-on: ${{ matrix.config.os }} | |
name: ${{ matrix.config.name }} - ${{ matrix.compiler }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
os: macos-13, # x64 | |
arch: x64, | |
python-arch: x64, | |
python-ver: '3.8', | |
name: 'macos-x64 cmake shared', | |
shared: 'yes', | |
artifact: 'macos-x64-cmake-shared-x64.7z', | |
archiver: '7za a', | |
generators: 'Ninja' | |
} | |
- { | |
os: macos-13, | |
arch: x64, | |
python-arch: x64, | |
python-ver: '3.8', | |
name: 'macos-x64 cmake static', | |
shared: 'no', | |
artifact: 'macos-x64-cmake-static-x64.7z', | |
archiver: '7za a', | |
generators: 'Ninja' | |
} | |
- { | |
os: macos-14, # arm64 | |
arch: arm64, | |
python-arch: arm64, | |
python-ver: '3.8', | |
name: 'macos-arm64 cmake shared', | |
shared: 'yes', | |
artifact: 'macos-arm64-cmake-shared-x64.7z', | |
archiver: '7za a', | |
generators: 'Ninja' | |
} | |
- { | |
os: macos-14, | |
arch: arm64, | |
python-arch: arm64, | |
python-ver: '3.8', | |
name: 'macos-arm64 cmake static', | |
shared: 'no', | |
artifact: 'macos-arm64-cmake-static-x64.7z', | |
archiver: '7za a', | |
generators: 'Ninja' | |
} | |
- { | |
os: macos-13, | |
arch: x86_64, | |
python-arch: x86_64, | |
python-ver: '3.8', | |
name: 'android cmake', | |
artifact: 'Android-x86_64.7z', | |
archiver: '7za a', | |
generators: 'Ninja' | |
} | |
compiler: [ gcc ] | |
steps: | |
- uses: actions/checkout@v4 | |
# - name: '🛠️ Python setup' | |
# uses: actions/setup-python@v5 | |
# with: | |
# python-version: ${{ matrix.config.python-ver }} | |
- name: '🚧 Mac build' | |
if: contains(matrix.config.name, 'macos') | |
shell: bash | |
run: | | |
brew install ninja | |
ninja --version | |
cmake --version | |
mkdir build | |
mkdir instdir | |
cmake \ | |
-S . \ | |
-B . \ | |
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
-G "${{ matrix.config.generators }}" \ | |
-DCMAKE_INSTALL_PREFIX:PATH=instdir \ | |
-DBUILD_SHARED_LIBS=${{ matrix.config.shared }} | |
cmake --build . --config ${{ env.BUILD_TYPE }} | |
cmake --install . --strip | |
ctest -VV -C ${{ env.BUILD_TYPE }} | |
# - name: Setup tmate session | |
# if: ${{ failure() }} | |
# uses: mxschmitt/action-tmate@v3 | |
- name: '🚧 Android x86_64 build' | |
if: contains(matrix.config.name, 'android') | |
shell: bash | |
run: | | |
brew install ninja | |
mkdir build | |
mkdir instdir | |
cmake . -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake" \ | |
-DANDROID_PLATFORM=android-28 \ | |
-DANDROID_NDK="$ANDROID_NDK" \ | |
-DANDROID_ABI=${{ matrix.config.arch }} \ | |
-DOLP_SDK_ENABLE_TESTING=NO \ | |
-DOLP_SDK_BUILD_EXAMPLES=ON \ | |
-S . \ | |
-B . \ | |
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
-G "${{ matrix.config.generators }}" \ | |
-DCMAKE_INSTALL_PREFIX:PATH=instdir | |
cmake --build . --config ${{ env.BUILD_TYPE }} | |
cmake --install . --strip | |
- name: '🚧 AVD Cache' | |
if: contains(matrix.config.name, 'android') | |
uses: actions/cache@v4 | |
id: avd-cache | |
with: | |
path: | | |
~/.android/avd/* | |
~/.android/adb* | |
key: avd-28 | |
- name: '🚧 Create x86_64 tests environment' | |
if: contains(matrix.config.name, 'android') && steps.avd-cache.outputs.cache-hit != 'true' | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: 28 | |
arch: ${{ matrix.config.arch }} | |
force-avd-creation: false | |
disable-animations: false | |
target: default | |
profile: Nexus 6 | |
emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -verbose -show-kernel | |
script: echo "Generated AVD snapshot for caching." | |
- name: '🚧 Android x86_64 tests' | |
if: contains(matrix.config.name, 'android') | |
uses: reactivecircus/android-emulator-runner@v2 | |
with: | |
api-level: 28 | |
force-avd-creation: false | |
disable-animations: true | |
arch: ${{ matrix.config.arch }} | |
target: default | |
profile: Nexus 6 | |
emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -verbose -show-kernel | |
script: bash ./adb.sh | |
- name: '📦 Pack artifact' | |
if: always() | |
shell: bash | |
working-directory: instdir | |
run: | | |
ls -laR | |
${{ matrix.config.archiver }} ../${{ matrix.config.artifact }} . ../test* | |
- name: '📤 Upload artifact' | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
path: ./${{ matrix.config.artifact }} | |
name: ${{ matrix.config.artifact }} | |
Linux: | |
runs-on: ${{ matrix.config.os }} | |
name: ${{ matrix.config.name }} - ${{ matrix.compiler }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
os: ubuntu-latest, | |
arch: x64, | |
python-arch: x64, | |
python-ver: '3.8', | |
name: 'ubuntu-x64 cmake shared', | |
shared: 'yes', | |
artifact: 'ubuntu-cmake-shared-x64.7z', | |
archiver: '7z a', | |
generators: 'Ninja' | |
} | |
- { | |
os: ubuntu-latest, | |
arch: x86, | |
python-arch: x86, | |
python-ver: '3.8', | |
name: 'ubuntu-x86 cmake shared', | |
shared: 'yes', | |
artifact: 'ubuntu-cmake-shared-x86.7z', | |
archiver: '7z a', | |
generators: 'Ninja' | |
} | |
- { | |
os: ubuntu-latest, | |
arch: x64, | |
python-arch: x64, | |
python-ver: '3.8', | |
name: 'ubuntu-x64 cmake static', | |
shared: 'no', | |
artifact: 'ubuntu-cmake-static-x64.7z', | |
archiver: '7z a', | |
generators: 'Ninja' | |
} | |
- { | |
os: ubuntu-latest, | |
arch: x86, | |
python-arch: x86, | |
python-ver: '3.8', | |
name: 'ubuntu-x86 cmake static', | |
shared: 'no', | |
artifact: 'ubuntu-cmake-static-x86.7z', | |
archiver: '7z a', | |
generators: 'Ninja' | |
} | |
- { | |
os: ubuntu-latest, | |
arch: aarch64, | |
python-arch: aarch64, | |
python-ver: '3.8', | |
name: 'ubuntu-aarch64 cmake', | |
artifact: 'ubuntu-cmake-aarch64.7z', | |
archiver: '7z a', | |
generators: 'Ninja', | |
distro: ubuntu20.04 | |
} | |
- { | |
os: ubuntu-latest, | |
arch: ppc64le, | |
python-arch: ppc, | |
python-ver: '3.8', | |
name: 'ubuntu-ppc64le cmake', | |
artifact: 'ubuntu-cmake-ppc64le.7z', | |
archiver: '7z a', | |
generators: 'Ninja', | |
distro: ubuntu20.04 | |
} | |
compiler: [ gcc ] | |
steps: | |
- uses: actions/checkout@v4 | |
# - name: '🛠️ Python setup' | |
# uses: actions/setup-python@v5 | |
# with: | |
# python-version: ${{ matrix.config.python-ver }} | |
- name: '🚧 Linux x64/x86 build' | |
if: contains(matrix.config.arch, 'x64') || contains(matrix.config.arch, 'x86') | |
shell: 'script -q -e -c "bash {0}"' | |
run: | | |
if [ ${{ matrix.config.arch }} == 'x64' ]; then | |
sudo apt install -q -y libcmocka-dev ninja-build | |
else | |
export CFLAGS="-m32" LDFLAGS="-m32" LDFLAGS_STATIC="-m32" UNICORN_QEMU_FLAGS="--cpu=i386" | |
sudo dpkg --add-architecture i386 | |
sudo apt install -q -y lib32ncurses-dev lib32z1-dev lib32gcc-9-dev libc6-dev-i386 gcc-multilib \ | |
libcmocka-dev:i386 libcmocka0:i386 libc6:i386 libgcc-s1:i386 ninja-build | |
fi | |
mkdir build | |
mkdir instdir | |
cmake \ | |
-S . \ | |
-B . \ | |
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
-G "${{ matrix.config.generators }}" \ | |
-DCMAKE_INSTALL_PREFIX:PATH=instdir \ | |
-DBUILD_SHARED_LIBS=${{ matrix.config.shared }} | |
cmake --build . --config ${{ env.BUILD_TYPE }} | |
cmake --install . --strip | |
ctest -VV -C ${{ env.BUILD_TYPE }} | |
- name: '🚧 Linux ppc64le/aarch64 build' | |
if: contains(matrix.config.arch, 'ppc64le') || contains(matrix.config.arch, 'aarch64') | |
uses: uraimo/run-on-arch-action@v2 | |
with: | |
arch: ${{ matrix.config.arch }} | |
distro: ${{ matrix.config.distro }} | |
setup: | | |
mkdir -p "${PWD}/instdir" | |
dockerRunArgs: | | |
--volume "${PWD}/instdir:/instdir" | |
shell: /bin/sh | |
install: | | |
apt-get update -q -y | |
apt-get install -q -y git cmake build-essential automake libcmocka-dev pkg-config ${{ matrix.compiler }} ninja-build | |
run: | | |
mkdir build | |
cmake \ | |
-S . \ | |
-B . \ | |
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
-G "${{ matrix.config.generators }}" \ | |
-DCMAKE_INSTALL_PREFIX:PATH=/instdir | |
cmake --build . --config ${{ env.BUILD_TYPE }} | |
cmake --install . --strip | |
ctest -VV -C ${{ env.BUILD_TYPE }} | |
- name: '📦 Pack artifact' | |
if: always() | |
shell: bash | |
working-directory: instdir | |
run: | | |
ls -laR | |
${{ matrix.config.archiver }} ../${{ matrix.config.artifact }} . ../test* | |
- name: '📤 Upload artifact' | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
path: ./${{ matrix.config.artifact }} | |
name: ${{ matrix.config.artifact }} |