blob: 9847cfbdc0c36c7907e9bf0475cf6d22061e3368 [file] [log] [blame]
Jon Ashburnd38bfb12014-10-14 19:15:22 -06001cmake_minimum_required (VERSION 2.8.11)
2
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06003macro(run_vk_helper subcmd)
Karl Schultz4ea05502016-04-07 15:11:59 -06004 add_custom_command(OUTPUT ${ARGN}
5 COMMAND ${PYTHON_CMD} ${PROJECT_SOURCE_DIR}/vk_helper.py --${subcmd} ${PROJECT_SOURCE_DIR}/include/vulkan/vulkan.h --abs_out_dir ${CMAKE_CURRENT_BINARY_DIR}
6 DEPENDS ${PROJECT_SOURCE_DIR}/vk_helper.py ${PROJECT_SOURCE_DIR}/include/vulkan/vulkan.h
7 )
Chia-I Wudb2b3872014-12-19 10:59:01 +08008endmacro()
9
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060010macro(run_vk_layer_generate subcmd output)
Karl Schultz4ea05502016-04-07 15:11:59 -060011 add_custom_command(OUTPUT ${output}
12 COMMAND ${PYTHON_CMD} ${PROJECT_SOURCE_DIR}/vk-layer-generate.py ${DisplayServer} ${subcmd} ${PROJECT_SOURCE_DIR}/include/vulkan/vulkan.h > ${output}
13 DEPENDS ${PROJECT_SOURCE_DIR}/vk-layer-generate.py ${PROJECT_SOURCE_DIR}/include/vulkan/vulkan.h ${PROJECT_SOURCE_DIR}/vulkan.py
14 )
Chia-I Wudb2b3872014-12-19 10:59:01 +080015endmacro()
16
Mike Stroyan845bdc42015-11-02 15:30:20 -070017macro(run_vk_layer_xml_generate subcmd output)
Karl Schultz4ea05502016-04-07 15:11:59 -060018 add_custom_command(OUTPUT ${output}
19 COMMAND ${PYTHON_CMD} ${PROJECT_SOURCE_DIR}/genvk.py -registry ${PROJECT_SOURCE_DIR}/vk.xml ${output}
20 DEPENDS ${PROJECT_SOURCE_DIR}/vk.xml ${PROJECT_SOURCE_DIR}/generator.py ${PROJECT_SOURCE_DIR}/genvk.py ${PROJECT_SOURCE_DIR}/reg.py
21 )
Mike Stroyan845bdc42015-11-02 15:30:20 -070022endmacro()
Courtney Goeltzenleuchterb38936a2015-07-07 14:27:31 -060023set(LAYER_JSON_FILES
Tobin Ehlisc96f8062016-03-09 16:12:48 -070024 VkLayer_core_validation
Tobin Ehlisc96f8062016-03-09 16:12:48 -070025 VkLayer_image
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -070026 VkLayer_object_tracker
Tobin Ehlisd34a4c52015-12-08 10:50:10 -070027 VkLayer_unique_objects
Mark Lobodzinski739391a2016-03-17 15:08:18 -060028 VkLayer_parameter_validation
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -070029 VkLayer_swapchain
30 VkLayer_threading
31 VkLayer_device_limits
Courtney Goeltzenleuchterb38936a2015-07-07 14:27:31 -060032 )
33
Mike Stroyan897d4752015-07-10 12:51:14 -060034set(VK_LAYER_RPATH /usr/lib/x86_64-linux-gnu/vulkan/layer:/usr/lib/i386-linux-gnu/vulkan/layer)
35set(CMAKE_INSTALL_RPATH ${VK_LAYER_RPATH})
36
Karl Schultzc61bc7a2016-04-08 09:17:18 -060037if (WIN32)
Courtney Goeltzenleuchterb38936a2015-07-07 14:27:31 -060038 if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
Mark Muellerb33052d2016-04-18 11:04:36 -060039 if (CMAKE_GENERATOR MATCHES "^Visual Studio.*")
40 foreach (config_file ${LAYER_JSON_FILES})
41 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json)
42 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/${config_file}.json dst_json)
43 add_custom_target(${config_file}-json ALL
44 COMMAND copy ${src_json} ${dst_json}
45 VERBATIM
46 )
47 endforeach(config_file)
48 else()
49 foreach (config_file ${LAYER_JSON_FILES})
50 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json)
51 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${config_file}.json dst_json)
52 add_custom_target(${config_file}-json ALL
53 COMMAND copy ${src_json} ${dst_json}
54 VERBATIM
55 )
56 endforeach(config_file)
57 endif()
Courtney Goeltzenleuchterb38936a2015-07-07 14:27:31 -060058 endif()
Karl Schultzc61bc7a2016-04-08 09:17:18 -060059else()
60 # extra setup for out-of-tree builds
61 if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
62 foreach (config_file ${LAYER_JSON_FILES})
63 add_custom_target(${config_file}-json ALL
64 COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json
65 VERBATIM
66 )
67 endforeach(config_file)
68 endif()
Courtney Goeltzenleuchterb38936a2015-07-07 14:27:31 -060069endif()
70
Ian Elliott2d4ab1e2015-01-13 17:52:38 -070071if (WIN32)
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060072 macro(add_vk_layer target)
Karl Schultz4ea05502016-04-07 15:11:59 -060073 add_custom_command(OUTPUT VkLayer_${target}.def
74 COMMAND ${PYTHON_CMD} ${PROJECT_SOURCE_DIR}/vk-generate.py ${DisplayServer} win-def-file VkLayer_${target} layer > VkLayer_${target}.def
75 DEPENDS ${PROJECT_SOURCE_DIR}/vk-generate.py ${PROJECT_SOURCE_DIR}/vulkan.py
76 )
77 add_library(VkLayer_${target} SHARED ${ARGN} VkLayer_${target}.def)
Karl Schultzc61bc7a2016-04-08 09:17:18 -060078 target_link_Libraries(VkLayer_${target} VkLayer_utils)
Karl Schultz4ea05502016-04-07 15:11:59 -060079 add_dependencies(VkLayer_${target} generate_vk_layer_helpers)
80 set_target_properties(VkLayer_${target} PROPERTIES LINK_FLAGS "/DEF:${CMAKE_CURRENT_BINARY_DIR}/VkLayer_${target}.def")
Ian Elliott2d4ab1e2015-01-13 17:52:38 -070081 endmacro()
82else()
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060083 macro(add_vk_layer target)
Karl Schultz4ea05502016-04-07 15:11:59 -060084 add_library(VkLayer_${target} SHARED ${ARGN})
Karl Schultzc61bc7a2016-04-08 09:17:18 -060085 target_link_Libraries(VkLayer_${target} VkLayer_utils)
Karl Schultz4ea05502016-04-07 15:11:59 -060086 add_dependencies(VkLayer_${target} generate_vk_layer_helpers)
87 set_target_properties(VkLayer_${target} PROPERTIES LINK_FLAGS "-Wl,-Bsymbolic")
88 install(TARGETS VkLayer_${target} DESTINATION ${PROJECT_BINARY_DIR}/install_staging)
Ian Elliott2d4ab1e2015-01-13 17:52:38 -070089 endmacro()
90endif()
Jon Ashburnd38bfb12014-10-14 19:15:22 -060091
Chia-I Wu21bddab2014-11-19 23:05:04 +080092include_directories(
Karl Schultz4ea05502016-04-07 15:11:59 -060093 ${CMAKE_CURRENT_SOURCE_DIR}
94 ${CMAKE_CURRENT_SOURCE_DIR}/../loader
95 ${CMAKE_CURRENT_SOURCE_DIR}/../include/vulkan
96 ${CMAKE_CURRENT_BINARY_DIR}
Chia-I Wu21bddab2014-11-19 23:05:04 +080097)
98
Ian Elliott19628802015-02-04 12:06:46 -070099if (WIN32)
Mark Youngb445e402016-01-18 17:22:48 -0700100 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_CRT_SECURE_NO_WARNINGS")
101 set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D_CRT_SECURE_NO_WARNINGS")
Mark Lobodzinski9ee66212016-03-15 10:31:44 -0600102 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_CRT_SECURE_NO_WARNINGS /bigobj")
103 set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_CRT_SECURE_NO_WARNINGS /bigobj")
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600104else()
Ian Elliott19628802015-02-04 12:06:46 -0700105 set (CMAKE_CXX_FLAGS "-std=c++11")
Jon Ashburnce816b62016-01-12 11:33:33 -0700106 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpointer-arith")
107 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith")
Ian Elliott19628802015-02-04 12:06:46 -0700108endif()
Jon Ashburnd38bfb12014-10-14 19:15:22 -0600109
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600110add_custom_command(OUTPUT vk_dispatch_table_helper.h
Karl Schultz4ea05502016-04-07 15:11:59 -0600111 COMMAND ${PYTHON_CMD} ${PROJECT_SOURCE_DIR}/vk-generate.py ${DisplayServer} dispatch-table-ops layer > vk_dispatch_table_helper.h
112 DEPENDS ${PROJECT_SOURCE_DIR}/vk-generate.py ${PROJECT_SOURCE_DIR}/vulkan.py)
Chia-I Wuaa4121f2015-01-04 23:11:43 +0800113
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600114run_vk_helper(gen_enum_string_helper vk_enum_string_helper.h)
115run_vk_helper(gen_struct_wrappers
Karl Schultz4ea05502016-04-07 15:11:59 -0600116 vk_struct_string_helper.h
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700117 vk_struct_string_helper_cpp.h
Karl Schultz4ea05502016-04-07 15:11:59 -0600118 vk_struct_string_helper_no_addr.h
119 vk_struct_string_helper_no_addr_cpp.h
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700120 vk_struct_size_helper.h
121 vk_struct_size_helper.c
Karl Schultz4ea05502016-04-07 15:11:59 -0600122 vk_struct_wrappers.h
123 vk_struct_wrappers.cpp
Tobin Ehlis8bb7c2f2016-02-10 15:38:45 -0700124 vk_safe_struct.h
125 vk_safe_struct.cpp
Chia-I Wudb2b3872014-12-19 10:59:01 +0800126)
Chia-I Wudb2b3872014-12-19 10:59:01 +0800127
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600128add_custom_target(generate_vk_layer_helpers DEPENDS
Karl Schultz4ea05502016-04-07 15:11:59 -0600129 vk_dispatch_table_helper.h
130 vk_enum_string_helper.h
131 vk_struct_string_helper.h
132 vk_struct_string_helper_no_addr.h
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700133 vk_struct_string_helper_cpp.h
Karl Schultz4ea05502016-04-07 15:11:59 -0600134 vk_struct_string_helper_no_addr_cpp.h
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700135 vk_struct_size_helper.h
136 vk_struct_size_helper.c
Karl Schultz4ea05502016-04-07 15:11:59 -0600137 vk_struct_wrappers.h
138 vk_struct_wrappers.cpp
Tobin Ehlis8bb7c2f2016-02-10 15:38:45 -0700139 vk_safe_struct.h
140 vk_safe_struct.cpp
Chia-I Wudb2b3872014-12-19 10:59:01 +0800141)
142
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700143run_vk_layer_generate(object_tracker object_tracker.cpp)
Mike Stroyan845bdc42015-11-02 15:30:20 -0700144run_vk_layer_xml_generate(Threading thread_check.h)
Tobin Ehlisd34a4c52015-12-08 10:50:10 -0700145run_vk_layer_generate(unique_objects unique_objects.cpp)
Mark Lobodzinski739391a2016-03-17 15:08:18 -0600146run_vk_layer_xml_generate(ParamChecker parameter_validation.h)
Chia-I Wudb2b3872014-12-19 10:59:01 +0800147
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600148# Layer Utils Library
149# For Windows, we use a static lib because the Windows loader has a fairly restrictive loader search
150# path that can't be easily modified to point it to the same directory that contains the layers.
Ian Elliotta6bbf3e2015-02-12 11:36:44 -0700151if (WIN32)
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600152 add_library(VkLayer_utils STATIC vk_layer_config.cpp vk_layer_extension_utils.cpp vk_layer_utils.cpp)
Mike Stroyan897d4752015-07-10 12:51:14 -0600153else()
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600154 add_library(VkLayer_utils SHARED vk_layer_config.cpp vk_layer_extension_utils.cpp vk_layer_utils.cpp)
155 install(TARGETS VkLayer_utils DESTINATION ${PROJECT_BINARY_DIR}/install_staging)
Ian Elliotta6bbf3e2015-02-12 11:36:44 -0700156endif()
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600157
Tobin Ehlis0a43bde2016-05-03 08:31:08 -0600158add_vk_layer(core_validation core_validation.cpp vk_layer_table.cpp vk_safe_struct.cpp descriptor_sets.cpp)
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600159add_vk_layer(device_limits device_limits.cpp vk_layer_table.cpp)
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700160add_vk_layer(image image.cpp vk_layer_table.cpp)
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700161add_vk_layer(swapchain swapchain.cpp vk_layer_table.cpp)
Chia-I Wudb2b3872014-12-19 10:59:01 +0800162# generated
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700163add_vk_layer(object_tracker object_tracker.cpp vk_layer_table.cpp)
Mike Stroyan845bdc42015-11-02 15:30:20 -0700164add_vk_layer(threading threading.cpp thread_check.h vk_layer_table.cpp)
Tobin Ehlis8bb7c2f2016-02-10 15:38:45 -0700165add_vk_layer(unique_objects unique_objects.cpp vk_layer_table.cpp vk_safe_struct.cpp)
Mark Lobodzinski739391a2016-03-17 15:08:18 -0600166add_vk_layer(parameter_validation parameter_validation.cpp parameter_validation.h vk_layer_table.cpp)
Chris Forbesa13ab8a2016-04-04 09:52:11 +1200167
168# Core validation has additional dependencies
169target_include_directories(VkLayer_core_validation PRIVATE ${GLSLANG_SPIRV_INCLUDE_DIR})
170target_include_directories(VkLayer_core_validation PRIVATE ${SPIRV_TOOLS_INCLUDE_DIR})
Karl Schultzcca25a62016-04-28 12:09:34 -0600171target_link_libraries(VkLayer_core_validation ${SPIRV_TOOLS_LIBRARIES})