CMAKE_MINIMUM_REQUIRED(VERSION 3.9) PROJECT(vke VERSION 0.1.0 DESCRIPTION "Vulkan Engine") SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") SET(CMAKE_CXX_FLAGS "-W -Wall") SET(CMAKE_EXE_LINKER_FLAGS "-lm") IF(NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE Debug) ENDIF() if (CMAKE_BUILD_TYPE STREQUAL "Debug") ADD_DEFINITIONS (-DDEBUG) OPTION(ENABLE_VALIDATION "enable vulkan validation layer" ON) ELSE() OPTION(ENABLE_VALIDATION "enable vulkan validation layer" OFF) ENDIF() if (NOT VULKAN_SDK) set(VULKAN_SDK "$ENV{VULKAN_SDK}" CACHE STRING "LunarG Vulkan SDK path") if (VULKAN_SDK) set(ENV{VULKAN_SDK} ${VULKAN_SDK}) SET(ENV{VK_LAYER_PATH} "${VULKAN_SDK}/etc/explicit_layer.d") endif () endif () MESSAGE(STATUS "VULKAN_SDK = $ENV{VULKAN_SDK}") MESSAGE(STATUS "VK_LAYER_PATH = $ENV{VK_LAYER_PATH}") include_directories(external/glm) include_directories(external/gli) include_directories(external/glfw) if (NOT TARGET vkh_static) add_subdirectory (external/vkh) endif() FIND_PACKAGE(Vulkan REQUIRED) #FIND_PACKAGE(GLFW3) if(ANDROID) file(GLOB glslc-folders ${ANDROID_NDK}/shader-tools/*) else() file(GLOB glslc-folders ${VULKAN_SDK}/bin) endif() FIND_PROGRAM(GLSLC glslc HINTS ${glslc-folders}) file(GLOB_RECURSE DATAS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "data/*") FOREACH(DATA_FILE ${DATAS}) GET_FILENAME_COMPONENT(copy-dest-dir ${CMAKE_CURRENT_BINARY_DIR}/${DATA_FILE} DIRECTORY) SET(copy-output ${CMAKE_CURRENT_BINARY_DIR}/${DATA_FILE}) ADD_CUSTOM_COMMAND( OUTPUT ${copy-output} COMMAND ${CMAKE_COMMAND} -E make_directory ${copy-dest-dir} COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${DATA_FILE}" "${copy-output}" COMMENT "Copying ${DATA_FILE} to ${copy-output}" DEPENDS ${DATA_FILE} VERBATIM ) ENDFOREACH() add_custom_target(DataCopy ALL DEPENDS ${DATAS}) IF (NOT GLSLC) message(FATAL_ERROR "Could not find glslc executable") ENDIF() if(GLSLC) SET(SHADER_DIR "shaders") SET(SHADER_FILES ${SHADER_DIR}/*.frag ${SHADER_DIR}/*.vert ${SHADER_DIR}/*.geom ${SHADER_DIR}/*.comp) FILE(GLOB_RECURSE SHADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${SHADER_FILES}) FOREACH(SHADER ${SHADERS}) SET(shader-input ${CMAKE_CURRENT_SOURCE_DIR}/${SHADER}) SET(shader-output ${CMAKE_CURRENT_BINARY_DIR}/${SHADER}.spv) ADD_CUSTOM_COMMAND ( OUTPUT ${shader-output} COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/${SHADER_DIR}" COMMAND ${GLSLC} ${shader-input} -o ${shader-output} COMMENT "Compiling ${shader-input}" DEPENDS ${SHADER} VERBATIM ) SET(SHADER_OUTPUTS ${SHADER_OUTPUTS} ${shader-output}) ENDFOREACH() ADD_CUSTOM_TARGET("${PROJECT_NAME}_BuildShaderHeader" ALL DEPENDS ${SHADER_OUTPUTS}) endif() FILE(GLOB SOURCES "src/*.cpp") INCLUDE(GNUInstallDirs) #CONFIGURE_FILE(vkh.pc.in vkh.pc @ONLY) #INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/vkh.pc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig) FUNCTION (setup_lib LibName) SET_TARGET_PROPERTIES(${LibName} PROPERTIES OUTPUT_NAME ${PROJECT_NAME} VERSION ${PROJECT_VERSION} SOVERSION 1 PUBLIC_HEADER include/vke.h ) TARGET_INCLUDE_DIRECTORIES(${LibName} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src ${Vulkan_INCLUDE_DIRS} ) TARGET_LINK_LIBRARIES(${LibName} ${Vulkan_LIBRARIES} vkh_static #${GLFW3_LIBRARY} ) INSTALL(TARGETS ${LibName} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) ENDFUNCTION () ADD_LIBRARY("${PROJECT_NAME}_static" STATIC ${SOURCES}) SET_PROPERTY(TARGET "${PROJECT_NAME}_static" PROPERTY POSITION_INDEPENDENT_CODE OFF) setup_lib ("${PROJECT_NAME}_static") ADD_LIBRARY("${PROJECT_NAME}_shared" SHARED ${SOURCES}) SET_PROPERTY(TARGET "${PROJECT_NAME}_static" PROPERTY POSITION_INDEPENDENT_CODE ON) setup_lib ("${PROJECT_NAME}_shared") ADD_EXECUTABLE(${PROJECT_NAME}_test "tests/test1.cpp" ${SHADERS}) TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME}_test PRIVATE #${BULLET_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src ) TARGET_LINK_LIBRARIES(${PROJECT_NAME}_test vke_static vkvg #{BULLET_LIBRARIES} )