From ce9ea6752d03cc47f97675092ca7ed6eb3e62a6b Mon Sep 17 00:00:00 2001 From: cat Date: Fri, 6 Mar 2026 16:33:30 +0200 Subject: [PATCH] Added Corrade as a dependency and also Fetchscript --- CMakeLists.txt | 73 +++++++++++++++++++++++++++++---- external/Corrade/CMakeLists.txt | 16 ++++++++ 2 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 external/Corrade/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index dd4a1e4..b0c1620 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,33 +6,92 @@ # obtain one at http://mozilla.org/MPL/2.0/. cmake_minimum_required(VERSION 3.10) +cmake_policy(SET CMP0135 NEW) project(Tourmaline VERSION 1) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address") endif() include(GNUInstallDirs) +include(FetchContent) +# Original - https://github.com/novelrt/NovelRT/blob/c877c1e870d62df98935489e9682d93b009fb2fd/ThirdParty/CMakeLists.txt#L6 +# Modified version by williamjcm +macro(external_dependency name) + FetchContent_Declare(${name} + ${ARGN} + EXCLUDE_FROM_ALL + PREFIX "${CMAKE_CURRENT_BINARY_DIR}/${name}" + TMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/${name}/tmp" + STAMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/${name}/stamp" + DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${name}/dl" + SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${name}/src" + SUBBUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${name}/build" + BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${name}/bin" + INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/${name}/inst" + LOG_DIR "${CMAKE_CURRENT_BINARY_DIR}/${name}/log" + ) + list(APPEND CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}/cmake/${name}") +endmacro() + +# Third Party Libraries +external_dependency(Corrade + URL https://github.com/mosra/corrade/archive/2b7251d8bd8833a12f0d9b8deffca7a290340d3c.zip + URL_HASH SHA256=77ed07d373792ce05a64b87c84e7d4687965d6040df4e17b6e9922ca1cbd88c8 +) + +foreach(dep + Corrade +) + message(STATUS "Fetching ${dep}...") + add_subdirectory(external/${dep}) +endforeach() + +# Building SO add_library(${PROJECT_NAME} SHARED - "source/Systems/ECS/Components.cpp" - "source/Systems/ECS/World.cpp" - "source/Systems/Logging.cpp" - "source/Systems/Random.cpp" - "source/Types/UUID.cpp") + "source/Systems/ECS/Components.cpp" + "source/Systems/ECS/World.cpp" + "source/Systems/Logging.cpp" + "source/Systems/Random.cpp" + "source/Types/UUID.cpp" +) +# Actual linking +target_link_libraries(${PROJECT_NAME} PUBLIC + Corrade::Main + Corrade::Containers + Corrade::Utility + Corrade::PluginManager +) + +# Module stuff set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION}) -# Nothing to link right now -target_link_libraries(${PROJECT_NAME}) +FetchContent_GetProperties(Corrade SOURCE_DIR corrade_SOURCE_DIR) +FetchContent_GetProperties(Corrade BINARY_DIR corrade_BINARY_DIR) + +install( + DIRECTORY + "${corrade_SOURCE_DIR}/src/Corrade/" + "${corrade_BINARY_DIR}/src/Corrade/" + DESTINATION "include/${PROJECT_NAME}External/Corrade" + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.hpp" +) + target_include_directories(${PROJECT_NAME} PUBLIC $ $ + $ $ + $ ) install( diff --git a/external/Corrade/CMakeLists.txt b/external/Corrade/CMakeLists.txt new file mode 100644 index 0000000..eda33fd --- /dev/null +++ b/external/Corrade/CMakeLists.txt @@ -0,0 +1,16 @@ +include(FetchContent) + +# Building options +set(CORRADE_BUILD_STATIC ON) + +# Feature options +set(CORRADE_WITH_MAIN ON) +set(CORRADE_WITH_UTILITY ON) +set(CORRADE_WITH_PLUGINMANAGER ON) +set(CORRADE_WITH_INTERCONNECT OFF) +set(CORRADE_WITH_TESTSUITE OFF) +if(NOT CMAKE_CROSSCOMPILING) + set(CORRADE_WITH_RC ON) +endif() + +FetchContent_MakeAvailable(Corrade)