Skip to content

Commit f78a569

Browse files
elvisdukaj=
authored andcommitted
add module support
1 parent d4014c7 commit f78a569

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+686
-1
lines changed

CMakeLists.txt

Lines changed: 179 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ option(ENTT_USE_LIBCPP "Use libc++ by adding -stdlib=libc++ flag if available."
3838
option(ENTT_USE_SANITIZER "Enable sanitizers by adding -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined flags if available." OFF)
3939
option(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+
4143
if(ENTT_USE_LIBCPP)
4244
if(NOT WIN32)
4345
include(CheckCXXSourceCompiles)
@@ -224,6 +226,182 @@ if(ENTT_HAS_NATVIS)
224226
)
225227
endif()
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

229407
option(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
)

src/entt.cpp

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
module;
2+
3+
#include <entt/entt.hpp>
4+
5+
export module entt;
6+
7+
#include "entt/container/dense_map.inc"
8+
#include "entt/container/dense_set.inc"
9+
#include "entt/container/fwd.inc"
10+
#include "entt/container/table.inc"
11+
#include "entt/core/algorithm.inc"
12+
#include "entt/core/any.inc"
13+
#include "entt/core/attribute.inc"
14+
#include "entt/core/bit.inc"
15+
#include "entt/core/compressed_pair.inc"
16+
#include "entt/core/enum.inc"
17+
#include "entt/core/family.inc"
18+
#include "entt/core/fwd.inc"
19+
#include "entt/core/hashed_string.inc"
20+
#include "entt/core/ident.inc"
21+
#include "entt/core/iterator.inc"
22+
#include "entt/core/memory.inc"
23+
#include "entt/core/monostate.inc"
24+
#include "entt/core/ranges.inc"
25+
#include "entt/core/tuple.inc"
26+
#include "entt/core/type_info.inc"
27+
#include "entt/core/type_traits.inc"
28+
#include "entt/core/utility.inc"
29+
#include "entt/entity/component.inc"
30+
#include "entt/entity/entity.inc"
31+
#include "entt/entity/fwd.inc"
32+
#include "entt/entity/group.inc"
33+
#include "entt/entity/handle.inc"
34+
#include "entt/entity/helper.inc"
35+
#include "entt/entity/mixin.inc"
36+
#include "entt/entity/organizer.inc"
37+
#include "entt/entity/ranges.inc"
38+
#include "entt/entity/registry.inc"
39+
#include "entt/entity/runtime_view.inc"
40+
#include "entt/entity/snapshot.inc"
41+
#include "entt/entity/sparse_set.inc"
42+
#include "entt/entity/storage.inc"
43+
#include "entt/entity/view.inc"
44+
#include "entt/graph/adjacency_matrix.inc"
45+
#include "entt/graph/dot.inc"
46+
#include "entt/graph/flow.inc"
47+
#include "entt/graph/fwd.inc"
48+
#include "entt/locator/locator.inc"
49+
#include "entt/meta/adl_pointer.inc"
50+
#include "entt/meta/container.inc"
51+
#include "entt/meta/context.inc"
52+
#include "entt/meta/factory.inc"
53+
#include "entt/meta/fwd.inc"
54+
#include "entt/meta/meta.inc"
55+
#include "entt/meta/node.inc"
56+
#include "entt/meta/pointer.inc"
57+
#include "entt/meta/policy.inc"
58+
#include "entt/meta/range.inc"
59+
#include "entt/meta/resolve.inc"
60+
#include "entt/meta/template.inc"
61+
#include "entt/meta/type_traits.inc"
62+
#include "entt/meta/utility.inc"
63+
#include "entt/poly/fwd.inc"
64+
#include "entt/poly/poly.inc"
65+
#include "entt/process/fwd.inc"
66+
#include "entt/process/process.inc"
67+
#include "entt/process/scheduler.inc"
68+
#include "entt/resource/cache.inc"
69+
#include "entt/resource/fwd.inc"
70+
#include "entt/resource/loader.inc"
71+
#include "entt/resource/resource.inc"
72+
#include "entt/signal/delegate.inc"
73+
#include "entt/signal/dispatcher.inc"
74+
#include "entt/signal/emitter.inc"
75+
#include "entt/signal/fwd.inc"
76+
#include "entt/signal/sigh.inc"
77+
78+
#include "entt/operators.inc"
79+
#include "entt/std.inc"

src/entt/container/dense_map.inc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export namespace entt {
2+
using ::entt::dense_map;
3+
} // namespace entt

src/entt/container/dense_set.inc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export namespace entt {
2+
using ::entt::dense_set;
3+
} // namespace entt

src/entt/container/fwd.inc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export namespace entt {
2+
using ::entt::table;
3+
} // namespace entt

src/entt/container/table.inc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export namespace entt {
2+
using ::entt::basic_table;
3+
} // namespace entt
4+

src/entt/core/algorithm.inc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export namespace entt {
2+
using ::entt::std_sort;
3+
using ::entt::insertion_sort;
4+
using ::entt::radix_sort;
5+
} // namespace entt

src/entt/core/any.inc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export namespace entt {
2+
using ::entt::basic_any;
3+
using ::entt::any_cast;
4+
using ::entt::make_any;
5+
using ::entt::forward_as_any;
6+
} // namespace entt

src/entt/core/attribute.inc

Whitespace-only changes.

src/entt/core/bit.inc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export namespace entt {
2+
using ::entt::popcount;
3+
using ::entt::has_single_bit;
4+
using ::entt::next_power_of_two;
5+
using ::entt::fast_mod;
6+
} // namespace entt

src/entt/core/compressed_pair.inc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export namespace entt {
2+
using ::entt::compressed_pair;
3+
using ::entt::swap;
4+
} // namespace entt

src/entt/core/enum.inc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export namespace entt {
2+
using ::entt::enum_as_bitmask;
3+
using ::entt::enum_as_bitmask_v;
4+
} // namespace entt

src/entt/core/family.inc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export namespace entt {
2+
using ::entt::family;
3+
} // namespace entt

src/entt/core/fwd.inc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export namespace entt {
2+
using ::entt::any_policy;
3+
using ::entt::id_type;
4+
using ::entt::any;
5+
using ::entt::hashed_string;
6+
using ::entt::hashed_wstring;
7+
} // namespace entt

src/entt/core/hashed_string.inc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export namespace entt {
2+
using ::entt::basic_hashed_string;
3+
4+
inline namespace literals {
5+
using ::entt::literals::operator ""_hs;
6+
using ::entt::literals::operator ""_hws;
7+
} // namespace literals
8+
9+
}

src/entt/core/ident.inc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export namespace entt {
2+
using ::entt::ident;
3+
} // namespace entt

src/entt/core/iterator.inc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export namespace entt {
2+
using ::entt::input_iterator_pointer;
3+
using ::entt::iota_iterator;
4+
using ::entt::operator==;
5+
using ::entt::operator!=;
6+
using ::entt::iterable_adaptor;
7+
} // namespace entt

src/entt/core/memory.inc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export namespace entt {
2+
using ::entt::to_address;
3+
using ::entt::propagate_on_container_copy_assignment;
4+
using ::entt::propagate_on_container_move_assignment;
5+
using ::entt::propagate_on_container_swap;
6+
using ::entt::allocation_deleter;
7+
using ::entt::allocate_unique;
8+
using ::entt::uses_allocator_construction_args;
9+
using ::entt::make_obj_using_allocator;
10+
using ::entt::uninitialized_construct_using_allocator;
11+
} // namespace entt

src/entt/core/monostate.inc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export namespace entt {
2+
using ::entt::monostate;
3+
using ::entt::monostate_v;
4+
} // namespace entt

src/entt/core/ranges.inc

Whitespace-only changes.

src/entt/core/tuple.inc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export namespace entt {
2+
using ::entt::is_tuple;
3+
using ::entt::is_tuple_v;
4+
using ::entt::unwrap_tuple;
5+
using ::entt::forward_apply;
6+
} // namespace entt

0 commit comments

Comments
 (0)