Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions .github/workflows/ci3.yml
Original file line number Diff line number Diff line change
Expand Up @@ -260,3 +260,48 @@ jobs:
AWS_SHUTDOWN_TIME: 180
run: |
./.github/ci3.sh network-tests-kind

# iOS cross-compilation build for barretenberg.
# Runs in parallel with the main CI job on every PR (~9 min per target).
# This builds the bb-external static library for iOS devices and simulators.
# Non-blocking (continue-on-error) to avoid rugging releases - alerts #honk-team on failure.
build-bb-ios:
name: Build iOS static libraries
runs-on: macos-14
if: github.event.pull_request.head.repo.fork != true && github.event.pull_request.draft == false
continue-on-error: true
strategy:
fail-fast: false
matrix:
include:
- preset: ios-arm64
label: arm64-ios
- preset: ios-sim-arm64
label: arm64-ios-sim
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}

- name: Create Build Environment
run: |
brew install cmake ninja

- name: Compile bb-external for iOS
working-directory: barretenberg/cpp
run: |
cmake --preset ${{ matrix.preset }}
cmake --build --preset ${{ matrix.preset }} --target bb-external

- name: Notify Slack on failure
if: failure()
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
run: |
if [ -n "${SLACK_BOT_TOKEN}" ]; then
curl -X POST https://slack.com/api/chat.postMessage \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-type: application/json" \
--data "{\"channel\": \"#honk-team\", \"text\": \"iOS build (${{ matrix.preset }}) FAILED: <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Run>\"}"
fi
106 changes: 27 additions & 79 deletions .github/workflows/publish-bb-mac.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
name: Publish Barretenberg Mac

on:
# We run this manually to patch v2. Otherwise this is obsolete as we cross-compile mac builds.
#push:
# tags:
# - "v*"
push:
tags:
- "v*"
workflow_dispatch:
# Allow pushing a manual nightly release
inputs:
Expand All @@ -18,88 +17,60 @@ on:
description: Whether to publish the build artifacts
type: boolean
default: false
#schedule:
# # Run a nightly release at 2 AM UTC
# - cron: "0 2 * * *"

permissions:
# Necessary to upload new release artifacts
contents: write
issues: write

jobs:
build-mac:
name: Build on Mac (matrix)
runs-on: ${{ matrix.runner }}
build-ios:
name: Build iOS static libraries
runs-on: macos-14
strategy:
matrix:
include:
- label: amd64-darwin
runner: macos-13
cmake_flags: ""
optional: false
- label: arm64-darwin
runner: macos-14
cmake_flags: ""
optional: false
- label: amd64-darwin-starknet
runner: macos-13
cmake_flags: '-DCMAKE_CXX_FLAGS="-DSTARKNET_GARAGA_FLAVORS=1"'
optional: true
- label: arm64-darwin-starknet
runner: macos-14
cmake_flags: '-DCMAKE_CXX_FLAGS="-DSTARKNET_GARAGA_FLAVORS=1"'
optional: true
- preset: ios-arm64
label: arm64-ios
- preset: ios-sim-arm64
label: arm64-ios-sim
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
ref: ${{ inputs.tag || github.sha }}

- name: Create Mac Build Environment
- name: Create Build Environment
run: |
brew install cmake ninja llvm@20
echo "BREW_PREFIX=$(brew --prefix)" >> $GITHUB_ENV
brew install cmake ninja

- name: Replace version string in main.cpp
- name: Compile bb-external for iOS
working-directory: barretenberg/cpp
run: |
version_string=${{ inputs.ref_name || inputs.tag || github.ref_name }}
version_string=$(echo $version_string | sed "s/\//_/")
sed -i.bak "s/00000000\.00000000\.00000000/$version_string/g" src/barretenberg/bb/cli.cpp
cmake --preset ${{ matrix.preset }}
cmake --build --preset ${{ matrix.preset }} --target bb-external

- name: Compile Barretenberg
- name: Package static library (${{ matrix.label }})
working-directory: barretenberg/cpp
continue-on-error: ${{ matrix.optional }}
run: |
cmake --preset homebrew ${{ matrix.cmake_flags }}
cmake --build --preset homebrew --target bb

- name: Package barretenberg artifact (${{ matrix.label }})
working-directory: barretenberg/cpp/build/bin
continue-on-error: ${{ matrix.optional }}
run: |
mkdir dist
cp ./bb ./dist/bb
7z a -ttar -so -an ./dist/* | 7z a -si ./barretenberg-${{ matrix.label }}.tar.gz
tar -czf barretenberg-static-${{ matrix.label }}.tar.gz -C build-${{ matrix.preset }}/lib libbb-external.a

- name: Upload artifact (${{ matrix.label }})
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
continue-on-error: ${{ matrix.optional }}
with:
name: barretenberg-${{ matrix.label }}.tar.gz
path: ./barretenberg/cpp/build/bin/barretenberg-${{ matrix.label }}.tar.gz
name: barretenberg-static-${{ matrix.label }}.tar.gz
path: ./barretenberg/cpp/barretenberg-static-${{ matrix.label }}.tar.gz
retention-days: 3

build-check:
name: Check builds are successful
needs: build-mac
needs: build-ios
if: ${{ always() }}
runs-on: ubuntu-latest
steps:
- name: Report overall success
env:
FAIL: ${{ contains(needs.build-mac.*.result, 'failure') }}
FAIL: ${{ contains(needs.build-ios.result, 'failure') }}
run: |
if [[ $FAIL == true ]]; then
echo "At least one job failed, release is unsuccessful."
Expand Down Expand Up @@ -131,27 +102,15 @@ jobs:
needs: build-check
runs-on: ubuntu-latest
steps:
- name: Download artifact (amd64-darwin)
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
with:
name: barretenberg-amd64-darwin.tar.gz

- name: Download artifact (arm64-darwin)
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
with:
name: barretenberg-arm64-darwin.tar.gz

- name: Download artifact (amd64-darwin-starknet)
- name: Download artifact (arm64-ios)
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
continue-on-error: true
with:
name: barretenberg-amd64-darwin-starknet.tar.gz
name: barretenberg-static-arm64-ios.tar.gz

- name: Download artifact (arm64-darwin-starknet)
- name: Download artifact (arm64-ios-sim)
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
continue-on-error: true
with:
name: barretenberg-arm64-darwin-starknet.tar.gz
name: barretenberg-static-arm64-ios-sim.tar.gz

- name: Determine if prerelease
id: check-prerelease
Expand All @@ -171,16 +130,5 @@ jobs:
tag_name: ${{ inputs.ref_name || inputs.tag || github.ref_name }}
prerelease: ${{ steps.check-prerelease.outputs.is_prerelease == 'true' }}
files: |
barretenberg-amd64-darwin.tar.gz
barretenberg-arm64-darwin.tar.gz

- name: Publish to GitHub (starknet variants)
uses: softprops/action-gh-release@26994186c0ac3ef5cae75ac16aa32e8153525f77
if: ${{ github.event_name != 'workflow_dispatch' || inputs.publish }}
continue-on-error: true
with:
tag_name: ${{ inputs.ref_name || inputs.tag || github.ref_name }}
prerelease: ${{ steps.check-prerelease.outputs.is_prerelease == 'true' }}
files: |
barretenberg-amd64-darwin-starknet.tar.gz
barretenberg-arm64-darwin-starknet.tar.gz
barretenberg-static-arm64-ios.tar.gz
barretenberg-static-arm64-ios-sim.tar.gz
3 changes: 2 additions & 1 deletion barretenberg/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ option(ENABLE_PIC "Builds with position independent code" OFF)
option(SYNTAX_ONLY "only check syntax (-fsyntax-only)" OFF)
option(ENABLE_WASM_BENCH "Enable BB_BENCH benchmarking support in WASM builds (dev only, not for releases)" OFF)
option(AVM "enable building of vm2 module and bb-avm" ON)
option(MOBILE "Build for mobile (excludes lmdb, world_state, vm2, nodejs_module)" OFF)

if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
message(STATUS "Compiling for ARM.")
Expand Down Expand Up @@ -154,7 +155,7 @@ include(cmake/nlohmann_json.cmake)
include(cmake/httplib.cmake)
include(cmake/libdeflate.cmake)

if (NOT WASM)
if (NOT WASM AND NOT MOBILE)
include(cmake/lmdb.cmake)
endif()

Expand Down
44 changes: 44 additions & 0 deletions barretenberg/cpp/CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -530,6 +530,40 @@
"AVM_TRANSPILER_LIB": "${sourceDir}/../../avm-transpiler/target/aarch64-apple-darwin/release/libavm_transpiler.a",
"HAVE_STD_REGEX": "ON"
}
},
{
"name": "ios-arm64",
"displayName": "Build for iOS arm64 (device)",
"description": "Build for iOS arm64 devices using ios.toolchain.cmake",
"binaryDir": "build-ios-arm64",
"generator": "Ninja",
"toolchainFile": "cmake/toolchains/ios.toolchain.cmake",
"cacheVariables": {
"PLATFORM": "OS64",
"DEPLOYMENT_TARGET": "16.3",
"CMAKE_BUILD_TYPE": "Release",
"ENABLE_PIC": "ON",
"ENABLE_ARC": "OFF",
"HAVE_STD_REGEX": "ON",
"MOBILE": "ON"
}
},
{
"name": "ios-sim-arm64",
"displayName": "Build for iOS Simulator arm64",
"description": "Build for iOS Simulator on Apple Silicon using ios.toolchain.cmake",
"binaryDir": "build-ios-sim-arm64",
"generator": "Ninja",
"toolchainFile": "cmake/toolchains/ios.toolchain.cmake",
"cacheVariables": {
"PLATFORM": "SIMULATORARM64",
"DEPLOYMENT_TARGET": "16.3",
"CMAKE_BUILD_TYPE": "Release",
"ENABLE_PIC": "ON",
"ENABLE_ARC": "OFF",
"HAVE_STD_REGEX": "ON",
"MOBILE": "ON"
}
}
],
"buildPresets": [
Expand Down Expand Up @@ -717,6 +751,16 @@
"name": "zig-arm64-macos",
"configurePreset": "zig-arm64-macos",
"inheritConfigureEnvironment": true
},
{
"name": "ios-arm64",
"configurePreset": "ios-arm64",
"inheritConfigureEnvironment": true
},
{
"name": "ios-sim-arm64",
"configurePreset": "ios-sim-arm64",
"inheritConfigureEnvironment": true
}
],
"testPresets": [
Expand Down
27 changes: 26 additions & 1 deletion barretenberg/cpp/bootstrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,17 @@ function build_cross {
fi
}

# Build for iOS (must run on macOS with Xcode installed)
# Arg is preset name: ios-arm64 or ios-sim-arm64
function build_ios {
set -eu
preset=$1
if ! cache_download barretenberg-$preset-$hash.zst; then
build_preset $preset --target bb-external
cache_upload barretenberg-$preset-$hash.zst build-$preset/lib
fi
}

# Selectively build components with address sanitizer (with optimizations)
function build_asan_fast {
set -eu
Expand Down Expand Up @@ -230,9 +241,23 @@ function build_release_dir {
if [ -f build-zig-arm64-linux/lib/libbb-external.a ]; then
tar -czf build-release/barretenberg-static-arm64-linux.tar.gz -C build-zig-arm64-linux/lib libbb-external.a
fi
if [ -f build-zig-amd64-macos/lib/libbb-external.a ]; then
tar -czf build-release/barretenberg-static-amd64-darwin.tar.gz -C build-zig-amd64-macos/lib libbb-external.a
fi
if [ -f build-zig-arm64-macos/lib/libbb-external.a ]; then
tar -czf build-release/barretenberg-static-arm64-darwin.tar.gz -C build-zig-arm64-macos/lib libbb-external.a
fi

# Package iOS static libraries (built on macOS runners)
if [ -f build-ios-arm64/lib/libbb-external.a ]; then
tar -czf build-release/barretenberg-static-arm64-ios.tar.gz -C build-ios-arm64/lib libbb-external.a
fi
if [ -f build-ios-sim-arm64/lib/libbb-external.a ]; then
tar -czf build-release/barretenberg-static-arm64-ios-sim.tar.gz -C build-ios-sim-arm64/lib libbb-external.a
fi
}

export -f build_preset build_native_objects build_cross_objects build_native build_cross build_asan_fast build_wasm build_wasm_threads build_gcc_syntax_check_only build_fuzzing_syntax_check_only build_smt_verification inject_version
export -f build_preset build_native_objects build_cross_objects build_native build_cross build_ios build_asan_fast build_wasm build_wasm_threads build_gcc_syntax_check_only build_fuzzing_syntax_check_only build_smt_verification inject_version

function build {
echo_header "bb cpp build"
Expand Down
6 changes: 3 additions & 3 deletions barretenberg/cpp/cmake/module.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ function(barretenberg_module_with_sources MODULE_NAME)
add_dependencies(${MODULE_NAME}_objects msgpack-c)

# enable lmdb downloading via dependency (solves race condition)
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "wasm32")
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "wasm32" AND NOT MOBILE)
add_dependencies(${MODULE_NAME} lmdb_repo)
add_dependencies(${MODULE_NAME}_objects lmdb_repo)
endif()
Expand Down Expand Up @@ -192,7 +192,7 @@ function(barretenberg_module_with_sources MODULE_NAME)
add_dependencies(${MODULE_NAME}_tests msgpack-c)

# enable lmdb downloading via dependency (solves race condition)
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "wasm32")
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "wasm32" AND NOT MOBILE)
add_dependencies(${MODULE_NAME}_test_objects lmdb_repo)
add_dependencies(${MODULE_NAME}_tests lmdb_repo)
endif()
Expand Down Expand Up @@ -298,7 +298,7 @@ function(barretenberg_module_with_sources MODULE_NAME)
add_dependencies(${BENCHMARK_NAME}_bench msgpack-c)

# enable lmdb downloading via dependency (solves race condition)
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "wasm32")
if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "wasm32" AND NOT MOBILE)
add_dependencies(${BENCHMARK_NAME}_bench_objects lmdb_repo)
add_dependencies(${BENCHMARK_NAME}_bench lmdb_repo)
endif()
Expand Down
Loading
Loading