2022-04-30 20:35:25 +02:00
|
|
|
cmake_minimum_required(VERSION 3.7...3.23)
|
|
|
|
|
if(${CMAKE_VERSION} VERSION_LESS 3.12)
|
|
|
|
|
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
|
|
|
|
endif()
|
2021-03-31 12:18:16 +02:00
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
2020-02-05 20:58:58 +01:00
|
|
|
# Handle superbuild first
|
|
|
|
|
option (USE_SUPERBUILD "Whether or not a superbuild should be invoked" ON)
|
|
|
|
|
|
2021-11-05 00:01:12 +01:00
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
2022-11-15 12:19:11 +01:00
|
|
|
set(CMAKE_COMPILE_WARNING_AS_ERROR OFF)
|
2022-11-29 16:34:42 +01:00
|
|
|
set(CMAKE_INSTALL_MESSAGE LAZY)
|
2022-11-17 16:47:42 +01:00
|
|
|
set(BUILD_SHARED_LIBS OFF)
|
2023-08-26 15:19:12 +02:00
|
|
|
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
2021-11-05 00:01:12 +01:00
|
|
|
|
2020-02-25 00:44:40 +01:00
|
|
|
set(ENGINE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/src/Engine)
|
|
|
|
|
set(EXTERNAL_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/external)
|
2020-06-02 11:46:18 +02:00
|
|
|
|
2023-12-10 22:27:59 +01:00
|
|
|
set(CMAKE_TOOLCHAIN_FILE ${EXTERNAL_ROOT}/vcpkg/scripts/buildsystems/vcpkg.cmake)
|
|
|
|
|
|
|
|
|
|
set(CRCPP_ROOT ${EXTERNAL_ROOT}/CRCpp)
|
|
|
|
|
set(TTFPARSER_ROOT ${EXTERNAL_ROOT}/ttf-parser)
|
|
|
|
|
|
2021-12-02 13:00:03 +01:00
|
|
|
set(Boost_NO_WARN_NEW_VERSIONS 1)
|
2020-02-25 00:44:40 +01:00
|
|
|
|
2022-04-30 20:35:25 +02:00
|
|
|
project (Seele)
|
|
|
|
|
|
2023-10-09 15:12:07 +02:00
|
|
|
include(cmake/SuperBuild.cmake)
|
2020-02-05 20:58:58 +01:00
|
|
|
|
2023-04-09 16:39:53 +02:00
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
2021-11-18 12:48:21 +01:00
|
|
|
#Workaround for vs, because it places artifacts into an additional subfolder
|
2023-04-09 16:39:53 +02:00
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
|
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
|
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_CURRENT_SOURCE_DIR}/bin)
|
2021-11-18 12:48:21 +01:00
|
|
|
|
2020-02-05 20:58:58 +01:00
|
|
|
find_package(Vulkan REQUIRED)
|
2023-12-10 22:27:59 +01:00
|
|
|
find_package(assimp CONFIG REQUIRED)
|
|
|
|
|
find_package(Stb REQUIRED)
|
|
|
|
|
find_package(EnTT CONFIG REQUIRED)
|
|
|
|
|
find_package(FreeType CONFIG REQUIRED)
|
|
|
|
|
find_package(glfw3 CONFIG REQUIRED)
|
|
|
|
|
find_package(glm CONFIG REQUIRED)
|
|
|
|
|
find_package(Ktx CONFIG REQUIRED)
|
|
|
|
|
find_package(nlohmann_json CONFIG REQUIRED)
|
2020-02-05 20:58:58 +01:00
|
|
|
|
2023-10-09 15:12:07 +02:00
|
|
|
if(UNIX)
|
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
|
endif()
|
|
|
|
|
|
2020-03-17 02:41:33 +01:00
|
|
|
if(WIN32)
|
2022-11-22 22:11:37 +01:00
|
|
|
add_compile_definitions(USE_EXTENSIONS)
|
2020-03-17 02:41:33 +01:00
|
|
|
endif()
|
2022-11-15 12:19:11 +01:00
|
|
|
|
2023-08-26 15:19:12 +02:00
|
|
|
add_library(Engine SHARED "")
|
2023-01-29 18:58:59 +01:00
|
|
|
|
2022-11-22 22:11:37 +01:00
|
|
|
target_compile_definitions(Engine PRIVATE GLFW_WINDOWS)
|
|
|
|
|
target_include_directories(Engine PRIVATE src/Engine)
|
2022-04-30 20:35:25 +02:00
|
|
|
target_link_libraries(Engine PUBLIC Vulkan::Vulkan)
|
|
|
|
|
target_link_libraries(Engine PUBLIC EnTT::EnTT)
|
|
|
|
|
target_link_libraries(Engine PUBLIC glfw)
|
2023-12-10 22:27:59 +01:00
|
|
|
target_link_libraries(Engine PUBLIC glm::glm)
|
2022-04-30 20:35:25 +02:00
|
|
|
target_link_libraries(Engine PUBLIC freetype)
|
2023-12-10 22:27:59 +01:00
|
|
|
target_link_libraries(Engine PUBLIC assimp::assimp)
|
|
|
|
|
target_link_libraries(Engine PUBLIC KTX::ktx)
|
2022-04-30 20:35:25 +02:00
|
|
|
target_link_libraries(Engine PUBLIC nlohmann_json::nlohmann_json)
|
2022-11-22 22:11:37 +01:00
|
|
|
target_link_libraries(Engine PUBLIC crcpp)
|
2023-12-10 22:27:59 +01:00
|
|
|
target_link_libraries(Engine PUBLIC shader-slang)
|
2021-10-13 15:20:30 +02:00
|
|
|
if(UNIX)
|
2023-10-09 15:12:07 +02:00
|
|
|
target_link_libraries(Engine PUBLIC Threads::Threads)
|
|
|
|
|
target_link_libraries(Engine PUBLIC dl)
|
2021-10-13 15:20:30 +02:00
|
|
|
endif()
|
2022-11-22 22:11:37 +01:00
|
|
|
|
2023-01-29 18:58:59 +01:00
|
|
|
add_executable(Editor "")
|
|
|
|
|
target_link_libraries(Editor PRIVATE Engine)
|
|
|
|
|
target_include_directories(Editor PRIVATE src/Editor)
|
2023-12-10 22:27:59 +01:00
|
|
|
target_include_directories(Editor PRIVATE ${Stb_INCLUDE_DIR})
|
2023-02-24 22:09:07 +01:00
|
|
|
target_compile_definitions(Editor PRIVATE EDITOR=1)
|
2023-01-29 18:58:59 +01:00
|
|
|
|
2023-02-13 14:56:13 +01:00
|
|
|
add_executable(AssetViewer "")
|
|
|
|
|
target_link_libraries(AssetViewer PRIVATE Engine)
|
|
|
|
|
target_include_directories(AssetViewer PRIVATE src/AssetViewer)
|
|
|
|
|
|
2022-02-24 22:38:26 +01:00
|
|
|
target_precompile_headers(Engine
|
2022-09-24 21:06:25 +02:00
|
|
|
PUBLIC
|
2021-04-01 16:40:14 +02:00
|
|
|
<assert.h>
|
|
|
|
|
<atomic>
|
|
|
|
|
<condition_variable>
|
|
|
|
|
<coroutine>
|
|
|
|
|
<cstring>
|
|
|
|
|
<filesystem>
|
|
|
|
|
<functional>
|
|
|
|
|
<fstream>
|
|
|
|
|
<iostream>
|
|
|
|
|
<memory>
|
|
|
|
|
<mutex>
|
|
|
|
|
<string>
|
2022-11-22 22:11:37 +01:00
|
|
|
<thread>)
|
2022-11-15 12:19:11 +01:00
|
|
|
|
2020-04-12 15:47:19 +02:00
|
|
|
if(MSVC)
|
2022-11-22 22:11:37 +01:00
|
|
|
set(_CRT_SECURE_NO_WARNINGS)
|
2023-12-10 22:27:59 +01:00
|
|
|
target_compile_options(Engine PUBLIC /std:c++20 /Zi /MP14 /W4 /DEBUG /wd4505)
|
|
|
|
|
target_compile_options(Editor PUBLIC /std:c++20 /Zi /MP14 /W4 /DEBUG)
|
2022-11-29 16:34:42 +01:00
|
|
|
target_sources(Engine INTERFACE
|
2023-01-29 18:58:59 +01:00
|
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Seele.natvis>
|
2022-11-29 16:34:42 +01:00
|
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/Seele.natvis>
|
|
|
|
|
)
|
|
|
|
|
install(FILES
|
|
|
|
|
Seele.natvis
|
|
|
|
|
DESTINATION .)
|
2020-04-12 15:47:19 +02:00
|
|
|
else()
|
2023-11-06 14:47:21 +01:00
|
|
|
target_compile_options(Engine PUBLIC -g -Wall -Wextra -Wno-error -pedantic -std=c++20 -Wno-missing-field-initializers -Wno-unused-function)
|
|
|
|
|
target_compile_options(Editor PUBLIC -g -Wall -Wextra -Wno-error -pedantic -std=c++20)
|
2020-04-12 15:47:19 +02:00
|
|
|
endif()
|
2023-11-10 19:18:09 +01:00
|
|
|
target_compile_options(Engine PUBLIC "$<$<CONFIG:DEBUG>:-DENABLE_VALIDATION>")
|
|
|
|
|
target_compile_options(Engine PUBLIC "$<$<CONFIG:DEBUG>:-DSEELE_DEBUG>")
|
2020-04-12 15:47:19 +02:00
|
|
|
|
2022-11-15 12:19:11 +01:00
|
|
|
add_subdirectory(src/)
|
|
|
|
|
|
2023-11-06 14:47:21 +01:00
|
|
|
if(WIN32)
|
2023-11-07 16:55:13 +01:00
|
|
|
add_custom_target(dll_copy ALL
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_RUNTIME_DLLS:Engine> $<TARGET_FILE_DIR:Editor>
|
|
|
|
|
COMMAND_EXPAND_LISTS
|
2023-12-10 22:27:59 +01:00
|
|
|
DEPENDS Editor)
|
2023-11-07 16:55:13 +01:00
|
|
|
else()
|
|
|
|
|
add_custom_target(dll_copy ALL
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E true)
|
2023-11-06 14:47:21 +01:00
|
|
|
endif()
|
|
|
|
|
|
2022-02-24 22:38:26 +01:00
|
|
|
add_custom_target(SeeleEngine ALL
|
2022-11-22 22:11:37 +01:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/res $<TARGET_FILE_DIR:Engine>
|
|
|
|
|
COMMAND_EXPAND_LISTS
|
2023-12-10 22:27:59 +01:00
|
|
|
DEPENDS Editor dll_copy)
|
2021-10-19 23:04:38 +02:00
|
|
|
|
2022-11-22 22:11:37 +01:00
|
|
|
install(
|
2023-01-29 18:58:59 +01:00
|
|
|
TARGETS
|
2023-02-13 14:56:13 +01:00
|
|
|
AssetViewer
|
2023-01-29 18:58:59 +01:00
|
|
|
Editor
|
2022-11-22 22:11:37 +01:00
|
|
|
Engine
|
|
|
|
|
crcpp
|
|
|
|
|
EXPORT
|
|
|
|
|
EngineTargets
|
|
|
|
|
FILE_SET HEADERS
|
|
|
|
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
|
|
|
|
|
|
|
|
|
|
export(EXPORT EngineTargets
|
|
|
|
|
FILE "${CMAKE_BINARY_DIR}/EngineTargets.cmake"
|
|
|
|
|
NAMESPACE Seele::)
|
|
|
|
|
|
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
|
|
|
|
|
|
configure_package_config_file(cmake/EngineConfig.cmake.in
|
|
|
|
|
"SeeleConfig.cmake"
|
|
|
|
|
INSTALL_DESTINATION ${CMAKE_BINARY_DIR})
|
|
|
|
|
|
|
|
|
|
install(EXPORT EngineTargets
|
|
|
|
|
FILE
|
|
|
|
|
EngineTargets.cmake
|
|
|
|
|
NAMESPACE
|
|
|
|
|
Seele::
|
|
|
|
|
DESTINATION
|
|
|
|
|
${CMAKE_INSTALL_PREFIX}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
install(
|
|
|
|
|
FILES
|
|
|
|
|
${CMAKE_BINARY_DIR}/SeeleConfig.cmake
|
|
|
|
|
DESTINATION
|
|
|
|
|
${CMAKE_INSTALL_PREFIX}
|
|
|
|
|
)
|
2023-01-21 18:43:21 +01:00
|
|
|
|
|
|
|
|
install(
|
|
|
|
|
DIRECTORY
|
|
|
|
|
${CMAKE_SOURCE_DIR}/res
|
|
|
|
|
DESTINATION
|
|
|
|
|
${CMAKE_INSTALL_PREFIX}
|
2023-10-29 09:20:23 +01:00
|
|
|
)
|