cmake_minimum_required(VERSION 3.5) cmake_policy(PUSH) cmake_policy(SET CMP0048 NEW) # project(... VERSION ...) support project(volk VERSION # VOLK_GENERATE_VERSION 279 # VOLK_GENERATE_VERSION LANGUAGES C ) # CMake 3.12 changes the default behaviour of option() to leave local variables # unchanged if they exist (which we want), but we must work with older CMake versions. if(NOT DEFINED VOLK_STATIC_DEFINES) option(VOLK_STATIC_DEFINES "Additional defines for building the volk static library, e.g. Vulkan platform defines" "") endif() if(NOT DEFINED VOLK_PULL_IN_VULKAN) option(VOLK_PULL_IN_VULKAN "Vulkan as a transitive dependency" ON) endif() if(NOT DEFINED VOLK_INSTALL) option(VOLK_INSTALL "Create installation targets" OFF) endif() if(NOT DEFINED VOLK_HEADERS_ONLY) option(VOLK_HEADERS_ONLY "Add interface library only" OFF) endif() if(NOT DEFINED VULKAN_HEADERS_INSTALL_DIR) option(VULKAN_HEADERS_INSTALL_DIR "Where to get the Vulkan headers" "") endif() # ----------------------------------------------------- # Static library if(NOT VOLK_HEADERS_ONLY OR VOLK_INSTALL) add_library(volk STATIC volk.h volk.c) add_library(volk::volk ALIAS volk) target_include_directories(volk PUBLIC $ $ ) if(VOLK_STATIC_DEFINES) target_compile_definitions(volk PUBLIC ${VOLK_STATIC_DEFINES}) endif() if (NOT WIN32) target_link_libraries(volk PUBLIC ${CMAKE_DL_LIBS}) endif() endif() # ----------------------------------------------------- # Interface library add_library(volk_headers INTERFACE) add_library(volk::volk_headers ALIAS volk_headers) target_include_directories(volk_headers INTERFACE $ $ ) if (NOT WIN32) target_link_libraries(volk_headers INTERFACE ${CMAKE_DL_LIBS}) endif() # ----------------------------------------------------- # Vulkan transitive dependency if(VOLK_PULL_IN_VULKAN) # If CMake has the FindVulkan module and it works, use it. find_package(Vulkan QUIET) # Try an explicit CMake variable first, then any Vulkan paths # discovered by FindVulkan.cmake, then the $VULKAN_SDK environment # variable if nothing else works. if(VULKAN_HEADERS_INSTALL_DIR) message("volk: using VULKAN_HEADERS_INSTALL_DIR option") set(VOLK_INCLUDES "${VULKAN_HEADERS_INSTALL_DIR}/include") elseif(Vulkan_INCLUDE_DIRS) message("volk: using Vulkan_INCLUDE_DIRS from FindVulkan module") set(VOLK_INCLUDES "${Vulkan_INCLUDE_DIRS}") elseif(DEFINED ENV{VULKAN_SDK}) message("volk: using VULKAN_SDK environment variable") set(VOLK_INCLUDES "$ENV{VULKAN_SDK}/include") endif() if(VOLK_INCLUDES) if(TARGET volk) target_include_directories(volk PUBLIC "${VOLK_INCLUDES}") endif() target_include_directories(volk_headers INTERFACE "${VOLK_INCLUDES}") endif() endif() # ----------------------------------------------------- # Installation if(VOLK_INSTALL) include(GNUInstallDirs) set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/volk) # Install files install(FILES volk.h volk.c DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) # Install library target and add it and any dependencies to export set. install(TARGETS volk volk_headers EXPORT volk-targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) # Actually write exported config w/ imported targets install(EXPORT volk-targets FILE volkTargets.cmake NAMESPACE volk:: DESTINATION ${INSTALL_CONFIGDIR} ) # Create a ConfigVersion.cmake file: include(CMakePackageConfigHelpers) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/volkConfigVersion.cmake COMPATIBILITY AnyNewerVersion ) # Configure config file configure_package_config_file(${CMAKE_CURRENT_LIST_DIR}/cmake/volkConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/volkConfig.cmake INSTALL_DESTINATION ${INSTALL_CONFIGDIR} ) # Install the fully generated config and configVersion files install(FILES ${CMAKE_CURRENT_BINARY_DIR}/volkConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/volkConfigVersion.cmake DESTINATION ${INSTALL_CONFIGDIR} ) endif() cmake_policy(POP)