diff options
| author | ruki <[email protected]> | 2020-12-12 00:52:37 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-12-12 00:52:37 +0800 |
| commit | 08754e4e8c7fca28482107e69cc4604f2574d1d1 (patch) | |
| tree | 34d5d9b14a2de11385109a102191b06c8da30d7d | |
| parent | b3b6ab40b913020be95f84430e5b9f8e902d7a9c (diff) | |
improve to load targets
| -rw-r--r-- | xmake/core/project/project.lua | 71 |
1 files changed, 41 insertions, 30 deletions
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua index e50731e93..d27c1ab1f 100644 --- a/xmake/core/project/project.lua +++ b/xmake/core/project/project.lua @@ -343,6 +343,46 @@ function project._load_toolchains(opt) return toolchains end +-- load target +function project._load_target(t, requires) + + -- do on_load() for target and all rules + local ok, errors = t:_load() + if not ok then + return false, errors + end + + -- load packages + t._PACKAGES = t._PACKAGES or {} + for _, packagename in ipairs(table.wrap(t:get("packages"))) do + local p = requires[packagename] + if p then + table.insert(t._PACKAGES, p) + end + end + + -- load toolchains + local toolchains = t:get("toolchains") + if toolchains then + t._TOOLCHAINS = {} + for _, name in ipairs(table.wrap(toolchains)) do + local toolchain_opt = table.copy(t:extraconf("toolchains", name)) + toolchain_opt.arch = t:arch() + toolchain_opt.plat = t:plat() + local toolchain_inst, errors = toolchain.load(name, toolchain_opt) + -- attempt to load toolchain from project + if not toolchain_inst then + toolchain_inst = project.toolchain(name, toolchain_opt) + end + if not toolchain_inst then + return false, errors + end + table.insert(t._TOOLCHAINS, toolchain_inst) + end + end + return true +end + -- load targets function project._load_targets() @@ -422,35 +462,6 @@ function project._load_targets() return nil, string.format("unknown rule(%s) in target(%s)!", rulename, t:name()) end end - - -- load packages - t._PACKAGES = t._PACKAGES or {} - for _, packagename in ipairs(table.wrap(t:get("packages"))) do - local p = requires[packagename] - if p then - table.insert(t._PACKAGES, p) - end - end - - -- load toolchains - local toolchains = t:get("toolchains") - if toolchains then - t._TOOLCHAINS = {} - for _, name in ipairs(table.wrap(toolchains)) do - local toolchain_opt = table.copy(t:extraconf("toolchains", name)) - toolchain_opt.arch = t:arch() - toolchain_opt.plat = t:plat() - local toolchain_inst, errors = toolchain.load(name, toolchain_opt) - -- attempt to load toolchain from project - if not toolchain_inst then - toolchain_inst = project.toolchain(name, toolchain_opt) - end - if not toolchain_inst then - return nil, errors - end - table.insert(t._TOOLCHAINS, toolchain_inst) - end - end end -- sort targets for all deps @@ -463,7 +474,7 @@ function project._load_targets() -- do load for each target local ok = false for _, t in ipairs(ordertargets) do - ok, errors = t:_load() + ok, errors = project._load_target(t, requires) if not ok then break end |
