@@ -38,6 +38,8 @@ option(ENTT_USE_LIBCPP "Use libc++ by adding -stdlib=libc++ flag if available."
3838option (ENTT_USE_SANITIZER "Enable sanitizers by adding -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined flags if available." OFF )
3939option (ENTT_USE_CLANG_TIDY "Enable static analysis with clang-tidy" OFF )
4040
41+ option (ENTT_MODULES "Build as a module library (requires c++20)" ON )
42+
4143if (ENTT_USE_LIBCPP)
4244 if (NOT WIN32 )
4345 include (CheckCXXSourceCompiles)
@@ -224,6 +226,182 @@ if(ENTT_HAS_NATVIS)
224226 )
225227endif ()
226228
229+ if (ENTT_MODULES)
230+
231+ message (STATUS "Building with module support" )
232+
233+ add_library (EnTTModules)
234+ add_library (EnTT::Module ALIAS EnTTModules)
235+
236+ target_compile_features (EnTTModules PUBLIC cxx_std_20)
237+
238+ if (ENTT_HAS_LIBCPP)
239+ target_compile_options (EnTTModules BEFORE PUBLIC -stdlib=libc++)
240+ endif ()
241+
242+ if (ENTT_HAS_SANITIZER)
243+ target_compile_options (EnTTModules INTERFACE $<$<CONFIG:Debug>:-fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined>)
244+ target_link_libraries (EnTTModules INTERFACE $<$<CONFIG:Debug>:-fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined>)
245+ endif ()
246+
247+ target_sources (EnTTModules
248+ PRIVATE FILE_SET CXX_MODULES
249+ FILES
250+ src/entt.cpp
251+
252+ PRIVATE FILE_SET HEADERS
253+ BASE_DIRS src
254+ FILES
255+ src/entt/config/config.h
256+ src/entt/config/macro.h
257+ src/entt/config/version .h
258+ src/entt/container/dense_map.hpp
259+ src/entt/container/dense_set.hpp
260+ src/entt/container/table.hpp
261+ src/entt/container/fwd.hpp
262+ src/entt/core/algorithm.hpp
263+ src/entt/core/any.hpp
264+ src/entt/core/attribute.h
265+ src/entt/core/bit.hpp
266+ src/entt/core/compressed_pair.hpp
267+ src/entt/core/enum.hpp
268+ src/entt/core/family.hpp
269+ src/entt/core/fwd.hpp
270+ src/entt/core/hashed_string.hpp
271+ src/entt/core/ident.hpp
272+ src/entt/core/iterator.hpp
273+ src/entt/core/memory.hpp
274+ src/entt/core/monostate.hpp
275+ src/entt/core/ranges.hpp
276+ src/entt/core/tuple.hpp
277+ src/entt/core/type_info.hpp
278+ src/entt/core/type_traits.hpp
279+ src/entt/core/utility.hpp
280+ src/entt/entity/component .hpp
281+ src/entt/entity/entity.hpp
282+ src/entt/entity/fwd.hpp
283+ src/entt/entity/group.hpp
284+ src/entt/entity/handle.hpp
285+ src/entt/entity/mixin.hpp
286+ src/entt/entity/helper.hpp
287+ src/entt/entity/organizer.hpp
288+ src/entt/entity/ranges.hpp
289+ src/entt/entity/registry.hpp
290+ src/entt/entity/runtime_view.hpp
291+ src/entt/entity/snapshot.hpp
292+ src/entt/entity/sparse_set.hpp
293+ src/entt/entity/storage.hpp
294+ src/entt/entity/view.hpp
295+ src/entt/graph/adjacency_matrix.hpp
296+ src/entt/graph/dot.hpp
297+ src/entt/graph/flow.hpp
298+ src/entt/graph/fwd.hpp
299+ src/entt/locator/locator.hpp
300+ src/entt/meta/adl_pointer.hpp
301+ src/entt/meta/container.hpp
302+ src/entt/meta/context.hpp
303+ src/entt/meta/factory.hpp
304+ src/entt/meta/fwd.hpp
305+ src/entt/meta/meta.hpp
306+ src/entt/meta/node.hpp
307+ src/entt/meta/pointer.hpp
308+ src/entt/meta/policy .hpp
309+ src/entt/meta/range.hpp
310+ src/entt/meta/resolve.hpp
311+ src/entt/meta/template.hpp
312+ src/entt/meta/type_traits.hpp
313+ src/entt/meta/utility.hpp
314+ src/entt/poly/fwd.hpp
315+ src/entt/poly/poly.hpp
316+ src/entt/process/fwd.hpp
317+ src/entt/process/process.hpp
318+ src/entt/process/scheduler.hpp
319+ src/entt/resource /cache .hpp
320+ src/entt/resource /fwd.hpp
321+ src/entt/resource /loader.hpp
322+ src/entt/resource /resource .hpp
323+ src/entt/signal/delegate.hpp
324+ src/entt/signal/dispatcher.hpp
325+ src/entt/signal/emitter.hpp
326+ src/entt/signal/fwd.hpp
327+ src/entt/signal/sigh.hpp
328+ src/entt/entt.hpp
329+ src/entt/fwd.hpp
330+
331+ src/entt/container/dense_map.inc
332+ src/entt/container/dense_set.inc
333+ src/entt/container/table.inc
334+ src/entt/container/fwd.inc
335+ src/entt/core/algorithm.inc
336+ src/entt/core/any.inc
337+ src/entt/core/attribute.inc
338+ src/entt/core/bit.inc
339+ src/entt/core/compressed_pair.inc
340+ src/entt/core/enum.inc
341+ src/entt/core/family.inc
342+ src/entt/core/fwd.inc
343+ src/entt/core/hashed_string.inc
344+ src/entt/core/ident.inc
345+ src/entt/core/iterator.inc
346+ src/entt/core/memory.inc
347+ src/entt/core/monostate.inc
348+ src/entt/core/ranges.inc
349+ src/entt/core/tuple.inc
350+ src/entt/core/type_info.inc
351+ src/entt/core/type_traits.inc
352+ src/entt/core/utility.inc
353+ src/entt/entity/component .inc
354+ src/entt/entity/entity.inc
355+ src/entt/entity/fwd.inc
356+ src/entt/entity/group.inc
357+ src/entt/entity/handle.inc
358+ src/entt/entity/mixin.inc
359+ src/entt/entity/helper.inc
360+ src/entt/entity/organizer.inc
361+ src/entt/entity/ranges.inc
362+ src/entt/entity/registry.inc
363+ src/entt/entity/runtime_view.inc
364+ src/entt/entity/snapshot.inc
365+ src/entt/entity/sparse_set.inc
366+ src/entt/entity/storage.inc
367+ src/entt/entity/view.inc
368+ src/entt/graph/adjacency_matrix.inc
369+ src/entt/graph/dot.inc
370+ src/entt/graph/flow.inc
371+ src/entt/graph/fwd.inc
372+ src/entt/locator/locator.inc
373+ src/entt/meta/adl_pointer.inc
374+ src/entt/meta/container.inc
375+ src/entt/meta/context.inc
376+ src/entt/meta/factory.inc
377+ src/entt/meta/fwd.inc
378+ src/entt/meta/meta.inc
379+ src/entt/meta/node.inc
380+ src/entt/meta/pointer.inc
381+ src/entt/meta/policy .inc
382+ src/entt/meta/range.inc
383+ src/entt/meta/resolve.inc
384+ src/entt/meta/template.inc
385+ src/entt/meta/type_traits.inc
386+ src/entt/meta/utility.inc
387+ src/entt/poly/fwd.inc
388+ src/entt/poly/poly.inc
389+ src/entt/process/fwd.inc
390+ src/entt/process/process.inc
391+ src/entt/process/scheduler.inc
392+ src/entt/resource /cache .inc
393+ src/entt/resource /fwd.inc
394+ src/entt/resource /loader.inc
395+ src/entt/resource /resource .inc
396+ src/entt/signal/delegate.inc
397+ src/entt/signal/dispatcher.inc
398+ src/entt/signal/emitter.inc
399+ src/entt/signal/fwd.inc
400+ src/entt/signal/sigh.inc
401+ )
402+
403+ endif ()
404+
227405# Install EnTT and all related files
228406
229407option (ENTT_INSTALL "Install EnTT and all related files." OFF )
@@ -253,7 +431,7 @@ if(ENTT_INSTALL)
253431 include (CMakePackageConfigHelpers)
254432
255433 install (
256- TARGETS EnTT
434+ TARGETS EnTT EnTTModules
257435 EXPORT EnTTTargets
258436 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
259437 )
0 commit comments