1 # Let's build and install Boost libraries
2 function(_Boost_Build Boost_PREFIX)
3 nnas_find_package(BoostSource QUIET)
5 if(NOT BoostSource_FOUND)
7 endif(NOT BoostSource_FOUND)
9 #### Generic configurations
10 if(NOT EXISTS ${BoostSource_DIR}/b2)
11 execute_process(COMMAND "${BoostSource_DIR}/bootstrap.sh"
12 WORKING_DIRECTORY ${BoostSource_DIR}
13 RESULT_VARIABLE Boost_BUILD)
16 set(BoostBuild_DIR ${BoostSource_DIR})
17 set(BoostInstall_DIR ${Boost_PREFIX})
21 list(APPEND Boost_Options --build-dir=${BoostBuild_DIR})
22 list(APPEND Boost_Options --prefix=${BoostInstall_DIR})
23 list(APPEND Boost_Options --with-log)
24 list(APPEND Boost_Options --with-program_options)
25 list(APPEND Boost_Options --with-system)
26 list(APPEND Boost_Options --with-filesystem)
28 set(JAM_FILENAME ${BoostBuild_DIR}/user-config.jam)
31 set(NDK_CXX ${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/bin/${TARGET_ARCH}-linux-android${ANDROID_API_LEVEL}-clang++)
32 file(WRITE ${JAM_FILENAME} "using clang : arm64v8a : ${NDK_CXX} ;")
33 list(APPEND Boost_Options toolset=clang-arm64v8a)
34 # without target-os=android, it complains it cannot find -lrt.
35 list(APPEND Boost_Options target-os=android)
37 file(WRITE ${JAM_FILENAME} "using gcc : local : ${CMAKE_CXX_COMPILER} ;\n")
38 list(APPEND Boost_Options toolset=gcc-local)
41 # Install Boost libraries
42 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${BoostInstall_DIR}")
43 execute_process(COMMAND /usr/bin/env BOOST_BUILD_PATH="${BoostBuild_DIR}" ${BoostSource_DIR}/b2 install ${Boost_Options}
44 WORKING_DIRECTORY ${BoostSource_DIR})
46 endfunction(_Boost_Build)
48 # Find pre-installed boost library and update Boost variables.
50 # BoostConfig.cmake does not honor QUIET argument at least till cmake 1.70.0.
51 # Thus, don't try to find_package if you're not entirely sure you have boost.
52 find_package(Boost 1.58.0 QUIET COMPONENTS log program_options filesystem system)
58 set(Boost_PREFIX ${CMAKE_INSTALL_PREFIX})
61 _Boost_Build("${Boost_PREFIX}")
63 # Let's use locally built boost to system-wide one so sub modules
64 # needing Boost library and header files can search for them
65 # in ${Boost_PREFIX} directory
66 list(APPEND CMAKE_PREFIX_PATH "${Boost_PREFIX}")
68 # Without Boost_INCLUDE_DIR, it complains the variable is missing during find_package.
69 set(Boost_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include)
71 # 1) without static build, it will complain it cannot find libc++_shared.so.
72 # 2) We uses static libraries for other libraries.
73 set(Boost_USE_STATIC_LIBS ON)
75 # We built boost library so update Boost variables.
76 find_package(Boost 1.58.0 QUIET COMPONENTS log program_options filesystem system)