Home | History | Annotate | Download | only in layers
      1 cmake_minimum_required (VERSION 2.8.11)
      2 if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
      3     add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DVK_USE_PLATFORM_WIN32_KHX -DWIN32_LEAN_AND_MEAN)
      4     set(DisplayServer Win32)
      5 elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
      6     add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR -DVK_USE_PLATFORM_ANDROID_KHX)
      7 elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
      8     if (BUILD_WSI_XCB_SUPPORT)
      9         add_definitions(-DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XCB_KHX)
     10     endif()
     11 
     12     if (BUILD_WSI_XLIB_SUPPORT)
     13        add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_KHX -DVK_USE_PLATFORM_XLIB_XRANDR_EXT)
     14     endif()
     15 
     16     if (BUILD_WSI_WAYLAND_SUPPORT)
     17        add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR -DVK_USE_PLATFORM_WAYLAND_KHX)
     18     endif()
     19 
     20     if (BUILD_WSI_MIR_SUPPORT)
     21         add_definitions(-DVK_USE_PLATFORM_MIR_KHR -DVK_USE_PLATFORM_MIR_KHX)
     22         include_directories(${MIR_INCLUDE_DIR})
     23     endif()
     24 else()
     25     message(FATAL_ERROR "Unsupported Platform!")
     26 endif()
     27 
     28 set(LAYER_JSON_FILES_WITH_DEPENDENCIES
     29     VkLayer_core_validation
     30     VkLayer_object_tracker
     31     VkLayer_unique_objects
     32     VkLayer_parameter_validation
     33     VkLayer_threading
     34     )
     35 
     36 set(LAYER_JSON_FILES_NO_DEPENDENCIES
     37     VkLayer_standard_validation
     38     )
     39 
     40 set(LAYER_JSON_FILES ${LAYER_JSON_FILES_WITH_DEPENDENCIES} ${LAYER_JSON_FILES_NO_DEPENDENCIES})
     41 
     42 if (WIN32)
     43         if (CMAKE_GENERATOR MATCHES "^Visual Studio.*")
     44             foreach (config_file ${LAYER_JSON_FILES})
     45                 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json)
     46                 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/${config_file}.json dst_json)
     47                 add_custom_target(${config_file}-json ALL
     48                     COMMAND copy ${src_json} ${dst_json}
     49                     VERBATIM
     50                     )
     51                 set_target_properties(${config_file}-json PROPERTIES FOLDER ${LVL_TARGET_FOLDER})
     52             endforeach(config_file)
     53         else()
     54             foreach (config_file ${LAYER_JSON_FILES})
     55                 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json)
     56                 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${config_file}.json dst_json)
     57                 add_custom_target(${config_file}-json ALL
     58                     COMMAND copy ${src_json} ${dst_json}
     59                     VERBATIM
     60                     )
     61             endforeach(config_file)
     62         endif()
     63     if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
     64         # Copy vk_validation_error_messages.h from source to build dir for scripts to pick up
     65         FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/vk_validation_error_messages.h src_val_msgs)
     66         FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/vk_validation_error_messages.h dst_val_msgs)
     67         add_custom_target(vk_validation_error_messages ALL
     68             COMMAND copy ${src_val_msgs} ${dst_val_msgs}
     69             VERBATIM
     70             )
     71         set_target_properties(vk_validation_error_messages PROPERTIES FOLDER ${LVL_TARGET_FOLDER})
     72     endif()
     73 else()
     74     # extra setup for out-of-tree builds
     75     if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
     76         foreach (config_file ${LAYER_JSON_FILES})
     77             add_custom_target(${config_file}-json ALL
     78                 COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json
     79                 VERBATIM
     80                 )
     81         endforeach(config_file)
     82         # Add link to vk_validation_error_messages.h in build dir for scripts to pick up
     83         add_custom_target(vk_validation_error_messages ALL
     84             COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/vk_validation_error_messages.h
     85             VERBATIM
     86             )
     87     endif()
     88 endif()
     89 # If a layer has a direct dependency on a project with the same name, use it.
     90 if ((Win32) OR (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)))
     91     foreach (config_file ${LAYER_JSON_FILES_WITH_DEPENDENCIES})
     92         add_dependencies(${config_file}-json ${config_file})
     93     endforeach(config_file)
     94     # If a layer has no direct dependencies, give it one so it copies in the proper order
     95     foreach (config_file ${LAYER_JSON_FILES_NO_DEPENDENCIES})
     96         add_dependencies(${config_file}-json VkLayer_utils)
     97     endforeach(config_file)
     98 endif()
     99 
    100 # Add targets for JSON file install on Linux.
    101 # Need to remove the "./" from the library path before installing to /etc.
    102 if(UNIX)
    103     if(INSTALL_LVL_FILES)
    104         foreach (config_file ${LAYER_JSON_FILES})
    105             add_custom_target(${config_file}-staging-json ALL
    106                 COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/staging-json
    107                 COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json ${CMAKE_CURRENT_BINARY_DIR}/staging-json
    108                 COMMAND sed -i -e "/\"library_path\":/s$./libVkLayer$libVkLayer$" ${CMAKE_CURRENT_BINARY_DIR}/staging-json/${config_file}.json
    109                 VERBATIM
    110                 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json
    111                 )
    112             install(FILES ${CMAKE_CURRENT_BINARY_DIR}/staging-json/${config_file}.json DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/vulkan/explicit_layer.d)
    113         endforeach(config_file)
    114     endif()
    115 endif()
    116 
    117 if (WIN32)
    118     macro(add_vk_layer target)
    119     FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/VkLayer_${target}.def DEF_FILE)
    120     add_custom_target(copy-${target}-def-file ALL
    121         COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DEF_FILE} VkLayer_${target}.def
    122         VERBATIM
    123     )
    124     set_target_properties(copy-${target}-def-file PROPERTIES FOLDER ${LVL_TARGET_FOLDER})
    125     add_library(VkLayer_${target} SHARED ${ARGN} VkLayer_${target}.def)
    126     add_dependencies(VkLayer_${target} generate_helper_files)
    127     target_link_Libraries(VkLayer_${target} VkLayer_utils)
    128     add_dependencies(VkLayer_${target} generate_helper_files VkLayer_utils)
    129     endmacro()
    130 else()
    131     macro(add_vk_layer target)
    132     add_library(VkLayer_${target} SHARED ${ARGN})
    133     target_link_Libraries(VkLayer_${target} VkLayer_utils)
    134     add_dependencies(VkLayer_${target} generate_helper_files VkLayer_utils)
    135     set_target_properties(VkLayer_${target} PROPERTIES LINK_FLAGS "-Wl,-Bsymbolic,--exclude-libs,ALL")
    136     if(INSTALL_LVL_FILES)
    137         install(TARGETS VkLayer_${target} DESTINATION ${CMAKE_INSTALL_LIBDIR})
    138     endif()
    139     endmacro()
    140 endif()
    141 
    142 include_directories(
    143     ${CMAKE_CURRENT_SOURCE_DIR}
    144     ${CMAKE_CURRENT_SOURCE_DIR}/../loader
    145     ${CMAKE_CURRENT_SOURCE_DIR}/../include/vulkan
    146     ${CMAKE_CURRENT_BINARY_DIR}
    147     ${PROJECT_BINARY_DIR}
    148     ${CMAKE_BINARY_DIR}
    149 )
    150 
    151 if (WIN32)
    152     # Applies to all configurations
    153     add_definitions(-D_CRT_SECURE_NO_WARNINGS)
    154     # Avoid: fatal error C1128: number of sections exceeded object file format limit: compile with /bigobj
    155     set_source_files_properties(core_validation.cpp threading.cpp
    156         PROPERTIES COMPILE_FLAGS "/bigobj")
    157     # Turn off transitional "changed behavior" warning message for Visual Studio versions prior to 2015.
    158     # The changed behavior is that constructor initializers are now fixed to clear the struct members.
    159     add_compile_options("$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,19>>:/wd4351>")
    160 else()
    161     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare")
    162     set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare")
    163 endif()
    164 
    165 # Clang (and not gcc) warns about unused const variables.
    166 # Generated files may purposely contain unused consts, so
    167 # silence this warning in Clang. 
    168 if (CMAKE_C_COMPILER_ID MATCHES "Clang")
    169    set_source_files_properties(parameter_validation.cpp PROPERTIES
    170         COMPILE_FLAGS "-Wno-unused-const-variable")
    171 endif()
    172 
    173 run_vk_xml_generate(threading_generator.py thread_check.h)
    174 run_vk_xml_generate(parameter_validation_generator.py parameter_validation.cpp)
    175 run_vk_xml_generate(unique_objects_generator.py unique_objects_wrappers.h)
    176 run_vk_xml_generate(dispatch_table_helper_generator.py vk_dispatch_table_helper.h)
    177 run_vk_xml_generate(object_tracker_generator.py object_tracker.cpp)
    178 
    179 add_vk_layer(core_validation core_validation.cpp vk_layer_table.cpp descriptor_sets.cpp buffer_validation.cpp shader_validation.cpp xxhash.c)
    180 add_vk_layer(object_tracker object_tracker.cpp object_tracker_utils.cpp vk_layer_table.cpp)
    181 # generated
    182 add_vk_layer(threading threading.cpp thread_check.h vk_layer_table.cpp)
    183 add_vk_layer(unique_objects unique_objects.cpp unique_objects_wrappers.h vk_layer_table.cpp)
    184 add_vk_layer(parameter_validation parameter_validation.cpp parameter_validation_utils.cpp parameter_validation.h vk_layer_table.cpp vk_validation_error_messages.h)
    185 
    186 # Core validation has additional dependencies
    187 target_include_directories(VkLayer_core_validation PRIVATE ${GLSLANG_SPIRV_INCLUDE_DIR})
    188 target_include_directories(VkLayer_core_validation PRIVATE ${SPIRV_TOOLS_INCLUDE_DIR})
    189 target_link_libraries(VkLayer_core_validation ${SPIRV_TOOLS_LIBRARIES})
    190