29 lines
1.3 KiB
CMake
29 lines
1.3 KiB
CMake
option(SIMDJSON_EXCEPTIONS "Enable simdjson's exception-throwing interface" ON)
|
|
if(NOT SIMDJSON_EXCEPTIONS)
|
|
message(STATUS "simdjson exception interface turned off. \
|
|
Code that does not check error codes will not compile.")
|
|
simdjson_add_props(target_compile_definitions PUBLIC SIMDJSON_EXCEPTIONS=0)
|
|
if(MSVC)
|
|
if(NOT is_top_project)
|
|
message(AUTHOR_WARNING "Turning SIMDJSON_EXCEPTIONS off requires \
|
|
editing CMAKE_CXX_FLAGS")
|
|
endif()
|
|
|
|
# CMake currently /EHsc as a default flag in CMAKE_CXX_FLAGS on MSVC.
|
|
# Replacing this with a more general abstraction is a WIP
|
|
# (see https://gitlab.kitware.com/cmake/cmake/-/issues/20610)
|
|
# /EHs enables standard C++ stack unwinding when catching exceptions
|
|
# (non-structured exception handling)
|
|
# /EHc used in conjection with /EHs indicates that extern "C" functions
|
|
# never throw (terminate-on-throw)
|
|
# Here, we disable both with the - argument negation operator
|
|
string(REPLACE "/EHsc" "/EHs-c-" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
|
|
|
# Because we cannot change the flag above on an individual target (yet), the
|
|
# definition below must similarly be added globally
|
|
add_definitions(-D_HAS_EXCEPTIONS=0)
|
|
elseif(CMAKE_COMPILER_IS_GNUCC)
|
|
simdjson_add_props(target_link_libraries PRIVATE -fno-exceptions)
|
|
endif()
|
|
endif()
|