frida/.github/workflows/ci.yml
Ole André Vadla Ravnås 30eb4f5a48
Some checks failed
CI / sdk-linux (armbe8) (push) Has been skipped
CI / sdk-linux (armhf) (push) Has been skipped
CI / toolchain-linux (arm64) (push) Failing after 2s
CI / toolchain-linux (arm64-musl) (push) Failing after 2s
CI / toolchain-linux (arm64be) (push) Failing after 2s
CI / toolchain-linux (arm64beilp32) (push) Failing after 2s
CI / toolchain-linux (armbe8) (push) Failing after 3s
CI / toolchain-linux (armhf) (push) Failing after 2s
CI / toolchain-linux (armhf-musl) (push) Failing after 3s
CI / toolchain-linux (x86) (push) Failing after 2s
CI / toolchain-linux (x86_64) (push) Failing after 1m22s
CI / toolchain-linux (x86_64-musl) (push) Failing after 50s
CI / sdk-linux (arm64) (push) Has been skipped
CI / sdk-linux (arm64-musl) (push) Has been skipped
CI / sdk-linux (arm64be) (push) Has been skipped
CI / sdk-linux (arm64beilp32) (push) Has been skipped
CI / sdk-linux (armhf-musl) (push) Has been skipped
CI / sdk-linux (mips) (push) Has been skipped
CI / sdk-linux (mips64) (push) Has been skipped
CI / sdk-linux (mips64el) (push) Has been skipped
CI / sdk-linux (mipsel) (push) Has been skipped
CI / sdk-linux (x86) (push) Has been skipped
CI / sdk-linux (x86_64) (push) Has been skipped
CI / sdk-linux (x86_64-musl) (push) Has been skipped
CI / sdk-android-32 (arm) (push) Has been skipped
CI / sdk-android-32 (x86) (push) Has been skipped
CI / sdk-android-64 (arm64) (push) Has been skipped
CI / sdk-android-64 (x86_64) (push) Has been skipped
CI / sdk-none-arm64 (push) Has been skipped
CI / sdk-none-softfloat (arm64) (push) Has been skipped
CI / sdk-none-softfloat (x86_64) (push) Has been skipped
CI / frida-linux (arm64) (push) Has been skipped
CI / frida-linux (arm64-musl) (push) Has been skipped
CI / frida-linux (arm64be) (push) Has been skipped
CI / frida-linux (armbe8) (push) Has been skipped
CI / frida-qnx (push) Has been skipped
CI / frida-gum-none-arm64 (push) Has been skipped
CI / frida-gum-none-softfloat (arm64) (push) Has been skipped
CI / frida-linux (armhf) (push) Has been skipped
CI / frida-linux (armhf-musl) (push) Has been skipped
CI / frida-linux (mips) (push) Has been skipped
CI / frida-linux (mips64) (push) Has been skipped
CI / frida-linux (mips64el) (push) Has been skipped
CI / frida-linux (mipsel) (push) Has been skipped
CI / frida-linux (x86) (push) Has been skipped
CI / frida-linux (x86_64) (push) Has been skipped
CI / frida-linux (x86_64-musl) (push) Has been skipped
CI / frida-android (arm) (push) Has been skipped
CI / frida-android (arm64) (push) Has been skipped
CI / frida-android (x86) (push) Has been skipped
CI / frida-android (x86_64) (push) Has been skipped
CI / frida-barebone-agent-none-arm64 (push) Has been skipped
CI / frida-gum-none-softfloat (x86_64) (push) Has been skipped
CI / frida-barebone-agent-none-softfloat (arm64, binutils-aarch64-linux-gnu, arm64, aarch64-unknown-none, aarch64-linux-gnu-) (push) Has been skipped
CI / frida-barebone-agent-none-softfloat (x86_64, , x86, x86_64-unknown-none, ) (push) Has been skipped
CI / package-linux (arm64) (push) Failing after 0s
CI / package-linux (arm64-musl) (push) Failing after 0s
CI / package-linux (arm64be) (push) Failing after 1s
CI / package-linux (armhf) (push) Failing after 0s
CI / package-linux (armbe8) (push) Failing after 0s
CI / package-linux (armhf-musl) (push) Failing after 0s
CI / package-linux (mips) (push) Failing after 0s
CI / package-linux (mips64el) (push) Failing after 0s
CI / package-linux (mipsel) (push) Failing after 0s
CI / package-linux (x86_64) (push) Failing after 0s
CI / package-linux (x86_64-musl) (push) Failing after 0s
CI / package-android (arm) (push) Failing after 0s
CI / package-android (x86) (push) Failing after 0s
CI / package-android (x86_64) (push) Failing after 0s
CI / package-qnx (armeabi) (push) Failing after 0s
CI / package-none-arm64 (push) Failing after 0s
CI / package-none-softfloat (arm64) (push) Failing after 0s
CI / package-none-softfloat (x86_64) (push) Failing after 0s
CI / package-linux (mips64) (push) Failing after 0s
CI / package-linux (x86) (push) Failing after 0s
CI / package-android (arm64) (push) Failing after 0s
CI / toolchain-windows (arm64) (push) Has been cancelled
CI / toolchain-windows (x86) (push) Has been cancelled
CI / toolchain-macos (arm64) (push) Has been cancelled
CI / toolchain-macos (x86_64) (push) Has been cancelled
CI / sdk-macos (arm64e) (push) Has been cancelled
CI / sdk-macos (x86_64) (push) Has been cancelled
CI / sdk-ios (arm64) (push) Has been cancelled
CI / sdk-ios (arm64-simulator) (push) Has been cancelled
CI / sdk-ios (arm64e) (push) Has been cancelled
CI / sdk-ios (x86_64-simulator) (push) Has been cancelled
CI / sdk-watchos (arm64) (push) Has been cancelled
CI / sdk-watchos (arm64-simulator) (push) Has been cancelled
CI / sdk-tvos (arm64) (push) Has been cancelled
CI / sdk-tvos (arm64-simulator) (push) Has been cancelled
CI / publish-prod (push) Has been cancelled
CI / publish-dev (push) Has been cancelled
CI / assemble-ios-assets (push) Has been cancelled
CI / assemble-tvos-assets (push) Has been cancelled
CI / package-apple-universal (push) Has been cancelled
CI / package-windows (arm64) (push) Has been cancelled
CI / package-windows (x86) (push) Has been cancelled
CI / package-windows (x86_64) (push) Has been cancelled
CI / package-windows-sfx (x86) (push) Has been cancelled
CI / package-windows-sfx (x86_64) (push) Has been cancelled
CI / package-macos (arm64) (push) Has been cancelled
CI / package-macos (arm64e) (push) Has been cancelled
CI / package-macos (x86_64) (push) Has been cancelled
CI / package-ios (arm64) (push) Has been cancelled
CI / package-ios (arm64-simulator) (push) Has been cancelled
CI / package-ios (arm64e) (push) Has been cancelled
CI / package-ios (x86_64-simulator) (push) Has been cancelled
CI / package-watchos (arm64) (push) Has been cancelled
CI / package-watchos (arm64-simulator) (push) Has been cancelled
CI / package-tvos (arm64) (push) Has been cancelled
CI / package-tvos (arm64-simulator) (push) Has been cancelled
CI / frida-windows-intel (x86, mingw-w64-i686-gcc, MINGW32) (push) Has been cancelled
CI / frida-windows-intel (x86_64, mingw-w64-x86_64-gcc, MINGW64) (push) Has been cancelled
CI / frida-windows (push) Has been cancelled
CI / frida-macos (arm64) (push) Has been cancelled
CI / frida-macos (arm64e) (push) Has been cancelled
CI / frida-macos (x86_64) (push) Has been cancelled
CI / frida-ios (arm64) (push) Has been cancelled
CI / frida-ios (arm64-simulator) (push) Has been cancelled
CI / frida-ios (arm64e) (push) Has been cancelled
CI / frida-ios (x86_64-simulator) (push) Has been cancelled
CI / frida-watchos (arm64) (push) Has been cancelled
CI / frida-watchos (arm64-simulator) (push) Has been cancelled
CI / frida-tvos (arm64) (push) Has been cancelled
CI / frida-tvos (arm64-simulator) (push) Has been cancelled
CI / sdk-windows (arm64, md) (push) Has been cancelled
CI / sdk-windows (arm64, mdd) (push) Has been cancelled
CI / sdk-windows (arm64, mt) (push) Has been cancelled
CI / sdk-windows (arm64, mtd) (push) Has been cancelled
CI / sdk-windows (x86, md) (push) Has been cancelled
CI / sdk-windows (x86, mdd) (push) Has been cancelled
CI / sdk-windows (x86, mt) (push) Has been cancelled
CI / sdk-windows (x86, mtd) (push) Has been cancelled
CI / sdk-windows (x86_64, md) (push) Has been cancelled
CI / sdk-windows (x86_64, mdd) (push) Has been cancelled
CI / sdk-windows (x86_64, mt) (push) Has been cancelled
CI / sdk-windows (x86_64, mtd) (push) Has been cancelled
CI / sdk-macos (arm64) (push) Has been cancelled
ci: Build the Barebone agent for x86_64
The softfloat jobs differ by an architecture and, for the agent, by
which binutils and Rust target go with it, so they become one matrix
each rather than a second copy.

The arm64 leg gains an ARCH now that the Makefile takes the one it is
built on as its default, which on a runner is x86. The prelink check
learns the entry points the kmod glue reaches the Interceptor through,
which it has needed since the cloak grew hooks of its own.
2026-08-13 00:45:29 +02:00

2417 lines
89 KiB
YAML

name: CI
on: push
env:
FRIDA_COMPILER_MOD: subprojects/frida-core/src/compiler/go.mod
ANDROID_NDK_VERSION: r29
jobs:
publish-prod:
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
needs:
- package-windows
- package-windows-sfx
- package-macos
- package-linux
- package-ios
- package-watchos
- package-tvos
- package-android
- package-qnx
- package-apple-universal
- package-none-arm64
- package-none-softfloat
- assemble-ios-assets
- assemble-tvos-assets
permissions:
contents: write
id-token: write
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Grab needed submodules
run: python tools/ensure-submodules.py frida-gum frida-core frida-python frida-node
- name: Install tools
run: |
sudo apt-get update
sudo apt-get install -y reprepro
sudo npm install -g cloudflare-cli@5.0.5
- name: Download release assets
uses: actions/download-artifact@v8
with:
pattern: release-asset-*
merge-multiple: true
path: build/release-assets/
- name: Download Node-API prebuilds for Windows/x86_64
uses: actions/download-artifact@v8
with:
name: frida-node-windows-x86_64
path: build/release-assets/
- name: Download Node-API prebuilds for Windows/arm64
uses: actions/download-artifact@v8
with:
name: frida-node-windows-arm64
path: build/release-assets/
- name: Download Node-API prebuilds for macOS/x86_64
uses: actions/download-artifact@v8
with:
name: frida-node-macos-x86_64
path: build/release-assets/
- name: Download Node-API prebuilds for macOS/arm64
uses: actions/download-artifact@v8
with:
name: frida-node-macos-arm64
path: build/release-assets/
- name: Download Node-API prebuilds for Linux/x86
uses: actions/download-artifact@v8
with:
name: frida-node-linux-x86
path: build/release-assets/
- name: Download Node-API prebuilds for Linux/x86_64
uses: actions/download-artifact@v8
with:
name: frida-node-linux-x86_64
path: build/release-assets/
- name: Download Node-API prebuilds for Linux/armhf
uses: actions/download-artifact@v8
with:
name: frida-node-linux-armhf
path: build/release-assets/
- name: Download Node-API prebuilds for Linux/arm64
uses: actions/download-artifact@v8
with:
name: frida-node-linux-arm64
path: build/release-assets/
- name: Package iOS assets
uses: ./.github/actions/package-ios-assets
- name: Package tvOS assets
uses: ./.github/actions/package-tvos-assets
- name: Rename release assets
run: .github/scripts/rename-release-assets.sh
- name: Publish release to GitHub
uses: softprops/action-gh-release@v1
with:
name: "Frida ${{ env.FRIDA_VERSION }}"
body: "See https://frida.re/news/ for details."
files: build/release-assets/*
- name: Prepare Python packages
uses: ./.github/actions/prepare-python-packages
- name: Publish Python bindings to pypi.org
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: build/python-packages/
- name: Publish .deb packages
uses: ./.github/actions/publish-debs
with:
site: production
- name: Trigger frida-node publish
env:
GH_TOKEN: ${{ secrets.FRIDA_NODE_BOT_PAT }}
FRIDA_VERSION: ${{ env.FRIDA_VERSION }}
run: |
gh api repos/frida/frida-node/dispatches \
-f event_type=publish-prod-started \
-f client_payload[frida_version]="${FRIDA_VERSION}"
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
- name: Publish frida-gadget-ios to npm
run: |
cd releng/modules/frida-gadget-ios
npm version $FRIDA_VERSION
npm publish
- name: Trigger magisk-frida CI
run: |
curl \
-X POST \
-H "Accept: application/vnd.github.v3+json" \
-H "Authorization: token ${{ secrets.MAGISK_FRIDA_TOKEN }}" \
https://api.github.com/repos/ViRb3/magisk-frida/dispatches \
-d '{"event_type":"build"}'
publish-dev:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
needs:
- frida-windows
- frida-macos
- frida-linux
- assemble-ios-assets
- assemble-tvos-assets
permissions:
id-token: write
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Grab needed submodules
run: python tools/ensure-submodules.py frida-core frida-python
- name: Install tools
run: |
sudo apt-get update
sudo apt-get install -y reprepro
sudo npm install -g cloudflare-cli@5.0.5
- name: Package iOS assets
uses: ./.github/actions/package-ios-assets
- name: Package tvOS assets
uses: ./.github/actions/package-tvos-assets
- name: Prepare Python packages
uses: ./.github/actions/prepare-python-packages
- name: Publish Python bindings to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: build/python-packages/
repository-url: https://test.pypi.org/legacy/
- name: Publish .deb packages
uses: ./.github/actions/publish-debs
with:
site: development
assemble-ios-assets:
runs-on: macos-latest
needs: frida-ios
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Download universal frida-server for iOS/arm64(e)
uses: actions/download-artifact@v8
with:
name: frida-server-ios-arm64e
path: ios-arm64e/
- name: Create universal frida-server for iOS
run: |
lipo ios-arm64e/frida-server -thin arm64 -output frida-server-arm64
lipo ios-arm64e/frida-server -thin arm64e -output frida-server-arm64e
for arch in arm64 arm64e; do
codesign -f -s "-" --preserve-metadata=entitlements frida-server-$arch
done
./releng/mkfatmacho.py \
frida-server-ios-universal \
frida-server-arm64 \
frida-server-arm64e
- name: Download universal frida-agent for iOS/arm64(e)
uses: actions/download-artifact@v8
with:
name: frida-agent-ios-arm64e
path: ios-arm64e/
- name: Sign universal frida-agent for iOS/arm64(e)
run: codesign -f -s "-" ios-arm64e/frida-agent.dylib
- name: Assemble iOS assets
run: |
mkdir -p ios-assets/usr/bin ios-assets/usr/lib/frida-1.0
mv frida-server-ios-universal ios-assets/usr/bin/frida-server
mv ios-arm64e/frida-agent.dylib ios-assets/usr/lib/frida-1.0/frida-agent.dylib
- name: Upload iOS assets
uses: actions/upload-artifact@v7
with:
name: ios-assets
path: ios-assets/*
assemble-tvos-assets:
runs-on: macos-latest
needs: frida-tvos
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Download frida-server for tvOS/arm64
uses: actions/download-artifact@v8
with:
name: frida-server-tvos-arm64
path: tvos-arm64/
- name: Prepare frida-server for tvOS/arm64
run: codesign -f -s "-" --preserve-metadata=entitlements tvos-arm64/frida-server
- name: Download frida-agent for tvOS/arm64
uses: actions/download-artifact@v8
with:
name: frida-agent-tvos-arm64
path: tvos-arm64/
- name: Prepare frida-agent for tvOS/arm64
run: codesign -f -s "-" tvos-arm64/frida-agent.dylib
- name: Assemble tvOS assets
run: |
mkdir -p tvos-assets/usr/bin tvos-assets/usr/lib/frida-1.0
mv tvos-arm64/frida-server tvos-assets/usr/bin/frida-server
mv tvos-arm64/frida-agent.dylib tvos-assets/usr/lib/frida-1.0/frida-agent.dylib
- name: Upload tvOS assets
uses: actions/upload-artifact@v7
with:
name: tvos-assets
path: tvos-assets/*
package-apple-universal:
if: startsWith(github.ref, 'refs/tags/')
runs-on: macos-latest
needs: [frida-macos, frida-ios, frida-watchos, frida-tvos]
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Download frida-gadget for macOS/x86_64
uses: actions/download-artifact@v8
with:
name: frida-gadget-macos-x86_64
path: macos-x86_64/
- name: Download frida-gadget for macOS/arm64(e)
uses: actions/download-artifact@v8
with:
name: frida-gadget-macos-arm64e
path: macos-arm64e/
- name: Create universal frida-gadget for macOS
run: |
lipo \
macos-x86_64/frida-gadget.dylib \
macos-arm64e/frida-gadget.dylib \
-create -output frida-gadget-macos-universal.dylib
install_name_tool \
-id @executable_path/../Frameworks/FridaGadget.dylib \
frida-gadget-macos-universal.dylib
codesign \
-f -s "$MACOS_CERTID" \
frida-gadget-macos-universal.dylib
- name: Compress universal frida-gadget for macOS
run: xz -T 0 frida-gadget-macos-universal.dylib
- name: Upload universal frida-gadget for macOS
uses: actions/upload-artifact@v7
with:
name: release-asset-frida-gadget-macos-universal
path: frida-gadget-macos-universal.dylib.xz
- name: Download frida-gadget for iOS/arm64(e)
uses: actions/download-artifact@v8
with:
name: frida-gadget-ios-arm64e
path: ios-arm64e/
- name: Create universal frida-gadget for iOS
run: |
mv ios-arm64e/frida-gadget.dylib frida-gadget-ios-universal.dylib
install_name_tool \
-id @executable_path/Frameworks/FridaGadget.dylib \
frida-gadget-ios-universal.dylib
codesign \
-f -s "$IOS_CERTID" \
frida-gadget-ios-universal.dylib
- name: Compress universal frida-gadget for iOS
run: |
gzip -k frida-gadget-ios-universal.dylib
xz -T 0 frida-gadget-ios-universal.dylib
- name: Upload universal frida-gadget for iOS (gz)
uses: actions/upload-artifact@v7
with:
name: release-asset-frida-gadget-ios-universal-gz
path: frida-gadget-ios-universal.dylib.gz
- name: Upload universal frida-gadget for iOS (xz)
uses: actions/upload-artifact@v7
with:
name: release-asset-frida-gadget-ios-universal-xz
path: frida-gadget-ios-universal.dylib.xz
- name: Download frida-gadget for iOS/x86_64-simulator
uses: actions/download-artifact@v8
with:
name: frida-gadget-ios-x86_64-simulator
path: ios-x86_64-simulator/
- name: Download frida-gadget for iOS/arm64-simulator
uses: actions/download-artifact@v8
with:
name: frida-gadget-ios-arm64-simulator
path: ios-arm64-simulator/
- name: Create universal frida-gadget for iOS Simulator
run: |
lipo \
ios-x86_64-simulator/frida-gadget.dylib \
ios-arm64-simulator/frida-gadget.dylib \
-create -output frida-gadget-ios-simulator-universal.dylib
install_name_tool \
-id @executable_path/Frameworks/FridaGadget.dylib \
frida-gadget-ios-simulator-universal.dylib
codesign \
-f -s "$IOS_CERTID" \
frida-gadget-ios-simulator-universal.dylib
- name: Compress universal frida-gadget for iOS Simulator
run: xz -T 0 frida-gadget-ios-simulator-universal.dylib
- name: Upload universal frida-gadget for iOS Simulator
uses: actions/upload-artifact@v7
with:
name: release-asset-frida-gadget-ios-simulator-universal
path: frida-gadget-ios-simulator-universal.dylib.xz
- name: Download frida-gadget for watchOS/arm64
uses: actions/download-artifact@v8
with:
name: frida-gadget-watchos-arm64
path: watchos-arm64/
- name: Download frida-gadget for watchOS/arm64-simulator
uses: actions/download-artifact@v8
with:
name: frida-gadget-watchos-arm64-simulator
path: watchos-arm64-simulator/
- name: Package frida-gadget for watchOS
run: |
for arch in arm64 arm64-simulator; do
cp watchos-$arch/frida-gadget.dylib frida-gadget-watchos-$arch.dylib
install_name_tool \
-id @executable_path/Frameworks/FridaGadget.dylib \
frida-gadget-watchos-$arch.dylib
codesign \
-f -s "$WATCHOS_CERTID" \
frida-gadget-watchos-$arch.dylib
xz -T 0 frida-gadget-watchos-$arch.dylib
done
- name: Upload frida-gadget for watchOS/arm64
uses: actions/upload-artifact@v7
with:
name: release-asset-frida-gadget-watchos-arm64
path: frida-gadget-watchos-arm64.dylib.xz
- name: Upload frida-gadget for watchOS/arm64-simulator
uses: actions/upload-artifact@v7
with:
name: release-asset-frida-gadget-watchos-arm64-simulator
path: frida-gadget-watchos-arm64-simulator.dylib.xz
- name: Download frida-gadget for tvOS/arm64
uses: actions/download-artifact@v8
with:
name: frida-gadget-tvos-arm64
path: tvos-arm64/
- name: Download frida-gadget for tvOS/arm64-simulator
uses: actions/download-artifact@v8
with:
name: frida-gadget-tvos-arm64-simulator
path: tvos-arm64-simulator/
- name: Package frida-gadget for tvOS
run: |
for arch in arm64 arm64-simulator; do
cp tvos-$arch/frida-gadget.dylib frida-gadget-tvos-$arch.dylib
install_name_tool \
-id @executable_path/Frameworks/FridaGadget.dylib \
frida-gadget-tvos-$arch.dylib
codesign \
-f -s "$TVOS_CERTID" \
frida-gadget-tvos-$arch.dylib
xz -T 0 frida-gadget-tvos-$arch.dylib
done
- name: Upload frida-gadget for tvOS/arm64
uses: actions/upload-artifact@v7
with:
name: release-asset-frida-gadget-tvos-arm64
path: frida-gadget-tvos-arm64.dylib.xz
- name: Upload frida-gadget for tvOS/arm64-simulator
uses: actions/upload-artifact@v7
with:
name: release-asset-frida-gadget-tvos-arm64-simulator
path: frida-gadget-tvos-arm64-simulator.dylib.xz
package-windows:
if: startsWith(github.ref, 'refs/tags/')
needs: frida-windows
strategy:
matrix:
arch: [x86, x86_64, arm64]
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gum-devkit-windows-${{ matrix.arch }}
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gumjs-devkit-windows-${{ matrix.arch }}
- name: Package Core devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-core-devkit-windows-${{ matrix.arch }}
- name: Package frida-server
uses: ./.github/actions/package-artifact-file
with:
name: frida-server-windows-${{ matrix.arch }}
- name: Package frida-portal
uses: ./.github/actions/package-artifact-file
with:
name: frida-portal-windows-${{ matrix.arch }}
- name: Package frida-inject
uses: ./.github/actions/package-artifact-file
with:
name: frida-inject-windows-${{ matrix.arch }}
- name: Package frida-gadget
uses: ./.github/actions/package-artifact-file
with:
name: frida-gadget-windows-${{ matrix.arch }}
- name: Package .NET bindings
if: matrix.arch != 'arm64'
uses: ./.github/actions/package-artifact-file
with:
name: frida-clr-windows-${{ matrix.arch }}
- name: Package QML bindings
if: matrix.arch == 'x86_64'
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-qml-windows-${{ matrix.arch }}
package-windows-sfx:
if: startsWith(github.ref, 'refs/tags/')
needs: frida-windows
strategy:
matrix:
arch: [x86, x86_64]
runs-on: windows-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-sfx
with:
name: frida-gum-devkit-windows-${{ matrix.arch }}
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-sfx
with:
name: frida-gumjs-devkit-windows-${{ matrix.arch }}
- name: Package Core devkit
uses: ./.github/actions/package-artifact-files-as-sfx
with:
name: frida-core-devkit-windows-${{ matrix.arch }}
package-macos:
if: startsWith(github.ref, 'refs/tags/')
needs: frida-macos
strategy:
matrix:
arch: [x86_64, arm64, arm64e]
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gum-devkit-macos-${{ matrix.arch }}
- name: Package gum-graft
if: matrix.arch != 'arm64e'
uses: ./.github/actions/package-artifact-file
with:
name: gum-graft-macos-${{ matrix.arch }}
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gumjs-devkit-macos-${{ matrix.arch }}
- name: Package Core devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-core-devkit-macos-${{ matrix.arch }}
- name: Package frida-server
uses: ./.github/actions/package-artifact-file
with:
name: frida-server-macos-${{ matrix.arch }}
- name: Package frida-portal
uses: ./.github/actions/package-artifact-file
with:
name: frida-portal-macos-${{ matrix.arch }}
- name: Package frida-inject
uses: ./.github/actions/package-artifact-file
with:
name: frida-inject-macos-${{ matrix.arch }}
- name: Package QML bindings
if: matrix.arch == 'x86_64'
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-qml-macos-${{ matrix.arch }}
package-linux:
if: startsWith(github.ref, 'refs/tags/')
needs: frida-linux
strategy:
matrix:
arch: [x86, x86_64, x86_64-musl, armhf, armhf-musl, armbe8, arm64, arm64be, arm64-musl, mips, mipsel, mips64, mips64el]
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gum-devkit-linux-${{ matrix.arch }}
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gumjs-devkit-linux-${{ matrix.arch }}
- name: Package Core devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-core-devkit-linux-${{ matrix.arch }}
- name: Package frida-server
uses: ./.github/actions/package-artifact-file
with:
name: frida-server-linux-${{ matrix.arch }}
- name: Package frida-portal
uses: ./.github/actions/package-artifact-file
with:
name: frida-portal-linux-${{ matrix.arch }}
- name: Package frida-gadget
uses: ./.github/actions/package-artifact-file
with:
name: frida-gadget-linux-${{ matrix.arch }}
- name: Package frida-inject
uses: ./.github/actions/package-artifact-file
with:
name: frida-inject-linux-${{ matrix.arch }}
- name: Package QML bindings
if: matrix.arch == 'x86_64'
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-qml-linux-${{ matrix.arch }}
package-ios:
if: startsWith(github.ref, 'refs/tags/')
needs: frida-ios
strategy:
matrix:
arch: [arm64, arm64e, x86_64-simulator, arm64-simulator]
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gum-devkit-ios-${{ matrix.arch }}
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gumjs-devkit-ios-${{ matrix.arch }}
- name: Package Core devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-core-devkit-ios-${{ matrix.arch }}
- name: Package frida-portal
if: ${{ !endsWith(matrix.arch, '-simulator') }}
uses: ./.github/actions/package-artifact-file
with:
name: frida-portal-ios-${{ matrix.arch }}
package-watchos:
if: startsWith(github.ref, 'refs/tags/')
needs: frida-watchos
strategy:
matrix:
arch: [arm64, arm64-simulator]
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gum-devkit-watchos-${{ matrix.arch }}
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gumjs-devkit-watchos-${{ matrix.arch }}
- name: Package Core devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-core-devkit-watchos-${{ matrix.arch }}
package-tvos:
if: startsWith(github.ref, 'refs/tags/')
needs: frida-tvos
strategy:
matrix:
arch: [arm64, arm64-simulator]
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gum-devkit-tvos-${{ matrix.arch }}
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gumjs-devkit-tvos-${{ matrix.arch }}
- name: Package Core devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-core-devkit-tvos-${{ matrix.arch }}
package-android:
if: startsWith(github.ref, 'refs/tags/')
needs: frida-android
strategy:
matrix:
arch: [x86, x86_64, arm, arm64]
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gum-devkit-android-${{ matrix.arch }}
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gumjs-devkit-android-${{ matrix.arch }}
- name: Package Core devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-core-devkit-android-${{ matrix.arch }}
- name: Package frida-server
uses: ./.github/actions/package-artifact-file
with:
name: frida-server-android-${{ matrix.arch }}
- name: Package frida-portal
uses: ./.github/actions/package-artifact-file
with:
name: frida-portal-android-${{ matrix.arch }}
- name: Package frida-gadget
uses: ./.github/actions/package-artifact-file
with:
name: frida-gadget-android-${{ matrix.arch }}
- name: Package frida-inject
uses: ./.github/actions/package-artifact-file
with:
name: frida-inject-android-${{ matrix.arch }}
package-qnx:
if: startsWith(github.ref, 'refs/tags/')
needs: frida-qnx
strategy:
matrix:
arch: [armeabi]
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gum-devkit-qnx-${{ matrix.arch }}
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gumjs-devkit-qnx-${{ matrix.arch }}
- name: Package Core devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-core-devkit-qnx-${{ matrix.arch }}
- name: Package frida-server
uses: ./.github/actions/package-artifact-file
with:
name: frida-server-qnx-${{ matrix.arch }}
- name: Package frida-portal
uses: ./.github/actions/package-artifact-file
with:
name: frida-portal-qnx-${{ matrix.arch }}
- name: Package frida-gadget
uses: ./.github/actions/package-artifact-file
with:
name: frida-gadget-qnx-${{ matrix.arch }}
- name: Package frida-inject
uses: ./.github/actions/package-artifact-file
with:
name: frida-inject-qnx-${{ matrix.arch }}
package-none-arm64:
if: startsWith(github.ref, 'refs/tags/')
needs: [frida-gum-none-arm64, frida-barebone-agent-none-arm64]
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gum-devkit-none-arm64
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gumjs-devkit-none-arm64
- name: Package barebone agent
uses: ./.github/actions/package-artifact-file
with:
name: frida-barebone-agent-none-arm64
# No agent here: the soft-float one is a static library that only means anything
# once linked into a module for a specific kernel.
package-none-softfloat:
if: startsWith(github.ref, 'refs/tags/')
needs: frida-gum-none-softfloat
strategy:
matrix:
arch: [x86_64, arm64]
fail-fast: false
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Package Gum devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gum-devkit-none-${{ matrix.arch }}-softfloat
- name: Package GumJS devkit
uses: ./.github/actions/package-artifact-files-as-tarball
with:
name: frida-gumjs-devkit-none-${{ matrix.arch }}-softfloat
frida-windows-intel:
needs: sdk-windows
strategy:
matrix:
include:
- { arch: x86, sys: MINGW32, pkg: 'mingw-w64-i686-gcc' }
- { arch: x86_64, sys: MINGW64, pkg: 'mingw-w64-x86_64-gcc' }
fail-fast: false
runs-on: windows-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-windows-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
architecture: ${{ matrix.arch == 'x86_64' && 'x64' || matrix.arch }}
- name: Install MinGW toolchain for cgo support
id: msys2
uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.sys }}
install: ${{ matrix.pkg }}
- name: Grab frida-core
run: python tools/ensure-submodules.py frida-core
- name: Install Go toolchain
uses: actions/setup-go@v5
with:
go-version-file: ${{ env.FRIDA_COMPILER_MOD }}
cache-dependency-path: ${{ env.FRIDA_COMPILER_MOD }}
- name: Install Qt
if: matrix.arch == 'x86_64'
uses: jurplel/install-qt-action@v4
with:
version: '6.7.0'
cache: true
setup-python: false
- name: Configure
run: >-
.\configure
--prefix=$Env:FRIDA_PREFIX
--host=windows-${{ matrix.arch }}
--enable-gadget
--enable-server
--enable-portal
--enable-inject
--
"-Dfrida_qml=auto"
"-Dfrida-gum:devkits=gum,gumjs"
"-Dfrida-core:compiler_backend=enabled"
"-Dfrida-core:devkits=core"
env:
MSYS2_LOCATION: ${{ steps.msys2.outputs.msys2-location }}
- name: Compile
run: .\make
- name: Install
run: .\make install
- name: Upload components needed for emulation on arm64
if: matrix.arch == 'x86_64'
uses: actions/upload-artifact@v7
with:
name: frida-core-emulation-windows
path: |
build/subprojects/frida-core/src/frida-helper.exe
build/subprojects/frida-core/lib/agent/frida-agent.dll
build/subprojects/frida-core/compat/frida-helper.exe
build/subprojects/frida-core/compat/frida-agent.dll
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gum/
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gumjs/
- name: Upload Core devkit
uses: actions/upload-artifact@v7
with:
name: frida-core-devkit-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/core/
- name: Upload frida-server
uses: actions/upload-artifact@v7
with:
name: frida-server-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server.exe
- name: Upload frida-portal
uses: actions/upload-artifact@v7
with:
name: frida-portal-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal.exe
- name: Upload frida-inject
uses: actions/upload-artifact@v7
with:
name: frida-inject-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject.exe
- name: Upload 32-bit frida-gadget
if: matrix.arch != 'x86_64'
uses: actions/upload-artifact@v7
with:
name: frida-gadget-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/x86/frida-gadget.dll
- name: Upload 64-bit frida-gadget
if: matrix.arch == 'x86_64'
uses: actions/upload-artifact@v7
with:
name: frida-gadget-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/x86_64/frida-gadget.dll
- name: Package Python bindings
run: |
$Env:FRIDA_EXTENSION = "$Env:FRIDA_PREFIX\lib\site-packages\frida\_frida.pyd"
cd subprojects\frida-python
pip wheel -w "$Env:FRIDA_PREFIX\wheels" --no-deps .
- name: Upload Python bindings
uses: actions/upload-artifact@v7
with:
name: frida-python-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/wheels/*.whl
- name: Build Node.js bindings
if: matrix.arch == 'x86_64'
run: |
$installdir = "$Env:FRIDA_PREFIX\prebuilds"
$Env:FRIDA_DEPS = "$pwd\deps"
$Env:PKG_CONFIG_PATH = "$Env:FRIDA_PREFIX\lib\pkgconfig"
function Run {
param(
[Parameter(Mandatory)]
[string] $FilePath,
[Parameter(ValueFromRemainingArguments = $true)]
[string[]] $Argv
)
$p = Start-Process -FilePath $FilePath -ArgumentList $Argv -NoNewWindow -Wait -PassThru
if ($p.ExitCode -ne 0) {
throw "'$FilePath $($Argv -join ' ')' failed with exit status $($p.ExitCode)"
}
}
Run python .\tools\ensure-submodules.py frida-node
cd subprojects\frida-node
Run npm.cmd version $Env:FRIDA_VERSION
Run .\configure `
--prefix=$Env:FRIDA_PREFIX `
--host=windows-${{ matrix.arch }}
Run .\make prebuild
New-Item -ItemType Directory -Path $installdir
Copy-Item .\build\*.tar.gz -Destination $installdir
- name: Upload Node.js bindings
if: matrix.arch == 'x86_64'
uses: actions/upload-artifact@v7
with:
name: frida-node-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/prebuilds/*.tar.gz
- name: Build .NET bindings
run: >-
Remove-Item build -Recurse
&& .\configure
--prefix=$Env:FRIDA_PREFIX
--host=windows-${{ matrix.arch }}-md
--enable-frida-clr
--disable-frida-python
--disable-frida-tools
--
"-Dfrida-core:compiler_backend=disabled"
&& .\make install
- name: Upload .NET bindings
uses: actions/upload-artifact@v7
with:
name: frida-clr-windows-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/Frida.dll
- name: Upload QML bindings
if: matrix.arch == 'x86_64'
uses: actions/upload-artifact@v7
with:
name: frida-qml-windows-${{ matrix.arch }}
path: |
${{ env.FRIDA_PREFIX }}/lib/qml/
!*.lib
!*.pdb
frida-windows:
needs: frida-windows-intel
runs-on: windows-11-arm
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-windows-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
architecture: arm64
- name: Install MinGW toolchain for cgo support
id: msys2
uses: msys2/setup-msys2@v2
with:
msystem: CLANGARM64
install: mingw-w64-clang-aarch64-clang
- name: Grab frida-core
run: python tools/ensure-submodules.py frida-core
- name: Install Go toolchain
uses: actions/setup-go@v5
with:
go-version-file: ${{ env.FRIDA_COMPILER_MOD }}
cache-dependency-path: ${{ env.FRIDA_COMPILER_MOD }}
- name: Download emulation components
uses: actions/download-artifact@v8
with:
name: frida-core-emulation-windows
path: emulation/
- name: Configure
run: |
$helperModern = (Resolve-Path "emulation/src/frida-helper.exe").Path
$agentModern = (Resolve-Path "emulation/lib/agent/frida-agent.dll").Path
$helperLegacy = (Resolve-Path "emulation/compat/frida-helper.exe").Path
$agentLegacy = (Resolve-Path "emulation/compat/frida-agent.dll").Path
.\configure `
--prefix=$Env:FRIDA_PREFIX `
--host=windows-arm64 `
--enable-gadget `
--enable-server `
--enable-portal `
--enable-inject `
-- `
"-Dfrida_qml=auto" `
"-Dfrida-gum:devkits=gum,gumjs" `
"-Dfrida-core:compiler_backend=enabled" `
"-Dfrida-core:devkits=core" `
"-Dfrida-core:helper_emulated_modern=$helperModern" `
"-Dfrida-core:agent_emulated_modern=$agentModern" `
"-Dfrida-core:helper_emulated_legacy=$helperLegacy" `
"-Dfrida-core:agent_emulated_legacy=$agentLegacy"
env:
MSYS2_LOCATION: ${{ steps.msys2.outputs.msys2-location }}
- name: Compile
run: .\make
- name: Install
run: .\make install
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-windows-arm64
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gum/
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-windows-arm64
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gumjs/
- name: Upload Core devkit
uses: actions/upload-artifact@v7
with:
name: frida-core-devkit-windows-arm64
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/core/
- name: Upload frida-server
uses: actions/upload-artifact@v7
with:
name: frida-server-windows-arm64
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server.exe
- name: Upload frida-portal
uses: actions/upload-artifact@v7
with:
name: frida-portal-windows-arm64
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal.exe
- name: Upload frida-inject
uses: actions/upload-artifact@v7
with:
name: frida-inject-windows-arm64
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject.exe
- name: Upload frida-gadget
uses: actions/upload-artifact@v7
with:
name: frida-gadget-windows-arm64
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/arm64/frida-gadget.dll
- name: Package Python bindings
run: |
$Env:FRIDA_EXTENSION = "$Env:FRIDA_PREFIX\lib\site-packages\frida\_frida.pyd"
cd subprojects\frida-python
pip wheel -w "$Env:FRIDA_PREFIX\wheels" --no-deps .
- name: Upload Python bindings
uses: actions/upload-artifact@v7
with:
name: frida-python-windows-arm64
path: ${{ env.FRIDA_PREFIX }}/wheels/*.whl
- name: Build Node.js bindings
run: |
$installdir = "$Env:FRIDA_PREFIX\prebuilds"
$Env:FRIDA_DEPS = "$pwd\deps"
$Env:PKG_CONFIG_PATH = "$Env:FRIDA_PREFIX\lib\pkgconfig"
function Run {
param(
[Parameter(Mandatory)]
[string] $FilePath,
[Parameter(ValueFromRemainingArguments = $true)]
[string[]] $Argv
)
$p = Start-Process -FilePath $FilePath -ArgumentList $Argv -NoNewWindow -Wait -PassThru
if ($p.ExitCode -ne 0) {
throw "'$FilePath $($Argv -join ' ')' failed with exit status $($p.ExitCode)"
}
}
Run python .\tools\ensure-submodules.py frida-node
cd subprojects\frida-node
Run npm.cmd version $Env:FRIDA_VERSION
Run .\configure `
--prefix=$Env:FRIDA_PREFIX `
--host=windows-arm64
Run .\make prebuild
New-Item -ItemType Directory -Path $installdir
Copy-Item .\build\*.tar.gz -Destination $installdir
- name: Upload Node.js bindings
uses: actions/upload-artifact@v7
with:
name: frida-node-windows-arm64
path: ${{ env.FRIDA_PREFIX }}/prebuilds/*.tar.gz
frida-macos:
needs: sdk-macos
strategy:
matrix:
arch: [x86_64, arm64, arm64e]
fail-fast: false
runs-on: macos-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Grab frida-core
run: python tools/ensure-submodules.py frida-core
- name: Install Go toolchain
uses: actions/setup-go@v5
with:
go-version-file: ${{ env.FRIDA_COMPILER_MOD }}
cache-dependency-path: ${{ env.FRIDA_COMPILER_MOD }}
- name: Install Qt
if: matrix.arch != 'arm64e'
uses: jurplel/install-qt-action@v4
with:
version: '6.7.0'
cache: true
setup-python: false
- name: Configure
run: >-
./configure
"--prefix=$FRIDA_PREFIX"
--host=macos-${{ matrix.arch }}
--enable-gadget
--enable-server
--enable-portal
--enable-inject
--enable-frida-python
--
-Dfrida_qml=${{ matrix.arch != 'arm64e' && 'enabled' || 'disabled' }}
-Dfrida-gum:graft_tool=enabled
-Dfrida-gum:devkits=gum,gumjs
-Dfrida-core:compiler_backend=${{ matrix.arch != 'arm64e' && 'enabled' || 'disabled' }}
-Dfrida-core:devkits=core
- name: Compile
run: make
- name: Install
run: make install
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gum/
- name: Upload gum-graft
if: matrix.arch != 'arm64e'
uses: actions/upload-artifact@v7
with:
name: gum-graft-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/gum-graft
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gumjs/
- name: Upload Core devkit
uses: actions/upload-artifact@v7
with:
name: frida-core-devkit-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/core/
- name: Upload frida-server
uses: actions/upload-artifact@v7
with:
name: frida-server-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server
- name: Upload frida-portal
uses: actions/upload-artifact@v7
with:
name: frida-portal-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal
- name: Upload frida-inject
uses: actions/upload-artifact@v7
with:
name: frida-inject-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject
- name: Upload frida-gadget
if: matrix.arch != 'arm64'
uses: actions/upload-artifact@v7
with:
name: frida-gadget-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/frida-gadget.dylib
- name: Package Python bindings
run: |
export FRIDA_EXTENSION=$(find "$FRIDA_PREFIX" -name _frida.abi3.so)
case ${{ matrix.arch }} in
x86_64)
platform=macosx-10.13-x86_64
;;
arm64*)
platform=macosx-11.0-arm64
;;
esac
export _PYTHON_HOST_PLATFORM=$platform
cd subprojects/frida-python
pip wheel -w "$FRIDA_PREFIX/wheels" --no-deps .
- name: Upload Python bindings
uses: actions/upload-artifact@v7
with:
name: frida-python-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/wheels/*.whl
- name: Build Node.js bindings
if: matrix.arch != 'arm64e'
run: |
installdir=$FRIDA_PREFIX/prebuilds
export FRIDA_DEPS=$PWD/deps
export PKG_CONFIG_PATH=$FRIDA_PREFIX/lib/pkgconfig
python tools/ensure-submodules.py frida-node
cd subprojects/frida-node
npm version $FRIDA_VERSION
./configure \
"--prefix=$FRIDA_PREFIX" \
--host=macos-${{ matrix.arch }}
make prebuild
mkdir "$installdir"
cp build/*.tar.gz "$installdir"
shell: zsh {0}
- name: Upload Node.js bindings
if: matrix.arch != 'arm64e'
uses: actions/upload-artifact@v7
with:
name: frida-node-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/prebuilds/*.tar.gz
- name: Upload QML bindings
if: matrix.arch != 'arm64e'
uses: actions/upload-artifact@v7
with:
name: frida-qml-macos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/qml/
frida-linux:
needs: sdk-linux
strategy:
matrix:
arch: [x86, x86_64, x86_64-musl, armhf, armhf-musl, armbe8, arm64, arm64be, arm64-musl, mips, mipsel, mips64, mips64el]
fail-fast: false
runs-on: ubuntu-latest
container: ghcr.io/frida/x-tools-linux-${{ matrix.arch }}:latest
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Grab frida-core
run: python tools/ensure-submodules.py frida-core
- name: Install Go toolchain
uses: actions/setup-go@v5
with:
go-version-file: ${{ env.FRIDA_COMPILER_MOD }}
cache-dependency-path: ${{ env.FRIDA_COMPILER_MOD }}
- name: Configure qemu-user
if: ${{ !startsWith(matrix.arch, 'x86') }}
run: echo "FRIDA_QEMU_SYSROOT=/opt/x-tools/$XTOOLS_HOST/$XTOOLS_HOST/sysroot" >> $GITHUB_ENV
- name: Prepare environment for installing Qt
if: matrix.arch == 'x86_64'
run: |
apt-get update
apt-get install -y sudo
echo "PIP_BREAK_SYSTEM_PACKAGES=1" >> $GITHUB_ENV
- name: Install Qt
if: matrix.arch == 'x86_64'
uses: jurplel/install-qt-action@v4
with:
version: '6.7.0'
cache: true
setup-python: false
- name: Configure
run: >-
./configure
"--prefix=$FRIDA_PREFIX"
--host=$XTOOLS_HOST
--enable-gadget
--enable-server
--enable-portal
--enable-inject
--enable-frida-python
--
-Dlibdir=lib
-Dfrida_qml=${{ matrix.arch == 'x86_64' && 'enabled' || 'disabled' }}
-Dfrida-gum:devkits=gum,gumjs
-Dfrida-core:compiler_backend=${{ !(startsWith(matrix.arch, 'mips') || matrix.arch == 'armbe8' || matrix.arch == 'arm64be') && 'enabled' || 'disabled' }}
-Dfrida-core:devkits=core
- name: Compile
run: make
- name: Install
run: make install
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gum/
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gumjs/
- name: Upload Core devkit
uses: actions/upload-artifact@v7
with:
name: frida-core-devkit-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/core/
- name: Upload frida-server
uses: actions/upload-artifact@v7
with:
name: frida-server-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server
- name: Upload frida-portal
uses: actions/upload-artifact@v7
with:
name: frida-portal-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal
- name: Upload frida-inject
uses: actions/upload-artifact@v7
with:
name: frida-inject-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject
- name: Upload 32-bit frida-gadget
if: ${{ !contains(matrix.arch, '64') }}
uses: actions/upload-artifact@v7
with:
name: frida-gadget-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/32/frida-gadget.so
- name: Upload 64-bit frida-gadget
if: ${{ contains(matrix.arch, '64') }}
uses: actions/upload-artifact@v7
with:
name: frida-gadget-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/64/frida-gadget.so
- name: Package Python bindings
run: |
export FRIDA_EXTENSION=$(find "$FRIDA_PREFIX" -name _frida.abi3.so)
case ${{ matrix.arch }} in
*-musl)
py_oses=(musllinux_1_1)
;;
x86*)
py_oses=(manylinux_2_5 manylinux1)
;;
arm*|ppc*|s390x)
py_oses=(manylinux_2_17 manylinux2014)
;;
*)
py_oses=(manylinux_2_5)
;;
esac
frida_arch=$(echo "${{ matrix.arch }}" | cut -f1 -d"-")
case $frida_arch in
x86)
py_arch=i686
;;
armhf)
py_arch=armv7l
;;
arm64)
py_arch=aarch64
;;
*)
py_arch=$frida_arch
;;
esac
cd subprojects/frida-python
export _PYTHON_HOST_PLATFORM=linux-$py_arch
for py_os in "${py_oses[@]}"; do
echo "plat_name = ${py_os}_${py_arch}" >> setup.cfg
pip wheel -w "$FRIDA_PREFIX/wheels" --no-deps .
git checkout setup.cfg
done
shell: bash
- name: Upload Python bindings
uses: actions/upload-artifact@v7
with:
name: frida-python-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/wheels/*.whl
- name: Build Node.js bindings
if: ${{ !(startsWith(matrix.arch, 'mips') || endsWith(matrix.arch, '-musl') || matrix.arch == 'armbe8' || matrix.arch == 'arm64be') }}
run: |
installdir=$FRIDA_PREFIX/prebuilds
export FRIDA_DEPS=$PWD/deps
export PKG_CONFIG_PATH=$FRIDA_PREFIX/lib/pkgconfig
python tools/ensure-submodules.py frida-node
cd subprojects/frida-node
npm version $FRIDA_VERSION
./configure \
"--prefix=$FRIDA_PREFIX" \
--host=$XTOOLS_HOST
make prebuild
mkdir "$installdir"
cp build/*.tar.gz "$installdir"
shell: bash
- name: Upload Node.js bindings
if: ${{ !(startsWith(matrix.arch, 'mips') || endsWith(matrix.arch, '-musl') || matrix.arch == 'armbe8' || matrix.arch == 'arm64be') }}
uses: actions/upload-artifact@v7
with:
name: frida-node-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/prebuilds/*.tar.gz
- name: Upload QML bindings
if: matrix.arch == 'x86_64'
uses: actions/upload-artifact@v7
with:
name: frida-qml-linux-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/qml/
frida-ios:
needs: [sdk-macos, sdk-ios]
strategy:
matrix:
arch: [arm64, arm64e, x86_64-simulator, arm64-simulator]
fail-fast: false
runs-on: macos-latest
env:
XCODE11: /Applications/Xcode_11.7.app
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Grab frida-core
run: python tools/ensure-submodules.py frida-core
- name: Install Go toolchain
uses: actions/setup-go@v5
with:
go-version-file: ${{ env.FRIDA_COMPILER_MOD }}
cache-dependency-path: ${{ env.FRIDA_COMPILER_MOD }}
- name: Configure
run: >-
./configure
--prefix=/usr
--host=ios-${{ matrix.arch }}
--enable-portal
--
-Dfrida-gum:devkits=gum,gumjs
-Dfrida-core:compiler_backend=${{ matrix.arch != 'arm64e' && 'enabled' || 'disabled' }}
-Dfrida-core:assets=installed
-Dfrida-core:devkits=core
- name: Compile
run: make
- name: Install
run: DESTDIR="$FRIDA_PREFIX" make install
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-ios-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/devkits/gum/
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-ios-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/devkits/gumjs/
- name: Upload Core devkit
uses: actions/upload-artifact@v7
with:
name: frida-core-devkit-ios-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/devkits/core/
- name: Upload frida-server
if: ${{ matrix.arch != 'arm64' && !endsWith(matrix.arch, '-simulator') }}
uses: actions/upload-artifact@v7
with:
name: frida-server-ios-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-server
- name: Upload frida-portal
if: ${{ !endsWith(matrix.arch, '-simulator') }}
uses: actions/upload-artifact@v7
with:
name: frida-portal-ios-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-portal
- name: Upload frida-inject
if: ${{ !endsWith(matrix.arch, '-simulator') }}
uses: actions/upload-artifact@v7
with:
name: frida-inject-ios-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-inject
- name: Upload frida-helper
if: ${{ matrix.arch != 'arm64' && !endsWith(matrix.arch, '-simulator') }}
uses: actions/upload-artifact@v7
with:
name: frida-helper-ios-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/frida-helper
- name: Upload frida-agent
if: ${{ matrix.arch != 'arm64' && !endsWith(matrix.arch, '-simulator') }}
uses: actions/upload-artifact@v7
with:
name: frida-agent-ios-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/frida-agent.dylib
- name: Upload frida-gadget
if: matrix.arch != 'arm64'
uses: actions/upload-artifact@v7
with:
name: frida-gadget-ios-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/frida-gadget.dylib
frida-watchos:
needs: [sdk-macos, sdk-watchos]
strategy:
matrix:
arch: [arm64, arm64-simulator]
fail-fast: false
runs-on: macos-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Configure
run: >-
./configure
"--prefix=$FRIDA_PREFIX"
--host=watchos-${{ matrix.arch }}
--
-Dfrida-gum:devkits=gum,gumjs
-Dfrida-core:devkits=core
- name: Compile
run: make
- name: Install
run: make install
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-watchos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gum/
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-watchos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gumjs/
- name: Upload Core devkit
uses: actions/upload-artifact@v7
with:
name: frida-core-devkit-watchos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/core/
- name: Upload frida-gadget
uses: actions/upload-artifact@v7
with:
name: frida-gadget-watchos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/frida-gadget.dylib
frida-tvos:
needs: [sdk-macos, sdk-tvos]
strategy:
matrix:
arch: [arm64, arm64-simulator]
fail-fast: false
runs-on: macos-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Grab frida-core
run: python tools/ensure-submodules.py frida-core
- name: Configure
run: >-
./configure
--prefix=/usr
--host=tvos-${{ matrix.arch }}
--enable-portal
--
-Dfrida-gum:devkits=gum,gumjs
-Dfrida-core:assets=installed
-Dfrida-core:devkits=core
- name: Compile
run: make
- name: Install
run: DESTDIR="$FRIDA_PREFIX" make install
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-tvos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/devkits/gum/
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-tvos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/devkits/gumjs/
- name: Upload Core devkit
uses: actions/upload-artifact@v7
with:
name: frida-core-devkit-tvos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/devkits/core/
- name: Upload frida-server
if: ${{ !endsWith(matrix.arch, '-simulator') }}
uses: actions/upload-artifact@v7
with:
name: frida-server-tvos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-server
- name: Upload frida-portal
if: ${{ !endsWith(matrix.arch, '-simulator') }}
uses: actions/upload-artifact@v7
with:
name: frida-portal-tvos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-portal
- name: Upload frida-inject
if: ${{ !endsWith(matrix.arch, '-simulator') }}
uses: actions/upload-artifact@v7
with:
name: frida-inject-tvos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/bin/frida-inject
- name: Upload frida-helper
if: ${{ !endsWith(matrix.arch, '-simulator') }}
uses: actions/upload-artifact@v7
with:
name: frida-helper-tvos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/frida-helper
- name: Upload frida-agent
if: ${{ !endsWith(matrix.arch, '-simulator') }}
uses: actions/upload-artifact@v7
with:
name: frida-agent-tvos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/frida-agent.dylib
- name: Upload frida-gadget
uses: actions/upload-artifact@v7
with:
name: frida-gadget-tvos-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/usr/lib/frida-1.0/frida-gadget.dylib
frida-android:
needs: [sdk-linux, sdk-android-32, sdk-android-64]
strategy:
matrix:
arch: [x86, x86_64, arm, arm64]
fail-fast: false
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Grab frida-core
run: python tools/ensure-submodules.py frida-core
- name: Install Go toolchain
uses: actions/setup-go@v5
with:
go-version-file: ${{ env.FRIDA_COMPILER_MOD }}
cache-dependency-path: ${{ env.FRIDA_COMPILER_MOD }}
- name: Set up NDK
id: setup-ndk
uses: nttld/setup-ndk@v1
with:
ndk-version: ${{ env.ANDROID_NDK_VERSION }}
add-to-path: false
- name: Add ANDROID_NDK_ROOT to environment
run: echo "ANDROID_NDK_ROOT=${{ steps.setup-ndk.outputs.ndk-path }}" >> $GITHUB_ENV
- name: Configure
run: >-
./configure
"--prefix=$FRIDA_PREFIX"
--host=android-${{ matrix.arch }}
--enable-portal
--
-Dfrida-gum:devkits=gum,gumjs
-Dfrida-core:compiler_backend=enabled
-Dfrida-core:devkits=core
- name: Compile
run: make
- name: Install
run: make install
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-android-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gum/
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-android-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gumjs/
- name: Upload Core devkit
uses: actions/upload-artifact@v7
with:
name: frida-core-devkit-android-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/core/
- name: Upload frida-server
uses: actions/upload-artifact@v7
with:
name: frida-server-android-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server
- name: Upload frida-portal
uses: actions/upload-artifact@v7
with:
name: frida-portal-android-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal
- name: Upload frida-inject
uses: actions/upload-artifact@v7
with:
name: frida-inject-android-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject
- name: Upload 32-bit frida-gadget
if: ${{ !contains(matrix.arch, '64') }}
uses: actions/upload-artifact@v7
with:
name: frida-gadget-android-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/32/frida-gadget.so
- name: Upload 64-bit frida-gadget
if: ${{ contains(matrix.arch, '64') }}
uses: actions/upload-artifact@v7
with:
name: frida-gadget-android-${{ matrix.arch }}
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/64/frida-gadget.so
frida-qnx:
runs-on: ubuntu-latest
needs: sdk-linux
container: ghcr.io/frida/qnx-tools:latest
steps:
- name: Check out repo
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Add CFLAGS to environment
run: echo "CFLAGS=\"--sysroot=$QNX_TARGET/armle-v7\"" >> $GITHUB_ENV
- name: Roll SDK
run: releng/deps.py roll sdk arm-unknown-nto-qnx6.5.0eabi
- name: Configure
run: >-
./configure
"--prefix=$FRIDA_PREFIX"
--host=arm-unknown-nto-qnx6.5.0eabi
--enable-portal
--
-Dfrida-gum:devkits=gum,gumjs
-Dfrida-core:devkits=core
- name: Compile
run: make
- name: Install
run: make install
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-qnx-armeabi
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gum/
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-qnx-armeabi
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/gumjs/
- name: Upload Core devkit
uses: actions/upload-artifact@v7
with:
name: frida-core-devkit-qnx-armeabi
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/devkits/core/
- name: Upload frida-server
uses: actions/upload-artifact@v7
with:
name: frida-server-qnx-armeabi
path: ${{ env.FRIDA_PREFIX }}/bin/frida-server
- name: Upload frida-portal
uses: actions/upload-artifact@v7
with:
name: frida-portal-qnx-armeabi
path: ${{ env.FRIDA_PREFIX }}/bin/frida-portal
- name: Upload frida-inject
uses: actions/upload-artifact@v7
with:
name: frida-inject-qnx-armeabi
path: ${{ env.FRIDA_PREFIX }}/bin/frida-inject
- name: Upload frida-gadget
uses: actions/upload-artifact@v7
with:
name: frida-gadget-qnx-armeabi
path: ${{ env.FRIDA_PREFIX }}/lib/frida-1.0/32/frida-gadget.so
frida-gum-none-arm64:
needs: sdk-none-arm64
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: 24
- name: Grab frida-gum
run: python tools/ensure-submodules.py frida-gum
- name: Check out barebone agent
run: git submodule update --init --depth 1 subprojects/frida-core
- name: Set up C toolchain
working-directory: subprojects/frida-core/src/barebone/agent
run: |
npm install -g xpm
xpm install
echo "$PWD/xpacks/.bin" >> $GITHUB_PATH
- name: Configure Gum
working-directory: subprojects/frida-gum
run: >-
./configure
--host=aarch64-none-elf
--enable-gumjs
--with-devkits=gum,gumjs
--with-devkit-symbol-scope=original
- name: Compile
working-directory: subprojects/frida-gum
run: make
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-none-arm64
path: subprojects/frida-gum/build/gum/devkit/
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-none-arm64
path: subprojects/frida-gum/build/bindings/gumjs/devkit/
frida-barebone-agent-none-arm64:
needs: frida-gum-none-arm64
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Grab frida-core
run: python tools/ensure-submodules.py frida-core
- name: Set up C toolchain
working-directory: subprojects/frida-core/src/barebone/agent
run: |
npm install -g xpm
xpm install
echo "$PWD/xpacks/.bin" >> $GITHUB_PATH
- name: Set up Rust target
run: rustup target add aarch64-unknown-none
- name: Download GumJS devkit
uses: actions/download-artifact@v8
with:
name: frida-gumjs-devkit-none-arm64
path: ${{ runner.workspace }}/gumjs-devkit
- name: Build agent
working-directory: subprojects/frida-core/src/barebone/agent
run: cargo build --release --features xnu
env:
CC_aarch64_unknown_none: aarch64-none-elf-gcc
AR_aarch64_unknown_none: aarch64-none-elf-ar
RANLIB_aarch64_unknown_none: aarch64-none-elf-ranlib
GUMJS_DEVKIT_DIR: ${{ runner.workspace }}/gumjs-devkit
- name: Upload agent
uses: actions/upload-artifact@v7
with:
name: frida-barebone-agent-none-arm64
path: subprojects/frida-core/src/barebone/agent/target/aarch64-unknown-none/release/frida-barebone-agent
frida-gum-none-softfloat:
needs: sdk-none-softfloat
strategy:
matrix:
arch: [x86_64, arm64]
fail-fast: false
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: 24
- name: Grab frida-gum
run: python tools/ensure-submodules.py frida-gum
- name: Set up C toolchain
run: |
curl -sSL https://apt.llvm.org/llvm.sh -o llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh $CLANG_VERSION
sudo ln -sf /usr/bin/clang-$CLANG_VERSION /usr/bin/clang
sudo ln -sf /usr/bin/clang++-$CLANG_VERSION /usr/bin/clang++
env:
CLANG_VERSION: 21
- name: Configure Gum
working-directory: subprojects/frida-gum
run: >-
./configure
--host=none-${{ matrix.arch }}-softfloat
--enable-gumjs
--with-devkits=gum,gumjs
--with-devkit-symbol-scope=original
env:
CC: clang
CXX: clang++
- name: Compile
working-directory: subprojects/frida-gum
run: make
- name: Upload Gum devkit
uses: actions/upload-artifact@v7
with:
name: frida-gum-devkit-none-${{ matrix.arch }}-softfloat
path: subprojects/frida-gum/build/gum/devkit/
- name: Upload GumJS devkit
uses: actions/upload-artifact@v7
with:
name: frida-gumjs-devkit-none-${{ matrix.arch }}-softfloat
path: subprojects/frida-gum/build/bindings/gumjs/devkit/
# The Makefile drives Cargo and the prelink itself, so the flags the agent needs live
# there rather than here. It stops at the prelinked object: a .ko is only loadable on
# the exact GKI build it was made for, since vermagic names it verbatim, so the
# kernel half is left to whoever has that kernel.
frida-barebone-agent-none-softfloat:
needs: frida-gum-none-softfloat
strategy:
matrix:
include:
- arch: x86_64
kernel_arch: x86
rust_target: x86_64-unknown-none
toolprefix: ''
binutils: ''
- arch: arm64
kernel_arch: arm64
rust_target: aarch64-unknown-none
toolprefix: aarch64-linux-gnu-
binutils: binutils-aarch64-linux-gnu
fail-fast: false
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Grab frida-core
run: python tools/ensure-submodules.py frida-core
# The prelink reads nm's archive map, which only GNU nm emits.
- name: Set up binutils
if: matrix.binutils != ''
run: |
sudo apt-get update
sudo apt-get install -y ${{ matrix.binutils }}
- name: Set up C toolchain
run: |
curl -sSL https://apt.llvm.org/llvm.sh -o llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh $CLANG_VERSION
sudo ln -sf /usr/bin/clang-$CLANG_VERSION /usr/bin/clang
env:
CLANG_VERSION: 21
- name: Fetch the SDK
run: releng/deps.py sync sdk none-${{ matrix.arch }}-softfloat $SDK_PREFIX
env:
SDK_PREFIX: ${{ runner.workspace }}/sdk-none-${{ matrix.arch }}-softfloat
- name: Set up Rust target
run: |
rustup target add ${{ matrix.rust_target }}
rustup component add rust-src
- name: Download GumJS devkit
uses: actions/download-artifact@v8
with:
name: frida-gumjs-devkit-none-${{ matrix.arch }}-softfloat
path: ${{ runner.workspace }}/gumjs-devkit
- name: Build agent
working-directory: subprojects/frida-core/src/barebone/agent/linux
run: >-
make frida-agent-prelinked.o.bin
ARCH=${{ matrix.kernel_arch }}
FRIDA_SDK=${{ runner.workspace }}/sdk-none-${{ matrix.arch }}-softfloat
AGENT_LD=${{ matrix.toolprefix }}ld
AGENT_AR=${{ matrix.toolprefix }}ar
AGENT_NM=${{ matrix.toolprefix }}nm
AGENT_OBJCOPY=${{ matrix.toolprefix }}objcopy
env:
GUMJS_DEVKIT_DIR: ${{ runner.workspace }}/gumjs-devkit
# Everything the module needs from the kernel goes through frida-kmod.c, and
# everything the kernel may see of us is the two entry points it calls. Both
# have broken before: a libc whose lock stubs collided with ours, and a devkit
# built against a different libc leaving its errno behind.
- name: Check the prelink
working-directory: subprojects/frida-core/src/barebone/agent/linux
run: |
undefined=$(${{ matrix.toolprefix }}nm --undefined-only frida-agent-prelinked.o.bin \
| awk '{ print $2 }' | grep -v '^frida_kmod_' || true)
if [ -n "$undefined" ]; then
echo "Undefined beyond the kmod glue:" $undefined
exit 1
fi
globals=$(${{ matrix.toolprefix }}nm --defined-only --extern-only frida-agent-prelinked.o.bin \
| awk '{ print $3 }' | sort | paste -sd' ')
if [ "$globals" != "$EXPECTED_GLOBALS" ]; then
echo "Global symbols beyond the entry points:" $globals
exit 1
fi
env:
EXPECTED_GLOBALS: >-
frida_agent_start frida_agent_stop
gum_interceptor_begin_transaction gum_interceptor_end_transaction
gum_interceptor_obtain gum_interceptor_replace
gum_interceptor_revert
- name: Check for notrack jumps
if: matrix.kernel_arch == 'x86'
working-directory: subprojects/frida-core/src/barebone/agent/linux
run: |
if objdump -d frida-agent-prelinked.o.bin | grep -q notrack; then
objdump -d frida-agent-prelinked.o.bin | grep -B 2 notrack
exit 1
fi
toolchain-windows:
strategy:
matrix:
arch: [x86, arm64]
fail-fast: false
runs-on: ${{ matrix.arch == 'arm64' && 'windows-11-arm' || 'windows-latest' }}
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-windows-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Roll toolchain
run: python releng\deps.py roll toolchain windows-${{ matrix.arch }}
sdk-windows:
needs: toolchain-windows
strategy:
matrix:
arch: [x86, x86_64, arm64]
config: [md, mdd, mt, mtd]
fail-fast: false
runs-on: ${{ matrix.arch == 'arm64' && 'windows-11-arm' || 'windows-latest' }}
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-windows-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Roll SDK
run: python releng\deps.py roll sdk windows-${{ matrix.arch }}-${{ matrix.config }} --activate
toolchain-macos:
strategy:
matrix:
arch: [x86_64, arm64]
fail-fast: false
runs-on: macos-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Roll toolchain
run: releng/deps.py roll toolchain macos-${{ matrix.arch }}
sdk-macos:
needs: toolchain-macos
strategy:
matrix:
arch: [x86_64, arm64, arm64e]
fail-fast: false
runs-on: macos-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
keychain-password: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Roll SDK
run: releng/deps.py roll sdk macos-${{ matrix.arch }} --activate
sdk-ios:
needs: toolchain-macos
strategy:
matrix:
arch: [arm64, arm64e, x86_64-simulator, arm64-simulator]
fail-fast: false
runs-on: macos-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Roll SDK
run: releng/deps.py roll sdk ios-${{ matrix.arch }} --activate
sdk-watchos:
needs: toolchain-macos
strategy:
matrix:
arch: [arm64, arm64-simulator]
fail-fast: false
runs-on: macos-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Roll SDK
run: releng/deps.py roll sdk watchos-${{ matrix.arch }} --activate
sdk-tvos:
needs: toolchain-macos
strategy:
matrix:
arch: [arm64, arm64-simulator]
fail-fast: false
runs-on: macos-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-macos-env
with:
certificates-p12: ${{ secrets.APPLE_CERTIFICATES_P12 }}
certificates-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Roll SDK
run: releng/deps.py roll sdk tvos-${{ matrix.arch }} --activate
toolchain-linux:
strategy:
matrix:
arch: [x86, x86_64, x86_64-musl, armhf, armhf-musl, armbe8, arm64, arm64be, arm64beilp32, arm64-musl]
fail-fast: false
runs-on: ubuntu-latest
container: ghcr.io/frida/x-tools-linux-${{ matrix.arch }}:latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Roll toolchain
run: releng/deps.py roll toolchain $XTOOLS_HOST
sdk-linux:
needs: toolchain-linux
strategy:
matrix:
arch: [x86, x86_64, x86_64-musl, armhf, armhf-musl, armbe8, arm64, arm64be, arm64beilp32, arm64-musl, mips, mipsel, mips64, mips64el]
fail-fast: false
runs-on: ubuntu-latest
container: ghcr.io/frida/x-tools-linux-${{ matrix.arch }}:latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Set FRIDA_CAN_RUN_HOST_BINARIES
if: ${{ matrix.arch == 'x86' }}
run: echo "FRIDA_CAN_RUN_HOST_BINARIES=yes" >> $GITHUB_ENV
- name: Configure qemu-user
if: ${{ !startsWith(matrix.arch, 'x86') }}
run: echo "FRIDA_QEMU_SYSROOT=/opt/x-tools/$XTOOLS_HOST/$XTOOLS_HOST/sysroot" >> $GITHUB_ENV
- name: Roll SDK
run: releng/deps.py roll sdk $XTOOLS_HOST --activate
sdk-android-32:
needs: toolchain-linux
strategy:
matrix:
arch: [x86, arm]
fail-fast: false
runs-on: ubuntu-latest
container: ghcr.io/frida/x-tools-linux-x86:latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Set up NDK
id: setup-ndk
uses: nttld/setup-ndk@v1
with:
ndk-version: ${{ env.ANDROID_NDK_VERSION }}
add-to-path: false
- name: Roll SDK
run: releng/deps.py roll sdk android-${{ matrix.arch }} --build=$XTOOLS_HOST --activate
env:
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
sdk-android-64:
needs: toolchain-linux
strategy:
matrix:
arch: [x86_64, arm64]
fail-fast: false
runs-on: ubuntu-latest
container: ghcr.io/frida/x-tools-linux-x86_64:latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Set up NDK
id: setup-ndk
uses: nttld/setup-ndk@v1
with:
ndk-version: ${{ env.ANDROID_NDK_VERSION }}
add-to-path: false
- name: Roll SDK
run: releng/deps.py roll sdk android-${{ matrix.arch }} --build=$XTOOLS_HOST --activate
env:
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
sdk-none-arm64:
needs: toolchain-linux
runs-on: ubuntu-latest
container: ghcr.io/frida/x-tools-linux-x86_64:latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: 24
- name: Check out barebone agent
run: git submodule update --init --depth 1 subprojects/frida-core
- name: Set up C toolchain
working-directory: subprojects/frida-core/src/barebone/agent
run: |
npm install -g xpm
xpm install
echo "$PWD/xpacks/.bin" >> $GITHUB_PATH
- name: Roll SDK
run: releng/deps.py roll sdk aarch64-none-elf --activate
sdk-none-softfloat:
needs: toolchain-linux
strategy:
matrix:
arch: [x86_64, arm64]
fail-fast: false
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v7
- name: Set up environment
uses: ./.github/actions/setup-linux-env
with:
aws-access-key-id: ${{ secrets.S3_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
cloudflare-email: ${{ secrets.CF_EMAIL }}
cloudflare-token: ${{ secrets.CF_TOKEN }}
- name: Check whether the SDK is already published
id: sdk
run: echo "published=$(releng/deps.py published sdk none-${{ matrix.arch }}-softfloat)" >> $GITHUB_OUTPUT
- name: Set up C toolchain
if: steps.sdk.outputs.published == 'false'
run: |
sudo apt-get update
sudo apt-get install -y gperf
sudo npm install -g cloudflare-cli@5.0.5
curl -sSL https://apt.llvm.org/llvm.sh -o llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh $CLANG_VERSION
sudo ln -sf /usr/bin/clang-$CLANG_VERSION /usr/bin/clang
sudo ln -sf /usr/bin/clang++-$CLANG_VERSION /usr/bin/clang++
env:
CLANG_VERSION: 21
- name: Roll SDK
run: releng/deps.py roll sdk none-${{ matrix.arch }}-softfloat --activate
env:
CC: clang
CXX: clang++