The open source OpenXR runtime
1# Copyright 2018-2023, Collabora, Ltd.
2# SPDX-License-Identifier: BSL-1.0
3
4if(TARGET xrt-optimized-math)
5 return()
6endif()
7
8# Target used for applying more aggressive optimizations to math-heavy code
9add_library(xrt-optimized-math INTERFACE)
10
11if(MSVC)
12 target_compile_options(xrt-optimized-math INTERFACE $<IF:$<CONFIG:Debug>,/O2 /Ob2,/O2 /Ob3>)
13else()
14 set(CMAKE_C_FLAGS
15 "${CMAKE_C_FLAGS} -pedantic -Wall -Wextra -Wno-unused-parameter -Wno-missing-braces"
16 )
17 set(CMAKE_C_FLAGS
18 "${CMAKE_C_FLAGS} -Werror-implicit-function-declaration -Werror=incompatible-pointer-types"
19 )
20 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=int-conversion")
21 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Wno-unused-parameter")
22
23 # Use effectively ubiquitous SSE2 instead of x87 floating point
24 # for increased reliability/consistency
25 if(CMAKE_SYSTEM_PROCESSOR MATCHES "[xX]86" AND XRT_FEATURE_SSE2)
26 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2 -mfpmath=sse")
27 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2 -mfpmath=sse")
28 endif()
29
30 target_compile_options(xrt-optimized-math INTERFACE $<IF:$<CONFIG:Debug>,-O2,-O3>)
31endif()
32
33if(NOT WIN32)
34 # Even clang's gnu-style driver on windows doesn't accept this argument.
35
36 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
37 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined")
38endif()
39
40# Must call before adding targets that will use xrt-optimized-math
41macro(xrt_optimized_math_flags)
42 if(MSVC)
43 foreach(
44 FLAGSVAR
45 CMAKE_CXX_FLAGS_DEBUG
46 CMAKE_CXX_FLAGS_RELEASE
47 CMAKE_CXX_FLAGS_RELWITHDEBINFO
48 CMAKE_CXX_FLAGS_MINSIZEREL
49 CMAKE_C_FLAGS_DEBUG
50 CMAKE_C_FLAGS_RELEASE
51 CMAKE_C_FLAGS_RELWITHDEBINFO
52 CMAKE_C_FLAGS_MINSIZEREL
53 )
54
55 string(REPLACE "/Od" "" ${FLAGSVAR} "${${FLAGSVAR}}")
56 string(REPLACE "/O1" "" ${FLAGSVAR} "${${FLAGSVAR}}")
57 string(REPLACE "/O2" "" ${FLAGSVAR} "${${FLAGSVAR}}")
58 string(REPLACE "/Ob1" "" ${FLAGSVAR} "${${FLAGSVAR}}")
59 string(REPLACE "/Ob0" "" ${FLAGSVAR} "${${FLAGSVAR}}")
60 string(REPLACE "/RTC1" "" ${FLAGSVAR} "${${FLAGSVAR}}")
61 endforeach()
62 endif()
63endmacro()