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
1 change: 0 additions & 1 deletion barretenberg/cpp/CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"TARGET_ARCH": "skylake",
"ENABLE_PIC": "ON"
}
},
Expand Down
14 changes: 13 additions & 1 deletion barretenberg/cpp/cmake/arch.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,19 @@ if(WASM)
add_compile_options(-fno-exceptions -fno-slp-vectorize)
endif()

if(NOT WASM AND NOT ARM AND TARGET_ARCH)
# Auto-detect TARGET_ARCH if not explicitly set.
# Use 'skylake' on x86_64 (matches our cross-compile presets) and 'generic' on ARM
# to avoid emitting CPU-specific instructions (e.g. SVE on Graviton) that break on
# other ARM machines like Apple Silicon.
if(NOT WASM AND NOT TARGET_ARCH)
if(ARM)
set(TARGET_ARCH "generic")
else()
set(TARGET_ARCH "skylake")
endif()
endif()

if(NOT WASM AND TARGET_ARCH)
message(STATUS "Target architecture: ${TARGET_ARCH}")
add_compile_options(-march=${TARGET_ARCH})
endif()
11 changes: 3 additions & 8 deletions barretenberg/cpp/scripts/zig-c++.sh
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
#!/bin/bash
# Wrapper for zig c++ that pins glibc 2.35 on Linux (Ubuntu 22.04+ compat)
# and uses native target on macOS.
# On ARM64 Linux, we use an explicit aarch64 target instead of 'native' to produce
# generic ARM64 code. This prevents CPU-specific instructions (e.g. SVE on Graviton)
# from being emitted, ensuring binaries work across all ARM64 machines including
# Apple Silicon in devcontainers.
# Note: arch.cmake handles -march selection (skylake on x86, generic on ARM)
# which overrides zig's native CPU detection, preventing CPU-specific instructions.
if [[ "$(uname -s)" == "Linux" ]]; then
case "$(uname -m)" in
aarch64|arm64) exec zig c++ -target aarch64-linux-gnu.2.35 "$@" ;;
*) exec zig c++ -target native-linux-gnu.2.35 "$@" ;;
esac
exec zig c++ -target native-linux-gnu.2.35 "$@"
else
exec zig c++ "$@"
fi
11 changes: 3 additions & 8 deletions barretenberg/cpp/scripts/zig-cc.sh
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
#!/bin/bash
# Wrapper for zig cc that pins glibc 2.35 on Linux (Ubuntu 22.04+ compat)
# and uses native target on macOS.
# On ARM64 Linux, we use an explicit aarch64 target instead of 'native' to produce
# generic ARM64 code. This prevents CPU-specific instructions (e.g. SVE on Graviton)
# from being emitted, ensuring binaries work across all ARM64 machines including
# Apple Silicon in devcontainers.
# Note: arch.cmake handles -march selection (skylake on x86, generic on ARM)
# which overrides zig's native CPU detection, preventing CPU-specific instructions.
if [[ "$(uname -s)" == "Linux" ]]; then
case "$(uname -m)" in
aarch64|arm64) exec zig cc -target aarch64-linux-gnu.2.35 "$@" ;;
*) exec zig cc -target native-linux-gnu.2.35 "$@" ;;
esac
exec zig cc -target native-linux-gnu.2.35 "$@"
else
exec zig cc "$@"
fi
Loading