@@ -38,6 +38,8 @@ option(ENTT_USE_LIBCPP "Use libc++ by adding -stdlib=libc++ flag if available."
38
38
option (ENTT_USE_SANITIZER "Enable sanitizers by adding -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined flags if available." OFF )
39
39
option (ENTT_USE_CLANG_TIDY "Enable static analysis with clang-tidy" OFF )
40
40
41
+ option (ENTT_MODULES "Build as a module library (requires c++20)" ON )
42
+
41
43
if (ENTT_USE_LIBCPP )
42
44
if (NOT WIN32 )
43
45
include (CheckCXXSourceCompiles )
@@ -224,6 +226,182 @@ if(ENTT_HAS_NATVIS)
224
226
)
225
227
endif ()
226
228
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
+
227
405
# Install EnTT and all related files
228
406
229
407
option (ENTT_INSTALL "Install EnTT and all related files." OFF )
@@ -253,7 +431,7 @@ if(ENTT_INSTALL)
253
431
include (CMakePackageConfigHelpers )
254
432
255
433
install (
256
- TARGETS EnTT
434
+ TARGETS EnTT EnTTModules
257
435
EXPORT EnTTTargets
258
436
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
259
437
)
0 commit comments