diff options
| author | ruki <[email protected]> | 2022-08-09 22:34:01 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-08-09 22:34:01 +0800 |
| commit | 02b60934d7425d5dc9f77cf3a07d956cf4922b98 (patch) | |
| tree | 00cb790692484f7386b1c6720eba3709ebd11dff /xmake/rules/c++/modules/modules_support/msvc.lua | |
| parent | 71ee1cb7b921c2b98dda8eecebc641ddac71681d (diff) | |
improve mapper for msvc
Diffstat (limited to 'xmake/rules/c++/modules/modules_support/msvc.lua')
| -rw-r--r-- | xmake/rules/c++/modules/modules_support/msvc.lua | 70 |
1 files changed, 51 insertions, 19 deletions
diff --git a/xmake/rules/c++/modules/modules_support/msvc.lua b/xmake/rules/c++/modules/modules_support/msvc.lua index 64ca0dae3..7ac93273f 100644 --- a/xmake/rules/c++/modules/modules_support/msvc.lua +++ b/xmake/rules/c++/modules/modules_support/msvc.lua @@ -34,16 +34,25 @@ import("common") -- /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(argument, module) - local cache = common.localcache():get("mapflags") or {} + local mapflags = common.localcache():get("mapflags") or {} local mapflag = format("%s %s", argument, module) - if table.contains(cache, mapflag) then + if table.contains(mapflags, mapflag) then return end - table.insert(cache, mapflag) - common.localcache():set("mapflags", cache) + table.insert(mapflags, mapflag) + common.localcache():set("mapflags", mapflags) +end + +-- flush mapflags to mapper file cache +function _flush_mapflags_to_mapper() common.localcache():save("mapflags") end +-- get mapflags from mapper +function _get_mapflags_from_mapper() + return common.localcache():get("mapflags") +end + -- add an objectfile to the linker args -- -- e.g @@ -181,6 +190,7 @@ function generate_stl_headerunits_for_batchjobs(target, batchjobs, headerunits, _add_objectfile_to_link_arguments(objectfile) end end + _flush_mapflags_to_mapper() end -- generate target stl header units for batchcmds @@ -215,6 +225,7 @@ function generate_stl_headerunits_for_batchcmds(target, batchcmds, headerunits, depmtime = math.max(depmtime, os.mtime(bmifile)) end batchcmds:set_depmtime(depmtime) + _flush_mapflags_to_mapper() end -- generate target user header units for batchcmds @@ -266,6 +277,7 @@ function generate_user_headerunits_for_batchjobs(target, batchjobs, headerunits, _add_module_to_mapper(headerunitflag .. headerunit.type, headerunit.name .. "=" .. path.relative(bmifile, cachedir)) _add_objectfile_to_link_arguments(objectfile) end + _flush_mapflags_to_mapper() end -- generate target user header units for batchcmds @@ -314,6 +326,7 @@ function generate_user_headerunits_for_batchcmds(target, batchcmds, headerunits, depmtime = math.max(depmtime, os.mtime(bmifile)) end batchcmds:set_depmtime(depmtime) + _flush_mapflags_to_mapper() end -- build module files for batchjobs @@ -328,10 +341,6 @@ function build_modules_for_batchjobs(target, batchjobs, objectfiles, modules, op local interfaceflag = get_interfaceflag(target) local referenceflag = get_referenceflag(target) - -- append module mapper flags - local cache = common.localcache():get("mapflags") or {} - target:add("cxxflags", cache, {force = true}) - -- build modules local common_args = {"-TP"} local provided_modules = {} @@ -372,6 +381,13 @@ function build_modules_for_batchjobs(target, batchjobs, objectfiles, modules, op target:add("objectfiles", objectfile) end end + _flush_mapflags_to_mapper() + + -- append module mapper flags + local mapflags = _get_mapflags_from_mapper() + if mapflags then + target:add("cxxflags", mapflags, {force = true}) + end -- build batchjobs for modules common.build_batchjobs_for_modules(provided_modules, batchjobs, opt.rootjob) @@ -389,13 +405,7 @@ function build_modules_for_batchcmds(target, batchcmds, objectfiles, modules, op local interfaceflag = get_interfaceflag(target) local referenceflag = get_referenceflag(target) - -- append module mapper flags - local cache = common.localcache():get("mapflags") or {} - target:add("cxxflags", cache, {force = true}) - - -- build modules - local common_args = {"-TP"} - local depmtime = 0 + -- we need update mapper first for _, objectfile in ipairs(objectfiles) do local m = modules[objectfile] if m and m.provides then @@ -412,18 +422,40 @@ function build_modules_for_batchcmds(target, batchcmds, objectfiles, modules, op end local bmifile = provide.bmi - local args = {"-c", "-Fo" .. objectfile, interfaceflag, ifcoutputflag, bmifile, provide.sourcefile} + _add_module_to_mapper(referenceflag, name .. "=" .. path.filename(bmifile)) + target:add("objectfiles", objectfile) + end + end + _flush_mapflags_to_mapper() + + -- append module mapper flags + local mapflags = _get_mapflags_from_mapper() + if mapflags then + target:add("cxxflags", mapflags, {force = true}) + end + + -- build modules + local common_args = {"-TP"} + local depmtime = 0 + for _, objectfile in ipairs(objectfiles) do + local m = modules[objectfile] + if m and m.provides then + local name, provide + for k, v in pairs(m.provides) do + name = k + provide = v + break + end + local bmifile = provide.bmi + local args = {"-c", "-Fo" .. objectfile, interfaceflag, ifcoutputflag, bmifile, provide.sourcefile} batchcmds:show_progress(opt.progress, "${color.build.object}generating.cxx.module.bmi %s", name) batchcmds:mkdir(path.directory(objectfile)) batchcmds:vrunv(compinst:program(), table.join(compinst:compflags({target = target}), common_args, args), {envs = vcvars}) batchcmds:add_depfiles(provide.sourcefile) - _add_module_to_mapper(referenceflag, name .. "=" .. path.filename(bmifile)) - target:add("objectfiles", objectfile) depmtime = math.max(depmtime, os.mtime(bmifile)) end end - batchcmds:set_depmtime(depmtime) end |
