@@ -31,10 +31,16 @@ option(RAPIDJSON_BUILD_THIRDPARTY_GTEST
31
31
"Use gtest installation in `thirdparty/gtest` by default if available" OFF )
32
32
33
33
option (RAPIDJSON_BUILD_CXX11 "Build rapidjson with C++11 (gcc/clang)" ON )
34
+ if (RAPIDJSON_BUILD_CXX11 )
35
+ set (CMAKE_CXX_STANDARD 11 )
36
+ set (CMAKE_CXX_STANDARD_REQUIRED TRUE )
37
+ endif ()
34
38
35
39
option (RAPIDJSON_BUILD_ASAN "Build rapidjson with address sanitizer (gcc/clang)" OFF )
36
40
option (RAPIDJSON_BUILD_UBSAN "Build rapidjson with undefined behavior sanitizer (gcc/clang)" OFF )
37
41
42
+ option (RAPIDJSON_ENABLE_INSTRUMENTATION_OPT "Build rapidjson with -march or -mcpu options" ON )
43
+
38
44
option (RAPIDJSON_HAS_STDSTRING "" OFF )
39
45
if (RAPIDJSON_HAS_STDSTRING )
40
46
add_definitions (-DRAPIDJSON_HAS_STDSTRING )
@@ -49,16 +55,18 @@ if(CCACHE_FOUND)
49
55
endif ()
50
56
endif (CCACHE_FOUND )
51
57
52
- if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "GNU" )
53
- if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "powerpc" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ppc64" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ppc64le" )
54
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native" )
55
- else ()
56
- #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.
57
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native" )
58
+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
59
+ if (RAPIDJSON_ENABLE_INSTRUMENTATION_OPT AND NOT CMAKE_CROSSCOMPILING )
60
+ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le" )
61
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native" )
62
+ else ()
63
+ #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.
64
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native" )
65
+ endif ()
58
66
endif ()
59
67
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror" )
60
68
set (EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wsign-conversion )
61
- if (RAPIDJSON_BUILD_CXX11 )
69
+ if (RAPIDJSON_BUILD_CXX11 AND CMAKE_VERSION VERSION_LESS 3.1 )
62
70
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7.0" )
63
71
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x" )
64
72
else ()
@@ -80,15 +88,17 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
80
88
endif ()
81
89
endif ()
82
90
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
83
- if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "powerpc" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ppc64" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ppc64le" )
84
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native" )
85
- else ()
86
- #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.
87
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native" )
91
+ if (NOT CMAKE_CROSSCOMPILING )
92
+ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le" )
93
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native" )
94
+ else ()
95
+ #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.
96
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native" )
97
+ endif ()
88
98
endif ()
89
99
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wno-missing-field-initializers" )
90
- set (EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wimplicit-fallthrough -Weverything )
91
- if (RAPIDJSON_BUILD_CXX11 )
100
+ set (EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wimplicit-fallthrough )
101
+ if (RAPIDJSON_BUILD_CXX11 AND CMAKE_VERSION VERSION_LESS 3.1 )
92
102
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
93
103
endif ()
94
104
if (RAPIDJSON_BUILD_ASAN )
@@ -101,7 +111,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
101
111
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined" )
102
112
endif ()
103
113
endif ()
104
- elseif (" ${ CMAKE_CXX_COMPILER_ID} " STREQUAL "MSVC" )
114
+ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
105
115
add_definitions (-D_CRT_SECURE_NO_WARNINGS=1 )
106
116
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc" )
107
117
elseif (CMAKE_CXX_COMPILER_ID MATCHES "XL" )
@@ -118,7 +128,7 @@ IF(UNIX OR CYGWIN)
118
128
ELSEIF (WIN32 )
119
129
SET (_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX} /cmake" )
120
130
ENDIF ()
121
- SET (CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR} " CACHE PATH "The directory cmake fiels are installed in" )
131
+ SET (CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR} " CACHE PATH "The directory cmake files are installed in" )
122
132
123
133
include_directories (${CMAKE_CURRENT_SOURCE_DIR} /include )
124
134
@@ -181,6 +191,8 @@ EXPORT( PACKAGE ${PROJECT_NAME} )
181
191
# ... for the build tree
182
192
SET ( CONFIG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} )
183
193
SET ( CONFIG_DIR ${CMAKE_CURRENT_BINARY_DIR} )
194
+ SET ( ${PROJECT_NAME} _INCLUDE_DIR "\$ {${PROJECT_NAME} _SOURCE_DIR}/include" )
195
+
184
196
CONFIGURE_FILE ( ${CMAKE_CURRENT_SOURCE_DIR} /${PROJECT_NAME}Config.cmake.in
185
197
${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME}Config.cmake @ONLY )
186
198
CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR} /${PROJECT_NAME}ConfigVersion.cmake.in
0 commit comments