chore(modules): remove complex modules and switch to normal headers/sources

This commit is contained in:
illyum 2024-09-15 02:18:15 -06:00
parent df2036bd0e
commit 66866387f1
7 changed files with 31 additions and 92 deletions

View File

@ -1,5 +1,5 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.28) # Required for modern cpp modules support CMAKE_MINIMUM_REQUIRED(VERSION 3.18)
PROJECT(ICEngine LANGUAGES CXX C) PROJECT(ICEngine LANGUAGES CXX C VERSION 1.0.0)
# Read version for logger # Read version for logger
FILE(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" VERSION_TEXT) FILE(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" VERSION_TEXT)
@ -10,8 +10,7 @@ ADD_DEFINITIONS(-DPROJECT_VERSION=\"${PROJECT_VERSION}\")
OPTION(BUILD_ENGINE_AS_SHARED_LIBRARY "Build engine as a shared library" OFF) OPTION(BUILD_ENGINE_AS_SHARED_LIBRARY "Build engine as a shared library" OFF)
OPTION(BUILD_DEPS_AS_SHARED_LIBRARIES "Builds engine's dependencies as shared libraries" OFF) OPTION(BUILD_DEPS_AS_SHARED_LIBRARIES "Builds engine's dependencies as shared libraries" OFF)
OPTION(BUILD_EXAMPLES "Builds examples to showcase engine" OFF) OPTION(BUILD_EXAMPLES "Builds examples to showcase engine" ON)
OPTION(INSTALL_ICENGINE "Install ICEngine as a package" ON)
IF (CMAKE_GENERATOR MATCHES "Visual Studio|Xcode") IF (CMAKE_GENERATOR MATCHES "Visual Studio|Xcode")
SET(CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel" CACHE STRING "" FORCE) SET(CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel" CACHE STRING "" FORCE)
@ -43,63 +42,35 @@ ELSE ()
ADD_COMPILE_OPTIONS(-Wall -Wextra -Werror -Wpedantic) ADD_COMPILE_OPTIONS(-Wall -Wextra -Werror -Wpedantic)
ENDIF () ENDIF ()
IF (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
ADD_COMPILE_OPTIONS(-fmodules-ts)
ELSEIF (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
ADD_COMPILE_OPTIONS(-fmodules)
ENDIF ()
INCLUDE_DIRECTORIES( INCLUDE_DIRECTORIES(
engine/src/ engine/src/core
)
SET(EngineSources
engine/src/core/ICEngine.cpp
) )
IF (BUILD_ENGINE_AS_SHARED_LIBRARY) IF (BUILD_ENGINE_AS_SHARED_LIBRARY)
ADD_LIBRARY(ICEngine SHARED) ADD_LIBRARY(ICEngine SHARED ${EngineSources})
SET_TARGET_PROPERTIES(ICEngine PROPERTIES SET_TARGET_PROPERTIES(ICEngine PROPERTIES
OUTPUT_NAME "ICEngine" OUTPUT_NAME "ICEngine"
WINDOWS_EXPORT_ALL_SYMBOLS ON WINDOWS_EXPORT_ALL_SYMBOLS ON
) )
ELSE () ELSE ()
ADD_LIBRARY(ICEngine STATIC) ADD_LIBRARY(ICEngine STATIC ${EngineSources})
SET_TARGET_PROPERTIES(ICEngine PROPERTIES OUTPUT_NAME "ICEngine") SET_TARGET_PROPERTIES(ICEngine PROPERTIES OUTPUT_NAME "ICEngine")
ENDIF () ENDIF ()
TARGET_SOURCES(ICEngine
PUBLIC
FILE_SET CXX_MODULES
BASE_DIRS engine/src
FILES engine/src/core/ICEngine.ixx
)
TARGET_INCLUDE_DIRECTORIES(ICEngine
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/engine/src>
$<INSTALL_INTERFACE:include>
)
IF (BUILD_EXAMPLES) IF (BUILD_EXAMPLES)
ADD_SUBDIRECTORY(examples) INCLUDE_DIRECTORIES(examples/server)
ENDIF () INCLUDE_DIRECTORIES(examples/client)
IF (INSTALL_ICENGINE) ADD_EXECUTABLE(server_example examples/server/server.cpp)
INSTALL(TARGETS ICEngine TARGET_LINK_LIBRARIES(server_example PRIVATE ICEngine)
EXPORT ICEngineTargets
LIBRARY DESTINATION lib ADD_EXECUTABLE(client_example examples/client/client.cpp)
ARCHIVE DESTINATION lib TARGET_LINK_LIBRARIES(client_example PRIVATE ICEngine)
RUNTIME DESTINATION bin
FILE_SET CXX_MODULES DESTINATION include/icengine/modules SET_TARGET_PROPERTIES(server_example PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
) SET_TARGET_PROPERTIES(client_example PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
INSTALL(FILES engine/src/core/Logger.hpp DESTINATION include/icengine)
INSTALL(EXPORT ICEngineTargets
FILE ICEngineConfig.cmake
NAMESPACE ICEngine::
DESTINATION lib/cmake/ICEngine
)
EXPORT(EXPORT ICEngineTargets
FILE ${CMAKE_BINARY_DIR}/ICEngineConfig.cmake
NAMESPACE ICEngine::
)
ENDIF () ENDIF ()

View File

@ -1,7 +1,7 @@
# Building # Building
ICEngine supports both single and multi type configuration types: ICEngine supports both single and multi type configuration types:
Make/Ninja (NOTE: MingW Makefiles do not support modules which this project uses!) Make/Ninja
```bash ```bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
@ -17,17 +17,3 @@ cmake -S . -B build -G "Visual Studio 16 2019" # or your preferred Visual Studio
cmake --build build --config Debug cmake --build build --config Debug
cmake --build build --config Release cmake --build build --config Release
``` ```
## Toolchain Versions
#### CMake
This project requires CMake 3.28 or greater, due to its support for C++ Modules.
#### Compilers
I have only ever tried to build using the following tools and versions:
- **Ninja**: 1.12.1
- **Clang**: 18.1.8
- **C++/GCC**: 14.2.0
If you have issues building on your target platform or compiler, please ensure they can use C++'s `modules` (required by
the project)

View File

@ -0,0 +1,3 @@
//
// Created by illyum on 9/15/2024.
//

View File

@ -1,5 +0,0 @@
module;
export module ICEngine;
export void Test() { return; }

View File

@ -1,18 +0,0 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.28)
PROJECT(ICEngineExamples LANGUAGES CXX)
SET(CMAKE_CXX_STANDARD 20)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
FIND_PACKAGE(ICEngine REQUIRED)
SET(SERVER_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/server/server.cpp)
SET(CLIENT_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/client/client.cpp)
ADD_EXECUTABLE(server ${SERVER_SOURCE})
TARGET_LINK_LIBRARIES(server PRIVATE ICEngine::ICEngine)
TARGET_INCLUDE_DIRECTORIES(server PRIVATE ${ICEngine_INCLUDE_DIRS})
ADD_EXECUTABLE(client ${CLIENT_SOURCE})
TARGET_LINK_LIBRARIES(client PRIVATE ICEngine::ICEngine)
TARGET_INCLUDE_DIRECTORIES(client PRIVATE ${ICEngine_INCLUDE_DIRS})

View File

@ -2,9 +2,10 @@
// Created by illyum on 9/15/2024. // Created by illyum on 9/15/2024.
// //
import ICEngine; #include <Logger.hpp>
int main() { int main() {
Test(); Logger logger;
logger.logVersion();
return 0; return 0;
} }

View File

@ -2,9 +2,10 @@
// Created by illyum on 9/15/2024. // Created by illyum on 9/15/2024.
// //
import ICEngine; #include <Logger.hpp>
int main() { int main() {
Test(); Logger logger;
return 0; logger.logVersion();
return 0;
} }