Add modules support

Signed-off-by: Slendi <slendi@socopon.com>
This commit is contained in:
2025-12-28 00:24:39 +02:00
parent a6fe9c2f2c
commit 830c64b25a
3 changed files with 72 additions and 4 deletions

View File

@@ -4,8 +4,14 @@ project(SmathExamples LANGUAGES CXX VERSION 0.1.0)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
option(BUILD_EXAMPLES "Build example programs" ON)
option(BUILD_TESTS "Build unit tests" ON)
option(SMATH_BUILD_EXAMPLES "Build example programs" ON)
option(SMATH_BUILD_TESTS "Build unit tests" ON)
option(SMATH_BUILD_MODULES "Enable C++20 modules support" OFF)
if(SMATH_BUILD_MODULES)
message(STATUS "Building smath C++ module")
add_subdirectory(src/modules)
endif()
add_library(smath INTERFACE)
target_include_directories(smath
@@ -55,7 +61,7 @@ install(FILES
DESTINATION lib/cmake/smath
)
if(BUILD_EXAMPLES)
if(SMATH_BUILD_EXAMPLES)
file(GLOB EXAMPLE_SOURCES "${CMAKE_SOURCE_DIR}/examples/*.cpp")
foreach(EXAMPLE_FILE ${EXAMPLE_SOURCES})
get_filename_component(EXAMPLE_NAME ${EXAMPLE_FILE} NAME_WE)
@@ -64,7 +70,7 @@ if(BUILD_EXAMPLES)
endforeach()
endif()
if(BUILD_TESTS)
if(SMATH_BUILD_TESTS)
enable_testing()
find_package(GTest QUIET)

View File

@@ -0,0 +1,8 @@
add_library(smath_modules)
target_sources(smath_modules PUBLIC FILE_SET CXX_MODULES FILES smath.cppm)
target_link_libraries(smath_modules PUBLIC smath::smath)
target_compile_features(smath_modules PUBLIC cxx_std_20)

54
src/modules/smath.cppm Normal file
View File

@@ -0,0 +1,54 @@
module;
#include "smath.hpp"
export module smath;
export namespace smath {
export using ::smath::Vec;
export using ::smath::VecOrScalar;
export using ::smath::Quaternion;
export using ::smath::Mat;
export using ::smath::Vec2;
export using ::smath::Vec3;
export using ::smath::Vec4;
export using ::smath::Vec2d;
export using ::smath::Vec3d;
export using ::smath::Vec4d;
export using ::smath::Mat2;
export using ::smath::Mat3;
export using ::smath::Mat4;
export using ::smath::Mat2d;
export using ::smath::Mat3d;
export using ::smath::Mat4d;
export using ::smath::swizzle;
export using ::smath::deg;
export using ::smath::rad;
export using ::smath::turns;
export using ::smath::pack_unorm4x8;
export using ::smath::pack_snorm4x8;
export using ::smath::unpack_unorm4x8;
export using ::smath::unpack_snorm4x8;
export using ::smath::operator*;
export using ::smath::translate;
export using ::smath::rotate;
export using ::smath::scale;
export using ::smath::shear_x;
export using ::smath::shear_y;
export using ::smath::shear_z;
export using ::smath::matrix_ortho3d;
export using ::smath::matrix_perspective;
export using ::smath::matrix_infinite_perspective;
export using ::smath::matrix_look_at;
}