Skip to content

feat: replace LuaJIT with QuickJS-ng P/Invoke bindings #2

feat: replace LuaJIT with QuickJS-ng P/Invoke bindings

feat: replace LuaJIT with QuickJS-ng P/Invoke bindings #2

Workflow file for this run

name: Build QuickJS
on:
workflow_dispatch:
push:
paths:
- ".github/workflows/build.yml"
env:
QUICKJS_REPO: https://github.com/quickjs-ng/quickjs.git
jobs:
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Clone QuickJS
run: git clone --depth 1 ${{ env.QUICKJS_REPO }} quickjs
- name: Build QuickJS
run: |
cmake -S quickjs -B build -G "Visual Studio 17 2022" -A x64 -DBUILD_SHARED_LIBS=ON
cmake --build build --config Release
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: win-x64
path: build/Release/qjs.dll
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Clone QuickJS
run: git clone --depth 1 ${{ env.QUICKJS_REPO }} quickjs
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y build-essential cmake
- name: Build QuickJS
run: |
cmake -S quickjs -B build -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: linux-x64
path: build/libqjs.so
build-macos-x64:
runs-on: macos-14
env:
MACOSX_DEPLOYMENT_TARGET: "11.0"
steps:
- uses: actions/checkout@v4
- name: Clone QuickJS
run: git clone --depth 1 ${{ env.QUICKJS_REPO }} quickjs
- name: Build QuickJS for x64
run: |
cmake -S quickjs -B build -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64
cmake --build build -j$(sysctl -n hw.ncpu)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: osx-x64
path: build/libqjs.dylib
build-macos-arm64:
runs-on: macos-14
env:
MACOSX_DEPLOYMENT_TARGET: "11.0"
steps:
- uses: actions/checkout@v4
- name: Clone QuickJS
run: git clone --depth 1 ${{ env.QUICKJS_REPO }} quickjs
- name: Build QuickJS for arm64
run: |
cmake -S quickjs -B build -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=arm64
cmake --build build -j$(sysctl -n hw.ncpu)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: osx-arm64
path: build/libqjs.dylib
build-ios:
runs-on: macos-14
env:
IPHONEOS_DEPLOYMENT_TARGET: "12.0"
steps:
- uses: actions/checkout@v4
- name: Clone QuickJS
run: git clone --depth 1 ${{ env.QUICKJS_REPO }} quickjs
- name: Build QuickJS for iOS arm64
run: |
cmake -S quickjs -B build \
-DCMAKE_SYSTEM_NAME=iOS \
-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(sysctl -n hw.ncpu)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ios-arm64
path: build/libqjs.a
build-android-arm64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Clone QuickJS
run: git clone --depth 1 ${{ env.QUICKJS_REPO }} quickjs
- name: Setup NDK
uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r26d
add-to-path: false
- name: Build QuickJS for Android arm64
env:
NDK: ${{ steps.setup-ndk.outputs.ndk-path }}
run: |
cmake -S quickjs -B build \
-DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-21 \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: android-arm64
path: build/libqjs.so
build-android-armv7:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Clone QuickJS
run: git clone --depth 1 ${{ env.QUICKJS_REPO }} quickjs
- name: Setup NDK
uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r26d
add-to-path: false
- name: Build QuickJS for Android armv7
env:
NDK: ${{ steps.setup-ndk.outputs.ndk-path }}
run: |
cmake -S quickjs -B build \
-DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=armeabi-v7a \
-DANDROID_PLATFORM=android-21 \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: android-armv7
path: build/libqjs.so
build-android-x86:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Clone QuickJS
run: git clone --depth 1 ${{ env.QUICKJS_REPO }} quickjs
- name: Setup NDK
uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r26d
add-to-path: false
- name: Build QuickJS for Android x86
env:
NDK: ${{ steps.setup-ndk.outputs.ndk-path }}
run: |
cmake -S quickjs -B build \
-DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=x86 \
-DANDROID_PLATFORM=android-21 \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: android-x86
path: build/libqjs.so
commit-binaries:
needs:
- build-windows
- build-linux
- build-macos-x64
- build-macos-arm64
- build-ios
- build-android-arm64
- build-android-armv7
- build-android-x86
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Copy binaries to runtime folders
run: |
mkdir -p runtimes/win-x64/native
mkdir -p runtimes/linux-x64/native
mkdir -p runtimes/osx-x64/native
mkdir -p runtimes/osx-arm64/native
mkdir -p runtimes/ios-arm64/native
mkdir -p runtimes/android-arm64/native
mkdir -p runtimes/android-armv7/native
mkdir -p runtimes/android-x86/native
cp artifacts/win-x64/qjs.dll runtimes/win-x64/native/
cp artifacts/linux-x64/libqjs.so runtimes/linux-x64/native/qjs.so
cp artifacts/osx-x64/libqjs.dylib runtimes/osx-x64/native/qjs.dylib
cp artifacts/osx-arm64/libqjs.dylib runtimes/osx-arm64/native/qjs.dylib
cp artifacts/ios-arm64/libqjs.a runtimes/ios-arm64/native/qjs.a
cp artifacts/android-arm64/libqjs.so runtimes/android-arm64/native/qjs.so
cp artifacts/android-armv7/libqjs.so runtimes/android-armv7/native/qjs.so
cp artifacts/android-x86/libqjs.so runtimes/android-x86/native/qjs.so
- name: Commit and push
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add runtimes/
git diff --cached --quiet || git commit -m "build: update QuickJS binaries"
git push