diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b01464..77a82a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt new file mode 100644 index 0000000..128913a --- /dev/null +++ b/src/modules/CMakeLists.txt @@ -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) + diff --git a/src/modules/smath.cppm b/src/modules/smath.cppm new file mode 100644 index 0000000..5a44a25 --- /dev/null +++ b/src/modules/smath.cppm @@ -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; +}