Add in proper module support for projects in the future

This commit is contained in:
2025-06-02 15:38:32 -04:00
parent 2073a3e3b2
commit cf145a41b5

View File

@@ -12,6 +12,21 @@ function(PostSetup)
CompilerPostSetup()
endfunction()
function(ConfigureFGLTarget NAME SRC_DIR INCLUDE_DIR)
if (INCLUDE_DIR)
target_include_directories(${NAME} PUBLIC ${INCLUDE_DIR})
endif ()
target_include_directories(${NAME} PRIVATE ${SRC_DIR})
if (DEFINED FGL_STRICT_WARNINGS AND FGL_STRICT_WARNINGS)
target_compile_definitions(${NAME} PUBLIC "-DFGL_STRICT_WARNINGS=1")
endif ()
set_target_properties(${NAME} PROPERTIES CXX_MODULE_STD 1)
target_compile_features(${NAME} PUBLIC cxx_std_23)
endfunction()
function(AddFGLExecutable NAME SRC_SOURCES_LOCATION)
file(GLOB_RECURSE M_SOURCES CONFIGURE_DEPENDS
${SRC_SOURCES_LOCATION}/**.cppm)
@@ -21,34 +36,40 @@ function(AddFGLExecutable NAME SRC_SOURCES_LOCATION)
${SRC_SOURCES_LOCATION}/**.hpp
)
message("Compiling ${NAME} WITH ${M_SOURCES} as modules")
add_executable(${NAME})
add_executable(${NAME} ${SOURCES})
target_sources(${NAME} PUBLIC ${SOURCES})
# target_sources(${NAME} PUBLIC FILE_SET modules TYPE CXX_MODULES FILES ${M_SOURCES})
target_sources(${NAME} PUBLIC FILE_SET modules TYPE CXX_MODULES FILES ${M_SOURCES})
ConfigureFGLTarget(${NAME} ${SRC_SOURCES_LOCATION} "")
target_include_directories(${NAME} PRIVATE ${SRC_SOURCES_LOCATION})
set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
SetFGLFlags(${NAME})
endfunction()
function(addFGLFlags NAME)
if (DEFINED FGL_STRICT_WARNINGS AND FGL_STRICT_WARNINGS)
target_compile_definitions(${NAME} PUBLIC "-DFGL_STRICT_WARNINGS=1")
endif ()
endfunction()
function(AddFGLLibrary NAME MODE SRC_SOURCES_LOCATION INCLUDE_SOURCES_LOCATION)
file(GLOB_RECURSE CPP_SOURCES CONFIGURE_DEPENDS ${SRC_SOURCES_LOCATION}/**.cpp)
file(GLOB_RECURSE HPP_SOURCES CONFIGURE_DEPENDS ${SRC_SOURCES_LOCATION}/**.hpp)
file(GLOB_RECURSE M_SOURCES CONFIGURE_DEPENDS
${SRC_SOURCES_LOCATION}/**.cppm)
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS
${SRC_SOURCES_LOCATION}/**.cpp
${SRC_SOURCES_LOCATION}/**.hpp
)
file(GLOB_RECURSE INCLUDE_MODULE_SOURCES CONFIGURE_DEPENDS ${INCLUDE_SOURCES_LOCATION}/**.cppm)
file(GLOB_RECURSE INCLUDE_HPP_SOURCES CONFIGURE_DEPENDS ${INCLUDE_SOURCES_LOCATION}/**.hpp)
add_library(${NAME} ${MODE} ${CPP_SOURCES} ${HPP_SOURCES} ${INCLUDE_SOURCES_LOCATION})
target_include_directories(${NAME} PUBLIC ${INCLUDE_SOURCES_LOCATION})
target_include_directories(${NAME} PRIVATE ${SRC_SOURCES_LOCATION})
add_library(${NAME} ${MODE})
target_sources(${NAME} PUBLIC ${SOURCES})
target_sources(${NAME} PUBLIC FILE_SET modules TYPE CXX_MODULES FILES ${INCLUDE_MODULE_SOURCES})
message("=== ${NAME} sources ${SOURCES}")
message("=== ${NAME} sources ${M_SOURCES}")
message("=== ${NAME} sources ${INCLUDE_MODULE_SOURCES}")
message("=== ${NAME} sources ${INCLUDE_HPP_SOURCES}")
ConfigureFGLTarget(${NAME} ${SRC_SOURCES_LOCATION} ${INCLUDE_SOURCES_LOCATION})
SetFGLFlags(${NAME})
addFGLFlags(${NAME})
endfunction()
function(AddFGLChildLibrary NAME MODE SRC_SOURCES_LOCATION INCLUDE_SOURCES_LOCATION)
@@ -58,5 +79,5 @@ function(AddFGLChildLibrary NAME MODE SRC_SOURCES_LOCATION INCLUDE_SOURCES_LOCAT
add_library(${NAME} ${MODE} ${CPP_SOURCES} ${HPP_SOURCES} ${INCLUDE_SOURCES_LOCATION})
target_include_directories(${NAME} PUBLIC ${INCLUDE_SOURCES_LOCATION})
target_include_directories(${NAME} PRIVATE ${SRC_SOURCES_LOCATION})
addFGLFlags(${NAME})
ConfigureFGLTarget(${NAME} ${SRC_SOURCES_LOCATION} ${INCLUDE_SOURCES_LOCATION})
endfunction()