summaryrefslogtreecommitdiff
path: root/xmake/rules/c++/modules/modules_support
diff options
context:
space:
mode:
authorruki <[email protected]>2022-08-06 00:10:00 +0800
committerruki <[email protected]>2022-08-06 00:10:06 +0800
commitb0379bcadce0b66fa5d3e5fc45d85a8ba365c92b (patch)
tree725da3c3598435f6376af32b018f5628e4d504b3 /xmake/rules/c++/modules/modules_support
parent53c31dfffd73cd635a6512d49b902e8c45dca102 (diff)
cache module deps
Diffstat (limited to 'xmake/rules/c++/modules/modules_support')
-rw-r--r--xmake/rules/c++/modules/modules_support/clang.lua3
-rw-r--r--xmake/rules/c++/modules/modules_support/common.lua20
-rw-r--r--xmake/rules/c++/modules/modules_support/gcc.lua3
-rw-r--r--xmake/rules/c++/modules/modules_support/msvc.lua3
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