From b541eef860084b0ffd26faadcd5c5bfc901bce07 Mon Sep 17 00:00:00 2001 From: Jan Kuhlmann <33833587+M2-TE@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:42:36 +0100 Subject: [PATCH 1/6] added separate util libraries for static and dynamic --- CMakeLists.txt | 14 +++++++------- RAII_Samples/utils/shaders.hpp | 2 ++ samples/utils/CMakeLists.txt | 33 ++++++++++++++++++++++++--------- samples/utils/geometries.hpp | 2 ++ samples/utils/math.hpp | 2 ++ samples/utils/pch.hpp | 26 ++++++++++++++++++++++++++ samples/utils/shaders.hpp | 2 ++ 7 files changed, 65 insertions(+), 16 deletions(-) create mode 100644 samples/utils/pch.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ca0277e3..d84366be1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,7 +34,7 @@ if( NOT DEFINED CMAKE_CXX_STANDARD AND PROJECT_IS_TOP_LEVEL ) endif() # all the options for this project -option( VULKAN_HPP_PRECOMPILE "Precompile vulkan.hpp and vulkan_raii.hpp for sample builds" OFF ) +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_GENERATOR_BUILD "Build the HPP generator" ${PROJECT_IS_TOP_LEVEL} ) option( VULKAN_HPP_SAMPLES_BUILD "Build samples" OFF ) @@ -459,9 +459,9 @@ function( vulkan_hpp__setup_sample_static ) vulkan_hpp__setup_sample( NAME ${TARGET_NAME} FOLDER Samples - PCH + PCH_REUSE utils_static SOURCES ${TARGET_NAME}.cpp - LIBS ${Vulkan_LIBRARIES} ) + LIBS utils_static ) target_compile_definitions( ${TARGET_NAME} PUBLIC VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=0 ) endfunction() @@ -482,10 +482,10 @@ function( vulkan_hpp__setup_sample_dynamic ) vulkan_hpp__setup_sample( NAME ${TARGET_NAME} FOLDER Samples - PCH_REUSE utils + PCH_REUSE utils_dynamic HEADERS ${TARGET_HEADERS} SOURCES ${TARGET_SOURCES} - LIBS utils ) + LIBS utils_dynamic ) endfunction() function( vulkan_hpp__setup_sample_raii ) @@ -504,10 +504,10 @@ function( vulkan_hpp__setup_sample_raii ) vulkan_hpp__setup_sample( NAME RAII_${TARGET_NAME} FOLDER RAII_Samples - PCH_REUSE utils + PCH_REUSE utils_dynamic HEADERS ${TARGET_HEADERS} SOURCES ${TARGET_SOURCES} - LIBS utils ) + LIBS utils_dynamic ) endfunction() # set up CTest or add_subdirectory test diff --git a/RAII_Samples/utils/shaders.hpp b/RAII_Samples/utils/shaders.hpp index 38ba8aef7..2de61499d 100644 --- a/RAII_Samples/utils/shaders.hpp +++ b/RAII_Samples/utils/shaders.hpp @@ -1,3 +1,5 @@ +#pragma once + // Copyright(c) 2019, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/samples/utils/CMakeLists.txt b/samples/utils/CMakeLists.txt index e43eb1d26..c5e8e9cea 100644 --- a/samples/utils/CMakeLists.txt +++ b/samples/utils/CMakeLists.txt @@ -13,20 +13,35 @@ # limitations under the License. vulkan_hpp__setup_library( - NAME utils + NAME utils_static + HEADERS math.hpp shaders.hpp utils.hpp + SOURCES math.cpp shaders.cpp utils.cpp + FOLDER "Samples" ) + +vulkan_hpp__setup_library( + NAME utils_dynamic HEADERS math.hpp shaders.hpp utils.hpp SOURCES math.cpp shaders.cpp utils.cpp FOLDER "Samples" ) if( VULKAN_HPP_RUN_GENERATOR ) - add_dependencies( utils build_vulkan_hpp ) + add_dependencies( utils_static build_vulkan_hpp ) + add_dependencies( utils_dynamic build_vulkan_hpp ) endif() -target_link_libraries( utils PUBLIC glm::glm ) -target_link_libraries( utils PUBLIC glfw ) -target_link_libraries( utils PUBLIC glslang::glslang ) -target_link_libraries( utils PUBLIC glslang::glslang-default-resource-limits ) -target_link_libraries( utils PUBLIC glslang::SPIRV ) -target_compile_definitions( utils PUBLIC VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1 ) +target_link_libraries( utils_static PUBLIC glfw ) +target_link_libraries( utils_static PUBLIC glm::glm ) +target_link_libraries( utils_static PUBLIC glslang::glslang ) +target_link_libraries( utils_static PUBLIC glslang::glslang-default-resource-limits ) +target_link_libraries( utils_static PUBLIC glslang::SPIRV ) +target_compile_definitions( utils_static PUBLIC VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=0 ) +target_precompile_headers( utils_static PRIVATE "pch.hpp" ) + +target_link_libraries( utils_dynamic PUBLIC glfw ) +target_link_libraries( utils_dynamic PUBLIC glm::glm ) +target_link_libraries( utils_dynamic PUBLIC glslang::glslang ) +target_link_libraries( utils_dynamic PUBLIC glslang::glslang-default-resource-limits ) +target_link_libraries( utils_dynamic PUBLIC glslang::SPIRV ) +target_compile_definitions( utils_dynamic PUBLIC VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1 ) +target_precompile_headers( utils_dynamic PRIVATE "pch.hpp" ) -target_precompile_headers( utils PRIVATE ) diff --git a/samples/utils/geometries.hpp b/samples/utils/geometries.hpp index dcafd3d62..e05247680 100644 --- a/samples/utils/geometries.hpp +++ b/samples/utils/geometries.hpp @@ -1,3 +1,5 @@ +#pragma once + // Copyright(c) 2019, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/samples/utils/math.hpp b/samples/utils/math.hpp index 37287aa97..16748b70e 100644 --- a/samples/utils/math.hpp +++ b/samples/utils/math.hpp @@ -1,3 +1,5 @@ +#pragma once + // Copyright(c) 2019, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/samples/utils/pch.hpp b/samples/utils/pch.hpp new file mode 100644 index 000000000..fd34d56a8 --- /dev/null +++ b/samples/utils/pch.hpp @@ -0,0 +1,26 @@ +#include +#include + +#include +#include +#include +#define GLM_ENABLE_EXPERIMENTAL +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "math.hpp" +#include "utils.hpp" +#include "shaders.hpp" +#include "geometries.hpp" \ No newline at end of file diff --git a/samples/utils/shaders.hpp b/samples/utils/shaders.hpp index 59894358a..a872e9a18 100644 --- a/samples/utils/shaders.hpp +++ b/samples/utils/shaders.hpp @@ -1,3 +1,5 @@ +#pragma once + // Copyright(c) 2019, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); From f2b6d43ae9a6715bda6350fe87cd113a4d55c460 Mon Sep 17 00:00:00 2001 From: Jan Kuhlmann <33833587+M2-TE@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:43:50 +0100 Subject: [PATCH 2/6] update ci to also precompile headers --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 05309a8f0..5f488e5b5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -106,7 +106,7 @@ jobs: -D VULKAN_HPP_TESTS_CTEST=ON \ -D VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=ON \ -D VULKAN_HPP_BUILD_WITH_LOCAL_VULKAN_HPP=ON \ - -D VULKAN_HPP_PRECOMPILE=OFF \ + -D VULKAN_HPP_PRECOMPILE=ON \ -D CMAKE_CXX_STANDARD=${{matrix.env.cxx_max}} \ -D CMAKE_BUILD_TYPE=$BUILD_TYPE cmake --build build --parallel --config $BUILD_TYPE --clean-first @@ -146,7 +146,7 @@ jobs: -D VULKAN_HPP_TESTS_CTEST=ON \ -D VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=ON \ -D VULKAN_HPP_BUILD_WITH_LOCAL_VULKAN_HPP=ON \ - -D VULKAN_HPP_PRECOMPILE=OFF \ + -D VULKAN_HPP_PRECOMPILE=ON \ -D CMAKE_CXX_STANDARD=$CXX_STANDARD \ -D CMAKE_BUILD_TYPE=$BUILD_TYPE cmake --build build --parallel --config $BUILD_TYPE --clean-first From d7e8db76827d9424bb4aa288c2d6d1071a86db7f Mon Sep 17 00:00:00 2001 From: Jan Kuhlmann <33833587+M2-TE@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:15:04 +0100 Subject: [PATCH 3/6] fixed duplicate vulkan target linkage --- CMakeLists.txt | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bb99b5168..837ec9fc3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -264,7 +264,7 @@ function( vulkan_hpp__setup_vulkan_targets ) target_include_directories( VulkanHpp INTERFACE "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Vulkan-Headers/include" ) else() find_package( Vulkan REQUIRED ) - target_include_directories( ${TARGET_NAME} PUBLIC "${Vulkan_INCLUDE_DIRS}" ) + target_include_directories( VulkanHpp INTERFACE "${Vulkan_INCLUDE_DIRS}" ) endif() if( VULKAN_HPP_RUN_GENERATOR ) add_dependencies( VulkanHpp build_vulkan_hpp build_video_hpp ) @@ -401,8 +401,18 @@ function( vulkan_hpp__setup_library ) endif() vulkan_hpp__setup_platform( NAME ${TARGET_NAME} ) vulkan_hpp__setup_warning_level( NAME ${TARGET_NAME} ) - target_link_libraries( ${TARGET_NAME} PUBLIC Vulkan::Hpp ) set_target_properties( ${TARGET_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON ) + vulkan_hpp__setup_platform( NAME ${TARGET_NAME} ) + vulkan_hpp__setup_warning_level( NAME ${TARGET_NAME} ) + if( VULKAN_HPP_BUILD_WITH_LOCAL_VULKAN_HPP ) + # Vulkan C headers + target_include_directories( ${TARGET_NAME} PUBLIC "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Vulkan-Headers/include" ) + # Vulkan C++ headers + target_include_directories( ${TARGET_NAME} PUBLIC "${CMAKE_CURRENT_FUNCTION_LIST_DIR}" ) + else() + find_package( Vulkan REQUIRED ) + target_include_directories( ${TARGET_NAME} PUBLIC "${Vulkan_INCLUDE_DIRS}" ) + endif() endif() set_target_properties( ${TARGET_NAME} PROPERTIES FOLDER ${TARGET_FOLDER} ) endfunction() @@ -413,18 +423,10 @@ function( vulkan_hpp__setup_sample ) set( multiValueArgs HEADERS LIBS PCH SOURCES ) cmake_parse_arguments( TARGET "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) - if( NOT VULKAN_HPP_BUILD_WITH_LOCAL_VULKAN_HPP ) - find_package( Vulkan REQUIRED ) - endif() - vulkan_hpp__setup_project( NAME ${TARGET_NAME} ) - add_executable( ${TARGET_NAME} ${TARGET_HEADERS} ${TARGET_SOURCES} ) - vulkan_hpp__setup_platform( NAME ${TARGET_NAME} ) vulkan_hpp__setup_warning_level( NAME ${TARGET_NAME} ) - target_link_libraries( ${TARGET_NAME} PUBLIC Vulkan::Hpp ) - set_target_properties( ${TARGET_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON ) if( TARGET_FOLDER ) @@ -461,9 +463,7 @@ function( vulkan_hpp__setup_sample_static ) FOLDER Samples PCH_REUSE utils_static SOURCES ${TARGET_NAME}.cpp - LIBS utils_static ) - - target_compile_definitions( ${TARGET_NAME} PUBLIC VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=0 ) + LIBS utils_static ${Vulkan_LIBRARIES} ) endfunction() function( vulkan_hpp__setup_sample_dynamic ) From 361412ee25a8be365606ddce06bfb1f330ec4d17 Mon Sep 17 00:00:00 2001 From: Jan Kuhlmann <33833587+M2-TE@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:25:33 +0100 Subject: [PATCH 4/6] enable dynamic dispatcher for shared library test --- tests/DispatchLoaderDynamicSharedLibraryClient/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/DispatchLoaderDynamicSharedLibraryClient/CMakeLists.txt b/tests/DispatchLoaderDynamicSharedLibraryClient/CMakeLists.txt index 04b796298..b616a5052 100644 --- a/tests/DispatchLoaderDynamicSharedLibraryClient/CMakeLists.txt +++ b/tests/DispatchLoaderDynamicSharedLibraryClient/CMakeLists.txt @@ -23,7 +23,7 @@ vulkan_hpp__setup_library( NAME DispatchLoaderDynamicSharedLibrary SOURCES DispatchLoaderDynamicSharedLibrary.cpp FOLDER "Tests" ) -target_compile_definitions( DispatchLoaderDynamicSharedLibrary PUBLIC VULKAN_HPP_STORAGE_SHARED ) +target_compile_definitions( DispatchLoaderDynamicSharedLibrary PUBLIC VULKAN_HPP_STORAGE_SHARED VULKAN_HPP_DISPATCH_LOADER_DYNAMIC ) target_compile_definitions( DispatchLoaderDynamicSharedLibrary PRIVATE VULKAN_HPP_STORAGE_SHARED_EXPORT ) vulkan_hpp__setup_test_project() From ebb1062f95d642940d038027a55e79fcf33c9632 Mon Sep 17 00:00:00 2001 From: Jan Kuhlmann <33833587+M2-TE@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:42:14 +0100 Subject: [PATCH 5/6] use precompilation for build against spec --- .github/workflows/build-latest-spec.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-latest-spec.yml b/.github/workflows/build-latest-spec.yml index 5ee231bc8..0756ae4ce 100644 --- a/.github/workflows/build-latest-spec.yml +++ b/.github/workflows/build-latest-spec.yml @@ -37,7 +37,7 @@ jobs: -D VULKAN_HPP_TESTS_CTEST=ON \ -D VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=ON \ -D VULKAN_HPP_BUILD_WITH_LOCAL_VULKAN_HPP=ON \ - -D VULKAN_HPP_PRECOMPILE=OFF \ + -D VULKAN_HPP_PRECOMPILE=ON \ -D CMAKE_C_COMPILER=gcc \ -D CMAKE_CXX_COMPILER=g++ \ -D CMAKE_CXX_STANDARD=23 \ From d2766934dd8c856627e5b184ae0a0d9b40763a43 Mon Sep 17 00:00:00 2001 From: Jan Kuhlmann <33833587+M2-TE@users.noreply.github.com> Date: Thu, 15 Jan 2026 10:29:25 +0100 Subject: [PATCH 6/6] removed spurious setup calls --- CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 837ec9fc3..ae370d847 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -402,8 +402,6 @@ function( vulkan_hpp__setup_library ) vulkan_hpp__setup_platform( NAME ${TARGET_NAME} ) vulkan_hpp__setup_warning_level( NAME ${TARGET_NAME} ) set_target_properties( ${TARGET_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON ) - vulkan_hpp__setup_platform( NAME ${TARGET_NAME} ) - vulkan_hpp__setup_warning_level( NAME ${TARGET_NAME} ) if( VULKAN_HPP_BUILD_WITH_LOCAL_VULKAN_HPP ) # Vulkan C headers target_include_directories( ${TARGET_NAME} PUBLIC "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Vulkan-Headers/include" )