diff options
| author | ruki <[email protected]> | 2026-01-27 16:01:43 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-01-27 16:01:43 +0800 |
| commit | a217ee2dc800dc9d3a022003f493c01fdebe745c (patch) | |
| tree | a6ddd3e99d38b115a73004636811dac365d95c60 | |
| parent | e4c2c271e71fb51efe6e3bf7908e61838a13b695 (diff) | |
| parent | 17344133cb2b52d04c0ad26ca9b8d61b5280aae9 (diff) | |
Merge pull request #7268 from luadebug/nim-increment
add dependency file generation for Nim source files
| -rw-r--r-- | xmake/rules/nim/build/target.lua | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/xmake/rules/nim/build/target.lua b/xmake/rules/nim/build/target.lua index 7db19a559..52599b74d 100644 --- a/xmake/rules/nim/build/target.lua +++ b/xmake/rules/nim/build/target.lua @@ -25,6 +25,45 @@ import("core.tool.compiler") import("core.project.depend") import("utils.progress") +-- generate dependency info +function _generate_dependinfo(compinst, compflags, sourcefiles, dependinfo) + + -- generate dependency file (.deps) + local flags = {} + local nimcache + for _, flag in ipairs(compflags) do + table.insert(flags, flag) + if flag:startswith("--nimcache:") then + nimcache = flag:sub(12) + end + end + table.insert(flags, "--genScript") + + -- run nim --genScript to generate .deps file + local program = compinst:program() + local argv = table.join("c", flags, sourcefiles) + os.runv(program, argv, {envs = compinst:runenvs()}) + + -- parse .deps file + if nimcache then + for _, sourcefile in ipairs(sourcefiles) do + local filename = path.basename(sourcefile) + local depsfile = path.join(nimcache, filename .. ".deps") + if os.isfile(depsfile) then + local depsdata = io.readfile(depsfile) + if depsdata then + for _, line in ipairs(depsdata:split("\n")) do + line = line:trim() + if #line > 0 then + table.insert(dependinfo.files, line) + end + end + end + end + end + end +end + -- build the source files function build_sourcefiles(target, sourcebatch, opt) @@ -66,6 +105,9 @@ function build_sourcefiles(target, sourcebatch, opt) dependinfo.files = {} assert(compinst:build(sourcefiles, targetfile, {target = target, dependinfo = dependinfo, compflags = compflags})) + -- generate dependency file (.deps) + _generate_dependinfo(compinst, compflags, sourcefiles, dependinfo) + -- update files and values to the dependent file dependinfo.values = depvalues table.join2(dependinfo.files, sourcefiles) |
