diff options
| author | ruki <[email protected]> | 2021-01-19 00:42:52 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-01-19 00:42:52 +0800 |
| commit | abd2bcb586035ac27358e7c6f31f446284ae36be (patch) | |
| tree | 6fd96f66e45df1ae191858660b78c6248949c37e | |
| parent | 3ce4a0366dc45361ee2ed1881391589cdf1b5c26 (diff) | |
add rule kind
| -rw-r--r-- | xmake/actions/build/main.lua | 28 | ||||
| -rw-r--r-- | xmake/core/project/project.lua | 17 | ||||
| -rw-r--r-- | xmake/core/project/rule.lua | 11 |
3 files changed, 48 insertions, 8 deletions
diff --git a/xmake/actions/build/main.lua b/xmake/actions/build/main.lua index 253f4a45d..ac703d79b 100644 --- a/xmake/actions/build/main.lua +++ b/xmake/actions/build/main.lua @@ -22,6 +22,7 @@ import("core.base.option") import("core.base.global") import("core.base.task") +import("core.project.rule") import("core.project.config") import("core.project.project") import("core.platform.platform") @@ -79,6 +80,19 @@ function _try_build() end end +-- do global project rules +function _do_project_rules(scriptname, opt) + for _, rulename in ipairs(project.get("target.rules")) do + local r = project.rule(rulename) or rule.rule(rulename) + if r and r:kind() == "project" then + local buildscript = r:script(scriptname) + if buildscript then + buildscript(opt) + end + end + end +end + -- main function main() @@ -105,10 +119,14 @@ function main() -- clean up temporary files once a day cleaner.cleanup() - -- build it try { function () + + -- do rules before building + _do_project_rules("build_before") + + -- do build local sourcefiles = option.get("files") if sourcefiles then build_files(targetname, sourcefiles) @@ -120,6 +138,11 @@ function main() catch { function (errors) + + -- do rules after building + _do_project_rules("build_after", {errors = errors}) + + -- raise if errors then raise(errors) elseif targetname then @@ -131,6 +154,9 @@ function main() } } + -- do rules after building + _do_project_rules("build_after") + -- unlock the whole project project.unlock() diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua index 60ba7a0ea..bb96c79f0 100644 --- a/xmake/core/project/project.lua +++ b/xmake/core/project/project.lua @@ -462,15 +462,18 @@ function project._load_targets() for _, rulename in ipairs(rulenames) do local r = project.rule(rulename) or rule.rule(rulename) if r then - t._RULES[rulename] = r - for _, deprule in ipairs(r:orderdeps()) do - local name = deprule:name() - if not t._RULES[name] then - t._RULES[name] = deprule - table.insert(t._ORDERULES, deprule) + -- only add target rules + if r:kind() == "target" then + t._RULES[rulename] = r + for _, deprule in ipairs(r:orderdeps()) do + local name = deprule:name() + if not t._RULES[name] then + t._RULES[name] = deprule + table.insert(t._ORDERULES, deprule) + end end + table.insert(t._ORDERULES, r) end - table.insert(t._ORDERULES, r) else return nil, string.format("unknown rule(%s) in target(%s)!", rulename, t:name()) end diff --git a/xmake/core/project/rule.lua b/xmake/core/project/rule.lua index 7b984a3f4..53c1a9854 100644 --- a/xmake/core/project/rule.lua +++ b/xmake/core/project/rule.lua @@ -155,6 +155,7 @@ function rule.apis() -- rule.set_xxx "rule.set_extensions" , "rule.set_sourcekinds" + , "rule.set_kind" -- rule.add_xxx , "rule.add_deps" , "rule.add_imports" @@ -221,6 +222,16 @@ function rule:name() return self._NAME end +-- get the rule kind +-- +-- current supported kind: +-- - target: default, only for each target +-- - project: global rule, for whole project +-- +function rule:kind() + return self:get("kind") or "target" +end + -- get the given dependent rule function rule:dep(name) local deps = self:deps() |
