Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linux ARM64 artifact build #25

Merged
merged 15 commits into from
Sep 14, 2024
4 changes: 4 additions & 0 deletions .github/images/Dockerfile.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
FROM ubuntu:22.04

RUN apt-get -y update && \
apt-get -y install build-essential cmake m4 nasm curl
Empty file.
125 changes: 108 additions & 17 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ on:
pull_request:

jobs:

build-linux:
runs-on: ubuntu-22.04
steps:
Expand All @@ -22,23 +23,52 @@ jobs:
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') }}-2
key: ${{ runner.os }}-gmp-${{ hashFiles('build_gmp.sh') }}-4

- name: build gmp for Android arm64
- 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
- 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
- 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
Expand All @@ -63,14 +93,33 @@ jobs:
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
- 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: test rapidsnark
- 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
Expand All @@ -84,16 +133,34 @@ jobs:
set -e
[ $exit_code -ne 0 ]

- name: upload Linux amd64 dev artifacts
- name: Upload Linux x86_64 dev artifacts
if: github.event_name != 'release'
uses: actions/upload-artifact@v4
with:
name: rapidsnark-linux-amd64
name: rapidsnark-linux-x86_64
path: |
package
if-no-files-found: error

- name: upload Android dev artifacts
- 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:
Expand All @@ -102,7 +169,7 @@ jobs:
package_android
if-no-files-found: error

- name: upload Android dev artifacts
- name: Upload Android dev artifacts
if: github.event_name != 'release'
uses: actions/upload-artifact@v4
with:
Expand All @@ -111,7 +178,7 @@ jobs:
package_android_openmp
if-no-files-found: error

- name: upload Android x86_64 dev artifacts
- name: Upload Android x86_64 dev artifacts
if: github.event_name != 'release'
uses: actions/upload-artifact@v4
with:
Expand All @@ -120,7 +187,7 @@ jobs:
package_android_x86_64
if-no-files-found: error

- name: upload Android x86_64 dev artifacts (with OpenMP)
- name: Upload Android x86_64 dev artifacts (with OpenMP)
if: github.event_name != 'release'
uses: actions/upload-artifact@v4
with:
Expand All @@ -129,7 +196,7 @@ jobs:
package_android_openmp_x86_64
if-no-files-found: error

- name: upload Android ARM64 release artifacts
- name: Upload Android ARM64 release artifacts
if: github.event_name == 'release'
env:
GH_TOKEN: ${{ github.token }}
Expand All @@ -140,7 +207,7 @@ jobs:
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
- name: Upload Android x86_64 release artifacts
if: github.event_name == 'release'
env:
GH_TOKEN: ${{ github.token }}
Expand All @@ -151,7 +218,7 @@ jobs:
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
- name: Upload Linux x86_64 release artifacts
if: github.event_name == 'release'
env:
GH_TOKEN: ${{ github.token }}
Expand All @@ -162,8 +229,30 @@ jobs:
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-13-xlarge
runs-on: macos-14
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -186,12 +275,14 @@ jobs:
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 -DCMAKE_INSTALL_PREFIX=../package_ios_simulator -DUSE_ASM=NO -DBUILD_TESTS=OFF
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 ../

Expand Down
4 changes: 4 additions & 0 deletions cmake/platform.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ elseif(TARGET_PLATFORM MATCHES "ios")
set(CMAKE_OSX_ARCHITECTURES x86_64)
set(GMP_PREFIX ${GMP_ROOT}/package_ios_x86_64)
set(ARCH x86_64)
elseif(TARGET_PLATFORM MATCHES "ios_simulator")
set(CMAKE_OSX_ARCHITECTURES arm64)
set(GMP_PREFIX ${GMP_ROOT}/package_iphone_simulator_arm64)
set(ARCH x86_64)
else()
set(CMAKE_OSX_ARCHITECTURES arm64)
set(GMP_PREFIX ${GMP_ROOT}/package_ios_arm64)
Expand Down