diff options
| author | ruki <[email protected]> | 2022-08-06 00:10:00 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-08-06 00:10:06 +0800 |
| commit | b0379bcadce0b66fa5d3e5fc45d85a8ba365c92b (patch) | |
| tree | 725da3c3598435f6376af32b018f5628e4d504b3 /xmake/rules/c++/modules/modules_support | |
| parent | 53c31dfffd73cd635a6512d49b902e8c45dca102 (diff) | |
cache module deps
Diffstat (limited to 'xmake/rules/c++/modules/modules_support')
4 files changed, 25 insertions, 4 deletions
diff --git a/xmake/rules/c++/modules/modules_support/clang.lua b/xmake/rules/c++/modules/modules_support/clang.lua index 89dbf4467..18243fadf 100644 --- a/xmake/rules/c++/modules/modules_support/clang.lua +++ b/xmake/rules/c++/modules/modules_support/clang.lua @@ -106,6 +106,7 @@ end -- generate dependency files function generate_dependencies(target, sourcebatch, opt) + local changed = false local cachedir = common.modules_cachedir(target) for _, sourcefile in ipairs(sourcebatch.sourcefiles) do local dependfile = target:dependfile(sourcefile) @@ -122,11 +123,13 @@ function generate_dependencies(target, sourcebatch, opt) -- no support of p1689 atm local jsonfile = path.translate(path.join(outdir, path.filename(sourcefile) .. ".json")) common.fallback_generate_dependencies(target, jsonfile, sourcefile) + changed = true local dependinfo = io.readfile(jsonfile) return { moduleinfo = dependinfo } end, {dependfile = dependfile, files = {sourcefile}}) end + return changed end -- generate target stl header units for batchcmds diff --git a/xmake/rules/c++/modules/modules_support/common.lua b/xmake/rules/c++/modules/modules_support/common.lua index 5d5c625ec..c91f52a9b 100644 --- a/xmake/rules/c++/modules/modules_support/common.lua +++ b/xmake/rules/c++/modules/modules_support/common.lua @@ -24,13 +24,19 @@ import("core.base.hashset") import("core.project.config") import("core.tool.compiler") import("core.cache.memcache", {alias = "_memcache"}) +import("core.cache.localcache", {alias = "_localcache"}) import("core.project.project") import("lib.detect.find_file") import("stl_headers") -- get memcache function memcache() - return _memcache.cache("rule.cxx.modules") + return _memcache.cache("cxxmodules") +end + +-- get localcache +function localcache() + return _localcache.cache("cxxmodules") end -- get stl modules cache directory @@ -407,9 +413,15 @@ end -- generate dependencies function generate_dependencies(target, sourcebatch, opt) - modules_support(target).generate_dependencies(target, sourcebatch, opt) - local moduleinfos = load_moduleinfos(target, sourcebatch) - return parse_dependency_data(target, moduleinfos) + local modules = localcache():get("modules") + local changed = modules_support(target).generate_dependencies(target, sourcebatch, opt) + if changed or modules == nil then + local moduleinfos = load_moduleinfos(target, sourcebatch) + modules = parse_dependency_data(target, moduleinfos) + localcache():set("modules", modules) + localcache():save() + end + return modules end -- generate headerunits for batchjobs, TODO diff --git a/xmake/rules/c++/modules/modules_support/gcc.lua b/xmake/rules/c++/modules/modules_support/gcc.lua index 08afba431..cf996bdea 100644 --- a/xmake/rules/c++/modules/modules_support/gcc.lua +++ b/xmake/rules/c++/modules/modules_support/gcc.lua @@ -123,6 +123,7 @@ function generate_dependencies(target, sourcebatch, opt) local trtbdflag = get_trtbdflag(target) local depfileflag = get_depfileflag(target) local depoutputflag = get_depoutputflag(target) + local changed = false for _, sourcefile in ipairs(sourcebatch.sourcefiles) do local dependfile = target:dependfile(sourcefile) depend.on_changed(function() @@ -144,11 +145,13 @@ function generate_dependencies(target, sourcebatch, opt) else common.fallback_generate_dependencies(target, jsonfile, sourcefile) end + changed = true local dependinfo = io.readfile(jsonfile) return { moduleinfo = dependinfo } end, {dependfile = dependfile, files = {sourcefile}}) end + return changed end -- generate target stl header units for batchcmds diff --git a/xmake/rules/c++/modules/modules_support/msvc.lua b/xmake/rules/c++/modules/modules_support/msvc.lua index 109c68751..e261332c0 100644 --- a/xmake/rules/c++/modules/modules_support/msvc.lua +++ b/xmake/rules/c++/modules/modules_support/msvc.lua @@ -86,6 +86,7 @@ function generate_dependencies(target, sourcebatch, opt) local scandependenciesflag = get_scandependenciesflag(target) local common_args = {"/TP", scandependenciesflag} local cachedir = common.modules_cachedir(target) + local changed = false for _, sourcefile in ipairs(sourcebatch.sourcefiles) do local dependfile = target:dependfile(sourcefile) depend.on_changed(function () @@ -104,11 +105,13 @@ function generate_dependencies(target, sourcebatch, opt) else common.fallback_generate_dependencies(target, jsonfile, sourcefile) end + changed = true local dependinfo = io.readfile(jsonfile) return { moduleinfo = dependinfo } end, {dependfile = dependfile, files = {sourcefile}}) end + return changed end -- generate target stl header units for batchcmds |
