diff options
| author | ruki <[email protected]> | 2019-09-07 22:22:02 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2019-09-07 22:22:02 +0800 |
| commit | 1e3b7f298e1cbeb9bb63fd85fc06f2c9b0ee6e75 (patch) | |
| tree | b32df097a30c892fbbb0ae46d8007aa39257b6b4 | |
| parent | f1cb1eb4d5d3e8a603f5e839d8859ab2fa95dfb6 (diff) | |
build module files using gcc
| -rw-r--r-- | xmake/rules/c++/modules/build_modulefiles.lua | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/xmake/rules/c++/modules/build_modulefiles.lua b/xmake/rules/c++/modules/build_modulefiles.lua index 427057814..2847d5791 100644 --- a/xmake/rules/c++/modules/build_modulefiles.lua +++ b/xmake/rules/c++/modules/build_modulefiles.lua @@ -59,6 +59,35 @@ function _build_modulefiles_clang(target, sourcebatch, opt) end end +-- build module files using gcc +function _build_modulefiles_gcc(target, sourcebatch, opt) + + -- 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-ts", "-fmodule-output=" .. modulefile, "-x c++"} + 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", "-fmodules-ts", "-fmodule-file=" .. modulefile) + end +end + -- build module files using msvc function _build_modulefiles_msvc(target, sourcebatch, opt) @@ -95,6 +124,8 @@ function main(target, sourcebatch, opt) local compinst = compiler.load("cxx") if compinst:name() == "clang" and compinst:has_flags("-fmodules-ts") then _build_modulefiles_clang(target, sourcebatch, opt) + elseif compinst:name() == "gcc" and compinst:has_flags("-fmodules-ts") then + _build_modulefiles_gcc(target, sourcebatch, opt) elseif compinst:name() == "cl" and compinst:has_flags("/experimental:module") then _build_modulefiles_msvc(target, sourcebatch, opt) else |
