cmake_minimum_required(VERSION 3.15 FATAL_ERROR) project(VulkanBootstrap LANGUAGES CXX DESCRIPTION "A Vulkan utility library to ease the initialization steps in Vulkan") option(VK_BOOTSTRAP_DISABLE_WARNINGS "Disable warnings during compilation" OFF) option(VK_BOOTSTRAP_WERROR "Enable warnings as errors during compilation" OFF) add_library(vk-bootstrap-vulkan-headers INTERFACE) set(VK_BOOTSTRAP_VULKAN_HEADER_DIR "" CACHE STRING "Specify the location of the Vulkan-Headers include directory.") mark_as_advanced(VK_BOOTSTRAP_VULKAN_HEADER_DIR) include(gen/CurrentBuildVulkanVersion.cmake) if(NOT "${VK_BOOTSTRAP_VULKAN_HEADER_DIR}" STREQUAL "") target_include_directories(vk-bootstrap-vulkan-headers INTERFACE $) else () find_package(Vulkan QUIET) if(${Vulkan_INCLUDE_DIR} STREQUAL "Vulkan_INCLUDE_DIR-NOTFOUND") include(FetchContent) FetchContent_Declare( VulkanHeaders GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-Headers GIT_TAG ${VK_BOOTSTRAP_SOURCE_HEADER_VERSION_GIT_TAG} ) FetchContent_MakeAvailable(VulkanHeaders) target_link_libraries(vk-bootstrap-vulkan-headers INTERFACE Vulkan::Headers) else() set_target_properties(vk-bootstrap-vulkan-headers PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Vulkan_INCLUDE_DIR}) endif() endif() add_library(vk-bootstrap STATIC src/VkBootstrap.h src/VkBootstrap.cpp src/VkBootstrapDispatch.h) add_library(vk-bootstrap::vk-bootstrap ALIAS vk-bootstrap) add_library(vk-bootstrap-compiler-warnings INTERFACE) # Determine whether we're compiling with clang++ string(FIND "${CMAKE_CXX_COMPILER}" "clang++" VK_BOOTSTRAP_COMPILER_CLANGPP) if(VK_BOOTSTRAP_COMPILER_CLANGPP GREATER -1) set(VK_BOOTSTRAP_COMPILER_CLANGPP 1) else() set(VK_BOOTSTRAP_COMPILER_CLANGPP 0) endif() if(NOT VK_BOOTSTRAP_DISABLE_WARNINGS) target_compile_options(vk-bootstrap-compiler-warnings INTERFACE $<$,$,${VK_BOOTSTRAP_COMPILER_CLANGPP}>: -Wall -Wextra -Wconversion -Wsign-conversion> $<$: /W4> ) if(VK_BOOTSTRAP_WERROR) target_compile_options(vk-bootstrap-compiler-warnings INTERFACE $<$,$,${VK_BOOTSTRAP_COMPILER_CLANGPP}>: -pedantic-errors> $<$: /WX> ) endif() endif() target_include_directories(vk-bootstrap PUBLIC $ $) target_link_libraries(vk-bootstrap PRIVATE vk-bootstrap-compiler-warnings vk-bootstrap-vulkan-headers ${CMAKE_DL_LIBS}) target_compile_features(vk-bootstrap PUBLIC cxx_std_17) include(GNUInstallDirs) install(FILES src/VkBootstrap.h src/VkBootstrapDispatch.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(TARGETS vk-bootstrap vk-bootstrap-compiler-warnings vk-bootstrap-vulkan-headers EXPORT vk-bootstrap-targets) # By default, we want to only build tests if this repo is built standalone, but still should be configurable by the user if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) set(VK_BOOTSTRAP_TEST_DEFAULT_VALUE ON) else() set(VK_BOOTSTRAP_TEST_DEFAULT_VALUE OFF) endif() option(VK_BOOTSTRAP_TEST "Test Vk-Bootstrap with glfw and Catch2" ${VK_BOOTSTRAP_TEST_DEFAULT_VALUE}) if(VK_BOOTSTRAP_TEST) enable_testing() add_subdirectory(ext) add_subdirectory(tests) add_subdirectory(example) endif ()