CMAKE_MINIMUM_REQUIRED(VERSION 3.13) OPTION(VKH_USE_VMA "enable Vulkan Memory Allocator" ON) SET(LANG "C") SET(CMAKE_${LANG}_STANDARD 11) #set(CMAKE_C_VISIBILITY_PRESET hidden) #set(CMAKE_CXX_VISIBILITY_PRESET hidden) #set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) PROJECT(vkh VERSION 0.1.0 DESCRIPTION "Vulkan helpers library" LANGUAGES C CXX) SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") IF(NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE Release) ENDIF() IF (CYGWIN) SET (CMAKE_FIND_LIBRARY_PREFIXES "") SET (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".LIB" ".dll" ".DLL") ENDIF() if (CMAKE_BUILD_TYPE STREQUAL "Debug") ADD_DEFINITIONS (-DDEBUG) OPTION(ENABLE_VALIDATION "enable vulkan validation layer" ON) IF (UNIX) ADD_COMPILE_OPTIONS(-Wall -Wno-extra -Wno-unknown-pragmas) ELSEIF (MSVC) ADD_COMPILE_OPTIONS(/W4 /wd4204 /wd4221 /wd4100) ENDIF() ELSE() UNSET(ENABLE_VALIDATION CACHE) IF (UNIX) IF (CMAKE_C_COMPILER_ID STREQUAL "GNU") ADD_COMPILE_OPTIONS(-flto) ENDIF() IF (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") ADD_COMPILE_OPTIONS(-flto) ENDIF() ELSEIF(MSVC) ADD_COMPILE_OPTIONS(/W0) IF (${LANG} EQUAL "C" AND MSVC) ADD_COMPILE_OPTIONS(/TC) ENDIF () ENDIF() ENDIF() IF (ENABLE_VALIDATION) ADD_DEFINITIONS (-DVKH_USE_VALIDATION) ENDIF () FIND_PACKAGE(Vulkan REQUIRED) FIND_PACKAGE(Threads REQUIRED) INCLUDE(GNUInstallDirs) FILE(GLOB VKH_SRC src/*.c src/deps/*.c) CONFIGURE_FILE(vkh.pc.in vkh.pc @ONLY) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/vkh.pc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig) GET_DIRECTORY_PROPERTY (vkh_has_root_project PARENT_DIRECTORY) if (VKH_USE_VMA) ADD_DEFINITIONS (-DVKH_USE_VMA) SET(VKH_USE_VMA ON PARENT_SCOPE) ADD_LIBRARY(VMA STATIC src/vma/VmaUsage.cpp) SET_TARGET_PROPERTIES( VMA PROPERTIES LINKER_LANGUAGE CXX CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON POSITION_INDEPENDENT_CODE "${BUILD_SHARED_LIBS}" ) TARGET_INCLUDE_DIRECTORIES(VMA PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/vma ${Vulkan_INCLUDE_DIRS} ) ENDIF() ADD_LIBRARY("${PROJECT_NAME}" ${VKH_SRC}) target_compile_features("${PROJECT_NAME}" PRIVATE c_std_11) SET_TARGET_PROPERTIES("${PROJECT_NAME}" PROPERTIES OUTPUT_NAME ${PROJECT_NAME} VERSION ${PROJECT_VERSION} SOVERSION 1 C_STANDARD 11 C_EXTENSIONS OFF PUBLIC_HEADER include/vkh.h POSITION_INDEPENDENT_CODE "${BUILD_SHARED_LIBS}" ) TARGET_INCLUDE_DIRECTORIES("${PROJECT_NAME}" PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${Vulkan_INCLUDE_DIRS} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ) if (VKH_USE_VMA) TARGET_LINK_LIBRARIES("${PROJECT_NAME}" PRIVATE VMA ) ENDIF() TARGET_LINK_LIBRARIES("${PROJECT_NAME}" PRIVATE ${Vulkan_LIBRARIES} Threads::Threads ) INSTALL(TARGETS "${PROJECT_NAME}" LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})