summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/build_modulefiles.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2021-10-12 21:57:46 +0800
committerGitHub <[email protected]>2021-10-12 21:57:46 +0800
commit3cafed12222db81c39361adc4e2425fb33b5b170 (patch)
tree34960897e14d5b9d29e281b301da650145a63406 /xmake/rules/c++/modules/build_modulefiles.lua
parent71ea9007f37d54c0224c43c1a3a1f2f3854c07c0 (diff)
Update build_modulefiles.lua
Diffstat (limited to 'xmake/rules/c++/modules/build_modulefiles.lua')
-rw-r--r--xmake/rules/c++/modules/build_modulefiles.lua31
1 files changed, 14 insertions, 17 deletions
diff --git a/xmake/rules/c++/modules/build_modulefiles.lua b/xmake/rules/c++/modules/build_modulefiles.lua
index 7ad566f5c..a41ab2f39 100644
--- a/xmake/rules/c++/modules/build_modulefiles.lua
+++ b/xmake/rules/c++/modules/build_modulefiles.lua
@@ -73,36 +73,33 @@ function _build_modulefiles_clang(target, sourcebatch, opt)
end
end
--- TODO
-- build module files using gcc
function _build_modulefiles_gcc(target, sourcebatch, opt)
- --[[
+ -- get modules flag
+ local modulesflag
+ local compinst = compiler.load("cxx", {target = target})
+ if compinst:has_flags("-fmodules-ts") then
+ modulesflag = "-fmodules-ts"
+ end
+ assert(modulesflag, "compiler(gcc): does not support c++ module!")
+
-- 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 = {"-fmodules", "-fmodule-output=" .. modulefile, "-x c++"}
- import("private.action.build.object").build(target, singlebatch, opt)
- table.insert(modulefiles, modulefile)
table.insert(sourcebatch.objectfiles, objectfile)
- table.insert(sourcebatch.dependfiles, dependfile)
+ table.insert(sourcebatch.dependfiles, target:dependfile(objectfile))
end
+ -- compile module files to object files
+ opt = table.join(opt, {configs = {force = {cxxflags = {modulesflag, "-x c++"}}}})
+ import("private.action.build.object").build(target, sourcebatch, opt)
+
-- add module files
- for _, modulefile in ipairs(modulefiles) do
- target:add("cxxflags", "-fmodules", "-fmodule-file=" .. modulefile)
- end]]
- raise("compiler(gcc): not implemented for c++ module!")
+ target:add("cxxflags", modulesflag)
end
-- build module files using msvc