diff options
| author | Arthur LAURENT <[email protected]> | 2022-08-02 18:32:58 +0200 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2022-08-02 18:32:58 +0200 |
| commit | ab70577eccc2f4b003041e5c8850a775ddc81be0 (patch) | |
| tree | 1c697961fabca67c6e2d6bed7e45cc92c81406a5 | |
| parent | 37af4ce4b13e5b7638fae804f967e28459626958 (diff) | |
[C++20 Modules] Improve code
| -rw-r--r-- | xmake/rules/c++/modules/xmake.lua | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/xmake/rules/c++/modules/xmake.lua b/xmake/rules/c++/modules/xmake.lua index 0f03b9b13..8992e3133 100644 --- a/xmake/rules/c++/modules/xmake.lua +++ b/xmake/rules/c++/modules/xmake.lua @@ -20,15 +20,18 @@ -- define rule: c++.build.modules rule("c++.build.modules") + set_extensions(".mpp", ".mxx", ".cppm", ".ixx") + add_deps("c++.build.modules.dependencies") add_deps("c++.build.modules.builder") + add_deps("c++.build.modules.install") on_config(function (target) - local target_with_modules = (target:modulefiles() and #target:modulefiles() > 0) and true or false + local target_with_modules = target:sourcebatches()["c++.build.modules"] and true or false for _, dep in ipairs(target:orderdeps()) do local modulefiles = dep:get("modulefiles") if modulefiles and #modulefiles > 0 then - target_with_modules = true + target_with_modules = target:sourcebatches()["c++.build.modules"] and true or target_with_modules break end end @@ -55,14 +58,15 @@ rule("c++.build.modules") -- load parent build_modules.load_parent(target, opt) - for _, modulefile in ipairs(target:modulefiles()) do - target:add("files", modulefile) - end - target:set("cxx.has_modules", true) end end) + +rule("c++.build.modules.dependencies") + set_sourcekinds("cxx") + set_extensions(".mpp", ".mxx", ".cppm", ".ixx") + before_build(function(target, opt) if not target:get("cxx.has_modules") then return @@ -80,33 +84,20 @@ rule("c++.build.modules") raise("compiler(%s): does not support c++ module!", toolname) end - -- build dependency data local common = import("build_modules.common") - local moduleinfos = {} - for _, sourcebatch in pairs(target:sourcebatches()) do - local batch = sourcebatch - - if batch.rulename == "c++.build.modules.builder" then - batch.objectfiles = {} - batch.dependfiles = {} - common.patch_sourcebatch(target, batch, opt) - end - - if batch.rulename:startswith("c++.build") then - build_modules.generate_dependencies(target, batch, opt) - local infos = common.load(target, batch, opt) + -- build dependency data + local batch = target:sourcebatches()["c++.build.modules.dependencies"] + common.patch_sourcebatch(target, batch, opt) - table.join2(moduleinfos, infos or {}) - end - end + build_modules.generate_dependencies(target, batch, opt) + local moduleinfos = common.load(target, batch, opt) local modules = common.parse_dependency_data(target, moduleinfos, opt) target:data_set("cxx.modules", modules) end) - rule("c++.build.modules.builder") set_sourcekinds("cxx") set_extensions(".mpp", ".mxx", ".cppm", ".ixx") @@ -131,6 +122,8 @@ rule("c++.build.modules.builder") local common = import("build_modules.common") local batch = sourcebatch + print(sourcebatch) + print(batch) batch.objectfiles = {} batch.dependfiles = {} @@ -174,4 +167,13 @@ rule("c++.build.modules.builder") local objectfiles = common.sort_modules_by_dependencies(batch.objectfiles, modules) build_modules.build_modules(target, batchcmds, objectfiles, modules, opt) - end)
\ No newline at end of file + end) + +rules("c++.build.modules.install") + set_extensions(".mpp", ".mxx", ".cppm", ".ixx") + + on_config(function (target) + local sourcebatch = target:sourcebatches()["c++.build.modules.install"] + + target:add("installfiles", sourcebatch.sourcefiles, {prefixdir = "include"}) + end
\ No newline at end of file |
