@@ -14,13 +14,12 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
1414 endif ()
1515endif ()
1616
17- set (LIB_MAJOR_VERSION "1" )
18- set (LIB_MINOR_VERSION "1" )
19- set (LIB_PATCH_VERSION "0" )
20- set (LIB_EXTEN_VERSION "1" )
21- set (LIB_VERSION_STRING "${LIB_MAJOR_VERSION} .${LIB_MINOR_VERSION} .${LIB_PATCH_VERSION} .${LIB_EXTEN_VERSION} " )
17+ SET (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR } /CMakeModules)
18+ include (${CMAKE_CURRENT_SOURCE_DIR } /YggdrasilRapidJSONMacros.cmake )
19+ gitversion (LIB_VERSION_STRING "1.1.0.2" )
2220
2321PROJECT (YggdrasilRapidJSON VERSION "${LIB_VERSION_STRING} " LANGUAGES C CXX )
22+ set (PROJECT_NAME_UPPER "YGGDRASIL_RAPIDJSON" )
2423set (PROJECT_NAME_LOWER "yggdrasil_rapidjson" )
2524set (PROJECT_INCLUDE_DIR "include/yggdrasil_rapidjson" )
2625
@@ -31,18 +30,20 @@ endif()
3130SET (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR } /CMakeModules)
3231
3332include (${CMAKE_CURRENT_SOURCE_DIR } /YggdrasilRapidJSONMacros.cmake )
34- yggdrasil_options ()
33+ yggdrasil_rapidjson_options_create ()
3534
3635option (YGGDRASIL_RAPIDJSON_NEST_HEADERS "Nest the headers during install under the package name (in addition to the directly containing the headers)" OFF )
3736option (YGGDRASIL_RAPIDJSON_CREATE_METASCHEMA "Re-create the metaschema" OFF )
3837option (YGGDRASIL_RAPIDJSON_CREATE_METASCHEMA_FULL "Re-create the metaschema and the full_schema.yaml file" OFF )
3938option (YGGDRASIL_RAPIDJSON_SCHEMA_TESTS "Build tests using the yggdrasil schema" OFF )
4039
41- set (INTERFACE_COMPILATION_OPTIONS -D_USE_MATH_DEFINES)
42- set (INTERFACE_INCLUDE_DIRECTORIES)
40+ set (INTERFACE_PUBLIC_COMPILE_FLAGS -D_USE_MATH_DEFINES)
41+ set (INTERFACE_PUBLIC_LINK_FLAGS)
42+ set (INTERFACE_INCLUDE_DIRS)
4343set (INTERFACE_LIBRARIES)
44- set (LOCAL_COMPILATION_OPTIONS)
45- set (LOCAL_INCLUDE_DIRECTORIES)
44+ set (LOCAL_PUBLIC_COMPILE_FLAGS)
45+ set (LOCAL_PUBLIC_LINK_FLAGS)
46+ set (LOCAL_INCLUDE_DIRS)
4647set (LOCAL_LIBRARIES)
4748
4849if (DISABLE_YGGDRASIL_RAPIDJSON)
@@ -117,7 +118,7 @@ if(NOT (YGGDRASIL_DISABLE_PYTHON_C_API OR DISABLE_YGGDRASIL_RAPIDJSON))
117118endif ()
118119
119120# Handle option dependencies and set compilation options for tests
120- yggdrasil_options_config (LOCAL )
121+ yggdrasil_rapidjson_options_config (LOCAL )
121122
122123# Generate the metaschema header file
123124if (YGGDRASIL_RAPIDJSON_CREATE_METASCHEMA_FULL)
@@ -169,11 +170,6 @@ if(YGGDRASIL_RAPIDJSON_BUILD_CXXMIN)
169170 set (CMAKE_CXX_STANDARD_REQUIRED TRUE )
170171endif ()
171172
172- option (YGGDRASIL_RAPIDJSON_BUILD_ASAN "Build yggdrasil_rapidjson with address sanitizer (gcc/clang)" OFF )
173- option (YGGDRASIL_RAPIDJSON_BUILD_UBSAN "Build yggdrasil_rapidjson with undefined behavior sanitizer (gcc/clang)" OFF )
174-
175- option (YGGDRASIL_RAPIDJSON_ENABLE_INSTRUMENTATION_OPT "Build yggdrasil_rapidjson with -march or -mcpu options" ON )
176-
177173find_program (CCACHE_FOUND ccache )
178174if (CCACHE_FOUND)
179175 set_property (GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
@@ -186,14 +182,6 @@ endif(CCACHE_FOUND)
186182find_program (VALGRIND_FOUND valgrind )
187183
188184if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
189- if (YGGDRASIL_RAPIDJSON_ENABLE_INSTRUMENTATION_OPT AND NOT CMAKE_CROSSCOMPILING )
190- if (CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le" )
191- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -mcpu=native" )
192- else ()
193- #FIXME: x86 is -march=native, but doesn't mean every arch is this option. To keep original project's compatibility, I leave this except POWER.
194- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -march=native" )
195- endif ()
196- endif ()
197185 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -Wall -Wextra -Werror" )
198186 set (EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wsign-conversion)
199187 if (YGGDRASIL_RAPIDJSON_BUILD_CXXMIN)
@@ -209,24 +197,6 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
209197 elseif (YGGDRASIL_RAPIDJSON_BUILD_CXX20 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0" )
210198 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -std=c++20" )
211199 endif ()
212- if (YGGDRASIL_RAPIDJSON_BUILD_ASAN)
213- if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.0" )
214- message (FATAL_ERROR "GCC < 4.8 doesn't support the address sanitizer" )
215- else ()
216- add_compile_options (-fsanitize=address )
217- add_link_options (-fsanitize=address )
218- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -fsanitize=address" )
219- endif ()
220- endif ()
221- if (YGGDRASIL_RAPIDJSON_BUILD_UBSAN)
222- if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9.0" )
223- message (FATAL_ERROR "GCC < 4.9 doesn't support the undefined behavior sanitizer" )
224- else ()
225- add_compile_options (-fsanitize=undefined )
226- add_link_options (-fsanitize=undefined )
227- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -fsanitize=undefined" )
228- endif ()
229- endif ()
230200elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
231201 if (NOT CMAKE_CROSSCOMPILING )
232202 if (CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le" )
@@ -251,24 +221,8 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
251221 elseif (YGGDRASIL_RAPIDJSON_BUILD_CXX20 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "10.0" )
252222 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -std=c++20" )
253223 endif ()
254- if (YGGDRASIL_RAPIDJSON_BUILD_ASAN)
255- add_compile_options (-fsanitize=address )
256- add_link_options (-fsanitize=address )
257- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -fsanitize=address" )
258- endif ()
259- if (YGGDRASIL_RAPIDJSON_BUILD_UBSAN)
260- if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" )
261- add_compile_options (-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error )
262- add_link_options (-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error )
263- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error" )
264- else ()
265- add_compile_options (-fsanitize=undefined )
266- add_link_options (-fsanitize=undefined )
267- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } -fsanitize=undefined" )
268- endif ()
269- endif ()
270224elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
271- list (APPEND INTERFACE_COMPILATION_OPTIONS
225+ list (APPEND INTERFACE_PUBLIC_COMPILE_FLAGS
272226 -D_CRT_SECURE_NO_WARNINGS=1 -DNOMINMAX)
273227 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS } /EHsc /bigobj /Zm10" )
274228 # CMake >= 3.10 should handle the above CMAKE_CXX_STANDARD fine, otherwise use /std:c++XX with MSVC >= 19.10
@@ -307,6 +261,14 @@ SET(CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" CACHE PATH "The directory cmake fi
307261# Interface for export
308262# ===============================
309263
264+ # Version header
265+ generate_version_header (
266+ ${PROJECT_NAME_UPPER}
267+ ${PROJECT_VERSION }
268+ ${CMAKE_CURRENT_SOURCE_DIR } /include/${PROJECT_NAME_LOWER}/${PROJECT_NAME_LOWER}_version.h.in
269+ ${CMAKE_CURRENT_SOURCE_DIR } /include/${PROJECT_NAME_LOWER}/${PROJECT_NAME_LOWER}_version.h
270+ )
271+
310272add_library (${PROJECT_NAME } INTERFACE )
311273
312274if (YGGDRASIL_RAPIDJSON_NEST_HEADERS)
@@ -323,31 +285,25 @@ else()
323285 )
324286endif ()
325287target_compile_options (
326- ${PROJECT_NAME } INTERFACE ${INTERFACE_COMPILATION_OPTIONS}
288+ ${PROJECT_NAME } INTERFACE ${INTERFACE_PUBLIC_COMPILE_FLAGS}
289+ )
290+ target_link_options (
291+ ${PROJECT_NAME } INTERFACE ${INTERFACE_PUBLIC_LINK_FLAGS}
327292)
328293target_include_directories (
329- ${PROJECT_NAME } INTERFACE ${INTERFACE_INCLUDE_DIRECTORIES }
294+ ${PROJECT_NAME } INTERFACE ${INTERFACE_INCLUDE_DIRS }
330295)
331296target_link_libraries (
332297 ${PROJECT_NAME } INTERFACE ${INTERFACE_LIBRARIES}
333298)
334299
335300# Set after interface library created
336301
337- # include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
338- include_directories (
339- # ${INTERFACE_INCLUDE_DIRECTORIES}
340- ${LOCAL_INCLUDE_DIRECTORIES}
341- )
342- add_definitions (
343- # ${INTERFACE_COMPILATION_OPTIONS}
344- ${LOCAL_COMPILATION_OPTIONS}
345- )
346- link_libraries (
347- # ${INTERFACE_LIBRARIES}
348- ${PROJECT_NAME }
349- ${LOCAL_LIBRARIES}
350- )
302+ list (APPEND EXTRA_CXX_FLAGS ${LOCAL_PUBLIC_COMPILE_FLAGS} )
303+ add_compile_options (${LOCAL_PUBLIC_COMPILE_FLAGS} )
304+ add_link_options (${LOCAL_PUBLIC_LINK_FLAGS} )
305+ include_directories (${LOCAL_INCLUDE_DIRS} )
306+ link_libraries (${PROJECT_NAME } ${LOCAL_LIBRARIES} )
351307
352308if (YGGDRASIL_RAPIDJSON_BUILD_DOC)
353309 add_subdirectory (doc )
0 commit comments