aboutsummaryrefslogtreecommitdiff
path: root/cmake/Exceptions.cmake
blob: 89e7e6907f1af71d931bd5bb5097cc93dc326efb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function(target_flag_exceptions_msvc TARGET_NAME ENABLED)
	if(ENABLED)
		target_compile_options(${TARGET_NAME} PRIVATE /EHsc)
	else()
		target_compile_options(${TARGET_NAME} PRIVATE /EH-)
	endif()
endfunction()

function(target_flag_exceptions_gcc TARGET_NAME ENABLED)
	if(ENABLED)
		target_compile_options(${TARGET_NAME} PRIVATE -fexceptions)
	else()
		target_compile_options(${TARGET_NAME} PRIVATE -fno-exceptions)
	endif()
endfunction()

function(target_flag_exceptions TARGET_NAME ENABLED)
	if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
		target_flag_exceptions_msvc(${TARGET_NAME} ${ENABLED})
	elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
		if(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MATCHES "MSVC")
			target_flag_exceptions_msvc(${TARGET_NAME} ${ENABLED})
		elseif(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MATCHES "GNU")
			target_flag_exceptions_gcc(${TARGET_NAME} ${ENABLED})
		endif()
	elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
		target_flag_exceptions_gcc(${TARGET_NAME} ${ENABLED})
	else()
		message(FATAL "target_flag_exceptions(): Unknown compiler ${CMAKE_CXX_COMPILER_ID}")
	endif()
endfunction()