blob: 295232ec418f4dcad6a655ebac8931914255d654 [file] [log] [blame]
Jon Ashburnd38bfb12014-10-14 19:15:22 -06001cmake_minimum_required (VERSION 2.8.11)
2
Tony Barbour29cc9522016-12-07 11:18:19 -07003if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
4 add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DWIN32_LEAN_AND_MEAN)
5 set(DisplayServer Win32)
6elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
7 add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR)
8elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
9 if (BUILD_WSI_XCB_SUPPORT)
10 add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
11 endif()
12
13 if (BUILD_WSI_XLIB_SUPPORT)
14 add_definitions(-DVK_USE_PLATFORM_XLIB_KHR)
15 endif()
16
17 if (BUILD_WSI_WAYLAND_SUPPORT)
18 add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR)
19 endif()
20
21 if (BUILD_WSI_MIR_SUPPORT)
22 add_definitions(-DVK_USE_PLATFORM_MIR_KHR)
Tony Barbourc53c7272016-12-07 10:19:21 -070023 include_directories(${MIR_INCLUDE_DIR})
Tony Barbour29cc9522016-12-07 11:18:19 -070024 endif()
25else()
26 message(FATAL_ERROR "Unsupported Platform!")
27endif()
28
Mark Lobodzinski2e9a4922016-12-06 13:14:55 -070029macro(run_vk_xml_generate dependency output)
Karl Schultz4ea05502016-04-07 15:11:59 -060030 add_custom_command(OUTPUT ${output}
Mark Lobodzinskie10b3542016-11-18 15:04:50 -070031 COMMAND ${PYTHON_CMD} ${SCRIPTS_DIR}/lvl_genvk.py -registry ${SCRIPTS_DIR}/vk.xml ${output}
32 DEPENDS ${SCRIPTS_DIR}/vk.xml ${SCRIPTS_DIR}/generator.py ${SCRIPTS_DIR}/${dependency} ${SCRIPTS_DIR}/lvl_genvk.py ${SCRIPTS_DIR}/reg.py
Karl Schultz4ea05502016-04-07 15:11:59 -060033 )
Mike Stroyan845bdc42015-11-02 15:30:20 -070034endmacro()
Mark Lobodzinskic97e2642016-10-13 08:58:38 -060035
Courtney Goeltzenleuchterb38936a2015-07-07 14:27:31 -060036set(LAYER_JSON_FILES
Tobin Ehlisc96f8062016-03-09 16:12:48 -070037 VkLayer_core_validation
Tobin Ehlisc96f8062016-03-09 16:12:48 -070038 VkLayer_image
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -070039 VkLayer_object_tracker
Tobin Ehlisd34a4c52015-12-08 10:50:10 -070040 VkLayer_unique_objects
Mark Lobodzinski739391a2016-03-17 15:08:18 -060041 VkLayer_parameter_validation
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -070042 VkLayer_swapchain
43 VkLayer_threading
Courtney Goeltzenleuchterb38936a2015-07-07 14:27:31 -060044 )
45
Karl Schultzc61bc7a2016-04-08 09:17:18 -060046if (WIN32)
Courtney Goeltzenleuchterb38936a2015-07-07 14:27:31 -060047 if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
Mark Muellerb33052d2016-04-18 11:04:36 -060048 if (CMAKE_GENERATOR MATCHES "^Visual Studio.*")
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}/$<CONFIGURATION>/${config_file}.json dst_json)
52 add_custom_target(${config_file}-json ALL
53 COMMAND copy ${src_json} ${dst_json}
54 VERBATIM
55 )
Mike Stroyan1c001622016-09-16 09:45:14 -060056 add_dependencies(${config_file}-json ${config_file})
Mark Muellerb33052d2016-04-18 11:04:36 -060057 endforeach(config_file)
58 else()
59 foreach (config_file ${LAYER_JSON_FILES})
60 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json)
61 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${config_file}.json dst_json)
62 add_custom_target(${config_file}-json ALL
63 COMMAND copy ${src_json} ${dst_json}
64 VERBATIM
65 )
Mike Stroyan1c001622016-09-16 09:45:14 -060066 add_dependencies(${config_file}-json ${config_file})
Mark Muellerb33052d2016-04-18 11:04:36 -060067 endforeach(config_file)
68 endif()
Courtney Goeltzenleuchterb38936a2015-07-07 14:27:31 -060069 endif()
Karl Schultzc61bc7a2016-04-08 09:17:18 -060070else()
71 # extra setup for out-of-tree builds
72 if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
73 foreach (config_file ${LAYER_JSON_FILES})
74 add_custom_target(${config_file}-json ALL
75 COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json
76 VERBATIM
77 )
Mike Stroyan1c001622016-09-16 09:45:14 -060078 add_dependencies(${config_file}-json ${config_file})
Karl Schultzc61bc7a2016-04-08 09:17:18 -060079 endforeach(config_file)
80 endif()
Courtney Goeltzenleuchterb38936a2015-07-07 14:27:31 -060081endif()
82
Karl Schultze089d7d2016-09-30 13:32:16 -060083# Add targets for JSON file install on Linux.
84# Need to remove the "./" from the library path before installing to /etc.
85if(UNIX)
86 foreach (config_file ${LAYER_JSON_FILES})
87 add_custom_target(${config_file}-staging-json ALL
88 COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/staging-json
89 COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json ${CMAKE_CURRENT_BINARY_DIR}/staging-json
90 COMMAND sed -i -e "/\"library_path\":/s$./libVkLayer$libVkLayer$" ${CMAKE_CURRENT_BINARY_DIR}/staging-json/${config_file}.json
91 VERBATIM
92 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json
93 )
John Zupinf5d304a2016-10-27 13:15:27 -060094 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/staging-json/${config_file}.json DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/vulkan/explicit_layer.d)
Karl Schultze089d7d2016-09-30 13:32:16 -060095 endforeach(config_file)
96endif()
97
Ian Elliott2d4ab1e2015-01-13 17:52:38 -070098if (WIN32)
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060099 macro(add_vk_layer target)
Mark Lobodzinski45678492016-12-08 08:40:02 -0700100 FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/VkLayer_${target}.def DEF_FILE)
101 add_custom_target(copy-${target}-def-file ALL
102 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DEF_FILE} VkLayer_${target}.def
103 VERBATIM
Karl Schultz4ea05502016-04-07 15:11:59 -0600104 )
105 add_library(VkLayer_${target} SHARED ${ARGN} VkLayer_${target}.def)
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600106 target_link_Libraries(VkLayer_${target} VkLayer_utils)
Mark Lobodzinskid23ff062017-01-09 14:42:52 -0700107 add_dependencies(VkLayer_${target} generate_dispatch_table_helper generate_vk_helper_files VkLayer_utils)
Ian Elliott2d4ab1e2015-01-13 17:52:38 -0700108 endmacro()
109else()
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -0600110 macro(add_vk_layer target)
Karl Schultz4ea05502016-04-07 15:11:59 -0600111 add_library(VkLayer_${target} SHARED ${ARGN})
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600112 target_link_Libraries(VkLayer_${target} VkLayer_utils)
Mark Lobodzinskid23ff062017-01-09 14:42:52 -0700113 add_dependencies(VkLayer_${target} generate_dispatch_table_helper generate_vk_helper_files VkLayer_utils)
Mike Stroyan6d650f12016-09-28 15:15:51 -0600114 set_target_properties(VkLayer_${target} PROPERTIES LINK_FLAGS "-Wl,-Bsymbolic,--exclude-libs,ALL")
John Zupinf5d304a2016-10-27 13:15:27 -0600115 install(TARGETS VkLayer_${target} DESTINATION ${CMAKE_INSTALL_LIBDIR})
Ian Elliott2d4ab1e2015-01-13 17:52:38 -0700116 endmacro()
117endif()
Jon Ashburnd38bfb12014-10-14 19:15:22 -0600118
Chia-I Wu21bddab2014-11-19 23:05:04 +0800119include_directories(
Karl Schultz4ea05502016-04-07 15:11:59 -0600120 ${CMAKE_CURRENT_SOURCE_DIR}
121 ${CMAKE_CURRENT_SOURCE_DIR}/../loader
122 ${CMAKE_CURRENT_SOURCE_DIR}/../include/vulkan
123 ${CMAKE_CURRENT_BINARY_DIR}
Chia-I Wu21bddab2014-11-19 23:05:04 +0800124)
125
Ian Elliott19628802015-02-04 12:06:46 -0700126if (WIN32)
Mark Youngb445e402016-01-18 17:22:48 -0700127 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_CRT_SECURE_NO_WARNINGS")
128 set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D_CRT_SECURE_NO_WARNINGS")
Mark Lobodzinski9ee66212016-03-15 10:31:44 -0600129 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_CRT_SECURE_NO_WARNINGS /bigobj")
130 set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_CRT_SECURE_NO_WARNINGS /bigobj")
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600131else()
Mike Stroyan084e6af2016-09-27 14:23:43 -0600132 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare")
133 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare")
Ian Elliott19628802015-02-04 12:06:46 -0700134endif()
Jon Ashburnd38bfb12014-10-14 19:15:22 -0600135
Mark Lobodzinskif42b37c2016-12-29 13:00:51 -0700136add_custom_target(generate_vk_helper_files DEPENDS
Mike Stroyan1c001622016-09-16 09:45:14 -0600137 vk_enum_string_helper.h
Mark Lobodzinski2b5fc812016-12-29 12:58:30 -0700138 vk_struct_size_helper.h
139 vk_struct_size_helper.c
Mark Lobodzinskid23ff062017-01-09 14:42:52 -0700140 vk_safe_struct.h
141 vk_safe_struct.cpp
Mike Stroyan1c001622016-09-16 09:45:14 -0600142)
143
144add_custom_target(generate_dispatch_table_helper DEPENDS
145 vk_dispatch_table_helper.h
Chia-I Wudb2b3872014-12-19 10:59:01 +0800146)
Chia-I Wudb2b3872014-12-19 10:59:01 +0800147
Mark Lobodzinskid23ff062017-01-09 14:42:52 -0700148run_vk_xml_generate(helper_file_generator.py vk_safe_struct.h)
149run_vk_xml_generate(helper_file_generator.py vk_safe_struct.cpp)
Mark Lobodzinski2b5fc812016-12-29 12:58:30 -0700150run_vk_xml_generate(helper_file_generator.py vk_struct_size_helper.h)
151run_vk_xml_generate(helper_file_generator.py vk_struct_size_helper.c)
Mark Lobodzinski1fa20f92016-12-27 14:36:51 -0700152run_vk_xml_generate(helper_file_generator.py vk_enum_string_helper.h)
Mark Lobodzinski2e9a4922016-12-06 13:14:55 -0700153run_vk_xml_generate(threading_generator.py thread_check.h)
154run_vk_xml_generate(parameter_validation_generator.py parameter_validation.h)
155run_vk_xml_generate(unique_objects_generator.py unique_objects_wrappers.h)
156run_vk_xml_generate(dispatch_table_generator.py vk_dispatch_table_helper.h)
Chia-I Wudb2b3872014-12-19 10:59:01 +0800157
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600158# Layer Utils Library
Mark Lobodzinski8005bb42016-06-21 15:53:37 -0600159# For Windows, we use a static lib because the Windows loader has a fairly restrictive loader search
160# 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 -0700161if (WIN32)
Mark Lobodzinski8005bb42016-06-21 15:53:37 -0600162 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 -0600163else()
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600164 add_library(VkLayer_utils SHARED vk_layer_config.cpp vk_layer_extension_utils.cpp vk_layer_utils.cpp)
John Zupinf5d304a2016-10-27 13:15:27 -0600165 install(TARGETS VkLayer_utils DESTINATION ${CMAKE_INSTALL_LIBDIR})
Ian Elliotta6bbf3e2015-02-12 11:36:44 -0700166endif()
Karl Schultzc61bc7a2016-04-08 09:17:18 -0600167
Mark Lobodzinski42fe5f72017-01-11 11:36:16 -0700168add_vk_layer(core_validation core_validation.cpp vk_layer_table.cpp descriptor_sets.cpp buffer_validation.cpp)
Mark Lobodzinski9bab8662016-07-01 10:53:31 -0600169add_vk_layer(object_tracker object_tracker.cpp vk_layer_table.cpp)
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700170add_vk_layer(image image.cpp vk_layer_table.cpp)
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700171add_vk_layer(swapchain swapchain.cpp vk_layer_table.cpp)
Chia-I Wudb2b3872014-12-19 10:59:01 +0800172# generated
Mike Stroyan845bdc42015-11-02 15:30:20 -0700173add_vk_layer(threading threading.cpp thread_check.h vk_layer_table.cpp)
Mike Stroyanb985fca2016-11-01 11:50:16 -0600174add_vk_layer(unique_objects unique_objects.cpp unique_objects_wrappers.h vk_layer_table.cpp)
Mark Lobodzinski739391a2016-03-17 15:08:18 -0600175add_vk_layer(parameter_validation parameter_validation.cpp parameter_validation.h vk_layer_table.cpp)
Chris Forbesa13ab8a2016-04-04 09:52:11 +1200176
177# Core validation has additional dependencies
178target_include_directories(VkLayer_core_validation PRIVATE ${GLSLANG_SPIRV_INCLUDE_DIR})
179target_include_directories(VkLayer_core_validation PRIVATE ${SPIRV_TOOLS_INCLUDE_DIR})
Karl Schultzcca25a62016-04-28 12:09:34 -0600180target_link_libraries(VkLayer_core_validation ${SPIRV_TOOLS_LIBRARIES})