diff options
| author | Arthur LAURENT <[email protected]> | 2022-08-07 14:59:23 +0200 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2022-08-07 14:59:23 +0200 |
| commit | 1c96d8379173130442227222c75e0caac6afb40b (patch) | |
| tree | 04899d36b4565ba398c18a7fe9d88aa41c3b3746 /xmake/rules/c++/modules | |
| parent | a8f09abe90cf7955a0b8bb2f6747ecc6ac0c28a7 (diff) | |
Use localcache instead of a file
Diffstat (limited to 'xmake/rules/c++/modules')
| -rw-r--r-- | xmake/rules/c++/modules/modules_support/clang.lua | 52 | ||||
| -rw-r--r-- | xmake/rules/c++/modules/modules_support/common.lua | 9 | ||||
| -rw-r--r-- | xmake/rules/c++/modules/modules_support/gcc.lua | 4 | ||||
| -rw-r--r-- | xmake/rules/c++/modules/modules_support/msvc.lua | 81 |
4 files changed, 51 insertions, 95 deletions
diff --git a/xmake/rules/c++/modules/modules_support/clang.lua b/xmake/rules/c++/modules/modules_support/clang.lua index 28ee152bc..4749f7fe3 100644 --- a/xmake/rules/c++/modules/modules_support/clang.lua +++ b/xmake/rules/c++/modules/modules_support/clang.lua @@ -27,30 +27,21 @@ import("utils.progress") import("private.action.build.object", {alias = "objectbuilder"}) import("common") --- get and create the path of module mapper -function _get_module_mapper() - local mapper_file = path.join(config.buildir(), "mapper.txt") - if not os.isfile(mapper_file) then - io.writefile(mapper_file, "") - end - return mapper_file -end - -- add a module into the mapper -- -- e.g -- -fmodule-file=foo=build/.gens/Foo/rules/modules/cache/foo.pcm -- -function _add_module_to_mapper(target, file, module, bmi) +function _add_module_to_mapper(target, module, bmi) + local cache = common.localcache():get("mapflags") or {} local modulefileflag = get_modulefileflag(target) - for line in io.lines(file) do - if line:startswith(modulefileflag .. module) then - return - end + local mapflag = format("%s%s=%s", modulefileflag, module, bmi) + if table.contains(cache, mapflag) then + return end - local f = io.open(file, "a") - f:print("%s%s=%s", modulefileflag, module, bmi) - f:close() + table.insert(cache, mapflag) + common.localcache():set("mapflags", cache) + common.localcache():save("mapflags") end -- add a header unit into the mapper @@ -58,7 +49,18 @@ end -- e.g -- -fmodule-file=build/.gens/Foo/rules/modules/cache/foo.hpp.pcm -- -function _add_headerunit_to_mapper(target, file, bmi) +function _add_headerunit_to_mapper(target, bmi) + local cache = common.localcache():get("mapflags") or {} + local modulefileflag = get_modulefileflag(target) + local mapflag = format("%s%s", modulefileflag, bmi) + if table.contains(cache, mapflag) then + return + end + table.insert(cache, mapflag) + common.localcache():set("mapflags", cache) + common.localcache():save("mapflags") +end + local modulefileflag = get_modulefileflag(target) for line in io.lines(file) do if line:startswith(modulefileflag .. bmi) then @@ -74,7 +76,6 @@ end function load(target) local cachedir = common.modules_cachedir(target) local stlcachedir = common.stlmodules_cachedir(target) - local mapper_file = _get_module_mapper() -- get module and module cache flags local modulesflag = get_modulesflag(target) @@ -174,7 +175,6 @@ end -- generate target stl header units for batchcmds function generate_stl_headerunits_for_batchcmds(target, batchcmds, headerunits, opt) local compinst = target:compiler("cxx") - local mapper_file = _get_module_mapper() -- get cachedirs local stlcachedir = common.stlmodules_cachedir(target) @@ -195,7 +195,7 @@ function generate_stl_headerunits_for_batchcmds(target, batchcmds, headerunits, -- libc++ have a builtin module mapper if not target:data_set("cxx.modules.use_libc++") then - _add_headerunit_to_mapper(target, mapper_file, bmifile) + _add_headerunit_to_mapper(target, bmifile) end end depmtime = math.max(depmtime, os.mtime(bmifile)) @@ -207,7 +207,6 @@ end function generate_user_headerunits_for_batchcmds(target, batchcmds, headerunits, opt) local compinst = target:compiler("cxx") assert(has_headerunitsupport(target), "compiler(clang): does not support c++ header units!") - local mapper_file = _get_module_mapper() -- get cachedirs local cachedir = common.modules_cachedir(target) @@ -248,7 +247,7 @@ function generate_user_headerunits_for_batchcmds(target, batchcmds, headerunits, batchcmds:show_progress(opt.progress, "${color.build.object}generating.cxx.headerunit.bmi %s", headerunit.name) batchcmds:vrunv(compinst:program(), table.join(compinst:compflags({target = target}), args)) batchcmds:add_depfiles(headerunit.path) - _add_headerunit_to_mapper(target, mapper_file, bmifile) + _add_headerunit_to_mapper(target, bmifile) depmtime = math.max(depmtime, os.mtime(bmifile)) end @@ -258,7 +257,6 @@ end -- build module files for batchcmds function build_modules_for_batchcmds(target, batchcmds, objectfiles, modules, opt) local compinst = target:compiler("cxx") - local mapper_file = _get_module_mapper() -- get cachedirs local cachedir = common.modules_cachedir(target) @@ -298,7 +296,7 @@ function build_modules_for_batchcmds(target, batchcmds, objectfiles, modules, op batchcmds:vrunv(compinst:program(), table.join(compinst:compflags({target = target}), common_args, {bmifile}, {"-c", "-o", objectfile})) batchcmds:add_depfiles(provide.sourcefile) - _add_module_to_mapper(target, mapper_file, name, bmifile) + _add_module_to_mapper(target, name, bmifile) target:add("objectfiles", objectfile) depmtime = math.max(depmtime, os.mtime(bmifile)) @@ -459,8 +457,4 @@ function has_headerunitsupport(target) _g.support_headerunits = support_headerunits or false end return support_headerunits or nil -end - --- no .o generated by header units on Clang -function append_headerunits_objectfiles(target) end
\ No newline at end of file diff --git a/xmake/rules/c++/modules/modules_support/common.lua b/xmake/rules/c++/modules/modules_support/common.lua index aa1db3f0f..34d014238 100644 --- a/xmake/rules/c++/modules/modules_support/common.lua +++ b/xmake/rules/c++/modules/modules_support/common.lua @@ -476,5 +476,12 @@ function build_modules_for_batchcmds(target, batchcmds, sourcebatch, modules, op end function append_headerunits_objectfiles(target) - modules_support(target).append_headerunits_objectfiles(target) + local cache = localcache():get("headerunit_objectfiles") or {} + if target:is_binary() then + target:add("ldflags", cache, {force = true}) + elseif target:is_static() == "static" then + target:add("arflags", cache, {force = true}) + elseif target:is_shared() == "shared" then + target:add("shflags", cache, {force = true}) + end end
\ No newline at end of file diff --git a/xmake/rules/c++/modules/modules_support/gcc.lua b/xmake/rules/c++/modules/modules_support/gcc.lua index e5deed0cd..99045cf54 100644 --- a/xmake/rules/c++/modules/modules_support/gcc.lua +++ b/xmake/rules/c++/modules/modules_support/gcc.lua @@ -336,8 +336,4 @@ function get_depoutputflag(target) _g.depoutputflag = depoutputflag or false end return depoutputflag or nil -end - --- no .o generated by header units on GCC -function append_headerunits_objectfiles(target) end
\ No newline at end of file diff --git a/xmake/rules/c++/modules/modules_support/msvc.lua b/xmake/rules/c++/modules/modules_support/msvc.lua index 371cc1f50..b2b2e605a 100644 --- a/xmake/rules/c++/modules/modules_support/msvc.lua +++ b/xmake/rules/c++/modules/modules_support/msvc.lua @@ -27,39 +27,21 @@ import("utils.progress") import("private.action.build.object", {alias = "objectbuilder"}) import("common") --- get and create the path of module mapper -function _get_module_mapper() - local mapper_file = path.join(config.buildir(), "mapper.txt") - if not os.isfile(mapper_file) then - io.writefile(mapper_file, "") - end - return mapper_file -end - --- get and create the path of linker arguments -function _get_linker_argument_file() - local linker_file = path.join(config.buildir(), "linkargs.txt") - if not os.isfile(linker_file) then - io.writefile(linker_file, "") - end - return linker_file -end - -- add a module or header unit into the mapper -- -- e.g -- /headerUnit:angle cstdint=cstdint.ifc -- /headerUnit:angle glm/mat4x4.hpp=Users\arthu\AppData\Local\.xmake\packages\g\glm\0.9.9+8\91454f3ee0be416cb9c7452970a2300f\include\glm\mat4x4.hpp.ifc -- -function _add_module_to_mapper(file, argument, module) - for line in io.lines(file) do - if line:startswith(argument .. " " .. module) then - return - end +function _add_module_to_mapper(argument, module) + local cache = common.localcache():get("mapflags") or {} + local mapflag = format("%s %s", argument, module) + if table.contains(cache, mapflag) then + return end - local f = io.open(file, "a") - f:print("%s %s", argument, module) - f:close() + table.insert(cache, mapflag) + common.localcache():set("mapflags", cache) + common.localcache():save("mapflags") end -- add an objectfile to the linker args @@ -67,23 +49,20 @@ end -- e.g -- foo.obj -- -function _add_objectfile_to_link_arguments(file, objectfile) - for line in io.lines(file) do - if line:startswith(objectfile) then - return - end +function _add_objectfile_to_link_arguments(objectfile) + local cache = common.localcache():get("headerunit_objectfiles") or {} + if table.contains(cache, objectfile) then + return end - local f = io.open(file, "a") - f:print(objectfile) - f:close() + table.insert(cache, objectfile) + common.localcache():set("headerunit_objectfiles", cache) + common.localcache():save("headerunit_objectfiles") end -- load module support for the current target function load(target) local cachedir = common.modules_cachedir(target) local stlcachedir = common.stlmodules_cachedir(target) - local mapper_file = _get_module_mapper() - local linker_file = _get_linker_argument_file() -- get flags local modulesflag = get_modulesflag(target) @@ -176,8 +155,6 @@ function generate_stl_headerunits_for_batchcmds(target, batchcmds, headerunits, local compinst = target:compiler("cxx") local toolchain = target:toolchain("msvc") local vcvars = toolchain:config("vcvars") - local mapper_file = _get_module_mapper() - local linker_file = _get_linker_argument_file() -- get flags local exportheaderflag = get_exportheaderflag(target) @@ -202,7 +179,7 @@ function generate_stl_headerunits_for_batchcmds(target, batchcmds, headerunits, batchcmds:add_depfiles(headerunit.path) _add_module_to_mapper(headerunitflag .. ":angle", headerunit.name .. "=" .. path.filename(headerunit.name) .. get_bmi_extension()) - _add_objectfile_to_link_arguments(linker_file, objectfile) + _add_objectfile_to_link_arguments(objectfile) end depmtime = math.max(depmtime, os.mtime(bmifile)) end @@ -214,8 +191,6 @@ function generate_user_headerunits_for_batchcmds(target, batchcmds, headerunits, local compinst = target:compiler("cxx") local toolchain = target:toolchain("msvc") local vcvars = toolchain:config("vcvars") - local mapper_file = _get_module_mapper() - local linker_file = _get_linker_argument_file() -- get flags local exportheaderflag = get_exportheaderflag(target) @@ -254,7 +229,7 @@ function generate_user_headerunits_for_batchcmds(target, batchcmds, headerunits, batchcmds:add_depfiles(headerunit.path) _add_module_to_mapper(headerunitflag .. headerunit.type, headerunit.name .. "=" .. path.relative(bmifile, cachedir)) - _add_objectfile_to_link_arguments(linker_file, objectfile) + _add_objectfile_to_link_arguments(objectfile) depmtime = math.max(depmtime, os.mtime(bmifile)) end @@ -264,7 +239,6 @@ end -- build module files for batchcmds function build_modules_for_batchcmds(target, batchcmds, objectfiles, modules, opt) local compinst = target:compiler("cxx") - local mapper_file = _get_module_mapper() local toolchain = target:toolchain("msvc") local vcvars = toolchain:config("vcvars") @@ -277,9 +251,8 @@ function build_modules_for_batchcmds(target, batchcmds, objectfiles, modules, op local referenceflag = get_referenceflag(target) -- append module mapper flags - for line in io.lines(mapper_file) do - target:add("cxxflags", line, {force = true}) - end + local cache = common.localcache():get("mapflags") or {} + target:add("cxxflags", cache, {force = true}) -- build modules local common_args = {"-TP"} @@ -307,7 +280,7 @@ function build_modules_for_batchcmds(target, batchcmds, objectfiles, modules, op batchcmds:vrunv(compinst:program(), table.join(compinst:compflags({target = target}), common_args, args), {envs = vcvars}) batchcmds:add_depfiles(provide.sourcefile) - _add_module_to_mapper(mapper_file, referenceflag, name .. "=" .. path.filename(bmifile)) + _add_module_to_mapper(referenceflag, name .. "=" .. path.filename(bmifile)) target:add("objectfiles", objectfile) depmtime = math.max(depmtime, os.mtime(bmifile)) @@ -457,18 +430,4 @@ function get_scandependenciesflag(target) _g.scandependenciesflag = scandependenciesflag or false end return scandependenciesflag or nil -end - --- append .obj to final link -function append_headerunits_objectfiles(target) - local linker_file = _get_linker_argument_file() - for line in io.lines(linker_file) do - if target:is_binary() then - target:add("ldflags", line, {force = true}) - elseif target:is_static() == "static" then - target:add("arflags", line, {force = true}) - elseif target:is_shared() == "shared" then - target:add("shflags", line, {force = true}) - end - end end
\ No newline at end of file |
