Home | History | Annotate | Download | only in layers
      1 cmake_minimum_required (VERSION 2.8.11)
      2 
      3 set(LAYER_JSON_FILES
      4     VkLayer_wrap_objects
      5     VkLayer_device_profile_api
      6     VkLayer_test
      7     )
      8 
      9 set(VK_LAYER_RPATH /usr/lib/x86_64-linux-gnu/vulkan/layer:/usr/lib/i386-linux-gnu/vulkan/layer)
     10 set(CMAKE_INSTALL_RPATH ${VK_LAYER_RPATH})
     11 
     12 if (WIN32)
     13     if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
     14         foreach (config_file ${LAYER_JSON_FILES})
     15             FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json)
     16             if (CMAKE_GENERATOR MATCHES "^Visual Studio.*")
     17                 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/${config_file}.json dst_json)
     18             else()
     19                 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${config_file}.json dst_json)
     20             endif()
     21             add_custom_target(${config_file}-json ALL
     22                 COMMAND copy ${src_json} ${dst_json}
     23                 VERBATIM
     24                 )
     25             add_dependencies(${config_file}-json ${config_file})
     26             set_target_properties(${config_file}-json PROPERTIES FOLDER ${LVL_TARGET_FOLDER})
     27         endforeach(config_file)
     28     endif()
     29 else()
     30     # extra setup for out-of-tree builds
     31     if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
     32         foreach (config_file ${LAYER_JSON_FILES})
     33             add_custom_target(${config_file}-json ALL
     34                 COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json
     35                 VERBATIM
     36                 )
     37         endforeach(config_file)
     38     endif()
     39 endif()
     40 
     41 if (WIN32)
     42     macro(add_vk_layer target)
     43     FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/VkLayer_${target}.def DEF_FILE)
     44     add_custom_target(copy-${target}-def-file ALL
     45         COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DEF_FILE} VkLayer_${target}.def
     46         VERBATIM
     47     )
     48     set_target_properties(copy-${target}-def-file PROPERTIES FOLDER ${LVL_TARGET_FOLDER})
     49     add_library(VkLayer_${target} SHARED ${ARGN} VkLayer_${target}.def)
     50     add_dependencies(VkLayer_${target} generate_helper_files VkLayer_utils)
     51     endmacro()
     52 else()
     53     macro(add_vk_layer target)
     54     add_library(VkLayer_${target} SHARED ${ARGN})
     55     add_dependencies(VkLayer_${target} generate_helper_files VkLayer_utils)
     56     set_target_properties(VkLayer_${target} PROPERTIES LINK_FLAGS "-Wl,-Bsymbolic")
     57     endmacro()
     58 endif()
     59 
     60 include_directories(
     61     ${CMAKE_CURRENT_SOURCE_DIR}
     62     ${CMAKE_CURRENT_SOURCE_DIR}/../../layers
     63     ${CMAKE_CURRENT_SOURCE_DIR}/../../loader
     64     ${CMAKE_CURRENT_SOURCE_DIR}/../../include/vulkan
     65     ${CMAKE_CURRENT_BINARY_DIR}
     66     ${PROJECT_BINARY_DIR}
     67     ${CMAKE_BINARY_DIR}
     68 )
     69 
     70 if (WIN32)
     71     set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_CRT_SECURE_NO_WARNINGS")
     72     set (CMAKE_C_FLAGS_RELEASE   "${CMAKE_C_FLAGS_RELEASE} -D_CRT_SECURE_NO_WARNINGS")
     73     set (CMAKE_CXX_FLAGS_DEBUG   "${CMAKE_CXX_FLAGS_DEBUG} -D_CRT_SECURE_NO_WARNINGS /bigobj")
     74     set (CMAKE_C_FLAGS_DEBUG     "${CMAKE_C_FLAGS_DEBUG} -D_CRT_SECURE_NO_WARNINGS /bigobj")
     75 else()
     76     set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpointer-arith -Wno-unused-function")
     77     set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Wno-unused-function")
     78 endif()
     79 
     80 set (WRAP_SRCS
     81        wrap_objects.cpp
     82        ${CMAKE_CURRENT_SOURCE_DIR}/../../layers/vk_layer_table.cpp
     83        ${CMAKE_CURRENT_SOURCE_DIR}/../../layers/vk_layer_extension_utils.cpp
     84        )
     85 add_vk_layer(wrap_objects ${WRAP_SRCS})
     86 
     87 set (TEST_SRCS
     88        test.cpp
     89        ${CMAKE_CURRENT_SOURCE_DIR}/../../layers/vk_layer_table.cpp
     90        ${CMAKE_CURRENT_SOURCE_DIR}/../../layers/vk_layer_extension_utils.cpp
     91        )
     92 
     93 set (DEVICE_PROFILE_API_SRCS
     94        device_profile_api.cpp
     95        ${CMAKE_CURRENT_SOURCE_DIR}/../../layers/vk_layer_table.cpp
     96        ${CMAKE_CURRENT_SOURCE_DIR}/../../layers/vk_layer_extension_utils.cpp
     97        )
     98 
     99 add_vk_layer(device_profile_api ${DEVICE_PROFILE_API_SRCS})
    100 add_vk_layer(test ${TEST_SRCS})
    101 
    102 if (WIN32)
    103     # For Windows, copy necessary gtest DLLs to the right spot for the vk_layer_tests...
    104     FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/*device_profile_api.* SRC_LAYER)
    105     FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/VkLayer_device_profile_api.json SRC_JSON)
    106     FILE(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/layers/$<CONFIGURATION> DST_LAYER)
    107     add_custom_command(TARGET VkLayer_device_profile_api POST_BUILD
    108         COMMAND xcopy /Y /I ${SRC_LAYER} ${DST_LAYER}
    109         COMMAND xcopy /Y /I ${SRC_JSON} ${DST_LAYER})
    110 else()
    111     add_custom_command(TARGET VkLayer_device_profile_api POST_BUILD
    112         COMMAND ln -sf ${CMAKE_CURRENT_BINARY_DIR}/VkLayer_device_profile_api.json ${CMAKE_BINARY_DIR}/layers
    113         COMMAND ln -sf ${CMAKE_CURRENT_BINARY_DIR}/libVkLayer_device_profile_api.so ${CMAKE_BINARY_DIR}/layers
    114         VERBATIM
    115         )
    116 endif()
    117