Refactor loader specific CMake options
authorCharles Giessen <charles@lunarg.com>
Wed, 3 Nov 2021 20:14:17 +0000 (14:14 -0600)
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>
Wed, 9 Mar 2022 22:06:30 +0000 (15:06 -0700)
Create a new target loader_specific_options that contains the specific flags
and definitions which apply only to the loader. This target links to the
loader_common_options and is used to store various macro defines which
only are relevant to the loader, like the specific language standard to use.
The target also links to the vulkan headers.
Note that this commit is in a series of commits and is not meant to work
by itself.

loader/CMakeLists.txt

index 6c31a4a1528356c6edb23cd8e5caa60610c6a657..6ab7813f381e6054d97a1688eeb568feeaa2272b 100644 (file)
 # limitations under the License.
 # ~~~
 
-include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/generated ${CMAKE_CURRENT_BINARY_DIR})
-
 # Get version of the API the generated code used and put it into a cmake variable LOADER_GENERATED_HEADER_VERSION
 include(generated/loader_generated_header_version.cmake)
 
+add_library(loader_specific_options INTERFACE)
+target_link_libraries(loader_specific_options INTERFACE loader_common_options Vulkan::Headers)
+target_include_directories(loader_specific_options INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/generated ${CMAKE_CURRENT_BINARY_DIR})
+
 # Check for the existance of the secure_getenv or __secure_getenv commands
 include(CheckFunctionExists)
 include(CheckIncludeFile)
@@ -166,7 +168,7 @@ if(WIN32)
         endif()
 
         add_executable(asm_offset asm_offset.c)
-        target_link_libraries(asm_offset Vulkan::Headers)
+        target_link_libraries(asm_offset loader_specific_options)
         add_custom_command(OUTPUT gen_defines.asm DEPENDS asm_offset COMMAND asm_offset MASM)
         add_custom_target(loader_asm_gen_files DEPENDS gen_defines.asm)
         set_target_properties(loader_asm_gen_files PROPERTIES FOLDER ${LOADER_HELPER_FOLDER})
@@ -177,7 +179,7 @@ if(WIN32)
         message(WARNING "Could not find working MASM assebler\n${ASM_FAILURE_MSG}")
         add_custom_target(loader_asm_gen_files)
         add_library(loader-unknown-chain OBJECT unknown_ext_chain.c)
-        target_link_libraries(loader-unknown-chain Vulkan::Headers)
+        target_link_libraries(loader-unknown-chain loader_specific_options)
         set_target_properties(loader-unknown-chain PROPERTIES CMAKE_C_FLAGS_DEBUG "${MODIFIED_C_FLAGS_DEBUG}")
         target_compile_options(loader-unknown-chain PUBLIC ${MSVC_LOADER_COMPILE_OPTIONS})
     endif()
@@ -214,8 +216,7 @@ else() # i.e.: Linux
 
     if(ASSEMBLER_WORKS)
         add_executable(asm_offset asm_offset.c)
-        target_link_libraries(asm_offset Vulkan::Headers)
-        target_compile_definitions(asm_offset PRIVATE _GNU_SOURCE)
+        target_link_libraries(asm_offset loader_specific_options)
         add_custom_command(OUTPUT gen_defines.asm DEPENDS asm_offset COMMAND asm_offset GAS)
         add_custom_target(loader_asm_gen_files DEPENDS gen_defines.asm)
     else()
@@ -260,8 +261,6 @@ if(WIN32)
                           PROPERTIES
                           OUTPUT_NAME vulkan-1)
 
-    target_link_libraries(vulkan Vulkan::Headers)
-
     if(MSVC AND ENABLE_WIN10_ONECORE)
         target_link_libraries(vulkan OneCoreUAP.lib LIBCMT.LIB LIBCMTD.LIB LIBVCRUNTIME.LIB LIBUCRT.LIB)
         set_target_properties(vulkan PROPERTIES LINK_FLAGS "/NODEFAULTLIB")
@@ -286,7 +285,6 @@ else()
     if (NOT ANDROID)
         target_link_libraries(vulkan pthread)
     endif()
-    target_link_libraries(vulkan Vulkan::Headers)
     # Used to make alloca() and secure_getenv() available
     target_compile_definitions(vulkan PRIVATE _GNU_SOURCE)
     if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
@@ -346,12 +344,21 @@ else()
         )
 # cmake-format: on
     endif()
-
-    if(NOT APPLE)
-        target_compile_definitions(vulkan PRIVATE _XOPEN_SOURCE=500) # hush compiler warnings for readlink
-    endif()
 endif()
 
+# common attributes of the vulkan library
+target_link_libraries(vulkan loader_specific_options)
+set_target_properties(vulkan PROPERTIES
+    C_STANDARD 99
+    C_STANDARD_REQUIRED YES
+    C_EXTENSIONS NO
+)
+set_target_properties(vulkan  PROPERTIES
+    CXX_STANDARD 11
+    CXX_STANDARD_REQUIRED YES
+    CXX_EXTENSIONS NO
+)
+
 # Generate pkg-config file.
 include(FindPkgConfig QUIET)
 if(PKG_CONFIG_FOUND)