2016-02-16 15:07:25 +01:00
|
|
|
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
|
|
|
|
|
cmake_policy(VERSION 2.8)
|
2016-02-16 19:33:57 +02:00
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
|
2016-02-16 15:07:25 +01:00
|
|
|
|
2016-02-18 17:35:55 +00:00
|
|
|
set(NAME vulkanExamples)
|
2016-02-16 15:07:25 +01:00
|
|
|
|
|
|
|
|
project(${NAME})
|
|
|
|
|
|
|
|
|
|
include_directories(external)
|
|
|
|
|
include_directories(external/glm)
|
|
|
|
|
include_directories(external/gli)
|
|
|
|
|
include_directories(external/assimp)
|
2017-04-22 11:50:13 +02:00
|
|
|
include_directories(external/imgui)
|
2016-02-16 15:07:25 +01:00
|
|
|
include_directories(base)
|
|
|
|
|
|
2016-11-04 15:40:22 -07:00
|
|
|
OPTION(USE_D2D_WSI "Build the project using Direct to Display swapchain" OFF)
|
2017-02-02 08:54:56 +00:00
|
|
|
OPTION(USE_WAYLAND_WSI "Build the project using Wayland swapchain" OFF)
|
2016-11-04 13:32:58 -07:00
|
|
|
|
2017-07-03 14:49:18 +03:00
|
|
|
set(RESOURCE_INSTALL_DIR "" CACHE PATH "Path to install resources to (leave empty for running uninstalled)")
|
|
|
|
|
|
2016-11-12 13:33:21 +01:00
|
|
|
# Use FindVulkan module added with CMAKE 3.7
|
|
|
|
|
if (NOT CMAKE_VERSION VERSION_LESS 3.7.0)
|
|
|
|
|
message(STATUS "Using module to find Vulkan")
|
2017-01-08 01:44:31 -08:00
|
|
|
find_package(Vulkan)
|
2016-11-12 13:33:21 +01:00
|
|
|
endif()
|
|
|
|
|
|
2016-02-16 15:07:25 +01:00
|
|
|
IF(WIN32)
|
2016-11-12 13:33:21 +01:00
|
|
|
IF (NOT Vulkan_FOUND)
|
|
|
|
|
find_library(Vulkan_LIBRARY NAMES vulkan-1 vulkan PATHS ${CMAKE_SOURCE_DIR}/libs/vulkan)
|
|
|
|
|
IF (Vulkan_LIBRARY)
|
|
|
|
|
set(Vulkan_FOUND ON)
|
2017-01-08 01:44:31 -08:00
|
|
|
MESSAGE("Using bundled Vulkan library version")
|
2016-11-12 13:33:21 +01:00
|
|
|
ENDIF()
|
|
|
|
|
ENDIF()
|
2016-03-14 10:56:29 -07:00
|
|
|
find_library(ASSIMP_LIBRARIES NAMES assimp libassimp.dll.a PATHS ${CMAKE_SOURCE_DIR}/libs/assimp)
|
2016-02-16 15:07:25 +01:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_WIN32_KHR")
|
|
|
|
|
ELSE(WIN32)
|
2016-11-12 13:33:21 +01:00
|
|
|
IF (NOT Vulkan_FOUND)
|
|
|
|
|
find_library(Vulkan_LIBRARY NAMES vulkan HINTS "$ENV{VULKAN_SDK}/lib" "${CMAKE_SOURCE_DIR}/libs/vulkan" REQUIRED)
|
|
|
|
|
IF (Vulkan_LIBRARY)
|
|
|
|
|
set(Vulkan_FOUND ON)
|
2017-01-08 01:44:31 -08:00
|
|
|
MESSAGE("Using bundled Vulkan library version")
|
2016-11-12 13:33:21 +01:00
|
|
|
ENDIF()
|
|
|
|
|
ENDIF()
|
2016-03-16 15:02:12 -07:00
|
|
|
find_package(ASSIMP REQUIRED)
|
2016-04-03 11:05:12 +02:00
|
|
|
find_package(Threads REQUIRED)
|
2016-11-04 13:32:58 -07:00
|
|
|
IF(USE_D2D_WSI)
|
2016-11-04 15:40:22 -07:00
|
|
|
MESSAGE("Using direct to display extension...")
|
|
|
|
|
add_definitions(-D_DIRECT2DISPLAY)
|
2017-02-02 08:54:56 +00:00
|
|
|
ELSEIF(USE_WAYLAND_WSI)
|
|
|
|
|
find_package(Wayland REQUIRED)
|
|
|
|
|
if (NOT WAYLAND_FOUND)
|
|
|
|
|
message(FATAL_ERROR "Wayland development package not found")
|
|
|
|
|
endif ()
|
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_WAYLAND_KHR")
|
|
|
|
|
include_directories(${WAYLAND_INCLUDE_DIR})
|
2016-11-04 13:32:58 -07:00
|
|
|
ELSE(USE_D2D_WSI)
|
2016-11-12 13:33:21 +01:00
|
|
|
find_package(XCB REQUIRED)
|
2016-02-16 15:07:25 +01:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_XCB_KHR")
|
2016-11-04 13:32:58 -07:00
|
|
|
ENDIF(USE_D2D_WSI)
|
2016-02-16 15:07:25 +01:00
|
|
|
# Todo : android?
|
|
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
2016-11-12 13:33:21 +01:00
|
|
|
IF (NOT Vulkan_FOUND)
|
|
|
|
|
message(FATAL_ERROR "Could not find Vulkan library!")
|
|
|
|
|
ELSE()
|
|
|
|
|
message(STATUS ${Vulkan_LIBRARY})
|
|
|
|
|
ENDIF()
|
2016-02-16 15:07:25 +01:00
|
|
|
|
|
|
|
|
# Set preprocessor defines
|
2016-03-21 23:59:42 +00:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOMINMAX -D_USE_MATH_DEFINES")
|
2016-02-16 15:07:25 +01:00
|
|
|
|
2017-01-09 20:23:30 +01:00
|
|
|
# Clang specific stuff
|
|
|
|
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-switch-enum")
|
|
|
|
|
endif()
|
|
|
|
|
|
2016-03-22 00:06:50 +00:00
|
|
|
|
2016-02-16 15:07:25 +01:00
|
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
2016-09-20 21:04:16 +02:00
|
|
|
add_definitions(-std=c++11)
|
2016-02-16 15:07:25 +01:00
|
|
|
|
2017-08-17 20:40:52 +02:00
|
|
|
file(GLOB SOURCE *.cpp )
|
2016-02-16 15:07:25 +01:00
|
|
|
|
|
|
|
|
# Function for building single example
|
|
|
|
|
function(buildExample EXAMPLE_NAME)
|
2017-07-01 13:28:31 +02:00
|
|
|
# Main
|
2017-08-17 20:40:52 +02:00
|
|
|
file(GLOB SOURCE *.cpp ${BASE_HEADERS} ${EXAMPLE_NAME}/*.cpp)
|
2017-04-22 11:50:13 +02:00
|
|
|
SET(MAIN_CPP ${EXAMPLE_NAME}/${EXAMPLE_NAME}.cpp)
|
|
|
|
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${EXAMPLE_NAME}/main.cpp)
|
|
|
|
|
SET(MAIN_CPP ${EXAMPLE_NAME}/main.cpp)
|
|
|
|
|
ENDIF()
|
|
|
|
|
# imgui example requires additional source files
|
|
|
|
|
IF(${EXAMPLE_NAME} STREQUAL "imgui")
|
|
|
|
|
file(GLOB ADD_SOURCE external/imgui/*.cpp)
|
|
|
|
|
SET(SOURCE ${SOURCE} ${ADD_SOURCE})
|
|
|
|
|
ENDIF()
|
2017-07-01 13:28:31 +02:00
|
|
|
# Add shaders
|
|
|
|
|
set(SHADER_DIR data/shaders/${EXAMPLE_NAME})
|
|
|
|
|
file(GLOB SHADERS "${SHADER_DIR}/*.vert" "${SHADER_DIR}/*.frag" "${SHADER_DIR}/*.geom" "${SHADER_DIR}/*.tesc" "${SHADER_DIR}/*.tese")
|
|
|
|
|
source_group("Shaders" FILES ${SHADERS})
|
2017-08-17 20:40:52 +02:00
|
|
|
if(WIN32)
|
2017-07-01 13:28:31 +02:00
|
|
|
add_executable(${EXAMPLE_NAME} WIN32 ${MAIN_CPP} ${SOURCE} ${SHADERS})
|
2017-08-17 20:40:52 +02:00
|
|
|
target_link_libraries(${EXAMPLE_NAME} base ${Vulkan_LIBRARY} ${ASSIMP_LIBRARIES} ${WINLIBS})
|
2016-02-16 15:07:25 +01:00
|
|
|
else(WIN32)
|
2017-07-01 13:28:31 +02:00
|
|
|
add_executable(${EXAMPLE_NAME} ${MAIN_CPP} ${SOURCE} ${SHADERS})
|
2017-08-17 20:40:52 +02:00
|
|
|
target_link_libraries(${EXAMPLE_NAME} base )
|
2016-02-16 15:07:25 +01:00
|
|
|
endif(WIN32)
|
2017-07-03 14:49:18 +03:00
|
|
|
|
|
|
|
|
if(RESOURCE_INSTALL_DIR)
|
|
|
|
|
install(TARGETS ${EXAMPLE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
endif()
|
2016-02-16 15:07:25 +01:00
|
|
|
endfunction(buildExample)
|
|
|
|
|
|
|
|
|
|
# Build all examples
|
|
|
|
|
function(buildExamples)
|
|
|
|
|
foreach(EXAMPLE ${EXAMPLES})
|
|
|
|
|
buildExample(${EXAMPLE})
|
2016-07-19 20:41:29 +02:00
|
|
|
endforeach(EXAMPLE)
|
2016-02-16 15:07:25 +01:00
|
|
|
endfunction(buildExamples)
|
|
|
|
|
|
2017-07-03 14:49:18 +03:00
|
|
|
if(RESOURCE_INSTALL_DIR)
|
|
|
|
|
add_definitions(-DVK_EXAMPLE_DATA_DIR=\"${RESOURCE_INSTALL_DIR}/\")
|
|
|
|
|
install(DIRECTORY data/ DESTINATION ${RESOURCE_INSTALL_DIR}/)
|
|
|
|
|
else()
|
|
|
|
|
add_definitions(-DVK_EXAMPLE_DATA_DIR=\"${CMAKE_SOURCE_DIR}/data/\")
|
|
|
|
|
endif()
|
|
|
|
|
|
2016-02-16 15:07:25 +01:00
|
|
|
# Compiler specific stuff
|
|
|
|
|
IF(MSVC)
|
2016-07-19 20:41:29 +02:00
|
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
2016-02-16 15:07:25 +01:00
|
|
|
ENDIF(MSVC)
|
|
|
|
|
|
|
|
|
|
IF(WIN32)
|
|
|
|
|
# Nothing here (yet)
|
|
|
|
|
ELSE(WIN32)
|
2017-08-17 20:40:52 +02:00
|
|
|
link_libraries(${XCB_LIBRARIES} ${Vulkan_LIBRARY} ${Vulkan_LIBRARY} ${ASSIMP_LIBRARIES} ${WAYLAND_CLIENT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
2016-02-16 15:07:25 +01:00
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
2017-07-03 14:49:18 +03:00
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/")
|
2016-02-16 15:07:25 +01:00
|
|
|
|
2017-08-17 20:40:52 +02:00
|
|
|
add_subdirectory(base)
|
2017-11-12 19:32:09 +01:00
|
|
|
add_subdirectory(examples)
|