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.
cmake_minimum_required ( VERSION 3.2 )
set_property ( GLOBAL PROPERTY USE_FOLDERS ON )
project ( VulkanHppGenerator )
2020-04-12 19:49:12 +00:00
find_program ( CLANG_FORMAT_EXECUTABLE NAMES clang-format )
if ( CLANG_FORMAT_EXECUTABLE )
2020-05-04 14:27:19 +00:00
# get the clang-format version string
execute_process ( COMMAND ${ CLANG_FORMAT_EXECUTABLE } "--version" OUTPUT_VARIABLE clangFormatVersion )
# filter out the actual version
2020-08-12 13:27:05 +00:00
string ( REGEX MATCH [0123456789.]+ clangFormatVersion "${clangFormatVersion}" )
2021-03-23 09:52:56 +00:00
# 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 } ">." )
2020-05-04 14:27:19 +00:00
add_definitions ( -DCLANG_FORMAT_EXECUTABLE= "${CLANG_FORMAT_EXECUTABLE}" )
2021-10-25 16:30:32 +00:00
if ( clangFormatVersion VERSION_LESS 11.0.0 )
2021-03-23 09:52:56 +00:00
message ( STATUS " Using .clang-format version 7." )
file ( READ ".clang-format_7" clangFormat )
else ( )
2022-03-09 10:20:05 +00:00
if ( clangFormatVersion VERSION_LESS 12.0.0 )
message ( STATUS " Using .clang-format version 11." )
file ( READ ".clang-format_11" clangFormat )
else ( )
message ( STATUS " Using .clang-format version 12." )
file ( READ ".clang-format_12" clangFormat )
endif ( )
2021-03-23 09:52:56 +00:00
endif ( )
file ( WRITE ".clang-format" ${ clangFormat } )
2020-05-04 14:27:19 +00:00
endif ( )
2020-04-12 19:49:12 +00:00
else ( )
2021-03-23 09:52:56 +00:00
message ( WARNING " Could not find clang-format. Generated vulkan.hpp and vulkan_raii.hpp will not be nicely formatted." )
2020-04-12 19:49:12 +00:00
endif ( )
2020-07-30 07:21:05 +00:00
if ( NOT DEFINED CMAKE_CXX_STANDARD )
set ( CMAKE_CXX_STANDARD 11 )
endif ( )
2021-03-11 09:35:30 +00:00
set ( CMAKE_CXX_STANDARD_REQUIRED ON )
2020-07-30 07:21:05 +00:00
2022-07-07 08:22:21 +00:00
message ( STATUS "CMAKE_CXX_STANDARD = <${CMAKE_CXX_STANDARD}>" )
2020-03-19 20:12:25 +00:00
2020-07-27 10:08:03 +00:00
if ( NOT DEFINED VulkanRegistry_DIR )
if ( DEFINED VULKAN_HPP_VULKAN_HEADERS_SRC_DIR )
2020-10-26 08:16:34 +00:00
set ( VulkanRegistry_DIR "${VULKAN_HPP_VULKAN_HEADERS_SRC_DIR}/registry" )
2020-07-27 10:08:03 +00:00
else ( )
2020-10-21 08:58:34 +00:00
set ( VulkanRegistry_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/registry" )
2020-07-27 10:08:03 +00:00
endif ( )
2020-03-19 20:12:25 +00:00
endif ( )
2020-10-21 08:58:34 +00:00
file ( TO_NATIVE_PATH ${ VulkanRegistry_DIR } /vk.xml vk_spec )
2020-03-19 20:12:25 +00:00
string ( REPLACE "\\" "\\\\" vk_spec ${ vk_spec } )
add_definitions ( -DVK_SPEC= "${vk_spec}" )
2020-07-27 10:08:03 +00:00
if ( NOT DEFINED VulkanHeaders_INCLUDE_DIR )
if ( DEFINED VULKAN_HPP_PATH )
2020-08-24 13:58:53 +00:00
set ( VulkanHeaders_INCLUDE_DIR ${ VULKAN_HPP_PATH } )
2020-07-27 10:08:03 +00:00
else ( )
set ( VulkanHeaders_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" )
endif ( )
2020-03-19 20:12:25 +00:00
endif ( )
2020-07-27 10:08:03 +00:00
include_directories ( ${ VulkanHeaders_INCLUDE_DIR } )
2020-03-19 20:12:25 +00:00
set ( HEADERS
V u l k a n H p p G e n e r a t o r . h p p
)
set ( SOURCES
V u l k a n H p p G e n e r a t o r . c p p
)
if ( NOT DEFINED VULKAN_HPP_TINYXML2_SRC_DIR )
set ( VULKAN_HPP_TINYXML2_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tinyxml2" )
endif ( )
set ( TINYXML2_SOURCES
$ { V U L K A N _ H P P _ T I N Y X M L 2 _ S R C _ D I R } / t i n y x m l 2 . c p p
)
set ( TINYXML2_HEADERS
$ { V U L K A N _ H P P _ T I N Y X M L 2 _ S R C _ D I R } / t i n y x m l 2 . h
)
source_group ( headers FILES ${ HEADERS } )
source_group ( sources FILES ${ SOURCES } )
source_group ( TinyXML2\\headers FILES ${ TINYXML2_HEADERS } )
source_group ( TinyXML2\\sources FILES ${ TINYXML2_SOURCES } )
add_executable ( VulkanHppGenerator
$ { H E A D E R S }
$ { S O U R C E S }
$ { T I N Y X M L 2 _ S O U R C E S }
$ { T I N Y X M L 2 _ H E A D E R S }
)
2022-07-26 09:13:43 +00:00
file ( TO_NATIVE_PATH ${ VulkanHeaders_INCLUDE_DIR } /vulkan/vulkan_enums.hpp vulkan_enums_hpp )
string ( REPLACE "\\" "\\\\" vulkan_enums_hpp ${ vulkan_enums_hpp } )
file ( TO_NATIVE_PATH ${ VulkanHeaders_INCLUDE_DIR } /vulkan/vulkan_format_traits.hpp vulkan_format_traits_hpp )
string ( REPLACE "\\" "\\\\" vulkan_format_traits_hpp ${ vulkan_format_traits_hpp } )
file ( TO_NATIVE_PATH ${ VulkanHeaders_INCLUDE_DIR } /vulkan/vulkan_funcs.hpp vulkan_funcs_hpp )
string ( REPLACE "\\" "\\\\" vulkan_funcs_hpp ${ vulkan_funcs_hpp } )
file ( TO_NATIVE_PATH ${ VulkanHeaders_INCLUDE_DIR } /vulkan/vulkan_handles.hpp vulkan_handles_hpp )
string ( REPLACE "\\" "\\\\" vulkan_handles_hpp ${ vulkan_handles_hpp } )
file ( TO_NATIVE_PATH ${ VulkanHeaders_INCLUDE_DIR } /vulkan/vulkan_hash.hpp vulkan_hash_hpp )
string ( REPLACE "\\" "\\\\" vulkan_hash_hpp ${ vulkan_hash_hpp } )
file ( TO_NATIVE_PATH ${ VulkanHeaders_INCLUDE_DIR } /vulkan/vulkan_raii.hpp vulkan_raii_hpp )
string ( REPLACE "\\" "\\\\" vulkan_raii_hpp ${ vulkan_raii_hpp } )
2022-07-28 15:09:08 +00:00
file ( TO_NATIVE_PATH ${ VulkanHeaders_INCLUDE_DIR } /vulkan/vulkan_static_asserts.hpp vulkan_static_asserts_hpp )
string ( REPLACE "\\" "\\\\" vulkan_static_asserts_hpp ${ vulkan_static_asserts_hpp } )
2022-07-26 09:13:43 +00:00
file ( TO_NATIVE_PATH ${ VulkanHeaders_INCLUDE_DIR } /vulkan/vulkan_structs.hpp vulkan_structs_hpp )
string ( REPLACE "\\" "\\\\" vulkan_structs_hpp ${ vulkan_structs_hpp } )
file ( TO_NATIVE_PATH ${ VulkanHeaders_INCLUDE_DIR } /vulkan/vulkan_to_string.hpp vulkan_to_string_hpp )
string ( REPLACE "\\" "\\\\" vulkan_to_string_hpp ${ vulkan_to_string_hpp } )
target_compile_definitions ( ${ PROJECT_NAME } PUBLIC
- D V U L K A N _ E N U M S _ H P P _ F I L E = " $ { v u l k a n _ e n u m s _ h p p } "
- D V U L K A N _ F O R M A T _ T R A I T S _ H P P _ F I L E = " $ { v u l k a n _ f o r m a t _ t r a i t s _ h p p } "
- D V U L K A N _ F U N C S _ H P P _ F I L E = " $ { v u l k a n _ f u n c s _ h p p } "
- D V U L K A N _ H A N D L E S _ H P P _ F I L E = " $ { v u l k a n _ h a n d l e s _ h p p } "
- D V U L K A N _ H A S H _ H P P _ F I L E = " $ { v u l k a n _ h a s h _ h p p } "
- D V U L K A N _ R A I I _ H P P _ F I L E = " $ { v u l k a n _ r a i i _ h p p } "
2022-07-28 15:09:08 +00:00
- D V U L K A N _ S T A T I C _ A S S E R T S _ H P P _ F I L E = " $ { v u l k a n _ s t a t i c _ a s s e r t s _ h p p } "
2022-07-26 09:13:43 +00:00
- D V U L K A N _ S T R U C T S _ H P P _ F I L E = " $ { v u l k a n _ s t r u c t s _ h p p } "
2022-07-28 15:09:08 +00:00
- D V U L K A N _ T O _ S T R I N G _ H P P _ F I L E = " $ { v u l k a n _ t o _ s t r i n g _ h p p } "
- D B A S E _ P A T H = " $ { C M A K E _ S O U R C E _ D I R } " )
2022-07-26 09:13:43 +00:00
set_property ( TARGET ${ PROJECT_NAME } PROPERTY CXX_STANDARD 17 )
2020-03-19 20:12:25 +00:00
2020-09-30 10:00:32 +00:00
if ( MSVC )
2022-07-26 09:13:43 +00:00
target_compile_options ( ${ PROJECT_NAME } PRIVATE /W4 /WX )
2021-01-07 15:04:52 +00:00
if ( MSVC_VER GREATER_EQUAL 1910 )
2022-07-26 09:13:43 +00:00
target_compile_options ( ${ PROJECT_NAME } PRIVATE /permissive- )
2021-01-07 15:04:52 +00:00
endif ( )
2020-09-30 10:00:32 +00:00
else ( MSVC )
2022-07-26 09:13:43 +00:00
target_compile_options ( ${ PROJECT_NAME } PRIVATE -Wall -Wextra -pedantic -Werror )
2020-09-30 10:00:32 +00:00
endif ( MSVC )
2022-07-26 09:13:43 +00:00
target_include_directories ( ${ PROJECT_NAME } PRIVATE ${ VULKAN_HPP_TINYXML2_SRC_DIR } )
2020-03-19 20:12:25 +00:00
option ( VULKAN_HPP_RUN_GENERATOR "Run the HPP generator" OFF )
if ( VULKAN_HPP_RUN_GENERATOR )
add_custom_command (
2022-07-26 09:13:43 +00:00
C O M M A N D $ { P R O J E C T _ N A M E }
2020-03-19 20:12:25 +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 } "
2022-07-26 09:13:43 +00:00
C O M M E N T " r u n $ { P R O J E C T _ N A M E } "
D E P E N D S $ { P R O J E C T _ N A M E } " $ { v k _ s p e c } " )
2020-03-19 20:12:25 +00:00
add_custom_target ( build_vulkan_hpp ALL
D E P E N D S " $ { v u l k a n _ h p p } " " $ { v k _ s p e c } " )
endif ( )
option ( SAMPLES_BUILD "Build samples" OFF )
if ( SAMPLES_BUILD )
# 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 )
2021-02-17 09:49:59 +00:00
add_subdirectory ( RAII_Samples )
2020-03-19 20:12:25 +00:00
endif ( )
option ( TESTS_BUILD "Build tests" OFF )
if ( TESTS_BUILD )
add_subdirectory ( tests )
endif ( )
if ( ${ VULKAN_HPP_INSTALL } )
install ( FILES ${ vulkan_hpp } DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR } /vulkan )
endif ( )