Files
Seele/CMakeLists.txt
T

210 lines
6.7 KiB
CMake
Raw Normal View History

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()
2025-01-29 16:15:48 +01:00
set(CMAKE_CXX_STANDARD 23)
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)
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
2024-01-16 19:24:49 +01:00
set(VCPKG_INSTALL_OPTIONS "--allow-unsupported")
2025-05-23 05:07:03 +02:00
set(VCPKG_BUILD_TYPE release)
2024-01-16 19:24:49 +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)
2024-03-18 15:28:56 +01:00
set(METAL_ROOT ${EXTERNAL_ROOT}/metal-cpp)
2025-02-02 09:39:01 +01:00
if(WIN32)
2025-03-20 20:15:38 +01:00
set(VCPKG_BASE_FOLDER ${CMAKE_BINARY_DIR}/vcpkg_installed/x64-windows/)
2025-02-02 09:39:01 +01:00
elseif(APPLE)
2025-04-12 17:40:14 +02:00
set(VCPKG_BASE_FOLDER ${CMAKE_BINARY_DIR}/vcpkg_installed/arm64-osx/)
2025-05-16 13:04:43 +02:00
else()
set(VCPKG_BASE_FOLDER ${CMAKE_BINARY_DIR}/vcpkg_installed/x64-linux/)
2025-02-02 09:39:01 +01:00
endif()
2023-12-10 22:27:59 +01:00
2021-12-02 13:00:03 +01:00
set(Boost_NO_WARN_NEW_VERSIONS 1)
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
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)
2025-01-29 16:15:48 +01:00
find_package(harfbuzz CONFIG REQUIRED)
2023-12-10 22:27:59 +01:00
find_package(glfw3 CONFIG REQUIRED)
find_package(glm CONFIG REQUIRED)
find_package(Ktx CONFIG REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)
2024-01-16 19:24:49 +01:00
find_package(fmt CONFIG REQUIRED)
2025-04-08 17:21:23 +02:00
find_package(lunasvg CONFIG REQUIRED)
2025-05-12 22:48:01 +02:00
find_package(metis CONFIG REQUIRED)
find_package(meshoptimizer CONFIG REQUIRED)
2024-01-17 17:57:59 +01:00
find_package(VulkanMemoryAllocator 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()
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_include_directories(Engine PRIVATE src/Engine)
2025-02-02 09:39:01 +01:00
target_include_directories(Engine PRIVATE ${VCPKG_BASE_FOLDER}/include/)
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)
2025-01-29 16:15:48 +01:00
target_link_libraries(Engine PUBLIC harfbuzz::harfbuzz)
target_link_libraries(Engine PUBLIC harfbuzz::harfbuzz-subset)
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)
2024-01-16 19:24:49 +01:00
target_link_libraries(Engine PUBLIC fmt::fmt)
2025-04-08 17:21:23 +02:00
target_link_libraries(Engine PUBLIC lunasvg::lunasvg)
2024-01-17 17:57:59 +01:00
target_link_libraries(Engine PUBLIC GPUOpen::VulkanMemoryAllocator)
2025-05-12 22:48:01 +02:00
target_link_libraries(Engine PUBLIC metis)
target_link_libraries(Engine PUBLIC meshoptimizer::meshoptimizer)
2025-02-02 09:39:01 +01:00
if(WIN32)
target_link_libraries(Engine PUBLIC ${VCPKG_BASE_FOLDER}/lib/slang.lib)
elseif(APPLE)
2025-04-12 17:40:14 +02:00
target_link_libraries(Engine PUBLIC ${VCPKG_BASE_FOLDER}/debug/lib/libslang.dylib)
2025-05-16 13:04:43 +02:00
else()
target_link_libraries(Engine PUBLIC ${VCPKG_BASE_FOLDER}/lib/libslang.so)
target_link_libraries(Engine PUBLIC ${VCPKG_BASE_FOLDER}/lib/libslang-glslang.so)
2025-02-02 09:39:01 +01:00
endif()
2025-01-19 16:07:38 +01:00
2024-01-20 13:22:47 +01:00
if(APPLE)
2024-03-18 15:28:56 +01:00
target_link_libraries(Engine PUBLIC metal)
2025-02-02 09:39:01 +01:00
SET(CMAKE_OSX_DEPLOYMENT_TARGET 15.0)
2024-01-20 13:22:47 +01:00
endif()
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)
2024-05-22 19:20:30 +02:00
2024-07-05 12:02:46 +02:00
add_executable(Benchmark "")
target_link_libraries(Benchmark PRIVATE Engine)
target_include_directories(Benchmark PRIVATE src/Benchmark)
2020-04-12 15:47:19 +02:00
if(MSVC)
2024-02-23 08:31:21 +01:00
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
2025-01-29 16:15:48 +01:00
target_compile_options(Engine PUBLIC /Zi /MP14 /W4 /wd4505)
target_compile_options(Editor PUBLIC /Zi /MP14 /W4)
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>
2024-04-18 13:33:35 +02:00
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/Seele/Seele.natvis>
2022-11-29 16:34:42 +01:00
)
install(FILES
Seele.natvis
2024-04-18 13:33:35 +02:00
DESTINATION Seele/)
2020-04-12 15:47:19 +02:00
else()
2025-01-29 16:15:48 +01:00
target_compile_options(Engine PUBLIC -g -Wall -Wextra -Wno-error -pedantic -Wno-missing-field-initializers -Wno-unused-function)
target_compile_options(Editor PUBLIC -g -Wall -Wextra -Wno-error -pedantic)
2020-04-12 15:47:19 +02:00
endif()
2024-04-12 09:27:30 +02:00
if(APPLE)
#Metal lib throws that internally for some reason
2024-04-17 14:33:06 +02:00
target_compile_options(Engine PUBLIC -Wno-gnu-anonymous-struct -Wno-nested-anon-types)
target_compile_options(Editor PUBLIC -Wno-gnu-anonymous-struct -Wno-nested-anon-types)
2024-04-12 09:27:30 +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
add_subdirectory(src/)
2025-04-08 17:21:23 +02:00
#add_subdirectory(tests/)
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>
2025-02-02 09:39:01 +01:00
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${VCPKG_BASE_FOLDER}/bin/slang.dll $<TARGET_FILE_DIR:Editor>
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${VCPKG_BASE_FOLDER}/bin/slang-glslang.dll $<TARGET_FILE_DIR:Editor>
2023-11-07 16:55:13 +01:00
COMMAND_EXPAND_LISTS
2023-12-10 22:27:59 +01:00
DEPENDS Editor)
2024-04-12 09:27:30 +02:00
elseif(APPLE)
add_custom_target(dll_copy ALL
2024-04-17 14:33:06 +02:00
COMMAND ${CMAKE_COMMAND} -E true
2024-04-12 09:27:30 +02:00
COMMAND_EXPAND_LISTS
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
2024-05-17 18:08:11 +02:00
metal
EXPORT
2022-11-22 22:11:37 +01:00
EngineTargets
FILE_SET HEADERS
2024-04-23 17:08:39 +02:00
DESTINATION include/Seele)
2022-11-22 22:11:37 +01:00
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
2024-04-23 17:08:39 +02:00
lib/cmake/Seele
2022-11-22 22:11:37 +01:00
)
install(
FILES
${CMAKE_BINARY_DIR}/SeeleConfig.cmake
DESTINATION
2024-04-23 17:08:39 +02:00
lib/cmake/Seele
2022-11-22 22:11:37 +01:00
)
2023-01-21 18:43:21 +01:00
install(
DIRECTORY
2024-04-18 13:33:35 +02:00
${CMAKE_SOURCE_DIR}/res/cmake
${CMAKE_SOURCE_DIR}/res/fonts
${CMAKE_SOURCE_DIR}/res/shaders
${CMAKE_SOURCE_DIR}/res/textures
2023-01-21 18:43:21 +01:00
DESTINATION
2024-04-23 17:08:39 +02:00
bin
2023-10-29 09:20:23 +01:00
)