summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/modules_support/gcc.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2022-08-17 22:53:00 +0800
committerruki <[email protected]>2022-08-17 22:53:00 +0800
commit53049fbbe417b7fa85c773fc7c9bb83d3be1115b (patch)
tree109c62a6d46ebb443b6e4f00331acb3bf9015c08 /xmake/rules/c++/modules/modules_support/gcc.lua
parentd7b348d387f8719c3d1757f50bfce18d7ba2d2e2 (diff)
improve gcc stl headerunits
Diffstat (limited to 'xmake/rules/c++/modules/modules_support/gcc.lua')
-rw-r--r--xmake/rules/c++/modules/modules_support/gcc.lua20
1 files changed, 18 insertions, 2 deletions
diff --git a/xmake/rules/c++/modules/modules_support/gcc.lua b/xmake/rules/c++/modules/modules_support/gcc.lua
index 1405d1cfa..9660466bd 100644
--- a/xmake/rules/c++/modules/modules_support/gcc.lua
+++ b/xmake/rules/c++/modules/modules_support/gcc.lua
@@ -159,6 +159,7 @@ function generate_stl_headerunits_for_batchjobs(target, batchjobs, headerunits,
local compinst = target:compiler("cxx")
local mapper_file = _get_module_mapper()
local stlcachedir = common.stlmodules_cachedir(target)
+ local modulemapperflag = get_modulemapperflag(target)
-- build headerunits
local projectdir = os.projectdir()
@@ -169,11 +170,26 @@ function generate_stl_headerunits_for_batchjobs(target, batchjobs, headerunits,
depend.on_changed(function()
progress.show((index * 100) / total, "${color.build.object}generating.cxx.headerunit.bmi %s", headerunit.name)
local args = {"-c", "-x", "c++-system-header", headerunit.name}
- os.vrunv(compinst:program(), table.join(compinst:compflags({target = target}), args))
+ local flags = table.join(compinst:compflags({target = target}), args)
+ -- we need to support reading and writing mapperfile in parallel, otherwise it will be broken
+ -- @see tests/c++/modules/stl_headerunit_cpp_only
+ local mapper_file_tmp = os.tmpfile()
+ os.cp(mapper_file, mapper_file_tmp)
+ _add_module_to_mapper(mapper_file_tmp, headerunit.path, path.absolute(bmifile, projectdir))
+ for idx, flag in ipairs(flags) do
+ if flag:startswith(modulemapperflag) then
+ flags[idx] = modulemapperflag .. mapper_file_tmp
+ break
+ end
+ end
+ os.vrunv(compinst:program(), flags)
+ _add_module_to_mapper(mapper_file, headerunit.path, path.absolute(bmifile, projectdir))
+ os.tryrm(mapper_file_tmp)
end, {dependfile = target:dependfile(bmifile), files = {headerunit.path}})
end, {rootjob = opt.rootjob})
+ else
+ _add_module_to_mapper(mapper_file, headerunit.path, path.absolute(bmifile, projectdir))
end
- _add_module_to_mapper(mapper_file, headerunit.path, path.absolute(bmifile, projectdir))
end
end