@@ -27,54 +27,144 @@ macro(yggdrasil_rapidjson_options_create)
2727 option (YGGDRASIL_RAPIDJSON_ENABLE_INSTRUMENTATION_OPT "Build yggdrasil_rapidjson with -march or -mcpu options" ON )
2828endmacro ()
2929
30+ macro (yggdrasil_rapidjson_config_vars PREFIX )
31+ foreach (suffix LIBRARIES INCLUDE_DIRS COMPILE_FLAGS LINK_FLAGS)
32+ list (
33+ APPEND ${PREFIX} _CONFIG_VARS
34+ ${PREFIX} _${suffix}
35+ ${PREFIX} _PUBLIC_${suffix}
36+ ${PREFIX} _PRIVATE_${suffix}
37+ )
38+ set (suffix_lang ${suffix} )
39+ if (suffix STREQUAL "LIBRARIES" )
40+ set (suffix_lang "LIBS" )
41+ endif ()
42+ foreach (lang C CXX Fortran)
43+ list (
44+ APPEND ${PREFIX} _CONFIG_VARS
45+ ${PREFIX} _PUBLIC_${lang} _${suffix_lang}
46+ ${PREFIX} _PRIVATE_${lang} _${suffix_lang}
47+ )
48+ endforeach ()
49+ endforeach ()
50+ endmacro ()
51+
52+ macro (yggdrasil_rapidjson_config_init PREFIX )
53+ yggdrasil_rapidjson_config_vars (${PREFIX} )
54+ foreach (var IN LISTS ${PREFIX} _CONFIG_VARS)
55+ set (${var} )
56+ endforeach ()
57+ endmacro ()
58+
59+ macro (yggdrasil_rapidjson_config_show PREFIX LEVEL )
60+ foreach (var IN LISTS ${PREFIX} _CONFIG_VARS)
61+ message (${LEVEL} "${var} = ${${var} }" )
62+ endforeach ()
63+ endmacro ()
64+
65+ macro (yggdrasil_rapidjson_config_accum PREFIX )
66+ foreach (suffix LIBRARIES INCLUDE_DIRS COMPILE_FLAGS LINK_FLAGS)
67+ set (${PREFIX} _ALL_PUBLIC_${suffix} ${${PREFIX} _PUBLIC_${suffix} }
68+ ${${PREFIX} _${suffix} })
69+ set (${PREFIX} _ALL_PRIVATE_${suffix} ${${PREFIX} _PRIVATE_${suffix} })
70+ if (suffix STREQUAL "LIBRARIES" OR suffix STREQUAL "LINK_FLAGS" )
71+ set (gentype "LINK" )
72+ else ()
73+ set (gentype "COMPILE" )
74+ endif ()
75+ set (suffix_lang ${suffix} )
76+ if (suffix STREQUAL "LIBRARIES" )
77+ set (suffix_lang "LIBS" )
78+ endif ()
79+ foreach (lang C CXX Fortran)
80+ set (kpublic ${PREFIX} _PUBLIC_${lang} _${suffix_lang} )
81+ set (kprivate ${PREFIX} _PRIVATE_${lang} _${suffix_lang} )
82+ if (${kpublic} )
83+ list (
84+ APPEND ${PREFIX} _ALL_PUBLIC_${suffix}
85+ "$<$<${gentype} _LANGUAGE :${lang} >:${${kpublic} }>"
86+ )
87+ endif ()
88+ if (${kprivate} )
89+ list (
90+ APPEND ${PREFIX} _ALL_PRIVATE_${suffix}
91+ "$<$<${gentype} _LANGUAGE :${lang} >:${${kprivate} }>"
92+ )
93+ endif ()
94+ endforeach ()
95+ message (DEBUG "${PREFIX} _ALL_PUBLIC_${suffix} = ${${PREFIX} _ALL_PUBLIC_${suffix} }" )
96+ message (DEBUG "${PREFIX} _ALL_PRIVATE_${suffix} = ${${PREFIX} _ALL_PRIVATE_${suffix} }" )
97+ endforeach ()
98+ endmacro ()
99+
30100macro (yggdrasil_rapidjson_global_config LANGUAGE PREFIX )
101+ yggdrasil_rapidjson_config_show (${PREFIX} DEBUG )
31102 add_compile_options (
103+ ${${PREFIX} _COMPILE_FLAGS}
32104 ${${PREFIX} _PUBLIC_COMPILE_FLAGS}
33- ${${PREFIX} _PUBLIC_${LANGUAGE}_FLAGS }
105+ ${${PREFIX} _PUBLIC_${LANGUAGE}_COMPILE_FLAGS }
34106 )
35107 add_link_options (
108+ ${${PREFIX} _LINK_FLAGS}
36109 ${${PREFIX} _PUBLIC_LINK_FLAGS}
37110 ${${PREFIX} _PUBLIC_${LANGUAGE}_LINK_FLAGS}
38111 )
39- include_directories (${${PREFIX} _INCLUDE_DIRS} )
40- link_libraries (${${PREFIX} _PUBLIC_LIBRARIES} )
112+ include_directories (
113+ ${${PREFIX} _INCLUDE_DIRS}
114+ ${${PREFIX} _PUBLIC_INCLUDE_DIRS}
115+ ${${PREFIX} _PUBLIC_${LANGUAGE}_INCLUDE_DIRS}
116+ )
117+ link_libraries (
118+ ${${PREFIX} _LIBRARIES}
119+ ${${PREFIX} _PUBLIC_LIBRARIES}
120+ ${${PREFIX} _PUBLIC_${LANGUAGE}_LIBRARIES}
121+ )
41122endmacro ()
42123
43124macro (yggdrasil_rapidjson_target_config TARGET TYPE PREFIX )
44- target_link_libraries (
45- ${TARGET} ${TYPE} ${${PREFIX} _PUBLIC_LIBRARIES}
46- "$<$<LINK_LANGUAGE :C >:${${PREFIX} _PUBLIC_C_LIBS }>"
47- "$<$<LINK_LANGUAGE :CXX >:${${PREFIX} _PUBLIC_CXX_LIBS }>"
48- "$<$<LINK_LANGUAGE :Fortran >:${${PREFIX} _PUBLIC_Fortran_LIBS }>"
49- )
50- target_include_directories (
51- ${TARGET} ${TYPE} ${${PREFIX} _INCLUDE_DIRS}
52- )
53- target_compile_options (
54- ${TARGET} ${TYPE} ${${PREFIX} _PUBLIC_COMPILE_FLAGS}
55- "$<$<COMPILE_LANGUAGE :C >:${${PREFIX} _PUBLIC_C_COMPILE_FLAGS }>"
56- "$<$<COMPILE_LANGUAGE :CXX >:${${PREFIX} _PUBLIC_CXX_COMPILE_FLAGS }>"
57- "$<$<COMPILE_LANGUAGE :Fortran >:${${PREFIX} _PUBLIC_Fortran_COMPILE_FLAGS }>"
58- )
59- target_link_options (
60- ${TARGET} ${TYPE} ${${PREFIX} _PUBLIC_LINK_FLAGS}
61- "$<$<LINK_LANGUAGE :C >:${${PREFIX} _PUBLIC_C_LINK_FLAGS }>"
62- "$<$<LINK_LANGUAGE :CXX >:${${PREFIX} _PUBLIC_CXX_LINK_FLAGS }>"
63- "$<$<LINK_LANGUAGE :Fortran >:${${PREFIX} _PUBLIC_Fortran_LINK_FLAGS }>"
64- )
65- if (NOT TYPE STREQUAL "INTERFACE" )
125+ yggdrasil_rapidjson_config_show (${PREFIX} DEBUG )
126+ yggdrasil_rapidjson_config_accum (${PREFIX} )
127+ if (${PREFIX} _ALL_PUBLIC_LIBRARIES)
66128 target_link_libraries (
67- ${TARGET} ${TYPE} ${${PREFIX} _PRIVATE_LIBRARIES}
129+ ${TARGET} ${TYPE} ${${PREFIX} _ALL_PUBLIC_LIBRARIES}
130+ )
131+ endif ()
132+ if (${PREFIX} _ALL_PUBLIC_INCLUDE_DIRS)
133+ target_include_directories (
134+ ${TARGET} ${TYPE} ${${PREFIX} _ALL_PUBLIC_INCLUDE_DIRS}
135+ )
136+ endif ()
137+ if (${PREFIX} _ALL_PUBLIC_COMPILE_FLAGS)
138+ target_compile_options (
139+ ${TARGET} ${TYPE} ${${PREFIX} _ALL_PUBLIC_COMPILE_FLAGS}
68140 )
69- # target_include_directories(
70- # ${TARGET} ${TYPE} ${${PREFIX}_INCLUDE_DIRS_PRIVATE}
71- # )
72- # target_compile_options(
73- # ${TARGET} ${TYPE} ${${PREFIX}_PRIVATE_COMPILE_FLAGS}
74- # )
75- # target_link_options(
76- # ${TARGET} ${TYPE} ${${PREFIX}_PRIVATE_LINK_FLAGS}
77- # )
141+ endif ()
142+ if (${PREFIX} _ALL_PUBLIC_LINK_FLAGS)
143+ target_link_options (
144+ ${TARGET} ${TYPE} ${${PREFIX} _ALL_PUBLIC_LINK_FLAGS}
145+ )
146+ endif ()
147+ if (NOT ("${TYPE} " STREQUAL "INTERFACE" ))
148+ if (${PREFIX} _ALL_PRIVATE_LIBRARIES)
149+ target_link_libraries (
150+ ${TARGET} PRIVATE ${${PREFIX} _ALL_PRIVATE_LIBRARIES}
151+ )
152+ endif ()
153+ if (${PREFIX} _ALL_PRIVATE_INCLUDE_DIRS)
154+ target_include_directories (
155+ ${TARGET} PRIVATE ${${PREFIX} _ALL_PRIVATE_INCLUDE_DIRS}
156+ )
157+ endif ()
158+ if (${PREFIX} _ALL_PRIVATE_COMPILE_FLAGS)
159+ target_compile_options (
160+ ${TARGET} PRIVATE ${${PREFIX} _ALL_PRIVATE_COMPILE_FLAGS}
161+ )
162+ endif ()
163+ if (${PREFIX} _ALL_PRIVATE_LINK_FLAGS)
164+ target_link_options (
165+ ${TARGET} PRIVATE ${${PREFIX} _ALL_PRIVATE_LINK_FLAGS}
166+ )
167+ endif ()
78168 endif ()
79169endmacro ()
80170
0 commit comments