summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/modules_support/gcc.lua
diff options
context:
space:
mode:
authorArthur LAURENT <[email protected]>2022-12-02 23:47:45 +0100
committerArthur LAURENT <[email protected]>2022-12-03 00:05:16 +0100
commit919115f8faab05b6915dbe336720e2d7cbc42671 (patch)
tree9ae46cbf5ba1efc629cbcc5f9b0eeecbe31d918b /xmake/rules/c++/modules/modules_support/gcc.lua
parent09113b27d3b5749b09716e8e0ec6c766b4662bd5 (diff)
minor refactor and improvements to C++ module build
Diffstat (limited to 'xmake/rules/c++/modules/modules_support/gcc.lua')
-rw-r--r--xmake/rules/c++/modules/modules_support/gcc.lua52
1 files changed, 10 insertions, 42 deletions
diff --git a/xmake/rules/c++/modules/modules_support/gcc.lua b/xmake/rules/c++/modules/modules_support/gcc.lua
index 476bc6487..cbdf9b1bf 100644
--- a/xmake/rules/c++/modules/modules_support/gcc.lua
+++ b/xmake/rules/c++/modules/modules_support/gcc.lua
@@ -111,40 +111,7 @@ function _build_modulefile(target, sourcefile, opt)
end
-- trace
- progress.show(opt.progress, "${color.build.object}build.cxx.module %s", sourcefile)
- vprint(compinst:compcmd(sourcefile, objectfile, {compflags = compflags, rawargs = true}))
-
- if not dryrun then
-
- -- do compile
- dependinfo.files = {}
- assert(compinst:compile(sourcefile, objectfile, {dependinfo = dependinfo, compflags = compflags}))
-
- -- update files and values to the dependent file
- dependinfo.values = depvalues
- table.join2(dependinfo.files, sourcefile)
- depend.save(dependinfo, dependfile)
- end
-end
-
--- build interface module file
-function _build_interfacemodulefile(target, sourcefile, opt)
- local objectfile = opt.objectfile
- local dependfile = opt.dependfile
- local compinst = compiler.load("cxx", {target = target})
- local compflags = table.join("-x", "c++", compinst:compflags({target = target}))
- local dependinfo = option.get("rebuild") and {} or (depend.load(dependfile) or {})
-
- -- need build this object?
- local dryrun = option.get("dry-run")
- local depvalues = {compinst:program(), compflags}
- local lastmtime = os.isfile(objectfile) and os.mtime(dependfile) or 0
- if not dryrun and not depend.is_changed(dependinfo, {lastmtime = lastmtime, values = depvalues}) then
- return
- end
-
- -- trace
- progress.show(opt.progress, "${color.build.object}generating.cxx.module.bmi %s", opt.name)
+ progress.show(opt.progress, "${color.build.object}compiling.module.$(mode) %s", opt.name)
vprint(compinst:compcmd(sourcefile, objectfile, {compflags = compflags, rawargs = true}))
if not dryrun then
@@ -197,7 +164,7 @@ function generate_dependencies(target, sourcebatch, opt)
local dependfile = target:dependfile(sourcefile)
depend.on_changed(function()
if opt.progress then
- progress.show(opt.progress, "${color.build.object}generating.cxx.module.deps %s", sourcefile)
+ progress.show(opt.progress, "${color.build.object}generating.module.deps %s", sourcefile)
end
local outputdir = path.translate(path.join(cachedir, path.directory(path.relative(sourcefile, projectdir))))
@@ -264,7 +231,7 @@ function generate_stl_headerunits_for_batchjobs(target, batchjobs, headerunits,
if not os.isfile(bmifile) then
batchjobs:addjob(headerunit.name, function (index, total)
depend.on_changed(function()
- progress.show((index * 100) / total, "${color.build.object}generating.cxx.headerunit.bmi %s", headerunit.name)
+ progress.show((index * 100) / total, "${color.build.object}compiling.headerunit.$(mode) %s", headerunit.name)
local args = {"-c", "-x", "c++-system-header", headerunit.name}
local flags = table.join(compinst:compflags({target = target}), args)
-- we need to support reading and writing mapperfile in parallel, otherwise it will be broken
@@ -302,7 +269,7 @@ function generate_stl_headerunits_for_batchcmds(target, batchcmds, headerunits,
local bmifile = path.join(stlcachedir, headerunit.name .. get_bmi_extension())
if not os.isfile(bmifile) then
local args = {"-c", "-x", "c++-system-header", headerunit.name}
- batchcmds:show_progress(opt.progress, "${color.build.object}generating.cxx.headerunit.bmi %s", headerunit.name)
+ batchcmds:show_progress(opt.progress, "${color.build.object}compiling.headerunit.$(mode) %s", headerunit.name)
batchcmds:vrunv(compinst:program(), table.join(compinst:compflags({target = target}), args))
end
batchcmds:add_depfiles(headerunit.path)
@@ -340,7 +307,7 @@ function generate_user_headerunits_for_batchjobs(target, batchjobs, headerunits,
end
batchjobs:addjob(headerunit.name, function (index, total)
depend.on_changed(function()
- progress.show((index * 100) / total, "${color.build.object}generating.cxx.headerunit.bmi %s", headerunit.name)
+ progress.show((index * 100) / total, "${color.build.object}compiling.headerunit.$(mode) %s", headerunit.name)
local objectdir = path.directory(objectfile)
if not os.isdir(objectdir) then
os.mkdir(objectdir)
@@ -399,7 +366,7 @@ function generate_user_headerunits_for_batchcmds(target, batchcmds, headerunits,
headerunit_path = path.is_absolute(headerunit.path) and headerunit.path or path.join(".", headerunit.path)
end
- batchcmds:show_progress(opt.progress, "${color.build.object}generating.cxx.headerunit.bmi %s", headerunit.name)
+ batchcmds:show_progress(opt.progress, "${color.build.object}compiling.headerunit.$(mode) %s", headerunit.name)
batchcmds:vrunv(compinst:program(), table.join(compinst:compflags({target = target}), args))
batchcmds:add_depfiles(headerunit.path)
@@ -436,7 +403,7 @@ function build_modules_for_batchjobs(target, batchjobs, objectfiles, modules, op
local bmifile = provide.bmi
local moduleinfo = table.copy(provide)
moduleinfo.job = batchjobs:newjob(provide.sourcefile, function (index, total)
- _build_interfacemodulefile(target, provide.sourcefile, {
+ _build_modulefile(target, provide.sourcefile, {
objectfile = objectfile,
dependfile = target:dependfile(bmifile),
name = name,
@@ -458,6 +425,7 @@ function build_modules_for_batchjobs(target, batchjobs, objectfiles, modules, op
_build_modulefile(target, m.cppfile, {
objectfile = objectfile,
dependfile = target:dependfile(objectfile),
+ name = m.cppfile,
progress = (index * 100) / total})
target:add("objectfiles", objectfile)
end)
@@ -498,7 +466,7 @@ function build_modules_for_batchcmds(target, batchcmds, objectfiles, modules, op
local bmifile = provide.bmi
local args = {"-o", path(objectfile), "-c", path(provide.sourcefile)}
- batchcmds:show_progress(opt.progress, "${color.build.object}generating.cxx.module.bmi %s", name)
+ batchcmds:show_progress(opt.progress, "${color.build.object}compiling.module.$(mode) %s", name)
batchcmds:mkdir(path.directory(objectfile))
batchcmds:vrunv(compinst:program(), table.join(compinst:compflags({target = target}), common_args, args))
batchcmds:add_depfiles(provide.sourcefile)
@@ -507,7 +475,7 @@ function build_modules_for_batchcmds(target, batchcmds, objectfiles, modules, op
depmtime = math.max(depmtime, os.mtime(bmifile))
elseif common.has_module_extension(m.cppfile) then
local args = {"-o", path(objectfile), "-c", path(m.cppfile)}
- batchcmds:show_progress(opt.progress, "${color.build.object}build.cxx.module %s", m.cppfile)
+ batchcmds:show_progress(opt.progress, "${color.build.object}compiling.module.$(mode) %s", m.cppfile)
batchcmds:mkdir(path.directory(objectfile))
batchcmds:vrunv(compinst:program(), table.join(compinst:compflags({target = target}), args))
batchcmds:add_depfiles(m.cppfile)