1*b7893ccfSSadaf Ebrahimi# ~~~ 2*b7893ccfSSadaf Ebrahimi# Copyright (c) 2014-2019 Valve Corporation 3*b7893ccfSSadaf Ebrahimi# Copyright (c) 2014-2019 LunarG, Inc. 4*b7893ccfSSadaf Ebrahimi# 5*b7893ccfSSadaf Ebrahimi# Licensed under the Apache License, Version 2.0 (the "License"); 6*b7893ccfSSadaf Ebrahimi# you may not use this file except in compliance with the License. 7*b7893ccfSSadaf Ebrahimi# You may obtain a copy of the License at 8*b7893ccfSSadaf Ebrahimi# 9*b7893ccfSSadaf Ebrahimi# http://www.apache.org/licenses/LICENSE-2.0 10*b7893ccfSSadaf Ebrahimi# 11*b7893ccfSSadaf Ebrahimi# Unless required by applicable law or agreed to in writing, software 12*b7893ccfSSadaf Ebrahimi# distributed under the License is distributed on an "AS IS" BASIS, 13*b7893ccfSSadaf Ebrahimi# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*b7893ccfSSadaf Ebrahimi# See the License for the specific language governing permissions and 15*b7893ccfSSadaf Ebrahimi# limitations under the License. 16*b7893ccfSSadaf Ebrahimi# ~~~ 17*b7893ccfSSadaf Ebrahimi 18*b7893ccfSSadaf Ebrahimiif(WIN32) 19*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DVK_USE_PLATFORM_WIN32_KHX -DWIN32_LEAN_AND_MEAN) 20*b7893ccfSSadaf Ebrahimi add_custom_target(mk_layer_config_dir ALL 21*b7893ccfSSadaf Ebrahimi COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>) 22*b7893ccfSSadaf Ebrahimi set_target_properties(mk_layer_config_dir PROPERTIES FOLDER ${LAYERS_HELPER_FOLDER}) 23*b7893ccfSSadaf Ebrahimielseif(ANDROID) 24*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR -DVK_USE_PLATFORM_ANDROID_KHX) 25*b7893ccfSSadaf Ebrahimielseif(APPLE) 26*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_MACOS_MVK) 27*b7893ccfSSadaf Ebrahimi if(CMAKE_GENERATOR MATCHES "^Xcode.*") 28*b7893ccfSSadaf Ebrahimi add_custom_target(mk_layer_config_dir ALL 29*b7893ccfSSadaf Ebrahimi COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>) 30*b7893ccfSSadaf Ebrahimi endif() 31*b7893ccfSSadaf Ebrahimielseif(UNIX AND NOT APPLE) # i.e. Linux 32*b7893ccfSSadaf Ebrahimi if(BUILD_WSI_XCB_SUPPORT) 33*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XCB_KHX) 34*b7893ccfSSadaf Ebrahimi endif() 35*b7893ccfSSadaf Ebrahimi 36*b7893ccfSSadaf Ebrahimi if(BUILD_WSI_XLIB_SUPPORT) 37*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_KHX -DVK_USE_PLATFORM_XLIB_XRANDR_EXT) 38*b7893ccfSSadaf Ebrahimi endif() 39*b7893ccfSSadaf Ebrahimi 40*b7893ccfSSadaf Ebrahimi if(BUILD_WSI_WAYLAND_SUPPORT) 41*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR -DVK_USE_PLATFORM_WAYLAND_KHX) 42*b7893ccfSSadaf Ebrahimi endif() 43*b7893ccfSSadaf Ebrahimielse() 44*b7893ccfSSadaf Ebrahimi message(FATAL_ERROR "Unsupported Platform!") 45*b7893ccfSSadaf Ebrahimiendif() 46*b7893ccfSSadaf Ebrahimi 47*b7893ccfSSadaf Ebrahimi# Configure installation of source files that are dependencies of other repos. 48*b7893ccfSSadaf Ebrahimiif(BUILD_LAYER_SUPPORT_FILES) 49*b7893ccfSSadaf Ebrahimi set(LAYER_UTIL_FILES 50*b7893ccfSSadaf Ebrahimi cast_utils.h 51*b7893ccfSSadaf Ebrahimi hash_util.h 52*b7893ccfSSadaf Ebrahimi hash_vk_types.h 53*b7893ccfSSadaf Ebrahimi vk_format_utils.h 54*b7893ccfSSadaf Ebrahimi vk_format_utils.cpp 55*b7893ccfSSadaf Ebrahimi vk_layer_config.h 56*b7893ccfSSadaf Ebrahimi vk_layer_config.cpp 57*b7893ccfSSadaf Ebrahimi vk_layer_data.h 58*b7893ccfSSadaf Ebrahimi vk_layer_extension_utils.h 59*b7893ccfSSadaf Ebrahimi vk_layer_extension_utils.cpp 60*b7893ccfSSadaf Ebrahimi vk_layer_logging.h 61*b7893ccfSSadaf Ebrahimi vk_layer_utils.h 62*b7893ccfSSadaf Ebrahimi vk_layer_utils.cpp 63*b7893ccfSSadaf Ebrahimi vk_loader_layer.h 64*b7893ccfSSadaf Ebrahimi vk_loader_platform.h 65*b7893ccfSSadaf Ebrahimi generated/vk_validation_error_messages.h 66*b7893ccfSSadaf Ebrahimi generated/vk_layer_dispatch_table.h 67*b7893ccfSSadaf Ebrahimi generated/vk_dispatch_table_helper.h 68*b7893ccfSSadaf Ebrahimi generated/vk_safe_struct.h 69*b7893ccfSSadaf Ebrahimi generated/vk_safe_struct.cpp 70*b7893ccfSSadaf Ebrahimi generated/vk_enum_string_helper.h 71*b7893ccfSSadaf Ebrahimi generated/vk_object_types.h 72*b7893ccfSSadaf Ebrahimi generated/vk_extension_helper.h 73*b7893ccfSSadaf Ebrahimi generated/vk_typemap_helper.h) 74*b7893ccfSSadaf Ebrahimi install(FILES ${LAYER_UTIL_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 75*b7893ccfSSadaf Ebrahimiendif() 76*b7893ccfSSadaf Ebrahimi 77*b7893ccfSSadaf Ebrahimiset(TARGET_NAMES 78*b7893ccfSSadaf Ebrahimi VkLayer_khronos_validation 79*b7893ccfSSadaf Ebrahimi VkLayer_core_validation 80*b7893ccfSSadaf Ebrahimi VkLayer_object_lifetimes 81*b7893ccfSSadaf Ebrahimi VkLayer_unique_objects 82*b7893ccfSSadaf Ebrahimi VkLayer_stateless_validation 83*b7893ccfSSadaf Ebrahimi VkLayer_standard_validation 84*b7893ccfSSadaf Ebrahimi VkLayer_thread_safety) 85*b7893ccfSSadaf Ebrahimi 86*b7893ccfSSadaf Ebrahimiif(BUILD_LAYERS) 87*b7893ccfSSadaf Ebrahimi # Install the layer json files 88*b7893ccfSSadaf Ebrahimi if(WIN32) 89*b7893ccfSSadaf Ebrahimi if(CMAKE_GENERATOR MATCHES "^Visual Studio.*") 90*b7893ccfSSadaf Ebrahimi foreach(TARGET_NAME ${TARGET_NAMES}) 91*b7893ccfSSadaf Ebrahimi install(FILES ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${TARGET_NAME}.json DESTINATION ${CMAKE_INSTALL_LIBDIR}) 92*b7893ccfSSadaf Ebrahimi endforeach() 93*b7893ccfSSadaf Ebrahimi else() 94*b7893ccfSSadaf Ebrahimi foreach(TARGET_NAME ${TARGET_NAMES}) 95*b7893ccfSSadaf Ebrahimi install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}.json DESTINATION ${CMAKE_INSTALL_LIBDIR}) 96*b7893ccfSSadaf Ebrahimi endforeach() 97*b7893ccfSSadaf Ebrahimi endif() 98*b7893ccfSSadaf Ebrahimi elseif(UNIX) # UNIX includes APPLE 99*b7893ccfSSadaf Ebrahimi foreach(TARGET_NAME ${TARGET_NAMES}) 100*b7893ccfSSadaf Ebrahimi install(FILES ${CMAKE_CURRENT_BINARY_DIR}/staging-json/${TARGET_NAME}.json 101*b7893ccfSSadaf Ebrahimi DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/vulkan/explicit_layer.d) 102*b7893ccfSSadaf Ebrahimi endforeach() 103*b7893ccfSSadaf Ebrahimi endif() 104*b7893ccfSSadaf Ebrahimiendif() 105*b7893ccfSSadaf Ebrahimi 106*b7893ccfSSadaf Ebrahimi# System-specific macros to create a library target. 107*b7893ccfSSadaf Ebrahimiif(WIN32) 108*b7893ccfSSadaf Ebrahimi macro(AddVkLayer target LAYER_COMPILE_DEFINITIONS) 109*b7893ccfSSadaf Ebrahimi file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/VkLayer_${target}.def DEF_FILE) 110*b7893ccfSSadaf Ebrahimi add_custom_target(copy-${target}-def-file ALL 111*b7893ccfSSadaf Ebrahimi COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DEF_FILE} VkLayer_${target}.def 112*b7893ccfSSadaf Ebrahimi VERBATIM) 113*b7893ccfSSadaf Ebrahimi set_target_properties(copy-${target}-def-file PROPERTIES FOLDER ${LAYERS_HELPER_FOLDER}) 114*b7893ccfSSadaf Ebrahimi 115*b7893ccfSSadaf Ebrahimi add_library(VkLayer_${target} SHARED ${ARGN} VkLayer_${target}.def) 116*b7893ccfSSadaf Ebrahimi target_compile_definitions(VkLayer_${target} PUBLIC ${LAYER_COMPILE_DEFINITIONS}) 117*b7893ccfSSadaf Ebrahimi target_link_libraries(VkLayer_${target} PRIVATE VkLayer_utils) 118*b7893ccfSSadaf Ebrahimi add_dependencies(VkLayer_${target} VkLayer_utils) 119*b7893ccfSSadaf Ebrahimi install(TARGETS VkLayer_${target} DESTINATION ${CMAKE_INSTALL_LIBDIR}) 120*b7893ccfSSadaf Ebrahimi endmacro() 121*b7893ccfSSadaf Ebrahimielseif(APPLE) 122*b7893ccfSSadaf Ebrahimi macro(AddVkLayer target LAYER_COMPILE_DEFINITIONS) 123*b7893ccfSSadaf Ebrahimi add_library(VkLayer_${target} SHARED ${ARGN}) 124*b7893ccfSSadaf Ebrahimi target_compile_definitions(VkLayer_${target} PUBLIC ${LAYER_COMPILE_DEFINITIONS}) 125*b7893ccfSSadaf Ebrahimi target_link_libraries(VkLayer_${target} PRIVATE VkLayer_utils) 126*b7893ccfSSadaf Ebrahimi add_dependencies(VkLayer_${target} VkLayer_utils) 127*b7893ccfSSadaf Ebrahimi set_target_properties(VkLayer_${target} 128*b7893ccfSSadaf Ebrahimi PROPERTIES LINK_FLAGS 129*b7893ccfSSadaf Ebrahimi "-Wl" 130*b7893ccfSSadaf Ebrahimi INSTALL_RPATH 131*b7893ccfSSadaf Ebrahimi "@loader_path/") 132*b7893ccfSSadaf Ebrahimi install(TARGETS VkLayer_${target} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 133*b7893ccfSSadaf Ebrahimi endmacro() 134*b7893ccfSSadaf Ebrahimielse(UNIX AND NOT APPLE) # i.e.: Linux 135*b7893ccfSSadaf Ebrahimi macro(AddVkLayer target LAYER_COMPILE_DEFINITIONS) 136*b7893ccfSSadaf Ebrahimi add_library(VkLayer_${target} SHARED ${ARGN}) 137*b7893ccfSSadaf Ebrahimi target_compile_definitions(VkLayer_${target} PUBLIC ${LAYER_COMPILE_DEFINITIONS}) 138*b7893ccfSSadaf Ebrahimi target_link_libraries(VkLayer_${target} PRIVATE VkLayer_utils) 139*b7893ccfSSadaf Ebrahimi add_dependencies(VkLayer_${target} VkLayer_utils) 140*b7893ccfSSadaf Ebrahimi set_target_properties(VkLayer_${target} PROPERTIES LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libVkLayer_${target}.map,-Bsymbolic,--exclude-libs,ALL") 141*b7893ccfSSadaf Ebrahimi install(TARGETS VkLayer_${target} DESTINATION ${CMAKE_INSTALL_LIBDIR}) 142*b7893ccfSSadaf Ebrahimi endmacro() 143*b7893ccfSSadaf Ebrahimiendif() 144*b7893ccfSSadaf Ebrahimi 145*b7893ccfSSadaf Ebrahimiinclude_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/generated ${VulkanHeaders_INCLUDE_DIR}) 146*b7893ccfSSadaf Ebrahimi 147*b7893ccfSSadaf Ebrahimiif(WIN32) 148*b7893ccfSSadaf Ebrahimi # Applies to all configurations 149*b7893ccfSSadaf Ebrahimi add_definitions(-D_CRT_SECURE_NO_WARNINGS) 150*b7893ccfSSadaf Ebrahimi # Avoid: fatal error C1128: number of sections exceeded object file format limit: compile with /bigobj 151*b7893ccfSSadaf Ebrahimi add_compile_options("/bigobj") 152*b7893ccfSSadaf Ebrahimi # Allow Windows to use multiprocessor compilation 153*b7893ccfSSadaf Ebrahimi add_compile_options(/MP) 154*b7893ccfSSadaf Ebrahimi # Turn off transitional "changed behavior" warning message for Visual Studio versions prior to 2015. The changed behavior is 155*b7893ccfSSadaf Ebrahimi # that constructor initializers are now fixed to clear the struct members. 156*b7893ccfSSadaf Ebrahimi add_compile_options("$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,19>>:/wd4351>") 157*b7893ccfSSadaf Ebrahimielse() 158*b7893ccfSSadaf Ebrahimi set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare") 159*b7893ccfSSadaf Ebrahimi set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare") 160*b7893ccfSSadaf Ebrahimiendif() 161*b7893ccfSSadaf Ebrahimi 162*b7893ccfSSadaf Ebrahimi# Clang warns about unused const variables. Generated files may purposely contain unused consts, so silence this warning in Clang 163*b7893ccfSSadaf Ebrahimiif(CMAKE_C_COMPILER_ID MATCHES "Clang") 164*b7893ccfSSadaf Ebrahimi set_source_files_properties(parameter_validation.cpp PROPERTIES COMPILE_FLAGS "-Wno-unused-const-variable") 165*b7893ccfSSadaf Ebrahimiendif() 166*b7893ccfSSadaf Ebrahimi 167*b7893ccfSSadaf Ebrahimiset(CHASSIS_LIBRARY_FILES 168*b7893ccfSSadaf Ebrahimi generated/chassis.cpp 169*b7893ccfSSadaf Ebrahimi generated/layer_chassis_dispatch.cpp) 170*b7893ccfSSadaf Ebrahimi 171*b7893ccfSSadaf Ebrahimiset(CORE_VALIDATION_LIBRARY_FILES 172*b7893ccfSSadaf Ebrahimi core_validation.cpp 173*b7893ccfSSadaf Ebrahimi drawdispatch.cpp 174*b7893ccfSSadaf Ebrahimi convert_to_renderpass2.cpp 175*b7893ccfSSadaf Ebrahimi descriptor_sets.cpp 176*b7893ccfSSadaf Ebrahimi buffer_validation.cpp 177*b7893ccfSSadaf Ebrahimi shader_validation.cpp 178*b7893ccfSSadaf Ebrahimi gpu_validation.cpp 179*b7893ccfSSadaf Ebrahimi xxhash.c) 180*b7893ccfSSadaf Ebrahimi 181*b7893ccfSSadaf Ebrahimiset(OBJECT_LIFETIMES_LIBRARY_FILES 182*b7893ccfSSadaf Ebrahimi generated/object_tracker.cpp 183*b7893ccfSSadaf Ebrahimi generated/object_tracker.h 184*b7893ccfSSadaf Ebrahimi object_tracker_utils.cpp) 185*b7893ccfSSadaf Ebrahimi 186*b7893ccfSSadaf Ebrahimiset(THREAD_SAFETY_LIBRARY_FILES 187*b7893ccfSSadaf Ebrahimi generated/thread_safety.cpp 188*b7893ccfSSadaf Ebrahimi generated/thread_safety.h) 189*b7893ccfSSadaf Ebrahimi 190*b7893ccfSSadaf Ebrahimiset(STATELESS_VALIDATION_LIBRARY_FILES 191*b7893ccfSSadaf Ebrahimi generated/parameter_validation.cpp 192*b7893ccfSSadaf Ebrahimi generated/parameter_validation.h 193*b7893ccfSSadaf Ebrahimi parameter_validation_utils.cpp) 194*b7893ccfSSadaf Ebrahimi 195*b7893ccfSSadaf Ebrahimiset(BEST_PRACTICES_LIBRARY_FILES 196*b7893ccfSSadaf Ebrahimi best_practices.cpp 197*b7893ccfSSadaf Ebrahimi best_practices.h) 198*b7893ccfSSadaf Ebrahimi 199*b7893ccfSSadaf Ebrahimiif(BUILD_LAYERS) 200*b7893ccfSSadaf Ebrahimi AddVkLayer(core_validation "BUILD_CORE_VALIDATION" 201*b7893ccfSSadaf Ebrahimi ${CHASSIS_LIBRARY_FILES} 202*b7893ccfSSadaf Ebrahimi ${CORE_VALIDATION_LIBRARY_FILES}) 203*b7893ccfSSadaf Ebrahimi AddVkLayer(object_lifetimes "BUILD_OBJECT_TRACKER" ${CHASSIS_LIBRARY_FILES} ${OBJECT_LIFETIMES_LIBRARY_FILES}) 204*b7893ccfSSadaf Ebrahimi AddVkLayer(thread_safety "BUILD_THREAD_SAFETY" ${CHASSIS_LIBRARY_FILES} ${THREAD_SAFETY_LIBRARY_FILES}) 205*b7893ccfSSadaf Ebrahimi AddVkLayer(stateless_validation "BUILD_PARAMETER_VALIDATION" ${CHASSIS_LIBRARY_FILES} ${STATELESS_VALIDATION_LIBRARY_FILES}) 206*b7893ccfSSadaf Ebrahimi AddVkLayer(unique_objects "LAYER_CHASSIS_CAN_WRAP_HANDLES" ${CHASSIS_LIBRARY_FILES}) 207*b7893ccfSSadaf Ebrahimi AddVkLayer(khronos_validation "BUILD_KHRONOS_VALIDATION;BUILD_CORE_VALIDATION;BUILD_OBJECT_TRACKER;BUILD_THREAD_SAFETY;BUILD_PARAMETER_VALIDATION;LAYER_CHASSIS_CAN_WRAP_HANDLES;BUILD_BEST_PRACTICES" 208*b7893ccfSSadaf Ebrahimi ${CHASSIS_LIBRARY_FILES} 209*b7893ccfSSadaf Ebrahimi ${CORE_VALIDATION_LIBRARY_FILES} 210*b7893ccfSSadaf Ebrahimi ${OBJECT_LIFETIMES_LIBRARY_FILES} 211*b7893ccfSSadaf Ebrahimi ${THREAD_SAFETY_LIBRARY_FILES} 212*b7893ccfSSadaf Ebrahimi ${STATELESS_VALIDATION_LIBRARY_FILES} 213*b7893ccfSSadaf Ebrahimi ${BEST_PRACTICES_LIBRARY_FILES}) 214*b7893ccfSSadaf Ebrahimi 215*b7893ccfSSadaf Ebrahimi # Core validation and Khronos validation have additional dependencies 216*b7893ccfSSadaf Ebrahimi target_include_directories(VkLayer_core_validation PRIVATE ${GLSLANG_SPIRV_INCLUDE_DIR}) 217*b7893ccfSSadaf Ebrahimi target_include_directories(VkLayer_core_validation PRIVATE ${SPIRV_TOOLS_INCLUDE_DIR}) 218*b7893ccfSSadaf Ebrahimi target_link_libraries(VkLayer_core_validation PRIVATE ${SPIRV_TOOLS_LIBRARIES}) 219*b7893ccfSSadaf Ebrahimi target_include_directories(VkLayer_khronos_validation PRIVATE ${GLSLANG_SPIRV_INCLUDE_DIR}) 220*b7893ccfSSadaf Ebrahimi target_include_directories(VkLayer_khronos_validation PRIVATE ${SPIRV_TOOLS_INCLUDE_DIR}) 221*b7893ccfSSadaf Ebrahimi target_link_libraries(VkLayer_khronos_validation PRIVATE ${SPIRV_TOOLS_LIBRARIES}) 222*b7893ccfSSadaf Ebrahimi 223*b7893ccfSSadaf Ebrahimi # The output file needs Unix "/" separators or Windows "\" separators On top of that, Windows separators actually need to be doubled 224*b7893ccfSSadaf Ebrahimi # because the json format uses backslash escapes 225*b7893ccfSSadaf Ebrahimi file(TO_NATIVE_PATH "./" RELATIVE_PATH_PREFIX) 226*b7893ccfSSadaf Ebrahimi string(REPLACE "\\" 227*b7893ccfSSadaf Ebrahimi "\\\\" 228*b7893ccfSSadaf Ebrahimi RELATIVE_PATH_PREFIX 229*b7893ccfSSadaf Ebrahimi "${RELATIVE_PATH_PREFIX}") 230*b7893ccfSSadaf Ebrahimi 231*b7893ccfSSadaf Ebrahimi # Run each .json.in file through the generator We need to create the generator.cmake script so that the generator can be run at 232*b7893ccfSSadaf Ebrahimi # compile time, instead of configure time Running at compile time lets us use cmake generator expressions (TARGET_FILE_NAME and 233*b7893ccfSSadaf Ebrahimi # TARGET_FILE_DIR, specifically) 234*b7893ccfSSadaf Ebrahimi file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/generator.cmake" "configure_file(\"\${INPUT_FILE}\" \"\${OUTPUT_FILE}\")") 235*b7893ccfSSadaf Ebrahimi foreach(TARGET_NAME ${TARGET_NAMES}) 236*b7893ccfSSadaf Ebrahimi set(CONFIG_DEFINES -DINPUT_FILE="${CMAKE_CURRENT_SOURCE_DIR}/json/${TARGET_NAME}.json.in" -DVK_VERSION=1.1.${vk_header_version}) 237*b7893ccfSSadaf Ebrahimi # If this json file is not a metalayer, get the needed properties from that target 238*b7893ccfSSadaf Ebrahimi if(TARGET ${TARGET_NAME}) 239*b7893ccfSSadaf Ebrahimi set(CONFIG_DEFINES 240*b7893ccfSSadaf Ebrahimi ${CONFIG_DEFINES} 241*b7893ccfSSadaf Ebrahimi -DOUTPUT_FILE="$<TARGET_FILE_DIR:${TARGET_NAME}>/${TARGET_NAME}.json" 242*b7893ccfSSadaf Ebrahimi -DRELATIVE_LAYER_BINARY="${RELATIVE_PATH_PREFIX}$<TARGET_FILE_NAME:${TARGET_NAME}>") 243*b7893ccfSSadaf Ebrahimi # If this json file is a metalayer, make the output path match core validation, and there is no layer binary file 244*b7893ccfSSadaf Ebrahimi else() 245*b7893ccfSSadaf Ebrahimi set(CONFIG_DEFINES ${CONFIG_DEFINES} -DOUTPUT_FILE="$<TARGET_FILE_DIR:VkLayer_core_validation>/${TARGET_NAME}.json") 246*b7893ccfSSadaf Ebrahimi endif() 247*b7893ccfSSadaf Ebrahimi add_custom_target(${TARGET_NAME}-json ALL 248*b7893ccfSSadaf Ebrahimi COMMAND ${CMAKE_COMMAND} ${CONFIG_DEFINES} -P "${CMAKE_CURRENT_BINARY_DIR}/generator.cmake") 249*b7893ccfSSadaf Ebrahimi if(CMAKE_GENERATOR MATCHES "^Visual Studio.*") 250*b7893ccfSSadaf Ebrahimi set_target_properties(${TARGET_NAME}-json PROPERTIES FOLDER ${LAYERS_HELPER_FOLDER}) 251*b7893ccfSSadaf Ebrahimi endif() 252*b7893ccfSSadaf Ebrahimi endforeach() 253*b7893ccfSSadaf Ebrahimi 254*b7893ccfSSadaf Ebrahimi # For UNIX-based systems, `library_path` should not contain a relative path (indicated by "./") before installing to system 255*b7893ccfSSadaf Ebrahimi # directories, so we do not include it in the staging-json files which are used for installation 256*b7893ccfSSadaf Ebrahimi if(UNIX) 257*b7893ccfSSadaf Ebrahimi foreach(TARGET_NAME ${TARGET_NAMES}) 258*b7893ccfSSadaf Ebrahimi set(INSTALL_DEFINES 259*b7893ccfSSadaf Ebrahimi -DINPUT_FILE="${CMAKE_CURRENT_SOURCE_DIR}/json/${TARGET_NAME}.json.in" 260*b7893ccfSSadaf Ebrahimi -DOUTPUT_FILE="${CMAKE_CURRENT_BINARY_DIR}/staging-json/${TARGET_NAME}.json" 261*b7893ccfSSadaf Ebrahimi -DVK_VERSION=1.1.${vk_header_version}) 262*b7893ccfSSadaf Ebrahimi # If this json file is not a metalayer, get the needed properties from that target 263*b7893ccfSSadaf Ebrahimi if(TARGET ${TARGET_NAME}) 264*b7893ccfSSadaf Ebrahimi set(INSTALL_DEFINES ${INSTALL_DEFINES} -DRELATIVE_LAYER_BINARY="$<TARGET_FILE_NAME:${TARGET_NAME}>") 265*b7893ccfSSadaf Ebrahimi endif() 266*b7893ccfSSadaf Ebrahimi add_custom_target(${TARGET_NAME}-staging-json ALL 267*b7893ccfSSadaf Ebrahimi COMMAND ${CMAKE_COMMAND} ${INSTALL_DEFINES} -P "${CMAKE_CURRENT_BINARY_DIR}/generator.cmake") 268*b7893ccfSSadaf Ebrahimi endforeach() 269*b7893ccfSSadaf Ebrahimi endif() 270*b7893ccfSSadaf Ebrahimiendif() 271