Skip to content

Commit

Permalink
improve to parser deps
Browse files Browse the repository at this point in the history
  • Loading branch information
waruqi committed Jan 24, 2025
1 parent 1b1ed22 commit 8be99bc
Show file tree
Hide file tree
Showing 12 changed files with 45 additions and 37 deletions.
46 changes: 21 additions & 25 deletions xmake/modules/core/project/depend.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
Expand Down
3 changes: 2 additions & 1 deletion xmake/modules/core/tools/armcc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,8 @@ function compile(self, sourcefile, objectfile, dependinfo, flags, opt)
-- generate the dependent includes
if depfile and os.isfile(depfile) then
if dependinfo then
dependinfo.depfiles_armcc = io.readfile(depfile, {continuation = "\\"})
dependinfo.depfiles_format = "armcc"
dependinfo.depfiles = io.readfile(depfile, {continuation = "\\"})
end

-- remove the temporary dependent file
Expand Down
6 changes: 4 additions & 2 deletions xmake/modules/core/tools/cl.lua
Original file line number Diff line number Diff line change
Expand Up @@ -778,10 +778,12 @@ function compile(self, sourcefile, objectfile, dependinfo, flags, opt)
-- generate the dependent includes
if dependinfo then
if depfile and os.isfile(depfile) then
dependinfo.depfiles_cl_json = io.readfile(depfile)
dependinfo.depfiles_format = "cl_json"
dependinfo.depfiles = io.readfile(depfile)
os.tryrm(depfile)
elseif outdata then
dependinfo.depfiles_cl = outdata
dependinfo.depfiles_format = "cl"
dependinfo.depfiles = outdata
end
end
end
Expand Down
3 changes: 2 additions & 1 deletion xmake/modules/core/tools/cl6x.lua
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,8 @@ function compile(self, sourcefile, objectfile, dependinfo, flags, opt)
-- generate the dependent includes
if depfile and os.isfile(depfile) then
if dependinfo then
dependinfo.depfiles_cl6x = io.readfile(depfile, {continuation = "\\"})
dependinfo.depfiles_format = "cl6x"
dependinfo.depfiles = io.readfile(depfile, {continuation = "\\"})
end

-- remove the temporary dependent file
Expand Down
3 changes: 2 additions & 1 deletion xmake/modules/core/tools/clang_cl.lua
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ function compile(self, sourcefile, objectfile, dependinfo, flags, opt)

-- generate the dependent includes
if dependinfo and outdata then
dependinfo.depfiles_cl = outdata
dependinfo.depfiles_format = "cl"
dependinfo.depfiles = outdata
end
end
3 changes: 2 additions & 1 deletion xmake/modules/core/tools/dmd.lua
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,8 @@ function compile(self, sourcefile, objectfile, dependinfo, flags, opt)
if depfile and os.isfile(depfile) then
if dependinfo then
-- it use makefile/gcc compatiable format
dependinfo.depfiles_gcc = io.readfile(depfile, {continuation = "\\"})
dependinfo.depfiles_format = "gcc"
dependinfo.depfiles = io.readfile(depfile, {continuation = "\\"})
end

-- remove the temporary dependent file
Expand Down
3 changes: 2 additions & 1 deletion xmake/modules/core/tools/gcc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -987,7 +987,8 @@ function compile(self, sourcefile, objectfile, dependinfo, flags, opt)
-- generate the dependent includes
if depfile and os.isfile(depfile) then
if dependinfo then
dependinfo.depfiles_gcc = io.readfile(depfile, {continuation = "\\"})
dependinfo.depfiles_format = "gcc"
dependinfo.depfiles = io.readfile(depfile, {continuation = "\\"})
end

-- remove the temporary dependent file
Expand Down
3 changes: 2 additions & 1 deletion xmake/modules/core/tools/nvcc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,8 @@ function compile(self, sourcefile, objectfile, dependinfo, flags, opt)
if depfile and os.isfile(depfile) then
if dependinfo then
-- nvcc uses gcc-style depfiles
dependinfo.depfiles_gcc = io.readfile(depfile, {continuation = "\\"})
dependinfo.depfiles_format = "gcc"
dependinfo.depfiles = io.readfile(depfile, {continuation = "\\"})
end

-- remove the temporary dependent file
Expand Down
3 changes: 2 additions & 1 deletion xmake/modules/core/tools/rc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,8 @@ function compile(self, sourcefile, objectfile, dependinfo, flags, opt)
end
file:close()
if dependinfo then
dependinfo.depfiles_rc = depfiles_rc
dependinfo.depfiles_format = "rc"
dependinfo.depfiles = depfiles_rc
end
end
os.tryrm(outfile)
Expand Down
3 changes: 2 additions & 1 deletion xmake/modules/core/tools/sdcc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,8 @@ function compile(self, sourcefile, objectfile, dependinfo, flags, opt)
-- generate the dependent includes
if depfile and os.isfile(depfile) then
if dependinfo then
dependinfo.depfiles_gcc = io.readfile(depfile, {continuation = "\\"})
dependinfo.depfiles_format = "gcc"
dependinfo.depfiles = io.readfile(depfile, {continuation = "\\"})
end

-- remove the temporary dependent file
Expand Down
3 changes: 2 additions & 1 deletion xmake/modules/core/tools/tcc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,8 @@ function compile(self, sourcefile, objectfile, dependinfo, flags, opt)
-- generate the dependent includes
if depfile and os.isfile(depfile) then
if dependinfo then
dependinfo.depfiles_gcc = io.readfile(depfile, {continuation = "\\"})
dependinfo.depfiles_format = "gcc"
dependinfo.depfiles = io.readfile(depfile, {continuation = "\\"})
end

-- remove the temporary dependent file
Expand Down
3 changes: 2 additions & 1 deletion xmake/rules/swig/build_module_file.lua
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,8 @@ function swig_build_file(target, sourcefile, opt, par)
local deps = io.readfile(swigdep, {continuation = "\\"})
os.tryrm(swigdep)
dependinfo.files = {sourcefile}
dependinfo.depfiles_gcc = deps
dependinfo.depfiles_format = "gcc"
dependinfo.depfiles = deps
dependinfo.values = argv
depend.save(dependinfo, target:dependfile(objectfile))

Expand Down

0 comments on commit 8be99bc

Please sign in to comment.