From 06f6c6035b0fcf38fc81862e861aaa9ffd877185 Mon Sep 17 00:00:00 2001 From: maj00r Date: Wed, 9 Sep 2026 23:30:34 +0200 Subject: [PATCH] let betterRenderer import the modules The module file set moves to its own eu07_modules library: a target can only consume C++20 modules by linking the target that owns them, and betterRenderer is a separate add_library. Its project includes become imports. CXX_EXTENSIONS must match across the two - a BMI built with -std=c++20 is refused by a unit compiled with -std=gnu++20. --- CMakeLists.txt | 34 ++++++++++++++++--- betterRenderer/CMakeLists.txt | 8 +++++ betterRenderer/eu07_source/register.cpp | 2 +- .../renderer/include/nvrenderer/nvrenderer.h | 8 ++--- .../renderer/source/environment.cpp | 2 +- betterRenderer/renderer/source/fsr.cpp | 3 +- .../renderer/source/gbufferblitpass.cpp | 2 +- .../renderer/source/materialparser.cpp | 10 +++--- betterRenderer/renderer/source/nvmaterial.cpp | 2 +- betterRenderer/renderer/source/nvrenderer.cpp | 11 +++--- .../renderer/source/nvrenderer_d3d12.cpp | 5 +-- .../renderer/source/nvrenderer_vulkan.cpp | 5 +-- .../renderer/source/nvrendererbackend.cpp | 2 +- betterRenderer/renderer/source/nvtexture.cpp | 14 ++++---- betterRenderer/renderer/source/nvtexture.h | 3 +- .../renderer/source/resource_registry.cpp | 2 +- betterRenderer/renderer/source/rt_model.cpp | 2 +- betterRenderer/renderer/source/sky.cpp | 4 +-- .../renderer/source/track_batching.cpp | 6 ++-- 19 files changed, 82 insertions(+), 43 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e8155f4a..bf2ac938 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -484,11 +484,6 @@ if (NOT WITH_OPENVR) list(REMOVE_ITEM MODULE_INTERFACES "${CMAKE_CURRENT_SOURCE_DIR}/vr/openvr_imp.cppm") endif() -target_sources(${PROJECT_NAME} - PUBLIC FILE_SET CXX_MODULES - BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} - FILES ${MODULE_INTERFACES}) - set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF) @@ -664,6 +659,35 @@ if(WIN32 AND WITH_PYTHON) ) endif() +# The module interface units live in their own library so that other targets -- +# betterRenderer, which is a separate add_library -- can import them. A target +# can only consume C++20 modules by linking the target that owns the file set, +# and the executable's own modules are not reachable that way. +# +# The interfaces need exactly the flags the executable was given, so they are +# copied off it rather than restated; this has to happen after all the +# third-party wiring above and before betterRenderer is added, or the mirrored +# link list would point back at betterRenderer and make the dependency circular. +add_library(eu07_modules STATIC) + +get_target_property(EU07_INCLUDES ${PROJECT_NAME} INCLUDE_DIRECTORIES) +get_target_property(EU07_DEFINITIONS ${PROJECT_NAME} COMPILE_DEFINITIONS) +get_target_property(EU07_LINKS ${PROJECT_NAME} LINK_LIBRARIES) + +target_sources(eu07_modules + PUBLIC FILE_SET CXX_MODULES + BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} + FILES ${MODULE_INTERFACES}) + +target_include_directories(eu07_modules PUBLIC ${EU07_INCLUDES}) +target_compile_definitions(eu07_modules PUBLIC ${EU07_DEFINITIONS}) +target_link_libraries(eu07_modules PUBLIC ${EU07_LINKS}) +set_target_properties(eu07_modules PROPERTIES + CXX_STANDARD 20 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF + POSITION_INDEPENDENT_CODE ON) + +target_link_libraries(${PROJECT_NAME} eu07_modules) + if (WITH_BETTER_RENDERER) add_subdirectory("betterRenderer") set_target_properties(betterRenderer betterRenderer_fsr2 betterRenderer_shaders PROPERTIES FOLDER "renderers") diff --git a/betterRenderer/CMakeLists.txt b/betterRenderer/CMakeLists.txt index d28c7b55..9b6bea0a 100644 --- a/betterRenderer/CMakeLists.txt +++ b/betterRenderer/CMakeLists.txt @@ -36,6 +36,14 @@ file(GLOB_RECURSE src add_library(${LIBMANUL_NAME} ${src}) +# The project's own types reach this renderer as C++20 modules; linking the +# target that owns the module file set is what makes them importable. +target_link_libraries(${LIBMANUL_NAME} eu07_modules) +# CXX_EXTENSIONS must match eu07_modules: a BMI built with -std=c++20 is +# refused by a translation unit compiled with -std=gnu++20. +set_target_properties(${LIBMANUL_NAME} PROPERTIES + CXX_STANDARD 20 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF) + target_include_directories(${LIBMANUL_NAME} PUBLIC "renderer/include") diff --git a/betterRenderer/eu07_source/register.cpp b/betterRenderer/eu07_source/register.cpp index 47ea5f14..33029d6b 100644 --- a/betterRenderer/eu07_source/register.cpp +++ b/betterRenderer/eu07_source/register.cpp @@ -1,4 +1,4 @@ -#include "utilities/Logs.h" +import eu07.utilities.logs; #include "nvrenderer/nvrenderer.h" namespace { diff --git a/betterRenderer/renderer/include/nvrenderer/nvrenderer.h b/betterRenderer/renderer/include/nvrenderer/nvrenderer.h index a572c6dc..dc21fee6 100644 --- a/betterRenderer/renderer/include/nvrenderer/nvrenderer.h +++ b/betterRenderer/renderer/include/nvrenderer/nvrenderer.h @@ -22,14 +22,14 @@ #include // EU07 includes -#include -#include +import eu07.utilities.classes; +import eu07.simcore; #include "nvrenderer_enums.h" #include "quadtree.h" -#include "rendering/renderer.h" +import eu07.rendering.renderer; #include "resource_registry.h" -#include "environment/sky.h" +import eu07.environment.sky; namespace Rt { struct IRtModel; diff --git a/betterRenderer/renderer/source/environment.cpp b/betterRenderer/renderer/source/environment.cpp index dea5f8c3..ba2078e8 100644 --- a/betterRenderer/renderer/source/environment.cpp +++ b/betterRenderer/renderer/source/environment.cpp @@ -8,7 +8,7 @@ #include "nvrenderer/nvrenderer.h" #include "nvrendererbackend.h" #include "nvtexture.h" -#include "simulation/simulationenvironment.h" +import eu07.simulation.simulationenvironment; #include "sky.h" int MaEnvironment::GetCurrentSetIndex() { diff --git a/betterRenderer/renderer/source/fsr.cpp b/betterRenderer/renderer/source/fsr.cpp index 2253d544..ab143b76 100644 --- a/betterRenderer/renderer/source/fsr.cpp +++ b/betterRenderer/renderer/source/fsr.cpp @@ -13,7 +13,8 @@ #include "nvrenderer_vulkan.h" #endif -#include "utilities/Globals.h" +#include "utilities/Globals_macros.h" +import eu07.utilities.globals; #include "gbuffer.h" #include "gbufferblitpass.h" diff --git a/betterRenderer/renderer/source/gbufferblitpass.cpp b/betterRenderer/renderer/source/gbufferblitpass.cpp index 6a927b3c..fdb023b3 100644 --- a/betterRenderer/renderer/source/gbufferblitpass.cpp +++ b/betterRenderer/renderer/source/gbufferblitpass.cpp @@ -1,7 +1,7 @@ #include "gbufferblitpass.h" #include -#include +import eu07.utilities.timer; #include #include "contactshadows.h" diff --git a/betterRenderer/renderer/source/materialparser.cpp b/betterRenderer/renderer/source/materialparser.cpp index 20ef4322..ce724103 100644 --- a/betterRenderer/renderer/source/materialparser.cpp +++ b/betterRenderer/renderer/source/materialparser.cpp @@ -2,12 +2,14 @@ #include "nvrenderer/nvrenderer.h" -#include -#include +#include "utilities/Globals_macros.h" +import eu07.utilities.globals; +import eu07.utilities.logs; #include -#include +import eu07.model.material; #include -#include +#include "utilities/utilities_macros.h" +import eu07.utilities.utilities; #include #include diff --git a/betterRenderer/renderer/source/nvmaterial.cpp b/betterRenderer/renderer/source/nvmaterial.cpp index cde600de..bb2af9d4 100644 --- a/betterRenderer/renderer/source/nvmaterial.cpp +++ b/betterRenderer/renderer/source/nvmaterial.cpp @@ -4,7 +4,7 @@ #include #include -#include "utilities/Logs.h" +import eu07.utilities.logs; #include "csm.h" #include "environment.h" #include "gbuffer.h" diff --git a/betterRenderer/renderer/source/nvrenderer.cpp b/betterRenderer/renderer/source/nvrenderer.cpp index 926666d5..309fa876 100644 --- a/betterRenderer/renderer/source/nvrenderer.cpp +++ b/betterRenderer/renderer/source/nvrenderer.cpp @@ -1,12 +1,11 @@ #include "nvrenderer/nvrenderer.h" -#include -#include -#include -#include -#include +import eu07.simcore; +import eu07.utilities.logs; +import eu07.utilities.timer; +import eu07.application.application; #include -#include +import eu07.simulation.simulation; #include #include diff --git a/betterRenderer/renderer/source/nvrenderer_d3d12.cpp b/betterRenderer/renderer/source/nvrenderer_d3d12.cpp index ebfa718b..0e8b1818 100644 --- a/betterRenderer/renderer/source/nvrenderer_d3d12.cpp +++ b/betterRenderer/renderer/source/nvrenderer_d3d12.cpp @@ -2,8 +2,9 @@ #include -#include "utilities/Globals.h" -#include "utilities/Logs.h" +#include "utilities/Globals_macros.h" +import eu07.utilities.globals; +import eu07.utilities.logs; #include "config.h" #include "nvrenderer/nvrenderer.h" diff --git a/betterRenderer/renderer/source/nvrenderer_vulkan.cpp b/betterRenderer/renderer/source/nvrenderer_vulkan.cpp index f1e529c8..8479bf75 100644 --- a/betterRenderer/renderer/source/nvrenderer_vulkan.cpp +++ b/betterRenderer/renderer/source/nvrenderer_vulkan.cpp @@ -3,8 +3,9 @@ #include #include -#include "utilities/Globals.h" -#include "utilities/Logs.h" +#include "utilities/Globals_macros.h" +import eu07.utilities.globals; +import eu07.utilities.logs; #include "config.h" #include "nvrenderer/nvrenderer.h" diff --git a/betterRenderer/renderer/source/nvrendererbackend.cpp b/betterRenderer/renderer/source/nvrendererbackend.cpp index d1e8f0b3..a26357bd 100644 --- a/betterRenderer/renderer/source/nvrendererbackend.cpp +++ b/betterRenderer/renderer/source/nvrendererbackend.cpp @@ -1,6 +1,6 @@ #include "nvrendererbackend.h" -#include "utilities/Logs.h" +import eu07.utilities.logs; #include void NvRendererMessageCallback::message(nvrhi::MessageSeverity severity, diff --git a/betterRenderer/renderer/source/nvtexture.cpp b/betterRenderer/renderer/source/nvtexture.cpp index 16cc1923..16c7906d 100644 --- a/betterRenderer/renderer/source/nvtexture.cpp +++ b/betterRenderer/renderer/source/nvtexture.cpp @@ -1,14 +1,16 @@ #include "nvtexture.h" #include "nvrenderer/nvrenderer.h" -#include -#include -#include -#include +#include "utilities/Globals_macros.h" +import eu07.utilities.globals; +import eu07.scripting.pyint; +import eu07.application.application; +import eu07.utilities.dictionary; #include -#include +#include "utilities/utilities_macros.h" +import eu07.utilities.utilities; -#include "utilities/Logs.h" +import eu07.utilities.logs; // #include "Texture.h" #include "nvrendererbackend.h" #include "stbi/stb_image.h" diff --git a/betterRenderer/renderer/source/nvtexture.h b/betterRenderer/renderer/source/nvtexture.h index 18bba50d..08228d99 100644 --- a/betterRenderer/renderer/source/nvtexture.h +++ b/betterRenderer/renderer/source/nvtexture.h @@ -6,7 +6,8 @@ #include #include -#include "interfaces/ITexture.h" +#include "global_include/interfaces/ITexture_macros.h" +import eu07.global_include.interfaces.itexture; #include "nvrenderer/nvrenderer_enums.h" enum MaTextureTraits { diff --git a/betterRenderer/renderer/source/resource_registry.cpp b/betterRenderer/renderer/source/resource_registry.cpp index 37a9e564..dce9fa42 100644 --- a/betterRenderer/renderer/source/resource_registry.cpp +++ b/betterRenderer/renderer/source/resource_registry.cpp @@ -1,6 +1,6 @@ #include "nvrenderer/resource_registry.h" -#include "utilities/Logs.h" +import eu07.utilities.logs; #include "fmt/compile.h" #include "nvtexture.h" #include "nvrenderer/nvrenderer.h" diff --git a/betterRenderer/renderer/source/rt_model.cpp b/betterRenderer/renderer/source/rt_model.cpp index 5ddff74b..73524abd 100644 --- a/betterRenderer/renderer/source/rt_model.cpp +++ b/betterRenderer/renderer/source/rt_model.cpp @@ -9,7 +9,7 @@ #include -#include "model/Model3d.h" +import eu07.simcore; namespace Rt { diff --git a/betterRenderer/renderer/source/sky.cpp b/betterRenderer/renderer/source/sky.cpp index 74a169e4..c16b3bf1 100644 --- a/betterRenderer/renderer/source/sky.cpp +++ b/betterRenderer/renderer/source/sky.cpp @@ -4,8 +4,8 @@ #include "environment.h" #include "nvrendererbackend.h" -#include "simulation/simulationenvironment.h" -#include "simulation/simulationtime.h" +import eu07.simulation.simulationenvironment; +import eu07.simulation.simulationtime; namespace { static const float PI = 3.14159265358979323846f; diff --git a/betterRenderer/renderer/source/track_batching.cpp b/betterRenderer/renderer/source/track_batching.cpp index cebb8669..545a93da 100644 --- a/betterRenderer/renderer/source/track_batching.cpp +++ b/betterRenderer/renderer/source/track_batching.cpp @@ -4,9 +4,9 @@ #include "nvrenderer/nvrenderer.h" #include "nvrendererbackend.h" -#include -#include -#include +import eu07.utilities.timer; +import eu07.simcore; +import eu07.simulation.simulation; namespace BatchingUtils {