Skip to content

Commit c74a2bb

Browse files
committed
chore: strip release bb binaries and hide static library symbols
1 parent b495b5c commit c74a2bb

9 files changed

Lines changed: 46 additions & 90 deletions

File tree

barretenberg/cpp/CMakePresets.json

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@
4242
"environment": {
4343
"CC": "${sourceDir}/scripts/zig-cc.sh",
4444
"CXX": "${sourceDir}/scripts/zig-c++.sh",
45-
"CFLAGS": "-g0",
46-
"CXXFLAGS": "-g0"
45+
"CFLAGS": "-g0 -fvisibility=hidden",
46+
"CXXFLAGS": "-g0 -fvisibility=hidden",
47+
"LDFLAGS": "-s"
4748
},
4849
"cacheVariables": {
4950
"CMAKE_AR": "${sourceDir}/scripts/zig-ar.sh",
@@ -407,8 +408,7 @@
407408
"WASI_SDK_PREFIX": "/opt/wasi-sdk",
408409
"CC": "$env{WASI_SDK_PREFIX}/bin/clang",
409410
"CXX": "$env{WASI_SDK_PREFIX}/bin/clang++",
410-
"CXXFLAGS": "-DBB_VERBOSE",
411-
"LDFLAGS": "--no-wasm-opt",
411+
"CXXFLAGS": "-DBB_VERBOSE -fvisibility=hidden",
412412
"AR": "$env{WASI_SDK_PREFIX}/bin/llvm-ar",
413413
"RANLIB": "$env{WASI_SDK_PREFIX}/bin/llvm-ranlib"
414414
},
@@ -468,8 +468,8 @@
468468
"environment": {
469469
"CC": "zig cc",
470470
"CXX": "zig c++",
471-
"CFLAGS": "-g0",
472-
"CXXFLAGS": "-g0"
471+
"CFLAGS": "-g0 -fvisibility=hidden",
472+
"CXXFLAGS": "-g0 -fvisibility=hidden"
473473
},
474474
"cacheVariables": {
475475
"ENABLE_PIC": "ON",
@@ -514,7 +514,8 @@
514514
"inherits": "cross-base",
515515
"environment": {
516516
"CC": "zig cc -target x86_64-macos -mcpu=baseline",
517-
"CXX": "zig c++ -target x86_64-macos -mcpu=baseline"
517+
"CXX": "zig c++ -target x86_64-macos -mcpu=baseline",
518+
"LDFLAGS": "-s"
518519
},
519520
"cacheVariables": {
520521
"CMAKE_SYSTEM_NAME": "Darwin",
@@ -530,7 +531,8 @@
530531
"inherits": "cross-base",
531532
"environment": {
532533
"CC": "zig cc -target aarch64-macos -mcpu=apple_a14",
533-
"CXX": "zig c++ -target aarch64-macos -mcpu=apple_a14"
534+
"CXX": "zig c++ -target aarch64-macos -mcpu=apple_a14",
535+
"LDFLAGS": "-s"
534536
},
535537
"cacheVariables": {
536538
"CMAKE_SYSTEM_NAME": "Darwin",

barretenberg/cpp/bootstrap.sh

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,17 +198,15 @@ function build_release_dir {
198198

199199
# Wasm.
200200
tar -czf build-release/barretenberg-wasm.tar.gz -C build-wasm/bin barretenberg.wasm
201-
tar -czf build-release/barretenberg-debug-wasm.tar.gz -C build-wasm/bin barretenberg-debug.wasm
202201
tar -czf build-release/barretenberg-threads-wasm.tar.gz -C build-wasm-threads/bin barretenberg.wasm
203-
tar -czf build-release/barretenberg-threads-debug-wasm.tar.gz -C build-wasm-threads/bin barretenberg-debug.wasm
204202

205203
# bb cross-compiles.
206204
tar -czf build-release/barretenberg-arm64-linux.tar.gz -C build-arm64-linux/bin bb
207205
tar -czf build-release/barretenberg-arm64-darwin.tar.gz -C build-arm64-macos/bin bb
208206
tar -czf build-release/barretenberg-amd64-darwin.tar.gz -C build-amd64-macos/bin bb
209207
tar -czf build-release/barretenberg-amd64-windows.tar.gz -C build-amd64-windows/bin bb.exe
210208

211-
# Package static libraries for FFI bindings.
209+
# Package static libraries for FFI bindings (stripped at build time via CMake POST_BUILD).
212210
tar -czf build-release/barretenberg-static-amd64-linux.tar.gz -C $native_build_dir/lib libbb-external.a
213211
tar -czf build-release/barretenberg-static-arm64-linux.tar.gz -C build-arm64-linux/lib libbb-external.a
214212
tar -czf build-release/barretenberg-static-amd64-darwin.tar.gz -C build-amd64-macos/lib libbb-external.a

barretenberg/cpp/src/CMakeLists.txt

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ set(BARRETENBERG_TARGET_OBJECTS
197197
$<TARGET_OBJECTS:translator_vm_objects>
198198
$<TARGET_OBJECTS:ultra_honk_objects>)
199199

200+
# Save the core object list before adding lmdb/world_state (not needed by FFI consumers).
201+
set(BB_EXTERNAL_TARGET_OBJECTS ${BARRETENBERG_TARGET_OBJECTS})
202+
200203
if(NOT WASM AND NOT FUZZING AND NOT BB_LITE)
201204
# enable merkle trees and lmdb (not for mobile builds)
202205
list(APPEND BARRETENBERG_TARGET_OBJECTS $<TARGET_OBJECTS:crypto_merkle_tree_objects>)
@@ -211,17 +214,35 @@ add_library(
211214
${BARRETENBERG_TARGET_OBJECTS}
212215
)
213216

214-
# bb-external: A complete static library for external consumers (e.g. barretenberg-rs).
215-
# Includes everything from libbarretenberg.a plus env and vm2_stub.
216-
# This provides a single library file that external bindings can link against.
217+
# bb-external: static library for external consumers (e.g. barretenberg-rs).
218+
# Uses the core object list without lmdb/world_state — FFI consumers only need bbapi().
219+
# Built with -fvisibility=hidden; only WASM_EXPORT symbols remain visible.
220+
# Post-build step merges objects and strips non-exported symbols.
217221
if(NOT WASM)
218222
add_library(
219223
bb-external
220224
STATIC
221-
${BARRETENBERG_TARGET_OBJECTS}
225+
${BB_EXTERNAL_TARGET_OBJECTS}
222226
$<TARGET_OBJECTS:env_objects>
223227
$<TARGET_OBJECTS:vm2_stub>
224228
)
229+
230+
# Post-build: merge all objects and strip non-WASM_EXPORT symbols.
231+
# Only symbols marked WASM_EXPORT (visibility("default")) survive.
232+
find_program(LLD_LINKER NAMES ld.lld-20 ld.lld REQUIRED)
233+
find_program(LLVM_OBJCOPY NAMES llvm-objcopy-20 llvm-objcopy REQUIRED)
234+
find_program(LLVM_STRIP NAMES llvm-strip-20 llvm-strip REQUIRED)
235+
find_program(LLVM_AR_TOOL NAMES llvm-ar-20 llvm-ar REQUIRED)
236+
add_custom_command(TARGET bb-external POST_BUILD
237+
COMMAND ${LLD_LINKER} -r --whole-archive $<TARGET_FILE:bb-external> $<TARGET_FILE:libdeflate::libdeflate_static> -o $<TARGET_FILE:bb-external>.merged.o
238+
COMMAND ${LLVM_OBJCOPY} --localize-hidden $<TARGET_FILE:bb-external>.merged.o
239+
COMMAND ${LLVM_STRIP} --strip-unneeded $<TARGET_FILE:bb-external>.merged.o
240+
COMMAND ${CMAKE_COMMAND} -E rm -f $<TARGET_FILE:bb-external>
241+
COMMAND ${LLVM_AR_TOOL} rcs $<TARGET_FILE:bb-external> $<TARGET_FILE:bb-external>.merged.o
242+
COMMAND ${CMAKE_COMMAND} -E rm -f $<TARGET_FILE:bb-external>.merged.o
243+
COMMENT "Stripping internal symbols from bb-external static library"
244+
VERBATIM
245+
)
225246
endif()
226247

227248
if(WASM)

barretenberg/cpp/src/barretenberg/env/data_store.cpp

Lines changed: 0 additions & 35 deletions
This file was deleted.

barretenberg/cpp/src/barretenberg/env/data_store.hpp

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "hardware_concurrency.hpp"
22
#include <barretenberg/common/throw_or_abort.hpp>
3+
#include <barretenberg/common/wasm_export.hpp>
34
#include <cstdlib>
45
#include <iostream>
56
#include <stdexcept>
@@ -9,14 +10,12 @@
910
#include <thread>
1011
#endif
1112

12-
extern "C" {
13-
14-
uint32_t env_hardware_concurrency()
13+
// WASM_EXPORT ensures this symbol stays visible when compiling with -fvisibility=hidden.
14+
WASM_EXPORT uint32_t env_hardware_concurrency()
1515
{
1616
#ifdef NO_MULTITHREADING
1717
return 1;
1818
#else
1919
return std::thread::hardware_concurrency();
2020
#endif
2121
}
22-
}

barretenberg/cpp/src/barretenberg/env/logstr.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ std::size_t peak_rss_bytes()
6565
// interleave if multiple threads call concurrently (as with any
6666
// stderr logging).
6767
//---------------------------------------------------------------------
68-
extern "C" void logstr(char const* msg)
68+
// WASM_EXPORT ensures this symbol stays visible when compiling with -fvisibility=hidden.
69+
#include <barretenberg/common/wasm_export.hpp>
70+
WASM_EXPORT void logstr(char const* msg)
6971
{
7072
#ifndef NO_MULTITHREADING
7173
static std::mutex log_mutex;

barretenberg/cpp/src/barretenberg/env/throw_or_abort_impl.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "barretenberg/common/log.hpp"
2+
#include "barretenberg/common/wasm_export.hpp"
23
#include <stdexcept>
34
#ifdef STACKTRACES
45
#include <backward.hpp>
@@ -10,8 +11,8 @@ inline void abort_with_message [[noreturn]] (std::string const& err)
1011
std::abort();
1112
}
1213

13-
// Native implementation of throw_or_abort
14-
extern "C" void throw_or_abort_impl [[noreturn]] (const char* err)
14+
// WASM_EXPORT ensures this symbol stays visible when compiling with -fvisibility=hidden.
15+
WASM_EXPORT void throw_or_abort_impl [[noreturn]] (const char* err)
1516
{
1617

1718
#ifdef STACKTRACES

barretenberg/ts/src/barretenberg_wasm/barretenberg_wasm_base/index.ts

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { randomBytes } from '../../random/index.js';
55
* Contains code that is common to the "main thread" implementation and the "child thread" implementation.
66
*/
77
export class BarretenbergWasmBase {
8-
protected memStore: { [key: string]: Uint8Array } = {};
8+
99
protected memory!: WebAssembly.Memory;
1010
protected instance!: WebAssembly.Instance;
1111
protected logger: (msg: string) => void = () => {};
@@ -55,26 +55,6 @@ export class BarretenbergWasmBase {
5555
throw new Error(str);
5656
},
5757

58-
get_data: (keyAddr: number, outBufAddr: number) => {
59-
const key = this.stringFromAddress(keyAddr);
60-
outBufAddr = outBufAddr >>> 0;
61-
const data = this.memStore[key];
62-
if (!data) {
63-
this.logger(`get_data miss ${key}`);
64-
return;
65-
}
66-
// this.logger(`get_data hit ${key} size: ${data.length} dest: ${outBufAddr}`);
67-
// this.logger(Buffer.from(data.slice(0, 64)).toString('hex'));
68-
this.writeMemory(outBufAddr, data);
69-
},
70-
71-
set_data: (keyAddr: number, dataAddr: number, dataLength: number) => {
72-
const key = this.stringFromAddress(keyAddr);
73-
dataAddr = dataAddr >>> 0;
74-
this.memStore[key] = this.getMemorySlice(dataAddr, dataAddr + dataLength);
75-
// this.logger(`set_data: ${key} length: ${dataLength}`);
76-
},
77-
7858
memory,
7959
},
8060
};

0 commit comments

Comments
 (0)