1515# Author:
1616#
1717
18- #set (CMAKE_VERBOSE_MAKEFILE 1)
19-
2018include (GNUInstallDirs)
2119
22- # Use this feature for Windows to automatically generate an exports file for the DLL.
23- # See https://blog.kitware.com/create-dlls-on-windows-without-declspec-using-new-cmake-export-all-feature/
24- include (GenerateExportHeader)
25- set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS false )
26-
27-
28- if (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
29- set (FALLBACK_CONFIG_DIRS "/etc/xdg" CACHE STRING
30- "Search path to use when XDG_CONFIG_DIRS is unset or empty or the current process is SUID/SGID. Default is freedesktop compliant." )
31- set (FALLBACK_DATA_DIRS "/usr/local/share:/usr/share" CACHE STRING
32- "Search path to use when XDG_DATA_DIRS is unset or empty or the current process is SUID/SGID. Default is freedesktop compliant." )
33- endif ()
3420if (WIN32 )
3521 set (openxr_loader_RESOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR} /loader.rc)
3622endif ()
@@ -42,9 +28,7 @@ endif()
4228
4329# List of all files externally generated outside of the loader that the loader
4430# needs to build with.
45- SET (LOADER_EXTERNAL_GEN_FILES
46- ${COMMON_GENERATED_OUTPUT}
47- )
31+ set (LOADER_EXTERNAL_GEN_FILES ${COMMON_GENERATED_OUTPUT} )
4832run_xr_xml_generate(loader_source_generator.py xr_generated_loader.hpp)
4933run_xr_xml_generate(loader_source_generator.py xr_generated_loader.cpp)
5034
@@ -86,65 +70,74 @@ add_library(openxr_loader ${LIBRARY_TYPE}
8670if (BUILD_WITH_SYSTEM_JSONCPP)
8771 target_link_libraries (openxr_loader PRIVATE JsonCpp::JsonCpp)
8872else ()
89- target_sources (openxr_loader PRIVATE
73+ target_sources (openxr_loader
74+ PRIVATE
9075 ${PROJECT_SOURCE_DIR} /src/external/jsoncpp/src/lib_json/json_reader.cpp
9176 ${PROJECT_SOURCE_DIR} /src/external/jsoncpp/src/lib_json/json_value.cpp
92- ${PROJECT_SOURCE_DIR} /src/external/jsoncpp/src/lib_json/json_writer.cpp)
77+ ${PROJECT_SOURCE_DIR} /src/external/jsoncpp/src/lib_json/json_writer.cpp
78+ )
9379 target_include_directories (openxr_loader
9480 PRIVATE
95- # For jsoncpp
96- ${PROJECT_SOURCE_DIR} /src/external/jsoncpp/ include )
81+ ${PROJECT_SOURCE_DIR} /src/external/ jsoncpp/ include
82+ )
9783endif ()
9884set_target_properties (openxr_loader PROPERTIES FOLDER ${LOADER_FOLDER} )
9985
100- set_source_files_properties (
101- ${LOADER_EXTERNAL_GEN_FILES}
102- PROPERTIES GENERATED TRUE
103- )
104- add_dependencies (openxr_loader
105- generate_openxr_header
106- xr_global_generated_files
107- )
108- target_include_directories (openxr_loader
109- PRIVATE
110- ${PROJECT_SOURCE_DIR} /src/common
86+ set_source_files_properties (${LOADER_EXTERNAL_GEN_FILES} PROPERTIES GENERATED TRUE )
87+ add_dependencies (openxr_loader generate_openxr_header xr_global_generated_files)
88+ target_include_directories (
89+ openxr_loader
90+ PRIVATE ${PROJECT_SOURCE_DIR} /src/common
11191
112- # for OpenXR headers
113- ${PROJECT_SOURCE_DIR} /include
114- ${PROJECT_BINARY_DIR} /include
92+ # for OpenXR headers
93+ ${PROJECT_SOURCE_DIR} /include
94+ ${PROJECT_BINARY_DIR} /include
11595
116- # for generated dispatch table, common_config.h
117- ${CMAKE_CURRENT_SOURCE_DIR} /..
118- ${CMAKE_CURRENT_BINARY_DIR} /..
96+ # for generated dispatch table, common_config.h
97+ ${CMAKE_CURRENT_SOURCE_DIR} /..
98+ ${CMAKE_CURRENT_BINARY_DIR} /..
11999
120- # for target-specific generated files
121- ${CMAKE_CURRENT_SOURCE_DIR}
122- ${CMAKE_CURRENT_BINARY_DIR}
100+ # for target-specific generated files
101+ ${CMAKE_CURRENT_SOURCE_DIR}
102+ ${CMAKE_CURRENT_BINARY_DIR}
123103)
104+
124105if (VulkanHeaders_FOUND)
125- target_include_directories (openxr_loader
126- PRIVATE ${Vulkan_INCLUDE_DIRS}
127- )
106+ target_include_directories (openxr_loader PRIVATE ${Vulkan_INCLUDE_DIRS} )
128107endif ()
129108if (NOT BUILD_LOADER_WITH_EXCEPTION_HANDLING)
130- target_compile_definitions (openxr_loader
131- PRIVATE XRLOADER_DISABLE_EXCEPTION_HANDLING
132- )
109+ target_compile_definitions (openxr_loader PRIVATE XRLOADER_DISABLE_EXCEPTION_HANDLING)
133110endif ()
111+
134112target_link_libraries (
135113 openxr_loader
136114 PRIVATE openxr-all -supported ${CMAKE_DL_LIBS}
137115 PUBLIC ${CMAKE_THREAD_LIBS_INIT}
138116)
139117
140118target_compile_definitions (openxr_loader PRIVATE API_NAME="OpenXR" )
119+
141120if (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
142- target_compile_definitions (openxr_loader
143- PRIVATE FALLBACK_CONFIG_DIRS="${FALLBACK_CONFIG_DIRS} "
144- PRIVATE FALLBACK_DATA_DIRS="${FALLBACK_DATA_DIRS} "
145- PRIVATE SYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR} "
121+ set (FALLBACK_CONFIG_DIRS
122+ "/etc/xdg"
123+ CACHE
124+ STRING
125+ "Search path to use when XDG_CONFIG_DIRS is unset or empty or the current process is SUID/SGID. Default is freedesktop compliant."
126+ )
127+ set (FALLBACK_DATA_DIRS
128+ "/usr/local/share:/usr/share"
129+ CACHE
130+ STRING
131+ "Search path to use when XDG_DATA_DIRS is unset or empty or the current process is SUID/SGID. Default is freedesktop compliant."
132+ )
133+ target_compile_definitions (
134+ openxr_loader
135+ PRIVATE
136+ FALLBACK_CONFIG_DIRS="${FALLBACK_CONFIG_DIRS} "
137+ FALLBACK_DATA_DIRS="${FALLBACK_DATA_DIRS} "
138+ SYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR} "
146139 )
147- if (NOT (CMAKE_INSTALL_FULL_SYSCONFDIR STREQUAL "/etc" ))
140+ if (NOT (CMAKE_INSTALL_FULL_SYSCONFDIR STREQUAL "/etc" ))
148141 target_compile_definitions (openxr_loader PRIVATE EXTRASYSCONFDIR="/etc" )
149142 endif ()
150143
@@ -155,50 +148,57 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
155148 PUBLIC m
156149 )
157150
158- add_custom_target (libopenxr_loader.so.${MAJOR} .${MINOR} ALL
159- COMMAND ${CMAKE_COMMAND} -E create_symlink libopenxr_loader.so.${MAJOR} .${MINOR} .${PATCH} libopenxr_loader.so.${MAJOR} .${MINOR} )
151+ add_custom_target (
152+ libopenxr_loader.so.${MAJOR} .${MINOR} ALL
153+ COMMAND ${CMAKE_COMMAND} -E create_symlink libopenxr_loader.so.${MAJOR} .${MINOR} .${PATCH}
154+ libopenxr_loader.so.${MAJOR} .${MINOR}
155+ )
160156
161157 set (XR_API_VERSION "${MAJOR} .${MINOR} " )
162158 set (EXTRA_LIBS ${CMAKE_THREAD_LIBS_INIT} )
163- configure_file (" openxr.pc.in" " openxr.pc" @ONLY)
159+ configure_file (openxr.pc.in openxr.pc @ONLY)
164160 install (FILES "${CMAKE_CURRENT_BINARY_DIR} /openxr.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR} /pkgconfig" )
165161elseif (WIN32 )
166- # WindowsStore (UWP) apps must be compiled with dynamic CRT linkage (default)
167- if (NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" )
168- foreach (configuration in CMAKE_C_FLAGS_DEBUG
169- CMAKE_C_FLAGS_RELEASE
170- CMAKE_C_FLAGS_RELWITHDEBINFO
171- CMAKE_CXX_FLAGS_DEBUG
172- CMAKE_CXX_FLAGS_RELEASE
173- CMAKE_CXX_FLAGS_RELWITHDEBINFO )
174- # If building DLLs, force static CRT linkage
175- if (DYNAMIC_LOADER)
176- if (${configuration} MATCHES "/MD" )
177- string (REGEX REPLACE "/MD" "/MT" ${configuration} "${${configuration} }" )
178- endif ()
179- else () # Otherwise for static libs, link the CRT dynamically
180- if (${configuration} MATCHES "/MT" )
181- string (REGEX REPLACE "/MT" "/MD" ${configuration} "${${configuration} }" )
162+ if (MSVC )
163+ # WindowsStore (UWP) apps must be compiled with dynamic CRT linkage (default)
164+ if (NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" )
165+ foreach (configuration in CMAKE_C_FLAGS_DEBUG
166+ CMAKE_C_FLAGS_RELEASE
167+ CMAKE_C_FLAGS_RELWITHDEBINFO
168+ CMAKE_CXX_FLAGS_DEBUG
169+ CMAKE_CXX_FLAGS_RELEASE
170+ CMAKE_CXX_FLAGS_RELWITHDEBINFO )
171+ # If building DLLs, force static CRT linkage
172+ if (DYNAMIC_LOADER)
173+ if (${configuration} MATCHES "/MD" )
174+ string (REGEX REPLACE "/MD" "/MT" ${configuration} "${${configuration} }" )
175+ endif ()
176+ else () # Otherwise for static libs, link the CRT dynamically
177+ if (${configuration} MATCHES "/MT" )
178+ string (REGEX REPLACE "/MT" "/MD" ${configuration} "${${configuration} }" )
179+ endif ()
182180 endif ()
183- endif ()
184- endforeach ()
185- endif ()
181+ endforeach ()
182+ endif ()
186183
187- target_compile_options (openxr_loader PRIVATE )
188- if (MSVC )
189184 target_compile_options (openxr_loader PRIVATE /wd6386)
190185 endif ()
191- generate_export_header(openxr_loader)
192- # set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS false)
193186
194187 # Need to copy DLL to client directories so clients can easily load it.
195- if ( (DYNAMIC_LOADER) AND (CMAKE_GENERATOR MATCHES "^Visual Studio.*" ) )
196- file ( TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} /$<CONFIGURATION >/openxr_loader.dll COPY_DLL_SRC_PATH )
197- file ( TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} /$<CONFIGURATION >/openxr_loader.pdb COPY_PDB_SRC_PATH )
198- file ( TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} /../tests/hello_xr/$<CONFIGURATION >/ COPY_DST_HELLO_XR_PATH )
199- file ( TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} /../tests/loader_test/$<CONFIGURATION >/ COPY_DST_LOADER_TEST_PATH )
200- file ( TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} /../conformance/conformance_test/$<CONFIGURATION >/ COPY_DST_CONFORMANCE_TEST_PATH )
201- add_custom_command ( TARGET openxr_loader POST_BUILD
188+ if (DYNAMIC_LOADER AND (CMAKE_GENERATOR MATCHES "^Visual Studio.*" ))
189+ file (TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} /$<CONFIGURATION >/openxr_loader.dll COPY_DLL_SRC_PATH)
190+ file (TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} /$<CONFIGURATION >/openxr_loader.pdb COPY_PDB_SRC_PATH)
191+ file (TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} /../tests/hello_xr/$<CONFIGURATION >/
192+ COPY_DST_HELLO_XR_PATH
193+ )
194+ file (TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} /../tests/loader_test/$<CONFIGURATION >/
195+ COPY_DST_LOADER_TEST_PATH
196+ )
197+ file (TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR} /../conformance/conformance_test/$<CONFIGURATION >/
198+ COPY_DST_CONFORMANCE_TEST_PATH
199+ )
200+ add_custom_command (
201+ TARGET openxr_loader POST_BUILD
202202 COMMAND xcopy /Y /I ${COPY_DLL_SRC_PATH} ${COPY_DST_HELLO_XR_PATH}
203203 COMMAND xcopy /Y /I ${COPY_PDB_SRC_PATH} ${COPY_DST_HELLO_XR_PATH}
204204 COMMAND xcopy /Y /I ${COPY_DLL_SRC_PATH} ${COPY_DST_LOADER_TEST_PATH}
@@ -210,19 +210,29 @@ elseif(WIN32)
210210endif ()
211211
212212if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang" )
213- target_compile_options (openxr_loader
214- PRIVATE -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wpointer-arith
215- PRIVATE -fno-strict-aliasing -fno-builtin-memcmp "$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>"
216- -ffunction-sections -fdata-sections
213+ target_compile_options (
214+ openxr_loader
215+ PRIVATE -Wall
216+ -Wextra
217+ -Wno-unused-parameter
218+ -Wno-missing-field-initializers
219+ -Wpointer-arith
220+ -fno-strict-aliasing
221+ -fno-builtin-memcmp
222+ "$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>"
223+ -ffunction-sections
224+ -fdata-sections
217225 )
218226 # For GCC version 7.1 or greater, we need to disable the implicit fallthrough warning since
219227 # there's no consistent way to satisfy all compilers until they all accept the C++17 standard
220- if (CMAKE_COMPILER_IS_GNUCC AND NOT (CMAKE_CXX_COMPILER_VERSION LESS 7.1))
228+ if (CMAKE_COMPILER_IS_GNUCC AND NOT (CMAKE_CXX_COMPILER_VERSION LESS 7.1))
221229 target_compile_options (openxr_loader PRIVATE -Wimplicit-fallthrough=0)
222230 endif ()
223231endif ()
224232
225- install (TARGETS openxr_loader
233+ install (
234+ TARGETS openxr_loader
226235 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
227236 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
228- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
237+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
238+ )
0 commit comments