summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2021-02-16 23:43:57 +0800
committerruki <[email protected]>2021-02-16 23:43:57 +0800
commit5ec37d1979611aad83348afc8fc8c3adabbbc5b7 (patch)
tree29de062fe30b7888ac9d69c375854f579d45515b
parent7209d292659792a6d92071959537c09a2bd48c4c (diff)
improve cross/bindir/sdkdir for toolchains
-rw-r--r--xmake/core/tool/toolchain.lua6
-rw-r--r--xmake/languages/dlang/load.lua4
-rw-r--r--xmake/rules/qt/deploy/android.lua1
-rw-r--r--xmake/toolchains/cross/check.lua7
-rw-r--r--xmake/toolchains/dlang/check.lua13
-rw-r--r--xmake/toolchains/dlang/xmake.lua2
-rw-r--r--xmake/toolchains/llvm/check.lua11
-rw-r--r--xmake/toolchains/mingw/check.lua11
-rw-r--r--xmake/toolchains/mingw/xmake.lua2
-rw-r--r--xmake/toolchains/ndk/check.lua27
-rw-r--r--xmake/toolchains/ndk/load.lua18
-rw-r--r--xmake/toolchains/sdcc/check.lua9
-rw-r--r--xmake/toolchains/tinyc/xmake.lua9
13 files changed, 64 insertions, 56 deletions
diff --git a/xmake/core/tool/toolchain.lua b/xmake/core/tool/toolchain.lua
index fdcf10325..43782f2e8 100644
--- a/xmake/core/tool/toolchain.lua
+++ b/xmake/core/tool/toolchain.lua
@@ -204,12 +204,12 @@ end
-- get the cross
function _instance:cross()
- return config.get("cross") or self:info():get("cross")
+ return self:config("cross") or config.get("cross") or self:info():get("cross")
end
-- get the bin directory
function _instance:bindir()
- local bindir = config.get("bin") or self:info():get("bindir")
+ local bindir = self:config("bindir") or config.get("bin") or self:info():get("bindir")
if not bindir and self:cross() and self:sdkdir() and os.isdir(path.join(self:sdkdir(), "bin")) then
bindir = path.join(self:sdkdir(), "bin")
end
@@ -218,7 +218,7 @@ end
-- get the sdk directory
function _instance:sdkdir()
- return config.get("sdk") or self:info():get("sdkdir")
+ return self:config("sdkdir") or config.get("sdk") or self:info():get("sdkdir")
end
-- get cachekey
diff --git a/xmake/languages/dlang/load.lua b/xmake/languages/dlang/load.lua
index fd547b488..97ef5346a 100644
--- a/xmake/languages/dlang/load.lua
+++ b/xmake/languages/dlang/load.lua
@@ -23,11 +23,7 @@ import("api")
-- load it
function main()
-
- -- init apis
_g.apis = api.apis()
-
- -- ok
return _g
end
diff --git a/xmake/rules/qt/deploy/android.lua b/xmake/rules/qt/deploy/android.lua
index b9ecdaa85..b4dde3721 100644
--- a/xmake/rules/qt/deploy/android.lua
+++ b/xmake/rules/qt/deploy/android.lua
@@ -24,6 +24,7 @@ import("core.base.option")
import("core.base.semver")
import("core.project.config")
import("core.project.depend")
+import("core.tool.toolchain")
import("private.utils.progress")
-- escape path
diff --git a/xmake/toolchains/cross/check.lua b/xmake/toolchains/cross/check.lua
index 98cda65cc..815b95fd7 100644
--- a/xmake/toolchains/cross/check.lua
+++ b/xmake/toolchains/cross/check.lua
@@ -48,9 +48,10 @@ function main(toolchain)
end
end
if cross_toolchain then
- config.set("cross", cross_toolchain.cross, {readonly = true, force = true})
- config.set("bin", cross_toolchain.bindir, {readonly = true, force = true})
- config.set("sdk", cross_toolchain.sdkdir, {readonly = true, force = true})
+ toolchain:config_set("cross", cross_toolchain.cross)
+ toolchain:config_set("bindir", cross_toolchain.bindir)
+ toolchain:config_set("sdkdir", cross_toolchain.sdkdir)
+ toolchain:configs_save()
-- init default target os
if not config.get("target_os") then
config.set("target_os", "linux", {readonly = true, force = true})
diff --git a/xmake/toolchains/dlang/check.lua b/xmake/toolchains/dlang/check.lua
index 782675351..fb0dc0aaa 100644
--- a/xmake/toolchains/dlang/check.lua
+++ b/xmake/toolchains/dlang/check.lua
@@ -31,9 +31,9 @@ function main(toolchain)
end
-- we need find ldc2 and gdc in the given toolchain sdk directory
- local sdkdir = config.get("sdk")
- local bindir = config.get("bin")
- local cross = config.get("cross")
+ local sdkdir = toolchain:sdkdir()
+ local bindir = toolchain:bindir()
+ local cross = toolchain:cross()
if not sdkdir and not bindir and not cross then
return
end
@@ -41,9 +41,10 @@ function main(toolchain)
-- find cross toolchain
local cross_toolchain = find_cross_toolchain(sdkdir, {bindir = bindir, cross = cross})
if cross_toolchain then
- config.set("cross", cross_toolchain.cross, {readonly = true, force = true})
- config.set("bin", cross_toolchain.bindir, {readonly = true, force = true})
- config.set("sdkdir", cross_toolchain.sdkdir, {readonly = true, force = true})
+ toolchain:config_set("cross", cross_toolchain.cross)
+ toolchain:config_set("bindir", cross_toolchain.bindir)
+ toolchain:config_set("sdkdir", cross_toolchain.sdkdir)
+ toolchain:configs_save()
else
raise("cross toolchain not found!")
end
diff --git a/xmake/toolchains/dlang/xmake.lua b/xmake/toolchains/dlang/xmake.lua
index f12fe9f99..17e5f36b1 100644
--- a/xmake/toolchains/dlang/xmake.lua
+++ b/xmake/toolchains/dlang/xmake.lua
@@ -35,7 +35,7 @@ toolchain("dlang")
import("core.project.config")
-- get cross prefix
- local cross = config.get("cross") or ""
+ local cross = toolchain:cross() or ""
-- set toolset
toolchain:add("toolset", "dc", "$(env DC)", "dmd", "ldc2", cross .. "gdc")
diff --git a/xmake/toolchains/llvm/check.lua b/xmake/toolchains/llvm/check.lua
index 44ea1ae2d..690a6ea30 100644
--- a/xmake/toolchains/llvm/check.lua
+++ b/xmake/toolchains/llvm/check.lua
@@ -28,7 +28,7 @@ function _find_xcode(toolchain)
-- find xcode
local xcode_sdkver = toolchain:config("xcode_sdkver") or config.get("xcode_sdkver")
- local xcode = find_xcode(config.get("xcode"), {force = true, verbose = true,
+ local xcode = find_xcode(toolchain:config("xcode") or config.get("xcode"), {force = true, verbose = true,
find_codesign = false,
sdkver = xcode_sdkver,
plat = toolchain:plat(),
@@ -54,8 +54,8 @@ end
function main(toolchain)
-- get sdk directory
- local sdkdir = config.get("sdk")
- local bindir = config.get("bin")
+ local sdkdir = toolchain:sdkdir()
+ local bindir = toolchain:bindir()
if not sdkdir and not bindir then
if toolchain:is_plat("linux") and os.isfile("/usr/bin/llvm-ar") then
sdkdir = "/usr"
@@ -77,8 +77,9 @@ function main(toolchain)
end
end
if cross_toolchain then
- config.set("cross", cross_toolchain.cross, {readonly = true, force = true})
- config.set("bin", cross_toolchain.bindir, {readonly = true, force = true})
+ toolchain:config_set("cross", cross_toolchain.cross)
+ toolchain:config_set("bindir", cross_toolchain.bindir)
+ toolchain:configs_save()
else
raise("llvm toolchain not found!")
end
diff --git a/xmake/toolchains/mingw/check.lua b/xmake/toolchains/mingw/check.lua
index 9500341ca..22a13fadd 100644
--- a/xmake/toolchains/mingw/check.lua
+++ b/xmake/toolchains/mingw/check.lua
@@ -24,12 +24,12 @@ import("detect.sdks.find_mingw")
-- check the mingw toolchain
function main(toolchain)
- local mingw = find_mingw(config.get("mingw"), {verbose = true, bindir = config.get("bin"), cross = config.get("cross")})
+ local mingw = find_mingw(toolchain:config("mingw") or config.get("mingw"), {verbose = true, bindir = toolchain:bindir(), cross = toolchain:cross()})
if not mingw then
for _, package in ipairs(toolchain:packages()) do
local installdir = package:installdir()
if installdir and os.isdir(installdir) then
- mingw = find_mingw(installdir, {verbose = true, cross = config.get("cross")})
+ mingw = find_mingw(installdir, {verbose = true, cross = toolchain:cross()})
if mingw then
break
end
@@ -37,9 +37,10 @@ function main(toolchain)
end
end
if mingw then
- config.set("mingw", mingw.sdkdir, {force = true, readonly = true})
- config.set("cross", mingw.cross, {readonly = true, force = true})
- config.set("bin", mingw.bindir, {readonly = true, force = true})
+ toolchain:config_set("mingw", mingw.sdkdir)
+ toolchain:config_set("cross", mingw.cross)
+ toolchain:config_set("bindir", mingw.bindir)
+ toolchain:configs_save()
else
-- failed
cprint("${bright color.error}please run:")
diff --git a/xmake/toolchains/mingw/xmake.lua b/xmake/toolchains/mingw/xmake.lua
index 3007093ea..3ddd5c103 100644
--- a/xmake/toolchains/mingw/xmake.lua
+++ b/xmake/toolchains/mingw/xmake.lua
@@ -48,7 +48,7 @@ toolchain("mingw")
elseif toolchain:is_arch("armv7", "arm.*") then
cross = "armv7-w64-mingw32-"
else
- cross = config.get("cross") or ""
+ cross = toolchain:cross() or ""
end
-- add bin search library for loading some dependent .dll files windows
diff --git a/xmake/toolchains/ndk/check.lua b/xmake/toolchains/ndk/check.lua
index e5e36fbf7..66bfe72f3 100644
--- a/xmake/toolchains/ndk/check.lua
+++ b/xmake/toolchains/ndk/check.lua
@@ -24,13 +24,17 @@ import("detect.sdks.find_ndk")
import("detect.sdks.find_android_sdk")
-- check the ndk toolchain
-function _check_ndk()
- local ndk = find_ndk(config.get("ndk"), {force = true, verbose = true})
+function _check_ndk(toolchain)
+ local ndk = find_ndk(toolchain:config("ndk") or config.get("ndk"), {force = true, verbose = true})
if ndk then
- config.set("ndk", ndk.sdkdir, {force = true, readonly = true})
- config.set("bin", ndk.bindir, {force = true, readonly = true})
- config.set("cross", ndk.cross, {force = true, readonly = true})
- config.set("gcc_toolchain", ndk.gcc_toolchain, {force = true, readonly = true})
+ toolchain:config_set("ndk", ndk.sdkdir)
+ toolchain:config_set("bindir", ndk.bindir)
+ toolchain:config_set("cross", ndk.cross)
+ toolchain:config_set("gcc_toolchain", ndk.gcc_toolchain)
+ toolchain:config_set("ndkver", ndk.ndkver)
+ toolchain:config_set("ndk_sdkver", ndk.sdkver)
+ toolchain:config_set("ndk_toolchains_ver", ndk.toolchains_ver)
+ toolchain:configs_save()
else
-- failed
cprint("${bright color.error}please run:")
@@ -41,16 +45,17 @@ function _check_ndk()
end
-- check the android sdk
-function _check_android_sdk()
- local sdk = find_android_sdk(config.get("android_sdk"), {force = true, verbose = true})
+function _check_android_sdk(toolchain)
+ local sdk = find_android_sdk(toolchain:config("android_sdk") or config.get("android_sdk"), {force = true, verbose = true})
if sdk then
- config.set("sdk", sdk.sdkdir, {force = true, readonly = true})
+ toolchain:config_set("android_sdk", sdk.sdkdir)
+ toolchain:configs_save()
end
end
-- main entry
function main(toolchain)
- _check_android_sdk()
- _check_ndk()
+ _check_android_sdk(toolchain)
+ _check_ndk(toolchain)
return true
end
diff --git a/xmake/toolchains/ndk/load.lua b/xmake/toolchains/ndk/load.lua
index c4e53ced2..a21b9fbf2 100644
--- a/xmake/toolchains/ndk/load.lua
+++ b/xmake/toolchains/ndk/load.lua
@@ -30,11 +30,11 @@ import("core.project.config")
function main(toolchain)
-- get cross
- local cross = config.get("cross") or ""
+ local cross = toolchain:cross() or ""
-- get gcc toolchain bin directory
local gcc_toolchain_bin = nil
- local gcc_toolchain = config.get("gcc_toolchain")
+ local gcc_toolchain = toolchain:config("gcc_toolchain")
if gcc_toolchain then
gcc_toolchain_bin = path.join(gcc_toolchain, "bin")
end
@@ -62,7 +62,7 @@ function main(toolchain)
-- use llvm directory? e.g. android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin
local isllvm = false
- local bindir = config.get("bin")
+ local bindir = toolchain:bindir()
if bindir and bindir:find("llvm", 1, true) then
isllvm = true
end
@@ -91,7 +91,7 @@ function main(toolchain)
toolchain:add("shflags", "-target " .. targets[arch])
-- add gcc toolchain
- local gcc_toolchain = config.get("gcc_toolchain")
+ local gcc_toolchain = toolchain:config("gcc_toolchain")
if gcc_toolchain then
toolchain:add("cxflags", "-gcc-toolchain " .. gcc_toolchain)
toolchain:add("asflags", "-gcc-toolchain " .. gcc_toolchain)
@@ -116,9 +116,9 @@ function main(toolchain)
toolchain:add("binary.cxflags", "-fPIE", "-pie")
-- add flags for the sdk directory of ndk
- local ndk = config.get("ndk")
- local ndkver = config.get("ndkver")
- local ndk_sdkver = config.get("ndk_sdkver")
+ local ndk = toolchain:config("ndk")
+ local ndkver = toolchain:config("ndkver")
+ local ndk_sdkver = toolchain:config("ndk_sdkver")
if ndk and ndk_sdkver then
-- the sysroot archs
@@ -200,8 +200,8 @@ function main(toolchain)
-- get gnu c++ stl sdk directory
local cxxstl_sdkdir_gnustl = nil
- if config.get("ndk_toolchains_ver") then
- cxxstl_sdkdir_gnustl = path.translate(format("%s/sources/cxx-stl/gnu-libstdc++/%s", ndk, config.get("ndk_toolchains_ver")))
+ if toolchain:config("ndk_toolchains_ver") then
+ cxxstl_sdkdir_gnustl = path.translate(format("%s/sources/cxx-stl/gnu-libstdc++/%s", ndk, toolchain:config("ndk_toolchains_ver")))
end
-- get stlport c++ sdk directory
diff --git a/xmake/toolchains/sdcc/check.lua b/xmake/toolchains/sdcc/check.lua
index 368b80cd8..18f9a7f99 100644
--- a/xmake/toolchains/sdcc/check.lua
+++ b/xmake/toolchains/sdcc/check.lua
@@ -24,12 +24,13 @@ import("detect.sdks.find_cross_toolchain")
-- check the cross toolchain
function main(toolchain)
- local sdkdir = config.get("sdk")
- local bindir = config.get("bin")
+ local sdkdir = toolchain:sdkdir()
+ local bindir = toolchain:bindir()
local cross_toolchain = find_cross_toolchain(sdkdir, {bindir = bindir})
if cross_toolchain then
- config.set("cross", cross_toolchain.cross, {readonly = true, force = true})
- config.set("bin", cross_toolchain.bindir, {readonly = true, force = true})
+ toolchain:config_set("cross", cross_toolchain.cross)
+ toolchain:config_set("bindir", cross_toolchain.bindir)
+ toolchain:configs_save()
else
raise("sdcc toolchain not found!")
end
diff --git a/xmake/toolchains/tinyc/xmake.lua b/xmake/toolchains/tinyc/xmake.lua
index 20d7eedf1..e64e68167 100644
--- a/xmake/toolchains/tinyc/xmake.lua
+++ b/xmake/toolchains/tinyc/xmake.lua
@@ -42,15 +42,16 @@ toolchain("tinyc")
import("lib.detect.find_tool")
-- find tcc
- local sdkdir = config.get("sdk")
+ local sdkdir = toolchain:sdkdir()
if not sdkdir and is_host("windows") then
local winenv_tccsdk = path.join(os.programdir(), "winenv", "tcc")
if os.isdir(winenv_tccsdk) then
sdkdir = winenv_tccsdk
end
end
- if find_tool("tcc", {paths = config.get("bin") or sdkdir}) then
- config.set("__tcc_sdkdir", sdkdir)
+ if find_tool("tcc", {paths = toolchain:bindir() or sdkdir}) then
+ toolchain:config_set("sdkdir", sdkdir)
+ toolchain:configs_save()
return true
end
end)
@@ -77,7 +78,7 @@ toolchain("tinyc")
end
-- init linkdirs and sysincludedirs
- local sdkdir = config.get("__tcc_sdkdir") or toolchain:sdkdir()
+ local sdkdir = toolchain:sdkdir()
if sdkdir then
local includedir = path.join(sdkdir, "include")
if os.isdir(includedir) then