Skip to content

Commit 255dfb5

Browse files
authored
feat: Utilize globally installed leveldb if available (#134)
* feat: Utilize globally installed leveldb if available * chore: Update docs * chore(docker): Update wasm builder to ubuntu:kinetic for newer cmake * chore: Cleanup fragile target linking
1 parent 515604d commit 255dfb5

File tree

5 files changed

+53
-26
lines changed

5 files changed

+53
-26
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ The structured reference string contains monomials up to x^{2^20}. This SRS was
66

77
### Dependencies
88

9-
- cmake >= 3.16
9+
- cmake >= 3.24
1010
- clang >= 10 or gcc >= 10
1111
- clang-format
1212
- libomp (if multithreading is required. Multithreading can be disabled using the compiler flag `-DMULTITHREADING 0`)

cpp/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# barretenberg
22
# copyright 2019 Spilsbury Holdings Ltd
33

4-
cmake_minimum_required(VERSION 3.16)
4+
cmake_minimum_required(VERSION 3.24)
55

66
include(cmake/toolchain.cmake)
77

cpp/cmake/module.cmake

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ function(barretenberg_module MODULE_NAME)
2323
OBJECT
2424
${SOURCE_FILES}
2525
)
26+
list(APPEND lib_targets ${MODULE_NAME}_objects)
2627

2728
add_library(
2829
${MODULE_NAME}
@@ -36,6 +37,7 @@ function(barretenberg_module MODULE_NAME)
3637
${ARGN}
3738
${TBB_IMPORTED_TARGETS}
3839
)
40+
list(APPEND lib_targets ${MODULE_NAME})
3941

4042
set(MODULE_LINK_NAME ${MODULE_NAME})
4143
endif()
@@ -47,6 +49,7 @@ function(barretenberg_module MODULE_NAME)
4749
OBJECT
4850
${TEST_SOURCE_FILES}
4951
)
52+
list(APPEND lib_targets ${MODULE_NAME}_test_objects)
5053

5154
target_link_libraries(
5255
${MODULE_NAME}_test_objects
@@ -59,6 +62,7 @@ function(barretenberg_module MODULE_NAME)
5962
${MODULE_NAME}_tests
6063
$<TARGET_OBJECTS:${MODULE_NAME}_test_objects>
6164
)
65+
list(APPEND exe_targets ${MODULE_NAME}_tests)
6266

6367
if(WASM)
6468
target_link_options(
@@ -111,22 +115,23 @@ function(barretenberg_module MODULE_NAME)
111115
foreach(FUZZER_SOURCE_FILE ${FUZZERS_SOURCE_FILES})
112116
get_filename_component(FUZZER_NAME_STEM ${FUZZER_SOURCE_FILE} NAME_WE)
113117
add_executable(
114-
${MODULE_NAME}_${FUZZER_NAME_STEM}_fuzzer
115-
${FUZZER_SOURCE_FILE}
118+
${MODULE_NAME}_${FUZZER_NAME_STEM}_fuzzer
119+
${FUZZER_SOURCE_FILE}
116120
)
121+
list(APPEND exe_targets ${MODULE_NAME}_${FUZZER_NAME_STEM}_fuzzer)
117122

118123
target_link_options(
119-
${MODULE_NAME}_${FUZZER_NAME_STEM}_fuzzer
124+
${MODULE_NAME}_${FUZZER_NAME_STEM}_fuzzer
120125
PRIVATE
121126
"-fsanitize=fuzzer"
122127
${SANITIZER_OPTIONS}
123-
)
128+
)
124129

125130
target_link_libraries(
126-
${MODULE_NAME}_${FUZZER_NAME_STEM}_fuzzer
127-
PRIVATE
131+
${MODULE_NAME}_${FUZZER_NAME_STEM}_fuzzer
132+
PRIVATE
128133
${MODULE_LINK_NAME}
129-
)
134+
)
130135
endforeach()
131136
endif()
132137

@@ -137,6 +142,7 @@ function(barretenberg_module MODULE_NAME)
137142
OBJECT
138143
${BENCH_SOURCE_FILES}
139144
)
145+
list(APPEND lib_targets ${MODULE_NAME}_bench_objects)
140146

141147
target_link_libraries(
142148
${MODULE_NAME}_bench_objects
@@ -149,6 +155,7 @@ function(barretenberg_module MODULE_NAME)
149155
${MODULE_NAME}_bench
150156
$<TARGET_OBJECTS:${MODULE_NAME}_bench_objects>
151157
)
158+
list(APPEND exe_targets ${MODULE_NAME}_bench)
152159

153160
target_link_libraries(
154161
${MODULE_NAME}_bench
@@ -165,4 +172,7 @@ function(barretenberg_module MODULE_NAME)
165172
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
166173
)
167174
endif()
168-
endfunction()
175+
176+
set(${MODULE_NAME}_lib_targets ${lib_targets} PARENT_SCOPE)
177+
set(${MODULE_NAME}_exe_targets ${exe_targets} PARENT_SCOPE)
178+
endfunction()

cpp/dockerfiles/Dockerfile.wasm-linux-clang

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM ubuntu:focal AS builder
1+
FROM ubuntu:kinetic AS builder
22
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential wget git libssl-dev cmake curl binaryen
33
RUN curl https://wasmtime.dev/install.sh -sSf | bash /dev/stdin --version v3.0.1
44
WORKDIR /usr/src/barretenberg/cpp/src
Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,43 @@
1+
barretenberg_module(stdlib_merkle_tree stdlib_primitives stdlib_blake3s stdlib_pedersen)
2+
13
if(NOT WASM)
24
include(FetchContent)
35
FetchContent_Declare(
46
leveldb
57
GIT_REPOSITORY https://github.com/google/leveldb.git
68
GIT_TAG 1.22
9+
FIND_PACKAGE_ARGS
710
)
811

9-
FetchContent_GetProperties(leveldb)
10-
if(NOT leveldb_POPULATED)
11-
FetchContent_Populate(leveldb)
12-
set(LEVELDB_BUILD_TESTS OFF CACHE BOOL "LevelDB tests off")
13-
add_subdirectory(${leveldb_SOURCE_DIR} ${leveldb_BINARY_DIR} EXCLUDE_FROM_ALL)
14-
endif()
12+
# Disable some leveldb targets before we call FetchContent_MakeAvailable
13+
# so they are configured correctly if it needs to fetch
14+
set(LEVELDB_BUILD_TESTS OFF CACHE BOOL "LevelDB tests off")
15+
set(LEVELDB_BUILD_BENCHMARKS OFF CACHE BOOL "LevelDB benchmarks off")
1516

16-
# Silence all compiler warnings from LevelDB
17-
target_compile_options(
18-
leveldb
19-
PRIVATE
20-
-w
21-
)
17+
FetchContent_MakeAvailable(leveldb)
2218

23-
link_libraries(leveldb)
24-
endif()
19+
if (leveldb_FOUND)
20+
# Globally installed leveldb needs Threads available as Threads::Threads as discovered by `find_package`
21+
find_package(Threads REQUIRED)
2522

26-
barretenberg_module(stdlib_merkle_tree stdlib_primitives stdlib_blake3s stdlib_pedersen)
23+
foreach(target IN LISTS stdlib_merkle_tree_lib_targets stdlib_merkle_tree_exe_targets)
24+
target_link_libraries(${target} PRIVATE leveldb::leveldb)
25+
endforeach()
26+
else()
27+
# FetchContent_MakeAvailable calls FetchContent_Populate if `find_package` is unsuccessful
28+
# so these variables will be available if we reach this case
29+
set_property(DIRECTORY ${leveldb_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL)
30+
set_property(DIRECTORY ${leveldb_BINARY_DIR} PROPERTY EXCLUDE_FROM_ALL)
31+
32+
# Silence all compiler warnings from LevelDB
33+
target_compile_options(
34+
leveldb
35+
PRIVATE
36+
-w
37+
)
38+
39+
foreach(target IN LISTS stdlib_merkle_tree_lib_targets stdlib_merkle_tree_exe_targets)
40+
target_link_libraries(${target} PRIVATE leveldb)
41+
endforeach()
42+
endif()
43+
endif()

0 commit comments

Comments
 (0)