Skip to content

Commit 1298fa2

Browse files
committed
build: Clean up Loader build system.
Signed-off-by: Ryan Pavlik <[email protected]>
1 parent 8d89833 commit 1298fa2

File tree

1 file changed

+102
-92
lines changed

1 file changed

+102
-92
lines changed

src/loader/CMakeLists.txt

Lines changed: 102 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,8 @@
1515
# Author:
1616
#
1717

18-
#set (CMAKE_VERBOSE_MAKEFILE 1)
19-
2018
include(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()
3420
if(WIN32)
3521
set(openxr_loader_RESOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/loader.rc)
3622
endif()
@@ -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})
4832
run_xr_xml_generate(loader_source_generator.py xr_generated_loader.hpp)
4933
run_xr_xml_generate(loader_source_generator.py xr_generated_loader.cpp)
5034

@@ -86,65 +70,74 @@ add_library(openxr_loader ${LIBRARY_TYPE}
8670
if(BUILD_WITH_SYSTEM_JSONCPP)
8771
target_link_libraries(openxr_loader PRIVATE JsonCpp::JsonCpp)
8872
else()
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+
)
9783
endif()
9884
set_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+
124105
if(VulkanHeaders_FOUND)
125-
target_include_directories(openxr_loader
126-
PRIVATE ${Vulkan_INCLUDE_DIRS}
127-
)
106+
target_include_directories(openxr_loader PRIVATE ${Vulkan_INCLUDE_DIRS})
128107
endif()
129108
if(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)
133110
endif()
111+
134112
target_link_libraries(
135113
openxr_loader
136114
PRIVATE openxr-all-supported ${CMAKE_DL_LIBS}
137115
PUBLIC ${CMAKE_THREAD_LIBS_INIT}
138116
)
139117

140118
target_compile_definitions(openxr_loader PRIVATE API_NAME="OpenXR")
119+
141120
if(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")
165161
elseif(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)
210210
endif()
211211

212212
if(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()
223231
endif()
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

Comments
 (0)