summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/xmake.lua
diff options
context:
space:
mode:
authorArthur LAURENT <[email protected]>2025-05-05 17:13:25 +0200
committerArthur LAURENT <[email protected]>2025-05-09 15:56:33 +0200
commit5d6d36e0db45d90dfa7f0cdf2937d989de683833 (patch)
tree2d1fbb82ee8d38921af1863fd3ce968f7c5cea75 /xmake/rules/c++/modules/xmake.lua
parentd88bd9c5ace6c64981420569fb886f7c646135c0 (diff)
(C++ module support) improve jobgraph support
Diffstat (limited to 'xmake/rules/c++/modules/xmake.lua')
-rw-r--r--xmake/rules/c++/modules/xmake.lua40
1 files changed, 28 insertions, 12 deletions
diff --git a/xmake/rules/c++/modules/xmake.lua b/xmake/rules/c++/modules/xmake.lua
index c1b48ed41..64de8e017 100644
--- a/xmake/rules/c++/modules/xmake.lua
+++ b/xmake/rules/c++/modules/xmake.lua
@@ -21,36 +21,52 @@
-- define rule: c++.build.modules
rule("c++.build.modules")
- -- @note common.contains_modules() need it
+ -- @note support.contains_modules() need it
set_extensions(".cppm", ".ccm", ".cxxm", ".c++m", ".mpp", ".mxx", ".ixx")
- add_deps("c++.build.modules.builder")
- add_deps("c++.build.modules.install")
+ add_deps("c++.build.modules.scanner",
+ "c++.build.modules.builder",
+ "c++.build.modules.install")
on_config("config")
--- build modules
-rule("c++.build.modules.builder")
+ -- insert std modules early to enable culling them if unused
+ after_config("config.insert_stdmodules")
+
+-- scan modules
+rule("c++.build.modules.scanner")
set_sourcekinds("cxx")
set_extensions(".mpp", ".mxx", ".cppm", ".ixx")
-- generate module dependencies
on_prepare_files("scanner", {jobgraph = true})
+ -- insert objectfiles
+ after_prepare_files("scanner.after_scan")
+
+-- build modules
+rule("c++.build.modules.builder")
+ set_sourcekinds("cxx")
+ set_extensions(".mpp", ".mxx", ".cppm", ".ixx")
+
+ add_orders("c++.build.modules.scanner", "c++.build.modules.builder")
+
-- parallel build support to accelerate `xmake build` to build modules
- before_build_files("builder", {jobgraph = true, batch = true})
+ before_build_files("builder.build_bmis", {jobgraph = true, batch = true})
+
+ on_build_files("builder.build_objectfiles", {jobgraph = true, batch = true})
-- serial compilation only, usually used to support project generator
- before_buildcmd_files("builder")
+ before_buildcmd_files("builder.build_bmis")
+
+ on_buildcmd_files("builder.build_objectfiles")
- after_clean(function (target)
- import("builder.clean")
- end)
+ after_clean("builder.clean")
-- install modules
rule("c++.build.modules.install")
set_extensions(".mpp", ".mxx", ".cppm", ".ixx")
- before_install("builder.install")
+ before_install("install.install")
- before_uninstall("builder.uninstall")
+ before_uninstall("install.uninstall")