2020-03-19 20:12:25 +00:00
# Copyright(c) 2015-2018, NVIDIA CORPORATION. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of NVIDIA CORPORATION nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2023-06-28 12:10:51 +00:00
if ( VULKAN_HPP_ENABLE_EXPERIMENTAL_CPP20_MODULES )
cmake_minimum_required ( VERSION 3.25 )
2023-08-07 06:56:36 +00:00
if ( ${ CMAKE_VERSION } VERSION_GREATER_EQUAL 3.28 )
message ( FATAL_ERROR "VULKAN_HPP_ENABLE_EXPERIMENTAL_CPP20_MODULES is currently not supported for CMake version ${CMAKE_VERSION}!"
" T o a d d s u p p o r t i n f o r m y o u r s e l f a b o u t t h e s t a t e o f t h e f e a t u r e a t h t t p s : / / g i t h u b . c o m / K i t w a r e / C M a k e / b l o b / m a s t e r / H e l p / d e v / e x p e r i m e n t a l . r s t "
" a n d a d d t h e c o r r e s p o n d i n g v a l u e o f C M A K E _ E X P E R I M E N T A L _ C X X _ M O D U L E _ C M A K E _ A P I t o V u l k a n - H p p ' s C M a k e L i s t s . t x t " )
elseif ( ${ CMAKE_VERSION } VERSION_GREATER_EQUAL 3.27 )
2023-09-07 13:20:10 +00:00
# CMake 3.27
2023-08-07 06:56:36 +00:00
set ( CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API aa1f7df0-828a-4fcd-9afc-2dc80491aca7 )
elseif ( ${ CMAKE_VERSION } VERSION_GREATER_EQUAL 3.26 )
# CMake 3.26
2023-06-28 12:10:51 +00:00
set ( CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API 2182bf5c-ef0d-489a-91da-49dbc3090d2a )
else ( )
# CMake 3.25
set ( CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API 3c375311-a3c9-4396-a187-3227ef642046 )
endif ( )
set ( CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1 )
else ( )
cmake_minimum_required ( VERSION 3.12 )
endif ( )
2020-03-19 20:12:25 +00:00
2023-07-11 13:39:17 +00:00
project ( VulkanHppGenerator LANGUAGES CXX )
2023-04-20 14:50:26 +00:00
function ( vulkan_hpp__setup_platform )
set ( options )
set ( oneValueArgs NAME )
set ( multiValueArgs )
cmake_parse_arguments ( TARGET "{options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
2023-06-28 12:10:51 +00:00
2023-04-20 14:50:26 +00:00
if ( WIN32 )
target_compile_definitions ( ${ TARGET_NAME } PUBLIC NOMINMAX VK_USE_PLATFORM_WIN32_KHR )
elseif ( APPLE )
target_compile_definitions ( ${ TARGET_NAME } PUBLIC VK_USE_PLATFORM_MACOS_MVK )
elseif ( UNIX )
target_compile_definitions ( ${ TARGET_NAME } PUBLIC VK_USE_PLATFORM_XCB_KHR )
else ( )
message ( FATAL_ERROR, "Vulkan-Hpp: unhandled platform!" )
endif ( )
endfunction ( )
2020-03-19 20:12:25 +00:00
2023-05-08 09:54:57 +00:00
function ( vulkan_hpp__setup_vulkan_include )
set ( options )
set ( oneValueArgs NAME )
set ( multiValueArgs )
cmake_parse_arguments ( TARGET "{options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
2023-06-20 12:43:35 +00:00
if ( VULKAN_HPP_BUILD_WITH_LOCAL_VULKAN_HPP )
2023-10-09 14:05:13 +00:00
target_include_directories ( ${ TARGET_NAME } PUBLIC "${CMAKE_CURRENT_FUNCTION_LIST_DIR}" )
target_include_directories ( ${ TARGET_NAME } PUBLIC "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Vulkan-Headers/include" )
2023-06-20 12:43:35 +00:00
if ( VULKAN_HPP_RUN_GENERATOR )
add_dependencies ( ${ TARGET_NAME } build_vulkan_hpp )
endif ( )
2023-05-08 09:54:57 +00:00
else ( )
target_include_directories ( ${ TARGET_NAME } PUBLIC "${Vulkan_INCLUDE_DIRS}" )
endif ( )
endfunction ( )
function ( vulkan_hpp__setup_warning_level )
set ( options )
set ( oneValueArgs NAME )
set ( multiValueArgs )
cmake_parse_arguments ( TARGET "{options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
2023-06-28 12:10:51 +00:00
2023-05-08 09:54:57 +00:00
if ( MSVC )
target_compile_options ( ${ TARGET_NAME } PRIVATE /W4 /WX )
if ( MSVC_VER GREATER_EQUAL 1910 )
target_compile_options ( ${ TARGET_NAME } PRIVATE /permissive- )
endif ( )
else ( )
target_compile_options ( ${ TARGET_NAME } PRIVATE -Wall -Wextra -pedantic -Werror )
endif ( )
endfunction ( )
2023-04-20 14:50:26 +00:00
function ( vulkan_hpp__setup_project )
set ( options )
set ( oneValueArgs NAME )
set ( multiValueArgs )
cmake_parse_arguments ( TARGET "{options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
2020-03-19 20:12:25 +00:00
2023-04-20 14:50:26 +00:00
project ( ${ TARGET_NAME } LANGUAGES CXX )
endfunction ( )
2020-04-12 19:49:12 +00:00
2023-04-20 14:50:26 +00:00
function ( vulkan_hpp__setup_library )
set ( options SHARED )
2023-05-08 09:54:57 +00:00
set ( oneValueArgs FOLDER NAME )
2023-04-20 14:50:26 +00:00
set ( multiValueArgs HEADERS SOURCES )
cmake_parse_arguments ( TARGET "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
2023-06-28 12:10:51 +00:00
2023-04-20 14:50:26 +00:00
vulkan_hpp__setup_project ( NAME ${ TARGET_NAME } )
2023-06-28 12:10:51 +00:00
2023-04-20 14:50:26 +00:00
if ( "${TARGET_SOURCES}" STREQUAL "" )
add_library ( ${ TARGET_NAME } INTERFACE ${ TARGET_HEADERS } )
else ( )
if ( ${ TARGET_SHARED } )
add_library ( ${ TARGET_NAME } SHARED ${ TARGET_SOURCES } ${ TARGET_HEADERS } )
else ( )
add_library ( ${ TARGET_NAME } ${ TARGET_SOURCES } ${ TARGET_HEADERS } )
endif ( )
vulkan_hpp__setup_platform ( NAME ${ TARGET_NAME } )
2023-05-08 09:54:57 +00:00
vulkan_hpp__setup_vulkan_include ( NAME ${ TARGET_NAME } )
vulkan_hpp__setup_warning_level ( NAME ${ TARGET_NAME } )
set_target_properties ( ${ TARGET_NAME } PROPERTIES CXX_STANDARD 11 )
set_target_properties ( ${ TARGET_NAME } PROPERTIES CXX_STANDARD_REQUIRED ON )
2023-04-20 14:50:26 +00:00
endif ( )
2023-05-08 09:54:57 +00:00
set_target_properties ( ${ TARGET_NAME } PROPERTIES FOLDER ${ TARGET_FOLDER } )
2023-04-20 14:50:26 +00:00
endfunction ( )
2020-04-12 19:49:12 +00:00
2023-04-20 14:50:26 +00:00
function ( vulkan_hpp__setup_sample )
set ( options )
set ( oneValueArgs FOLDER NAME PCH_REUSE )
set ( multiValueArgs HEADERS INCLUDE_DIRS LIBS PCH SOURCES )
cmake_parse_arguments ( TARGET "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
2023-06-20 12:43:35 +00:00
if ( NOT ( VULKAN_HPP_SAMPLES_BUILD_ONLY_DYNAMIC AND VULKAN_HPP_BUILD_WITH_LOCAL_VULKAN_HPP ) )
2023-05-08 09:54:57 +00:00
find_package ( Vulkan REQUIRED )
endif ( )
2023-04-20 14:50:26 +00:00
vulkan_hpp__setup_project ( NAME ${ TARGET_NAME } )
add_executable ( ${ TARGET_NAME } ${ TARGET_HEADERS } ${ TARGET_SOURCES } )
2023-06-28 12:10:51 +00:00
2023-04-20 14:50:26 +00:00
vulkan_hpp__setup_platform ( NAME ${ TARGET_NAME } )
2023-05-08 09:54:57 +00:00
vulkan_hpp__setup_vulkan_include ( NAME ${ TARGET_NAME } )
vulkan_hpp__setup_warning_level ( NAME ${ TARGET_NAME } )
2023-04-20 14:50:26 +00:00
set_target_properties ( ${ TARGET_NAME } PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON )
if ( TARGET_FOLDER )
set_target_properties ( ${ TARGET_NAME } PROPERTIES FOLDER "${TARGET_FOLDER}" )
endif ( )
2023-06-28 12:10:51 +00:00
2023-04-20 14:50:26 +00:00
if ( TARGET_INCLUDE_DIRS )
target_include_directories ( ${ TARGET_NAME } PUBLIC ${ TARGET_INCLUDE_DIRS } )
endif ( )
2023-06-28 12:10:51 +00:00
2023-04-20 14:50:26 +00:00
if ( TARGET_LIBS )
target_link_libraries ( ${ TARGET_NAME } PRIVATE "${TARGET_LIBS}" )
endif ( )
2023-06-28 12:10:51 +00:00
2023-04-20 14:50:26 +00:00
if ( VULKAN_HPP_PRECOMPILE )
if ( TARGET_PCH_REUSE )
target_precompile_headers ( ${ TARGET_NAME } REUSE_FROM "${TARGET_PCH_REUSE}" )
elseif ( TARGET_PCH )
target_precompile_headers ( ${ TARGET_NAME } PRIVATE "${TARGET_PCH}" )
endif ( )
endif ( )
endfunction ( )
2020-07-30 07:21:05 +00:00
2023-04-20 14:50:26 +00:00
function ( vulkan_hpp__setup_sample_static )
set ( options )
set ( oneValueArgs NAME )
set ( multiValueArgs )
cmake_parse_arguments ( TARGET "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
2020-03-19 20:12:25 +00:00
2023-05-08 09:54:57 +00:00
if ( NOT VULKAN_HPP_SAMPLES_BUILD_ONLY_DYNAMIC )
2023-04-20 14:50:26 +00:00
if ( NOT TARGET_NAME )
message ( FATAL_ERROR "NAME must be defined in vulkan_hpp__setup_sample_static" )
endif ( )
2020-03-19 20:12:25 +00:00
2023-04-20 14:50:26 +00:00
find_package ( Vulkan REQUIRED )
2020-03-19 20:12:25 +00:00
2023-04-20 14:50:26 +00:00
vulkan_hpp__setup_sample (
N A M E $ { T A R G E T _ N A M E }
F O L D E R S a m p l e s
P C H < v u l k a n / v u l k a n . h p p >
S O U R C E S $ { T A R G E T _ N A M E } . c p p
L I B S $ { V u l k a n _ L I B R A R I E S } )
2023-06-20 12:43:35 +00:00
target_compile_definitions ( ${ TARGET_NAME } PUBLIC VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=0 )
2023-04-20 14:50:26 +00:00
endif ( )
endfunction ( )
function ( vulkan_hpp__setup_sample_dynamic )
set ( options )
set ( oneValueArgs NAME )
set ( multiValueArgs HEADERS INCLUDE_DIRS SOURCES )
cmake_parse_arguments ( TARGET "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
if ( NOT TARGET_NAME )
message ( FATAL_ERROR "NAME must be defined in vulkan_hpp__setup_sample_dynamic" )
endif ( )
if ( NOT TARGET_SOURCES )
set ( TARGET_SOURCES ${ TARGET_NAME } .cpp )
endif ( )
vulkan_hpp__setup_sample (
N A M E $ { T A R G E T _ N A M E }
F O L D E R S a m p l e s
P C H _ R E U S E u t i l s
I N C L U D E _ D I R S $ { T A R G E T _ I N C L U D E _ D I R S }
H E A D E R S $ { T A R G E T _ H E A D E R S }
S O U R C E S $ { T A R G E T _ S O U R C E S }
L I B S u t i l s )
endfunction ( )
function ( vulkan_hpp__setup_sample_raii )
set ( options )
set ( oneValueArgs NAME )
set ( multiValueArgs HEADERS INCLUDE_DIRS SOURCES )
cmake_parse_arguments ( TARGET "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
if ( NOT TARGET_NAME )
message ( FATAL_ERROR "NAME must be defined in vulkan_hpp__setup_sample_raii" )
endif ( )
if ( NOT TARGET_SOURCES )
set ( TARGET_SOURCES ${ TARGET_NAME } .cpp )
endif ( )
vulkan_hpp__setup_sample (
N A M E R A I I _ $ { T A R G E T _ N A M E }
F O L D E R R A I I _ S a m p l e s
P C H _ R E U S E u t i l s
I N C L U D E _ D I R S $ { T A R G E T _ I N C L U D E _ D I R S }
H E A D E R S $ { T A R G E T _ H E A D E R S }
S O U R C E S $ { T A R G E T _ S O U R C E S }
L I B S u t i l s )
endfunction ( )
function ( vulkan_hpp__setup_test )
2023-09-07 13:20:10 +00:00
set ( options NO_UTILS )
2023-04-20 14:50:26 +00:00
set ( oneValueArgs CXX_STANDARD NAME )
2023-05-08 09:54:57 +00:00
set ( multiValueArgs LIBRARIES )
2023-04-20 14:50:26 +00:00
cmake_parse_arguments ( TARGET "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ ARGN } )
2023-06-20 12:43:35 +00:00
if ( NOT ( VULKAN_HPP_TESTS_BUILD_ONLY_DYNAMIC AND VULKAN_HPP_BUILD_WITH_LOCAL_VULKAN_HPP ) )
2023-05-08 09:54:57 +00:00
find_package ( Vulkan REQUIRED )
endif ( )
2023-04-20 14:50:26 +00:00
if ( NOT TARGET_NAME )
message ( FATAL_ERROR "NAME must be defined in vulkan_hpp__setup_test" )
endif ( )
if ( NOT TARGET_CXX_STANDARD )
set ( TARGET_CXX_STANDARD 11 )
endif ( )
vulkan_hpp__setup_project ( NAME ${ TARGET_NAME } )
2020-03-19 20:12:25 +00:00
2023-04-20 14:50:26 +00:00
add_executable ( ${ TARGET_NAME } ${ TARGET_NAME } .cpp )
2023-06-28 12:10:51 +00:00
2023-04-20 14:50:26 +00:00
vulkan_hpp__setup_platform ( NAME ${ TARGET_NAME } )
2023-05-08 09:54:57 +00:00
vulkan_hpp__setup_vulkan_include ( NAME ${ TARGET_NAME } )
vulkan_hpp__setup_warning_level ( NAME ${ TARGET_NAME } )
2023-04-20 14:50:26 +00:00
2023-05-08 09:54:57 +00:00
set_target_properties ( ${ TARGET_NAME } PROPERTIES CXX_STANDARD ${ TARGET_CXX_STANDARD } CXX_STANDARD_REQUIRED ON FOLDER "Tests" )
2023-04-27 14:16:10 +00:00
target_include_directories ( ${ TARGET_NAME } PUBLIC ${ VulkanHeaders_INCLUDE_DIR } )
2023-10-09 14:05:13 +00:00
target_include_directories ( ${ TARGET_NAME } PUBLIC "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/glm" )
2023-09-07 13:20:10 +00:00
if ( NOT ${ TARGET_NO_UTILS } )
target_link_libraries ( ${ TARGET_NAME } PRIVATE utils )
endif ( )
target_link_libraries ( ${ TARGET_NAME } PRIVATE ${ TARGET_LIBRARIES } )
2023-04-20 14:50:26 +00:00
endfunction ( )
set_property ( GLOBAL PROPERTY USE_FOLDERS ON )
2023-04-27 14:16:10 +00:00
# find a clang-format version to format the generated header files
2023-04-20 14:50:26 +00:00
find_program ( CLANG_FORMAT_EXECUTABLE NAMES clang-format )
if ( CLANG_FORMAT_EXECUTABLE )
# get the clang-format version string
execute_process ( COMMAND ${ CLANG_FORMAT_EXECUTABLE } "--version" OUTPUT_VARIABLE clangFormatVersion )
# filter out the actual version
string ( REGEX MATCH [0123456789.]+ clangFormatVersion "${clangFormatVersion}" )
# we need at least version 7.0.0 !
if ( clangFormatVersion VERSION_LESS 7.0.0 )
message ( WARNING " Found too old clang-format version <" ${ clangFormatVersion } ">, we need version 7 and up to nicely format vulkan.hpp and vulkan_raii.hpp" )
else ( )
message ( STATUS " Found clang-format version <" ${ clangFormatVersion } ">." )
add_definitions ( -DCLANG_FORMAT_EXECUTABLE= "${CLANG_FORMAT_EXECUTABLE}" )
if ( clangFormatVersion VERSION_LESS 11.0.0 )
message ( STATUS " Using .clang-format version 7." )
file ( READ ".clang-format_7" clangFormat )
elseif ( clangFormatVersion VERSION_LESS 12.0.0 )
message ( STATUS " Using .clang-format version 11." )
file ( READ ".clang-format_11" clangFormat )
elseif ( clangFormatVersion VERSION_LESS 13.0.0 )
message ( STATUS " Using .clang-format version 12." )
file ( READ ".clang-format_12" clangFormat )
elseif ( clangFormatVersion VERSION_LESS 14.0.0 )
message ( STATUS " Using .clang-format version 13." )
file ( READ ".clang-format_13" clangFormat )
elseif ( clangFormatVersion VERSION_LESS 15.0.0 )
message ( STATUS " Using .clang-format version 14." )
file ( READ ".clang-format_14" clangFormat )
else ( )
message ( STATUS " Using .clang-format version 15." )
file ( READ ".clang-format_15" clangFormat )
endif ( )
file ( WRITE ".clang-format" ${ clangFormat } )
endif ( )
else ( )
message ( WARNING " Could not find clang-format. Generated vulkan.hpp and vulkan_raii.hpp will not be nicely formatted." )
2020-03-19 20:12:25 +00:00
endif ( )
2023-04-27 14:16:10 +00:00
# all the options for this project
option ( VULKAN_HPP_PRECOMPILE "Precompile vulkan.hpp and vulkan_raii.hpp for sample builds" ON )
option ( VULKAN_HPP_RUN_GENERATOR "Run the HPP generator" OFF )
option ( VULKAN_HPP_SAMPLES_BUILD "Build samples" OFF )
option ( VULKAN_HPP_TESTS_BUILD "Build tests" OFF )
2023-05-08 09:54:57 +00:00
option ( VULKAN_HPP_SAMPLES_BUILD_ONLY_DYNAMIC "Build only dynamic. Required in case the Vulkan SDK is not available" OFF )
option ( VULKAN_HPP_TESTS_BUILD_ONLY_DYNAMIC "Build only dynamic" OFF )
2023-06-20 12:43:35 +00:00
option ( VULKAN_HPP_BUILD_WITH_LOCAL_VULKAN_HPP "Build with local Vulkan headers" ON )
2023-06-28 12:10:51 +00:00
option ( VULKAN_HPP_ENABLE_EXPERIMENTAL_CPP20_MODULES "Build Vulkan-Hpp as C++20 module" OFF )
2023-09-07 13:20:10 +00:00
option ( VULKAN_HPP_CPP20_MODULE_DYNAMIC_DISPATCHER "Build C++20 module with dynamic Dispatcher" ON )
2023-04-27 14:16:10 +00:00
# look for the file vk.xml, the ultimate source of truth for vulkan, to generate the headers from
2023-04-20 14:50:26 +00:00
if ( NOT DEFINED VulkanRegistry_DIR )
if ( DEFINED VULKAN_HPP_VULKAN_HEADERS_SRC_DIR )
set ( VulkanRegistry_DIR "${VULKAN_HPP_VULKAN_HEADERS_SRC_DIR}/registry" )
else ( )
set ( VulkanRegistry_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/registry" )
endif ( )
endif ( )
file ( TO_NATIVE_PATH ${ VulkanRegistry_DIR } /vk.xml vk_spec )
string ( REPLACE "\\" "\\\\" vk_spec ${ vk_spec } )
2020-03-19 20:12:25 +00:00
2023-04-27 14:16:10 +00:00
# gather the tinyxml2 sources, to be used directly in the generator project
2023-04-20 14:50:26 +00:00
if ( NOT DEFINED VULKAN_HPP_TINYXML2_SRC_DIR )
set ( VULKAN_HPP_TINYXML2_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tinyxml2" )
2020-03-19 20:12:25 +00:00
endif ( )
2023-04-20 14:50:26 +00:00
set ( TINYXML2_SOURCES ${ VULKAN_HPP_TINYXML2_SRC_DIR } /tinyxml2.cpp )
set ( TINYXML2_HEADERS ${ VULKAN_HPP_TINYXML2_SRC_DIR } /tinyxml2.h )
2023-04-27 14:16:10 +00:00
source_group ( TinyXML2 FILES ${ TINYXML2_HEADERS } ${ TINYXML2_SOURCES } )
2022-08-10 09:19:06 +00:00
2023-07-10 06:46:50 +00:00
# Build Vulkan-Hpp as a module
if ( VULKAN_HPP_ENABLE_EXPERIMENTAL_CPP20_MODULES )
# create a target to provide VulkanHpp as C++20 module
add_library ( VulkanHppModule )
set_target_properties ( VulkanHppModule PROPERTIES
C X X _ S T A N D A R D _ R E Q U I R E D O N
C X X _ E X T E N S I O N S O F F )
2023-09-07 13:20:10 +00:00
if ( VULKAN_HPP_CPP20_MODULE_DYNAMIC_DISPATCHER )
target_compile_definitions ( VulkanHppModule PUBLIC VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1 )
else ( )
target_compile_definitions ( VulkanHppModule PUBLIC VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=0 )
endif ( )
2023-07-10 06:46:50 +00:00
target_compile_features ( VulkanHppModule PUBLIC cxx_std_20 )
target_sources ( VulkanHppModule
P U B L I C
2023-10-09 14:05:13 +00:00
F I L E _ S E T v u l k a n _ m o d u l e _ f i l e B A S E _ D I R S $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } T Y P E C X X _ M O D U L E S F I L E S v u l k a n / v u l k a n . c p p m )
target_include_directories ( VulkanHppModule PUBLIC ${ CMAKE_CURRENT_SOURCE_DIR } )
target_include_directories ( VulkanHppModule PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/include" )
2023-07-10 06:46:50 +00:00
endif ( )
2022-08-10 09:19:06 +00:00
2023-07-11 13:39:17 +00:00
# The generator executable
add_executable ( VulkanHppGenerator VulkanHppGenerator.cpp VulkanHppGenerator.hpp XMLHelper.hpp ${ TINYXML2_SOURCES } ${ TINYXML2_HEADERS } )
vulkan_hpp__setup_warning_level ( NAME VulkanHppGenerator )
2023-10-09 14:05:13 +00:00
target_compile_definitions ( VulkanHppGenerator PUBLIC BASE_PATH= "${CMAKE_CURRENT_SOURCE_DIR}" VK_SPEC= "${vk_spec}" )
2023-07-11 13:39:17 +00:00
target_include_directories ( VulkanHppGenerator PRIVATE ${ VULKAN_HPP_TINYXML2_SRC_DIR } )
set_target_properties ( VulkanHppGenerator PROPERTIES CXX_STANDARD 20 CXX_STANDARD_REQUIRED ON )
2023-04-20 14:50:26 +00:00
2023-07-11 13:39:17 +00:00
# The video generator executable
add_executable ( VideoHppGenerator VideoHppGenerator.cpp VideoHppGenerator.hpp XMLHelper.hpp ${ TINYXML2_SOURCES } ${ TINYXML2_HEADERS } )
vulkan_hpp__setup_warning_level ( NAME VideoHppGenerator )
file ( TO_NATIVE_PATH ${ VulkanRegistry_DIR } /video.xml video_spec )
string ( REPLACE "\\" "\\\\" video_spec ${ video_spec } )
2023-10-09 14:05:13 +00:00
target_compile_definitions ( VideoHppGenerator PUBLIC BASE_PATH= "${CMAKE_CURRENT_SOURCE_DIR}" VIDEO_SPEC= "${video_spec}" )
2023-07-11 13:39:17 +00:00
target_include_directories ( VideoHppGenerator PRIVATE ${ VULKAN_HPP_TINYXML2_SRC_DIR } )
set_target_properties ( VideoHppGenerator PROPERTIES CXX_STANDARD 20 CXX_STANDARD_REQUIRED ON )
2023-04-20 14:50:26 +00:00
2023-07-11 13:39:17 +00:00
# if the generators are to be run, add a custom commands and targets
2023-04-20 14:50:26 +00:00
if ( VULKAN_HPP_RUN_GENERATOR )
2023-04-27 14:16:10 +00:00
if ( NOT DEFINED VulkanHeaders_INCLUDE_DIR )
if ( DEFINED VULKAN_HPP_PATH )
set ( VulkanHeaders_INCLUDE_DIR ${ VULKAN_HPP_PATH } )
else ( )
set ( VulkanHeaders_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" )
endif ( )
endif ( )
file ( TO_NATIVE_PATH ${ VulkanHeaders_INCLUDE_DIR } /vulkan/vulkan.hpp vulkan_hpp )
string ( REPLACE "\\" "\\\\" vulkan_hpp ${ vulkan_hpp } )
2023-04-20 14:50:26 +00:00
add_custom_command (
2023-07-11 13:39:17 +00:00
C O M M A N D V u l k a n H p p G e n e r a t o r
C O M M A N D V u l k a n H p p G e n e r a t o r - a p i v u l k a n s c
2023-04-20 14:50:26 +00:00
O U T P U T " $ { v u l k a n _ h p p } "
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } "
2023-07-11 13:39:17 +00:00
C O M M E N T " r u n V u l k a n H p p G e n e r a t o r "
D E P E N D S V u l k a n H p p G e n e r a t o r " $ { v k _ s p e c } " )
2023-04-20 14:50:26 +00:00
add_custom_target ( build_vulkan_hpp ALL DEPENDS "${vulkan_hpp}" "${vk_spec}" )
2023-07-11 13:39:17 +00:00
add_custom_command (
C O M M A N D V i d e o H p p G e n e r a t o r
O U T P U T " $ { v u l k a n _ v i d e o _ h p p } "
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } "
C O M M E N T " r u n V u l k a n V i d e o G e n e r a t o r "
D E P E N D S V u l k a n V i d e o G e n e r a t o r " $ { v i d e o _ s p e c } " )
add_custom_target ( build_vulkan_video ALL DEPENDS "${vulkan_video_hpp}" "${video_spec}" )
2023-04-20 14:50:26 +00:00
endif ( )
2022-08-10 09:19:06 +00:00
2023-04-27 14:16:10 +00:00
if ( VULKAN_HPP_SAMPLES_BUILD )
2023-04-20 14:50:26 +00:00
# external libraries
add_subdirectory ( glm )
set ( GLFW_BUILD_EXAMPLES OFF )
set ( GLFW_BUILD_TESTS OFF )
add_subdirectory ( glfw )
add_subdirectory ( glslang )
# samples
add_subdirectory ( samples )
add_subdirectory ( RAII_Samples )
endif ( )
2022-08-10 09:19:06 +00:00
2023-04-27 14:16:10 +00:00
if ( VULKAN_HPP_TESTS_BUILD )
2023-04-20 14:50:26 +00:00
add_subdirectory ( tests )
endif ( )
2022-08-10 09:19:06 +00:00
2023-04-20 14:50:26 +00:00
if ( ${ VULKAN_HPP_INSTALL } )
include ( GNUInstallDirs )
2023-04-27 14:16:10 +00:00
set ( VK_GENERATED_VULKAN_HEADERS
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n _ e n u m s . h p p
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n _ f o r m a t _ t r a i t s . h p p
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n _ f u n c s . h p p
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n _ h a n d l e s . h p p
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n _ h a s h . h p p
2023-09-07 13:20:10 +00:00
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n _ h p p _ m a c r o s . h p p
2023-04-27 14:16:10 +00:00
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n . h p p
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n _ r a i i . h p p
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n _ s t a t i c _ a s s e r t i o n s . h p p
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n _ s t r u c t s . h p p
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n _ t o _ s t r i n g . h p p
2023-06-28 12:10:51 +00:00
$ { V u l k a n H e a d e r s _ I N C L U D E _ D I R } / v u l k a n / v u l k a n . c p p m
2023-04-27 14:16:10 +00:00
)
2023-04-20 14:50:26 +00:00
install ( FILES ${ VK_GENERATED_VULKAN_HEADERS } DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } /vulkan )
2023-06-28 12:10:51 +00:00
endif ( )