1
- set (BOOST_PREPROCESSOR_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR} /superproject/libs/preprocessor/include" CACHE PATH "" FORCE )
2
-
3
- get_filename_component (_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_ "${BOOST_PREPROCESSOR_INCLUDE} " ABSOLUTE )
4
- get_filename_component (_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_SOURCE_ "${CMAKE_CURRENT_BINARY_DIR} /src" ABSOLUTE )
5
- get_filename_component (_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_ "${CMAKE_CURRENT_BINARY_DIR} /include" ABSOLUTE )
6
- set (BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_} /boost" CACHE INTERNAL "" FORCE )
7
-
8
- if (NBL_EMBED_BUILTIN_RESOURCES )
9
- include ("${NBL_ROOT_PATH} /src/nbl/builtin/utils.cmake" )
10
-
11
- file (GLOB_RECURSE BOOST_HEADERS_REC_REL RELATIVE "${BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH} " "${BOOST_PREPROCESSOR_INCLUDE} /*" )
12
-
13
- foreach (BOOST_HEADER_REL IN LISTS BOOST_HEADERS_REC_REL )
14
- LIST_BUILTIN_RESOURCE (BOOST_RESOURCES_TO_EMBED "${BOOST_HEADER_REL} " )
15
- endforeach ()
16
-
17
- ADD_CUSTOM_BUILTIN_RESOURCES (boostBuiltinResourceData BOOST_RESOURCES_TO_EMBED "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_} " "boost" "boost::builtin" "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_} " "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_} " "STATIC" "INTERNAL" )
18
- endif ()
19
-
20
1
get_filename_component (NBL_BOOST_WAVE_DEP_FILE "${CMAKE_CURRENT_SOURCE_DIR} /dep/wave.cmake" ABSOLUTE )
21
2
22
- if (NOT EXISTS "${NBL_BOOST_WAVE_DEP_FILE} " )
23
- message (FATAL_ERROR "Internal error, generate NBL_BOOST_WAVE_DEP_FILE by enabling NBL_BOOST_GENERATE_DEP_LIST!" )
24
- endif ()
25
-
26
- set (BOOST_STAGEDIR "${CMAKE_CURRENT_BINARY_DIR} /boost/superproject/stage" )
27
- include ("${NBL_BOOST_WAVE_DEP_FILE} " )
28
-
29
- foreach (BOOST_LIB IN LISTS NBL_BOOST_LIBS )
30
- add_subdirectory (superproject/libs/${BOOST_LIB} EXCLUDE_FROM_ALL )
31
- endforeach ()
32
-
33
- add_subdirectory (superproject/libs/wave EXCLUDE_FROM_ALL )
34
-
35
- list (APPEND NBL_BOOST_TARGETS boost_wave ) # wave
36
- foreach (BOOST_LIB IN LISTS NBL_BOOST_LIBS )
37
- if (TARGET boost_${BOOST_LIB} ) # wave's deps
38
- list (APPEND NBL_BOOST_TARGETS boost_${BOOST_LIB} )
39
- endif ()
40
- endforeach ()
41
-
42
- set (NBL_BOOST_TARGETS
43
- ${NBL_BOOST_TARGETS}
44
- PARENT_SCOPE )
45
-
46
3
# Boost uses it's own tool for generating dependency list for targets, therefore we
47
4
# can make sure manually added dependency subdirectories for a library are valid
48
5
# https://www.boost.org/doc/libs/1_83_0/tools/boostdep/doc/html/index.html#boostdep.introduction.building_boostdep
49
6
50
7
if (NBL_BOOST_GENERATE_DEP_LIST ) # internal, for Nabla devs
51
- if (WIN32 )
52
- set (NBL_BOOSTDEP_EXE "boostdep.exe" )
53
- else ()
54
- set (NBL_BOOSTDEP_EXE "boostdep" )
8
+ if (NOT WIN32 )
9
+ message (FATAL_ERROR "NBL_BOOST_GENERATE_DEP_LIST only for Windows host!" )
55
10
endif ()
56
-
57
- set (NBL_BOOSTDEP_EXE_FILEPATH "${CMAKE_CURRENT_BINARY_DIR} /superproject/tools/boostdep/bin/${NBL_BOOSTDEP_EXE} " )
58
-
11
+
59
12
macro (NBL_BOOST_EXECUTE )
60
13
execute_process (COMMAND ${ARGV} WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR} /superproject" )
61
14
endmacro ()
62
15
16
+ NBL_BOOST_EXECUTE (git config --file .gitmodules --get-regexp path OUTPUT_VARIABLE NBL_OUTPUT_VARIABLE )
17
+ string (REGEX REPLACE "\n " ";" NBL_SUBMODULE_CONFIG_LIST "${NBL_OUTPUT_VARIABLE} " )
18
+
19
+ foreach (NBL_SUBMODULE_NAME ${NBL_SUBMODULE_CONFIG_LIST} )
20
+ string (REGEX MATCH "submodule\\ .(.*)\\ .path" NBL_SUBMODULE_NAME "${NBL_SUBMODULE_NAME} " )
21
+ list (APPEND BOOST_SUBMODULES "${CMAKE_MATCH_1} " )
22
+ endforeach ()
23
+
24
+ # sync & force update of all boost modules first for the tool purpose (sry guys who use the tool, you need to clone all, I want to keep it simple)
25
+ NBL_BOOST_EXECUTE (git submodule sync )
26
+ list (APPEND BOOST_FORCE_ALL_CONFIG -c url.https://github.com/.insteadOf=git@github.com: )
27
+ foreach (SUBMODULE ${BOOST_SUBMODULES} )
28
+ list (APPEND BOOST_FORCE_ALL_CONFIG -c submodule.${SUBMODULE}.update=checkout )
29
+ endforeach ()
30
+
31
+ NBL_BOOST_EXECUTE (git ${BOOST_FORCE_ALL_CONFIG} submodule update --init --recursive -f )
32
+
33
+ # build boost dep executable
34
+ set (NBL_BOOSTDEP_EXE "boostdep.exe" )
35
+ set (NBL_BOOSTDEP_EXE_FILEPATH "${CMAKE_CURRENT_BINARY_DIR} /superproject/tools/boostdep/bin/${NBL_BOOSTDEP_EXE} " )
63
36
if (NOT EXISTS "${NBL_BOOSTDEP_EXE_FILEPATH} " )
64
37
NBL_BOOST_EXECUTE (cmd /C bootstrap.bat )
65
38
NBL_BOOST_EXECUTE (cmd /C b2.exe tools/boostdep/build )
@@ -68,6 +41,7 @@ if(NBL_BOOST_GENERATE_DEP_LIST) # internal, for Nabla devs
68
41
NBL_BOOST_EXECUTE (git reset --hard )
69
42
endif ()
70
43
44
+ # get wave dependency info
71
45
NBL_BOOST_EXECUTE ("${NBL_BOOSTDEP_EXE_FILEPATH} " --boost-root "${CMAKE_CURRENT_SOURCE_DIR} /superproject" --brief wave
72
46
OUTPUT_VARIABLE NBL_OUTPUT_VAR
73
47
)
@@ -81,22 +55,66 @@ if(NBL_BOOST_GENERATE_DEP_LIST) # internal, for Nabla devs
81
55
list (FILTER NBL_BOOST_LIBS EXCLUDE REGEX "(unknown)" )
82
56
string (REPLACE "~" "/" NBL_BOOST_LIBS "${NBL_BOOST_LIBS} " )
83
57
84
- # NOTE: you commit this file to version control AND boost's .gitmodules *if got changed*, use when updating boost to more recent version
58
+ # update boost .gitmodules configuration, discard all but modules reported by wave
59
+ # NOTE: you commit this file to version control AND boost's .gitmodules *if got changed*,
60
+ # use when updating boost to more recent version
85
61
file (WRITE "${NBL_BOOST_WAVE_DEP_FILE} " "set(NBL_BOOST_LIBS ${NBL_BOOST_LIBS} )" )
86
62
87
- NBL_BOOST_EXECUTE (git config --file .gitmodules --get-regexp path OUTPUT_VARIABLE NBL_OUTPUT_VARIABLE )
88
-
89
- string (REGEX REPLACE "\n " ";" NBL_SUBMODULE_CONFIG_LIST "${NBL_OUTPUT_VARIABLE} " )
90
-
91
63
message (STATUS "Updating boost .gitmodules" )
92
- foreach (NBL_SUBMODULE_NAME ${NBL_SUBMODULE_CONFIG_LIST } )
93
- string ( REGEX MATCH "submodule \\ .(.*) \\ .path" NBL_SUBMODULE_NAME " ${NBL_SUBMODULE_NAME} " )
94
- NBL_BOOST_EXECUTE (git config --file .gitmodules submodule.${CMAKE_MATCH_1 }.update none ) # fallback, ignore all
64
+ foreach (SUBMODULE ${BOOST_SUBMODULES } )
65
+ # 1) fallback, ignore all
66
+ NBL_BOOST_EXECUTE (git config --file .gitmodules submodule.${SUBMODULE }.update none )
95
67
endforeach ()
96
68
97
69
foreach (NAME ${NBL_BOOST_LIBS} )
98
70
string (REPLACE "/" "_" SUBMODULE "${NAME} " )
99
- message (STATUS "BOOST SUBMODULE = ${SUBMODULE} " )
100
- NBL_BOOST_EXECUTE (git config --file .gitmodules submodule.${SUBMODULE}.update checkout ) # pick only those reported by the module we use
71
+ message (STATUS "WAVE BOOST DEP SUBMODULE = ${SUBMODULE} " )
72
+ # 2) pick only submodules reported by wave
73
+ NBL_BOOST_EXECUTE (git config --file .gitmodules submodule.${SUBMODULE}.update checkout )
74
+ endforeach ()
75
+ # 3) and the top module itself
76
+ NBL_BOOST_EXECUTE (git config --file .gitmodules submodule.wave.update checkout )
77
+ endif ()
78
+
79
+ set (BOOST_PREPROCESSOR_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR} /superproject/libs/preprocessor/include" CACHE PATH "" FORCE )
80
+
81
+ get_filename_component (_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_ "${BOOST_PREPROCESSOR_INCLUDE} " ABSOLUTE )
82
+ get_filename_component (_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_SOURCE_ "${CMAKE_CURRENT_BINARY_DIR} /src" ABSOLUTE )
83
+ get_filename_component (_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_ "${CMAKE_CURRENT_BINARY_DIR} /include" ABSOLUTE )
84
+ set (BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_} /boost" CACHE INTERNAL "" FORCE )
85
+
86
+ if (NBL_EMBED_BUILTIN_RESOURCES )
87
+ include ("${NBL_ROOT_PATH} /src/nbl/builtin/utils.cmake" )
88
+
89
+ file (GLOB_RECURSE BOOST_HEADERS_REC_REL RELATIVE "${BOOST_BUILTIN_RESOURCES_DIRECTORY_PATH} " "${BOOST_PREPROCESSOR_INCLUDE} /*" )
90
+
91
+ foreach (BOOST_HEADER_REL IN LISTS BOOST_HEADERS_REC_REL )
92
+ LIST_BUILTIN_RESOURCE (BOOST_RESOURCES_TO_EMBED "${BOOST_HEADER_REL} " )
101
93
endforeach ()
102
- endif ()
94
+
95
+ ADD_CUSTOM_BUILTIN_RESOURCES (boostBuiltinResourceData BOOST_RESOURCES_TO_EMBED "${_BOOST_PREPROCESSOR_BR_BUNDLE_SEARCH_DIRECTORY_} " "boost" "boost::builtin" "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_} " "${_BOOST_PREPROCESSOR_BR_OUTPUT_DIRECTORY_HEADER_} " "STATIC" "INTERNAL" )
96
+ endif ()
97
+
98
+ if (NOT EXISTS "${NBL_BOOST_WAVE_DEP_FILE} " )
99
+ message (FATAL_ERROR "Internal error, generate NBL_BOOST_WAVE_DEP_FILE by enabling NBL_BOOST_GENERATE_DEP_LIST!" )
100
+ endif ()
101
+
102
+ set (BOOST_STAGEDIR "${CMAKE_CURRENT_BINARY_DIR} /boost/superproject/stage" )
103
+ include ("${NBL_BOOST_WAVE_DEP_FILE} " )
104
+
105
+ foreach (BOOST_LIB IN LISTS NBL_BOOST_LIBS )
106
+ add_subdirectory (superproject/libs/${BOOST_LIB} EXCLUDE_FROM_ALL )
107
+ endforeach ()
108
+
109
+ add_subdirectory (superproject/libs/wave EXCLUDE_FROM_ALL )
110
+
111
+ list (APPEND NBL_BOOST_TARGETS boost_wave ) # wave
112
+ foreach (BOOST_LIB IN LISTS NBL_BOOST_LIBS )
113
+ if (TARGET boost_${BOOST_LIB} ) # wave's deps
114
+ list (APPEND NBL_BOOST_TARGETS boost_${BOOST_LIB} )
115
+ endif ()
116
+ endforeach ()
117
+
118
+ set (NBL_BOOST_TARGETS
119
+ ${NBL_BOOST_TARGETS}
120
+ PARENT_SCOPE )
0 commit comments