summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/xmake.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2019-09-07 21:54:53 +0800
committerruki <[email protected]>2019-09-07 21:54:53 +0800
commitf1cb1eb4d5d3e8a603f5e839d8859ab2fa95dfb6 (patch)
treef81a3c702a5f1e978813cfbae3eb4665c93ef04f /xmake/rules/c++/modules/xmake.lua
parent16350d2759319d15c4800e8c2a4184a34ab92171 (diff)
improve rules
Diffstat (limited to 'xmake/rules/c++/modules/xmake.lua')
-rw-r--r--xmake/rules/c++/modules/xmake.lua73
1 files changed, 1 insertions, 72 deletions
diff --git a/xmake/rules/c++/modules/xmake.lua b/xmake/rules/c++/modules/xmake.lua
index 5cf5517cb..29f0b28f7 100644
--- a/xmake/rules/c++/modules/xmake.lua
+++ b/xmake/rules/c++/modules/xmake.lua
@@ -21,76 +21,5 @@
-- define rule: c++.build.modules
rule("c++.build.modules")
set_extensions(".mpp", ".mxx", ".cppm", ".ixx")
- before_build_files(function (target, sourcebatch, opt)
-
- -- imports
- import("core.tool.compiler")
-
- -- do compile
- local compinst = compiler.load("cxx")
- if compinst:name() == "clang" and compinst:has_flags("-fmodules-ts") then
-
- -- attempt to compile the module files as cxx
- sourcebatch.sourcekind = "cxx"
- sourcebatch.objectfiles = sourcebatch.objectfiles or {}
- sourcebatch.dependfiles = sourcebatch.dependfiles or {}
- for _, sourcefile in ipairs(sourcebatch.sourcefiles) do
- local objectfile = target:objectfile(sourcefile) .. ".pcm"
- table.insert(sourcebatch.objectfiles, objectfile)
- table.insert(sourcebatch.dependfiles, target:dependfile(objectfile))
- end
-
- -- compile module files to *.pcm
- opt = table.join(opt, {configs = {cxxflags = {"-fmodules-ts", "--precompile", "-x c++-module"}}})
- import("private.action.build.object")(target, sourcebatch, opt)
-
- -- compile *.pcm to object files
- local modulefiles = {}
- for idx, sourcefile in ipairs(sourcebatch.sourcefiles) do
- local modulefile = sourcebatch.objectfiles[idx]
- local objectfile = target:objectfile(sourcefile)
- sourcebatch.sourcefiles[idx] = modulefile
- sourcebatch.objectfiles[idx] = objectfile
- sourcebatch.dependfiles[idx] = target:dependfile(objectfile)
- table.insert(modulefiles, modulefile)
- end
- opt.configs = {cxxflags = {"-fmodules-ts"}}
- opt.quiet = true
- import("private.action.build.object")(target, sourcebatch, opt)
-
- -- add module files
- target:add("cxxflags", "-fmodules-ts")
- for _, modulefile in ipairs(modulefiles) do
- target:add("cxxflags", "-fmodule-file=" .. modulefile)
- end
- elseif compinst:name() == "cl" and compinst:has_flags("/experimental:module") then
-
- -- attempt to compile the module files as cxx
- local modulefiles = {}
- opt = table.join(opt, {configs = {}})
- sourcebatch.sourcekind = "cxx"
- sourcebatch.objectfiles = sourcebatch.objectfiles or {}
- sourcebatch.dependfiles = sourcebatch.dependfiles or {}
- for _, sourcefile in ipairs(sourcebatch.sourcefiles) do
- local objectfile = target:objectfile(sourcefile)
- local dependfile = target:dependfile(objectfile)
- local modulefile = objectfile .. ".pcm"
-
- -- compile module file to *.pcm
- local singlebatch = {sourcekind = "cxx", sourcefiles = {sourcefile}, objectfiles = {objectfile}, dependfiles = {dependfile}}
- opt.configs.cxxflags = {"/experimental:module /module:interface /module:output " .. os.args(modulefile), "/TP"}
- import("private.action.build.object")(target, singlebatch, opt)
- table.insert(modulefiles, modulefile)
- table.insert(sourcebatch.objectfiles, objectfile)
- table.insert(sourcebatch.dependfiles, dependfile)
- end
-
- -- add module files
- for _, modulefile in ipairs(modulefiles) do
- target:add("cxxflags", "/experimental:module /module:reference " .. os.args(modulefile))
- end
- else
- raise("compiler(%s): does not support module!", compinst:name())
- end
- end)
+ before_build_files("build_modulefiles")