-
Notifications
You must be signed in to change notification settings - Fork 3k
/
Copy pathget_boost.cmake
105 lines (87 loc) · 3.38 KB
/
get_boost.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
set(BOOST_REQUESTED_VERSION 1.69.0 CACHE STRING "")
set(BOOST_SHA1 8f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406 CACHE STRING "")
set(BOOST_USE_STATIC_LIBS true CACHE BOOL "")
set(BOOST_COMPONENTS program_options system thread)
# These components are only needed for Windows
if(WIN32)
list(APPEND BOOST_COMPONENTS date_time regex)
endif()
# MSVC doesn't set these variables
if(WIN32)
set(CMAKE_STATIC_LIBRARY_PREFIX lib)
set(CMAKE_SHARED_LIBRARY_PREFIX lib)
endif()
# Set lib prefixes and suffixes for linking
if(BOOST_USE_STATIC_LIBS)
set(LIBRARY_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX})
set(LIBRARY_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
else()
set(LIBRARY_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX})
set(LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
endif()
# Create list of components in Boost format
foreach(component ${BOOST_COMPONENTS})
list(APPEND BOOST_COMPONENTS_FOR_BUILD --with-${component})
endforeach()
set(BOOST_ROOT_DIR ${CMAKE_BINARY_DIR}/boost CACHE PATH "")
# TODO: let user give their own Boost installation
macro(DOWNLOAD_BOOST)
if(NOT BOOST_REQUESTED_VERSION)
message(FATAL_ERROR "BOOST_REQUESTED_VERSION is not defined.")
endif()
string(REPLACE "." "_" BOOST_REQUESTED_VERSION_UNDERSCORE ${BOOST_REQUESTED_VERSION})
set(BOOST_MAYBE_STATIC)
if(BOOST_USE_STATIC_LIBS)
set(BOOST_MAYBE_STATIC "link=static")
endif()
set(VARIANT "release")
if(CMAKE_BUILD_TYPE MATCHES Debug)
set(VARIANT "debug")
endif()
set(WINDOWS_B2_OPTIONS)
set(WINDOWS_LIB_NAME_SCHEME)
if(WIN32)
set(BOOTSTRAP_FILE_TYPE "bat")
set(WINDOWS_B2_OPTIONS "toolset=msvc-14.1" "architecture=x86" "address-model=64")
set(WINDOWS_LIB_NAME_SCHEME "-vc141-mt-gd-x64-1_69")
else()
set(BOOTSTRAP_FILE_TYPE "sh")
endif()
foreach(component ${BOOST_COMPONENTS})
list(APPEND BOOST_BUILD_BYPRODUCTS <INSTALL_DIR>/lib/${LIBRARY_PREFIX}boost_${component}${WINDOWS_LIB_NAME_SCHEME}${LIBRARY_SUFFIX})
endforeach()
message(STATUS "Adding Boost components")
include(ExternalProject)
ExternalProject_Add(
Boost
URL https://boostorg.jfrog.io/artifactory/main/release/${BOOST_REQUESTED_VERSION}/source/boost_${BOOST_REQUESTED_VERSION_UNDERSCORE}.tar.bz2
URL_HASH SHA256=${BOOST_SHA1}
DOWNLOAD_DIR ${BOOST_ROOT_DIR}
SOURCE_DIR ${BOOST_ROOT_DIR}
UPDATE_COMMAND ""
CONFIGURE_COMMAND ./bootstrap.${BOOTSTRAP_FILE_TYPE} --prefix=${BOOST_ROOT_DIR}
BUILD_COMMAND ./b2 install ${BOOST_MAYBE_STATIC} --prefix=${BOOST_ROOT_DIR} variant=${VARIANT} ${WINDOWS_B2_OPTIONS} ${BOOST_COMPONENTS_FOR_BUILD}
BUILD_IN_SOURCE true
BUILD_BYPRODUCTS ${BOOST_BUILD_BYPRODUCTS}
INSTALL_COMMAND ""
INSTALL_DIR ${BOOST_ROOT_DIR}
)
# Set include folders
ExternalProject_Get_Property(Boost INSTALL_DIR)
set(Boost_INCLUDE_DIR ${INSTALL_DIR}/include)
if(WIN32)
set(Boost_INCLUDE_DIR ${INSTALL_DIR}/include/boost-1_69)
endif()
# Set libraries to link
macro(libraries_to_fullpath varname)
set(${varname})
foreach(component ${BOOST_COMPONENTS})
list(APPEND ${varname} ${INSTALL_DIR}/lib/${LIBRARY_PREFIX}boost_${component}${WINDOWS_LIB_NAME_SCHEME}${LIBRARY_SUFFIX})
endforeach()
endmacro()
libraries_to_fullpath(Boost_LIBRARIES)
mark_as_advanced(Boost_LIBRARIES Boost_INCLUDE_DIR)
endmacro()
DOWNLOAD_BOOST()