summaryrefslogtreecommitdiff
path: root/xmake
diff options
context:
space:
mode:
authorruki <[email protected]>2021-04-23 00:48:07 +0800
committerruki <[email protected]>2021-04-23 00:48:07 +0800
commit742e916cbd2a2d72ec8e7f59b3ca02e137d0bae2 (patch)
treea3fafa0187b77681553b8c1fae0ecab8e424822b /xmake
parente124d5d2cc26aa76a0c295791c2ba18f101de7f8 (diff)
improve target sourcefiles
Diffstat (limited to 'xmake')
-rw-r--r--xmake/core/language/language.lua10
-rw-r--r--xmake/core/project/target.lua18
2 files changed, 18 insertions, 10 deletions
diff --git a/xmake/core/language/language.lua b/xmake/core/language/language.lua
index 2b3e9d813..4815d47db 100644
--- a/xmake/core/language/language.lua
+++ b/xmake/core/language/language.lua
@@ -260,10 +260,12 @@ function language.load(name)
-- load all languages
if not name then
- for _, name in ipairs(table.wrap(os.match(path.join(language._directory(), "*"), true))) do
- local instance, errors = language.load(path.basename(name))
- if not instance then
- return nil, errors
+ if not language._LANGUAGES then
+ for _, name in ipairs(table.wrap(os.match(path.join(language._directory(), "*"), true))) do
+ local instance, errors = language.load(path.basename(name))
+ if not instance then
+ return nil, errors
+ end
end
end
return language._LANGUAGES
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index 531ffb887..356358fab 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -1180,6 +1180,7 @@ function _instance:sourcefiles()
local sourcefiles_deleted = {}
local sourcefiles_inserted = {}
local deleted_count = 0
+ local targetcache = memcache.cache("core.project.target")
for _, file in ipairs(table.wrap(files)) do
-- mark as deleted files?
@@ -1189,13 +1190,18 @@ function _instance:sourcefiles()
deleted = true
end
- -- find source files
- local results = os.files(file)
- if #results == 0 then
- -- attempt to find source directories if maybe compile it as directory with the custom rules
- if #self:filerules(file) > 0 then
- results = os.dirs(file)
+ -- find source files and try to cache the matching results of os.match across targets
+ -- @see https://github.com/xmake-io/xmake/issues/1353
+ local results = targetcache:get2("sourcefiles", file)
+ if not results then
+ results = os.files(file)
+ if #results == 0 then
+ -- attempt to find source directories if maybe compile it as directory with the custom rules
+ if #self:filerules(file) > 0 then
+ results = os.dirs(file)
+ end
end
+ targetcache:set2("sourcefiles", file, results)
end
if #results == 0 then
local sourceinfo = (self:get("__sourceinfo_files") or {})[file] or {}