summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-11-13 22:37:49 +0800
committerruki <[email protected]>2020-11-13 22:37:49 +0800
commit7d74ef63935e4294c5b5ed71a15f67eb7211cbea (patch)
tree7dea4d6a86f43485ae5e9a7d87b70ab464eed0e6
parent2c21924f4a970cfabaac8bf589376e16656f5d46 (diff)
improve toolchain
-rw-r--r--xmake/core/tool/toolchain.lua2
-rw-r--r--xmake/toolchains/cross/load.lua26
2 files changed, 17 insertions, 11 deletions
diff --git a/xmake/core/tool/toolchain.lua b/xmake/core/tool/toolchain.lua
index 3a971362d..cb8ea0827 100644
--- a/xmake/core/tool/toolchain.lua
+++ b/xmake/core/tool/toolchain.lua
@@ -155,6 +155,8 @@ end
-- get the program and name of the given tool kind
function _instance:tool(toolkind)
+ -- ensure to do load for initializing toolset first
+ self:_load()
local toolpaths = self:get("toolset." .. toolkind)
if toolpaths then
for _, toolpath in ipairs(table.wrap(toolpaths)) do
diff --git a/xmake/toolchains/cross/load.lua b/xmake/toolchains/cross/load.lua
index d8b38323c..e626ad75c 100644
--- a/xmake/toolchains/cross/load.lua
+++ b/xmake/toolchains/cross/load.lua
@@ -30,17 +30,21 @@ function main(toolchain)
-- get cross prefix
local cross = toolchain:cross() or ""
- -- set toolset
- toolchain:set("toolset", "cc", cross .. "gcc", cross .. "clang")
- toolchain:set("toolset", "cxx", cross .. "gcc", cross .. "clang", cross .. "g++", cross .. "clang++")
- toolchain:set("toolset", "cpp", cross .. "gcc -E", cross .. "clang -E")
- toolchain:set("toolset", "as", cross .. "gcc", cross .. "clang")
- toolchain:set("toolset", "ld", cross .. "g++", cross .. "gcc", cross .. "clang++", cross .. "clang")
- toolchain:set("toolset", "sh", cross .. "g++", cross .. "gcc", cross .. "clang++", cross .. "clang")
- toolchain:set("toolset", "ar", cross .. "ar")
- toolchain:set("toolset", "ex", cross .. "ar")
- toolchain:set("toolset", "ranlib", cross .. "ranlib")
- toolchain:set("toolset", "strip", cross .. "strip")
+ -- add toolset
+ --
+ -- @note we use add/toolset for cross toolchain, because user maybe use set_toolset to modify them
+ -- @see https://github.com/xmake-io/xmake/issues/1024
+ --
+ toolchain:add("toolset", "cc", cross .. "gcc", cross .. "clang")
+ toolchain:add("toolset", "cxx", cross .. "gcc", cross .. "clang", cross .. "g++", cross .. "clang++")
+ toolchain:add("toolset", "cpp", cross .. "gcc -E", cross .. "clang -E")
+ toolchain:add("toolset", "as", cross .. "gcc", cross .. "clang")
+ toolchain:add("toolset", "ld", cross .. "g++", cross .. "gcc", cross .. "clang++", cross .. "clang")
+ toolchain:add("toolset", "sh", cross .. "g++", cross .. "gcc", cross .. "clang++", cross .. "clang")
+ toolchain:add("toolset", "ar", cross .. "ar")
+ toolchain:add("toolset", "ex", cross .. "ar")
+ toolchain:add("toolset", "ranlib", cross .. "ranlib")
+ toolchain:add("toolset", "strip", cross .. "strip")
-- add bin search library for loading some dependent .dll files windows
local bindir = toolchain:bindir()