Linux ARM64 artifact build #100
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
release: | |
types: [published] | |
push: | |
branches: | |
- main | |
pull_request: | |
jobs: | |
build-linux: | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- name: install requirements | |
uses: awalsh128/cache-apt-pkgs-action@v1 | |
with: | |
packages: build-essential cmake m4 nasm | |
version: 1.0 | |
- name: Setup QEMU to build ARM64 variant | |
uses: docker/setup-qemu-action@v3 | |
- name: Setup buildx for ARM64 platform | |
uses: docker/setup-buildx-action@v3 | |
with: | |
platforms: linux/amd64,linux/arm64 | |
- name: Prepare Docker image builder for ARM64 | |
uses: docker/build-push-action@v6 | |
env: | |
DOCKER_BUILD_SUMMARY: false | |
DOCKER_BUILD_RECORD_UPLOAD: false | |
with: | |
push: false | |
outputs: type=docker | |
platforms: linux/arm64 | |
file: .github/images/Dockerfile.build | |
context: ./.github/images/context.build | |
cache-from: type=gha,scope=buildkit-arm64 | |
cache-to: type=gha,mode=max,scope=buildkit-arm64 | |
tags: builder:arm64 | |
- name: Cache gmp build | |
uses: actions/cache@v4 | |
with: | |
path: | | |
depends/gmp | |
depends/gmp-6.2.1.tar.xz | |
key: ${{ runner.os }}-gmp-${{ hashFiles('build_gmp.sh') }}-4 | |
- name: Build gmp for Android arm64 | |
run: if [[ ! -d "depends/gmp/package_android_arm64" ]]; then ./build_gmp.sh android; fi | |
- name: Build gmp for Android x86_64 | |
run: if [[ ! -d "depends/gmp/package_android_x86_64" ]]; then ./build_gmp.sh android_x86_64; fi | |
- name: Build gmp for Linux x86_64 | |
run: if [[ ! -d "depends/gmp/package" ]]; then ./build_gmp.sh host; fi | |
- name: Build gmp for Linux arm64 | |
run: | | |
if [[ ! -d "depends/gmp/package_aarch64" ]]; then | |
docker run --rm --platform=linux/arm64 -i -v $PWD:/work --workdir=/work builder:arm64 ./build_gmp.sh aarch64 | |
fi | |
- name: Build prover Android ARM64 | |
run: | | |
mkdir -p build_prover_android && cd build_prover_android | |
cmake .. -DTARGET_PLATFORM=ANDROID -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_android -DBUILD_TESTS=OFF -DUSE_OPENMP=OFF | |
make -j4 && make install | |
- name: Build prover Android ARM64 with OpenMP | |
run: | | |
mkdir -p build_prover_android_openmp && cd build_prover_android_openmp | |
cmake .. -DTARGET_PLATFORM=ANDROID -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_android_openmp -DBUILD_TESTS=OFF -DUSE_OPENMP=ON | |
make -j4 && make install | |
- name: Build prover Android x86_64 | |
run: | | |
mkdir -p build_prover_android_x86_64 && cd build_prover_android_x86_64 | |
cmake .. -DTARGET_PLATFORM=ANDROID_x86_64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_android_x86_64 -DBUILD_TESTS=OFF -DUSE_OPENMP=OFF | |
make -j4 && make install | |
- name: Build prover Android x86_64 with OpenMP | |
run: | | |
mkdir -p build_prover_android_openmp_x86_64 && cd build_prover_android_openmp_x86_64 | |
cmake .. -DTARGET_PLATFORM=ANDROID_x86_64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_android_openmp_x86_64 -DBUILD_TESTS=OFF -DUSE_OPENMP=ON | |
make -j4 && make install | |
- name: Build prover Linux x86_64 | |
run: | | |
mkdir -p build_prover && cd build_prover | |
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package | |
make -j4 && make install | |
ctest --rerun-failed --output-on-failure | |
- name: Build prover Linux x86_64 noasm | |
run: | | |
mkdir -p build_prover_noasm && cd build_prover_noasm | |
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_noasm -DUSE_ASM=NO | |
make -j4 && make install | |
ctest --rerun-failed --output-on-failure | |
- name: Build prover Linux arm64 | |
run: | | |
docker run --rm --platform=linux/arm64 -i -v $PWD:/work --workdir=/work builder:arm64 bash -c "$(cat << 'EOF' | |
set -x | |
set -e | |
mkdir -p build_prover_arm64 && cd build_prover_arm64 | |
cmake .. -DTARGET_PLATFORM=aarch64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_arm64 | |
make -j4 && make install | |
ctest --rerun-failed --output-on-failure | |
EOF | |
)" | |
- name: Test rapidsnark | |
run: | | |
set -x | |
set -e | |
time package/bin/prover testdata/circuit_final.zkey testdata/witness.wtns proof.json public.json | |
time package/bin/verifier testdata/verification_key.json public.json proof.json | |
# make a wrong public.json by decrementing the first element by 1 | |
(value_0=$(jq '.[0]' public.json | tr -d '"') && value_0=$(echo "$value_0 - 1" | BC_LINE_LENGTH=100 bc) && jq --arg value_0 "$value_0" '.[0] = $value_0' public.json) > public_bad.json | |
set +e | |
time package/bin/verifier testdata/verification_key.json public_bad.json proof.json | |
exit_code=$? | |
set -e | |
[ $exit_code -ne 0 ] | |
- name: Upload Linux x86_64 dev artifacts | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-linux-x86_64 | |
path: | | |
package | |
if-no-files-found: error | |
- name: Upload Linux x86_64 noasm dev artifacts | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-linux-x86_64-noasm | |
path: | | |
package_noasm | |
if-no-files-found: error | |
- name: Upload Linux arm64 dev artifacts | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-linux-arm64 | |
path: | | |
package_arm64 | |
if-no-files-found: error | |
- name: Upload Android dev artifacts | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-Android | |
path: | | |
package_android | |
if-no-files-found: error | |
- name: Upload Android dev artifacts | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-Android-OpenMP | |
path: | | |
package_android_openmp | |
if-no-files-found: error | |
- name: Upload Android x86_64 dev artifacts | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-Android-x86_64 | |
path: | | |
package_android_x86_64 | |
if-no-files-found: error | |
- name: Upload Android x86_64 dev artifacts (with OpenMP) | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-Android-OpenMP-x86_64 | |
path: | | |
package_android_openmp_x86_64 | |
if-no-files-found: error | |
- name: Upload Android ARM64 release artifacts | |
if: github.event_name == 'release' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
set -x | |
mkdir -p rapidsnark-android-arm64-${{ github.ref_name }} | |
cp -r package_android/* rapidsnark-android-arm64-${{ github.ref_name }}/ | |
zip -r rapidsnark-android-arm64-${{ github.ref_name }}.zip rapidsnark-android-arm64-${{ github.ref_name }} | |
gh release upload ${{ github.event.release.tag_name }} rapidsnark-android-arm64-${{ github.ref_name }}.zip | |
- name: Upload Android x86_64 release artifacts | |
if: github.event_name == 'release' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
set -x | |
mkdir -p rapidsnark-android-x86_64-${{ github.ref_name }} | |
cp -r package_android_x86_64/* rapidsnark-android-x86_64-${{ github.ref_name }}/ | |
zip -r rapidsnark-android-x86_64-${{ github.ref_name }}.zip rapidsnark-android-x86_64-${{ github.ref_name }} | |
gh release upload ${{ github.event.release.tag_name }} rapidsnark-android-x86_64-${{ github.ref_name }}.zip | |
- name: Upload Linux x86_64 release artifacts | |
if: github.event_name == 'release' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
set -x | |
mkdir -p rapidsnark-linux-x86_64-${{ github.ref_name }} | |
cp -r package/* rapidsnark-linux-x86_64-${{ github.ref_name }}/ | |
zip -r rapidsnark-linux-x86_64-${{ github.ref_name }}.zip rapidsnark-linux-x86_64-${{ github.ref_name }} | |
gh release upload ${{ github.event.release.tag_name }} rapidsnark-linux-x86_64-${{ github.ref_name }}.zip | |
- name: Upload Linux x86_64 noasm release artifacts | |
if: github.event_name == 'release' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
set -x | |
mkdir -p rapidsnark-linux-x86_64-noasm-${{ github.ref_name }} | |
cp -r package_noasm/* rapidsnark-linux-x86_64-noasm-${{ github.ref_name }}/ | |
zip -r rapidsnark-linux-x86_64-noasm-${{ github.ref_name }}.zip rapidsnark-linux-x86_64-noasm-${{ github.ref_name }} | |
gh release upload ${{ github.event.release.tag_name }} rapidsnark-linux-x86_64-noasm-${{ github.ref_name }}.zip | |
- name: Upload Linux ARM64 release artifacts | |
if: github.event_name == 'release' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
set -x | |
mkdir -p rapidsnark-linux-arm64-${{ github.ref_name }} | |
cp -r package_arm64/* rapidsnark-linux-arm64-${{ github.ref_name }}/ | |
zip -r rapidsnark-linux-arm64-${{ github.ref_name }}.zip rapidsnark-linux-arm64-${{ github.ref_name }} | |
gh release upload ${{ github.event.release.tag_name }} rapidsnark-linux-arm64-${{ github.ref_name }}.zip | |
build-apple-arm64: | |
runs-on: macos-14 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- name: Cache gmp build | |
uses: actions/cache@v4 | |
with: | |
path: | | |
depends/gmp | |
depends/gmp-6.2.1.tar.xz | |
key: ${{ runner.os }}-gmp-arm64-${{ hashFiles('build_gmp.sh') }} | |
- name: build | |
run: | | |
if [[ ! -d "depends/gmp/package_ios_arm64" ]]; then ./build_gmp.sh ios; fi | |
if [[ ! -d "depends/gmp/package_iphone_simulator" ]]; then ./build_gmp.sh ios_simulator; fi | |
if [[ ! -d "depends/gmp/package_macos_arm64" ]]; then ./build_gmp.sh macos_arm64; fi | |
mkdir -p build_prover_ios && cd build_prover_ios | |
cmake .. -GXcode -DTARGET_PLATFORM=IOS -DCMAKE_INSTALL_PREFIX=../package_ios -DBUILD_TESTS=OFF | |
xcodebuild -destination 'generic/platform=iOS' -scheme rapidsnarkStatic -project rapidsnark.xcodeproj -configuration Release | |
xcodebuild -destination 'generic/platform=iOS' -scheme rapidsnark -project rapidsnark.xcodeproj -configuration Release CODE_SIGNING_ALLOWED=NO | |
cp ../depends/gmp/package_ios_arm64/lib/libgmp.a src/Release-iphoneos | |
cd ../ | |
mkdir -p build_prover_ios_simulator && cd build_prover_ios_simulator | |
cmake .. -GXcode -DTARGET_PLATFORM=IOS_SIMULATOR -DCMAKE_INSTALL_PREFIX=../package_ios_simulator -DUSE_ASM=NO -DBUILD_TESTS=OFF | |
xcodebuild -destination 'generic/platform=iOS Simulator' -scheme rapidsnarkStatic -project rapidsnark.xcodeproj | |
xcodebuild -destination 'generic/platform=iOS Simulator' -scheme rapidsnark -project rapidsnark.xcodeproj CODE_SIGNING_ALLOWED=NO ARCHS=arm64 | |
cp ../depends/gmp/package_iphone_simulator/lib/libgmp.a src/Debug-iphonesimulator | |
cd ../ | |
mkdir -p build_prover_macos_arm64 && cd build_prover_macos_arm64 | |
cmake .. -DTARGET_PLATFORM=macos_arm64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_macos_arm64 | |
make -j4 && make install | |
ctest --rerun-failed --output-on-failure | |
- name: test rapidsnark | |
run: | | |
set -x | |
set -e | |
time package_macos_arm64/bin/prover testdata/circuit_final.zkey testdata/witness.wtns proof.json public.json | |
time package_macos_arm64/bin/verifier testdata/verification_key.json public.json proof.json | |
# make a wrong public.json by decrementing the first element by 1 | |
(value_0=$(jq '.[0]' public.json | tr -d '"') && value_0=$(echo "$value_0 - 1" | BC_LINE_LENGTH=100 bc) && jq --arg value_0 "$value_0" '.[0] = $value_0' public.json) > public_bad.json | |
set +e | |
time package_macos_arm64/bin/verifier testdata/verification_key.json public_bad.json proof.json | |
exit_code=$? | |
set -e | |
[ $exit_code -ne 0 ] | |
- name: upload macOS arm64 dev artifacts | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-macOS-arm64 | |
path: | | |
package_macos_arm64 | |
if-no-files-found: error | |
- name: upload iOS dev artifacts | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-iOS | |
path: | | |
build_prover_ios/src/Release-iphoneos | |
if-no-files-found: error | |
- name: upload iOS Simulator dev artifacts | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-iOS-Simulator | |
path: | | |
build_prover_ios_simulator/src/Debug-iphonesimulator | |
if-no-files-found: error | |
- name: upload iOS release artifacts | |
if: github.event_name == 'release' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
set -x | |
mkdir -p rapidsnark-iOS-${{ github.ref_name }} | |
cp -r build_prover_ios/src/Release-iphoneos/* rapidsnark-iOS-${{ github.ref_name }}/ | |
zip -r rapidsnark-iOS-${{ github.ref_name }}.zip rapidsnark-iOS-${{ github.ref_name }} | |
gh release upload ${{ github.event.release.tag_name }} rapidsnark-iOS-${{ github.ref_name }}.zip | |
- name: upload iOS Simulator release artifacts | |
if: github.event_name == 'release' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
set -x | |
mkdir -p rapidsnark-iOS-Simulator-${{ github.ref_name }} | |
cp -r build_prover_ios_simulator/src/Debug-iphonesimulator/* rapidsnark-iOS-Simulator-${{ github.ref_name }}/ | |
zip -r rapidsnark-iOS-Simulator-${{ github.ref_name }}.zip rapidsnark-iOS-Simulator-${{ github.ref_name }} | |
gh release upload ${{ github.event.release.tag_name }} rapidsnark-iOS-Simulator-${{ github.ref_name }}.zip | |
- name: upload macOS arm64 release artifacts | |
if: github.event_name == 'release' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
set -x | |
mkdir -p rapidsnark-macOS-arm64-${{ github.ref_name }} | |
cp -r package_macos_arm64/* rapidsnark-macOS-arm64-${{ github.ref_name }}/ | |
zip -r rapidsnark-macOS-arm64-${{ github.ref_name }}.zip rapidsnark-macOS-arm64-${{ github.ref_name }} | |
gh release upload ${{ github.event.release.tag_name }} rapidsnark-macOS-arm64-${{ github.ref_name }}.zip | |
build-apple-x86_64: | |
runs-on: macos-13 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- name: Cache gmp build | |
uses: actions/cache@v4 | |
with: | |
path: | | |
depends/gmp | |
depends/gmp-6.2.1.tar.xz | |
key: ${{ runner.os }}-gmp-x86_64-${{ hashFiles('build_gmp.sh') }}-2 | |
- name: install dependencies | |
run: | | |
brew install nasm | |
- name: build | |
run: | | |
if [[ ! -d "depends/gmp/package_macos_x86_64" ]]; then ./build_gmp.sh macos_x86_64; fi | |
mkdir -p build_prover_macos_x86_64 && cd build_prover_macos_x86_64 | |
cmake .. -DTARGET_PLATFORM=macos_x86_64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_macos_x86_64 | |
make -j4 && make install | |
ctest --rerun-failed --output-on-failure | |
- name: test rapidsnark | |
run: | | |
set -x | |
set -e | |
time package_macos_x86_64/bin/prover testdata/circuit_final.zkey testdata/witness.wtns proof.json public.json | |
time package_macos_x86_64/bin/verifier testdata/verification_key.json public.json proof.json | |
# make a wrong public.json by decrementing the first element by 1 | |
(value_0=$(jq '.[0]' public.json | tr -d '"') && value_0=$(echo "$value_0 - 1" | BC_LINE_LENGTH=100 bc) && jq --arg value_0 "$value_0" '.[0] = $value_0' public.json) > public_bad.json | |
set +e | |
time package_macos_x86_64/bin/verifier testdata/verification_key.json public_bad.json proof.json | |
exit_code=$? | |
set -e | |
[ $exit_code -ne 0 ] | |
- name: upload macOS x86_64 dev artifacts | |
if: github.event_name != 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rapidsnark-macOS-x86_64 | |
path: | | |
package_macos_x86_64 | |
if-no-files-found: error | |
- name: upload macOS x86_64 release artifacts | |
if: github.event_name == 'release' | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
set -x | |
mkdir -p rapidsnark-macOS-x86_64-${{ github.ref_name }} | |
cp -r package_macos_x86_64/* rapidsnark-macOS-x86_64-${{ github.ref_name }}/ | |
zip -r rapidsnark-macOS-x86_64-${{ github.ref_name }}.zip rapidsnark-macOS-x86_64-${{ github.ref_name }} | |
gh release upload ${{ github.event.release.tag_name }} rapidsnark-macOS-x86_64-${{ github.ref_name }}.zip |