summaryrefslogtreecommitdiff
path: root/xmake/modules/core/project/depend.lua
diff options
context:
space:
mode:
Diffstat (limited to 'xmake/modules/core/project/depend.lua')
-rw-r--r--xmake/modules/core/project/depend.lua46
1 files changed, 21 insertions, 25 deletions
diff --git a/xmake/modules/core/project/depend.lua b/xmake/modules/core/project/depend.lua
index aea652779..b6f3976ba 100644
--- a/xmake/modules/core/project/depend.lua
+++ b/xmake/modules/core/project/depend.lua
@@ -21,12 +21,6 @@
-- imports
import("core.base.option")
import("core.project.project")
-import("private.tools.cl.parse_deps", {alias = "parse_deps_cl"})
-import("private.tools.cl.parse_deps_json", {alias = "parse_deps_cl_json"})
-import("private.tools.rc.parse_deps", {alias = "parse_deps_rc"})
-import("private.tools.gcc.parse_deps", {alias = "parse_deps_gcc"})
-import("private.tools.armcc.parse_deps", {alias = "parse_deps_armcc"})
-import("private.tools.cl6x.parse_deps", {alias = "parse_deps_cl6x"})
-- load depfiles
function _load_depfiles(parser, dependinfo, depfiles, opt)
@@ -40,32 +34,34 @@ function _load_depfiles(parser, dependinfo, depfiles, opt)
end
end
+-- get depfiles parser
+function _get_depfiles_parser(depfiles_format)
+ assert(depfiles_format, "no depfiles format")
+ local depfiles_parsers = _g._depfiles_parsers
+ if depfiles_parsers == nil then
+ depfiles_parsers = {}
+ _g._depfiles_parsers = depfiles_parsers
+ end
+ local parser = depfiles_parsers[depfiles_format]
+ if parser == nil then
+ parser = import("private.tools." .. depfiles_format .. ".parse_deps", {anonymous = true})
+ depfiles_parsers[depfiles_format] = parser
+ end
+ return parser
+end
+
-- load dependent info from the given file (.d)
function load(dependfile, opt)
-
if os.isfile(dependfile) then
-- may be the depend file has been incomplete when if the compilation process is abnormally interrupted
local dependinfo = try { function() return io.load(dependfile) end }
if dependinfo then
-- attempt to load depfiles from the compilers
- if dependinfo.depfiles_gcc then
- _load_depfiles(parse_deps_gcc, dependinfo, dependinfo.depfiles_gcc, opt)
- dependinfo.depfiles_gcc = nil
- elseif dependinfo.depfiles_cl_json then
- _load_depfiles(parse_deps_cl_json, dependinfo, dependinfo.depfiles_cl_json, opt)
- dependinfo.depfiles_cl_json = nil
- elseif dependinfo.depfiles_cl then
- _load_depfiles(parse_deps_cl, dependinfo, dependinfo.depfiles_cl, opt)
- dependinfo.depfiles_cl = nil
- elseif dependinfo.depfiles_rc then
- _load_depfiles(parse_deps_rc, dependinfo, dependinfo.depfiles_rc, opt)
- dependinfo.depfiles_rc = nil
- elseif dependinfo.depfiles_armcc then
- _load_depfiles(parse_deps_armcc, dependinfo, dependinfo.depfiles_armcc, opt)
- dependinfo.depfiles_armcc = nil
- elseif dependinfo.depfiles_cl6x then
- _load_depfiles(parse_deps_cl6x, dependinfo, dependinfo.depfiles_cl6x, opt)
- dependinfo.depfiles_cl6x = nil
+ local depfiles = dependinfo.depfiles
+ if depfiles then
+ local depfiles_parser = _get_depfiles_parser(dependinfo.depfiles_format)
+ _load_depfiles(depfiles_parser, dependinfo, depfiles, opt)
+ dependinfo.depfiles = nil
end
return dependinfo
end