Skip to content

Commit 301c7e9

Browse files
[CMake] Fix #172: Add Boost as CMake external proj
Build Boost as CMake external project. Boost is self-contained, shipping its own configuration and build automation tooling (`bootstap.sh` and `b2`). WIP Boost WIB boost
1 parent cfbcaf8 commit 301c7e9

File tree

3 files changed

+57
-29
lines changed

3 files changed

+57
-29
lines changed

CMakeFiles/Boost.cmake

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
set(Boost_LIBRARIES
2+
system
3+
container
4+
)
5+
list(TRANSFORM Boost_LIBRARIES PREPEND "Boost::" OUTPUT_VARIABLE BOOST_LINK_LIBRARIES)
6+
set(Boost_BYPRODUCTS)
7+
foreach(lib IN LISTS Boost_LIBRARIES)
8+
list(APPEND Boost_BYPRODUCTS
9+
"${CMAKE_BINARY_DIR}/third-party/src/Boost/stage/lib/${CMAKE_STATIC_LIBRARY_PREFIX}boost_${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}"
10+
"${CMAKE_BINARY_DIR}/third-party/src/Boost/stage/lib/${CMAKE_SHARED_LIBRARY_PREFIX}boost_${lib}${CMAKE_SHARED_LIBRARY_SUFFIX}"
11+
)
12+
endforeach()
13+
14+
if(is_release_build)
15+
set(Boost_BUILD_TYPE release)
16+
else()
17+
set(Boost_BUILD_TYPE debug)
18+
endif()
19+
ExternalProject_Add(
20+
Boost
21+
PREFIX third-party
22+
URL https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.xz
23+
URL_MD5 893b5203b862eb9bbd08553e24ff146a
24+
DOWNLOAD_EXTRACT_TIMESTAMP ON
25+
CONFIGURE_COMMAND ./bootstrap.sh --with-toolset=clang --libdir="${CMAKE_BINARY_DIR}/third-party/src/Boost-build" --with-libraries=all
26+
CONFIGURE_HANDLED_BY_BUILD true
27+
BUILD_IN_SOURCE ON
28+
BUILD_COMMAND ./b2 ${Boost_BUILD_TYPE}
29+
BUILD_BYPRODUCTS ${Boost_BYPRODUCTS}
30+
INSTALL_COMMAND ""
31+
)
32+
ExternalProject_Get_Property(Boost BINARY_DIR)
33+
set(BOOST_DIR ${BINARY_DIR})
34+
set(BOOST_LIBRARY_DIR "${BOOST_DIR}/stage/lib")
35+
36+
include_directories(SYSTEM "${BOOST_DIR}")
37+
link_directories("${BOOST_LIBRARY_DIR}")
38+
39+
set(BOOST_STATIC_LIBRARY_PATHS)
40+
set(BOOST_SHARED_LIBRARY_PATHS)
41+
foreach(lib IN LISTS Boost_LIBRARIES)
42+
add_library("Boost::${lib}" ${LIB_TYPE} IMPORTED GLOBAL)
43+
set(static_library_path "${BOOST_LIBRARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}boost_${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}")
44+
set(shared_library_path "${BOOST_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}boost_${lib}${CMAKE_SHARED_LIBRARY_SUFFIX}")
45+
list(APPEND BOOST_STATIC_LIBRARY_PATHS "${static_library_path}")
46+
list(APPEND BOOST_SHARED_LIBRARY_PATHS "${shared_library_path}")
47+
if (BUILD_SHARED_LIBS)
48+
set_target_properties("Boost::${lib}" PROPERTIES IMPORTED_LOCATION "${shared_library_path}")
49+
else()
50+
set_target_properties("Boost::${lib}" PROPERTIES IMPORTED_LOCATION "${static_library_path}")
51+
endif()
52+
endforeach()

CMakeLists.txt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,6 @@ set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
7070
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
7171
find_package(Threads REQUIRED)
7272

73-
# Boost
74-
if(${BUILD_SHARED_LIBS})
75-
set(Boost_USE_STATIC_LIBS OFF)
76-
else()
77-
set(Boost_USE_STATIC_LIBS ON)
78-
endif()
79-
set(Boost_USE_MULTITHREADED ON)
80-
find_package(Boost REQUIRED COMPONENTS system container)
81-
8273
# Git
8374
find_package(Git REQUIRED)
8475

@@ -221,6 +212,7 @@ set_source_files_properties(
221212

222213
include("CMakeFiles/Catch2.cmake")
223214
include("CMakeFiles/Eigen.cmake")
215+
include("CMakeFiles/Boost.cmake")
224216
include("CMakeFiles/nlohmann_json.cmake")
225217
include("CMakeFiles/Replxx.cmake")
226218
include("CMakeFiles/Binaryen.cmake")

src/CMakeLists.txt

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ if(${WITH_V8})
4141
endif()
4242

4343
# others
44-
target_link_libraries(${PROJECT_NAME} PUBLIC ${Boost_LIBRARIES} dl)
44+
target_link_libraries(${PROJECT_NAME} PUBLIC ${BOOST_LINK_LIBRARIES} dl)
4545

4646
if(${BUILD_SHARED_LIBS})
4747
# When creating a SHARED library ${PROJECT_NAME} (libmutable.so), it will be stripped of unused and non-exported
@@ -74,10 +74,10 @@ else()
7474
"${PROJECT_BINARY_DIR}/third-party/src/V8-build/out/obj/${CMAKE_STATIC_LIBRARY_PREFIX}v8_monolith${CMAKE_STATIC_LIBRARY_SUFFIX}"
7575
)
7676
endif()
77-
foreach(lib_target ${Boost_LIBRARIES})
78-
get_target_property(lib_location ${lib_target} LOCATION)
79-
list(APPEND static_libs ${lib_location})
77+
foreach(lib_path IN LISTS BOOST_STATIC_LIBRARY_PATHS)
78+
list(APPEND static_libs "${lib_path}")
8079
endforeach()
80+
message(STATUS "Bundling libraries ${static_libs}")
8181

8282
# Detect the toolchain to use for bundling.
8383
if (CMAKE_CXX_COMPILER_ID MATCHES "^(Clang)$")
@@ -173,19 +173,3 @@ set_target_properties(cardinality_gen PROPERTIES EXCLUDE_FROM_ALL ON)
173173
add_executable(query_slicer query_slicer.cpp)
174174
target_link_libraries(query_slicer ${PROJECT_NAME})
175175
set_target_properties(query_slicer PROPERTIES EXCLUDE_FROM_ALL ON)
176-
177-
178-
########################################################################################################################
179-
### Copy used system libraries to project, to be self-contained
180-
########################################################################################################################
181-
182-
# Copy required Boost libraries
183-
if(${BUILD_SHARED_LIBS})
184-
foreach(lib_target ${Boost_LIBRARIES})
185-
get_target_property(lib_location ${lib_target} LOCATION)
186-
add_custom_command(
187-
TARGET ${PROJECT_NAME} POST_BUILD
188-
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${lib_location} "${PROJECT_BINARY_DIR}/lib"
189-
)
190-
endforeach()
191-
endif()

0 commit comments

Comments
 (0)