diff options
| author | ruki <[email protected]> | 2018-06-22 22:51:28 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2018-06-22 11:08:51 +0800 |
| commit | 8cffaa773fe48eaf4afe957ff09f8d80f88f68ca (patch) | |
| tree | d6e50e819a9e19d916b8b625d46e1ff310318e26 | |
| parent | 752e703e0041b6fd9770968693b0f625aa246d3e (diff) | |
improve find cross toolchain
| -rw-r--r-- | xmake/modules/detect/sdks/find_cross_toolchain.lua (renamed from xmake/modules/detect/sdks/find_cross_toolchains.lua) | 41 | ||||
| -rw-r--r-- | xmake/modules/detect/sdks/find_ndk.lua | 8 | ||||
| -rw-r--r-- | xmake/platforms/cross/check.lua | 16 | ||||
| -rw-r--r-- | xmake/platforms/linux/check.lua | 16 | ||||
| -rw-r--r-- | xmake/platforms/mingw/check.lua | 16 |
5 files changed, 52 insertions, 45 deletions
diff --git a/xmake/modules/detect/sdks/find_cross_toolchains.lua b/xmake/modules/detect/sdks/find_cross_toolchain.lua index 1e92d04c8..107d7c916 100644 --- a/xmake/modules/detect/sdks/find_cross_toolchains.lua +++ b/xmake/modules/detect/sdks/find_cross_toolchain.lua @@ -19,25 +19,26 @@ -- Copyright (C) 2015 - 2018, TBOOX Open Source Group. -- -- @author ruki --- @file find_cross_toolchains.lua +-- @file find_cross_toolchain.lua -- -- imports import("core.project.config") +import("lib.detect.find_file") --- find cross toolchains +-- find cross toolchain -- --- @param rootdir the root directory of cross toolchains +-- @param rootdir the root directory of cross toolchain -- @param opt the argument options -- .e.g {bin = .., cross = ..} -- --- @return the toolchains array. .e.g {{bin = .., cross = ..}, .. } +-- @return the toolchain .e.g {bin = .., cross = ..} -- -- @code -- --- local cross_toolchains = find_cross_toolchains("/xxx/android-cross-r10e") --- local cross_toolchains = find_cross_toolchains("/xxx/android-cross-r10e", {cross = "arm-linux-androideabi-"}) --- local cross_toolchains = find_cross_toolchains("/xxx/android-cross-r10e", {cross = "arm-linux-androideabi-", bin = ..}) +-- local toolchain = find_cross_toolchain("/xxx/android-cross-r10e") +-- local toolchain = find_cross_toolchain("/xxx/android-cross-r10e", {cross = "arm-linux-androideabi-"}) +-- local toolchain = find_cross_toolchain("/xxx/android-cross-r10e", {cross = "arm-linux-androideabi-", bin = ..}) -- -- @endcode -- @@ -48,15 +49,27 @@ function main(rootdir, opt) -- get root directory if not rootdir or not os.isdir(rootdir) then - return {} + return end - -- find bin directory and cross - local cross_toolchains = {} - for _, ldpath in ipairs(os.files(path.join(opt.bin or rootdir, "**" .. (opt.cross or '-') .. "ld"))) do - table.insert(cross_toolchains, {bin = path.directory(ldpath), cross = path.basename(ldpath):sub(1, -3)}) + -- init pathes + local pathes = {} + if opt.bin then + table.insert(pathes, opt.bin) end + table.insert(pathes, path.join(rootdir, "bin")) + table.insert(pathes, path.join(rootdir, "**", "bin")) - -- ok? - return cross_toolchains + -- attempt to find *-ld + local ldname = os.host() == "windows" and "ld.exe" or "ld" + local ldpath = find_file((opt.cross or '*-') .. ldname, pathes) + if ldpath then + return {bin = path.directory(ldpath), cross = path.basename(ldpath):sub(1, -3)} + end + + -- find ld + ldpath = find_file(ldname, pathes) + if ldpath then + return {bin = path.directory(ldpath), cross = ""} + end end diff --git a/xmake/modules/detect/sdks/find_ndk.lua b/xmake/modules/detect/sdks/find_ndk.lua index dfbc7454a..73f643f4f 100644 --- a/xmake/modules/detect/sdks/find_ndk.lua +++ b/xmake/modules/detect/sdks/find_ndk.lua @@ -19,7 +19,7 @@ -- Copyright (C) 2015 - 2018, TBOOX Open Source Group. -- -- @author ruki --- @file find_toolchains.lua +-- @file find_ndk.lua -- -- imports @@ -31,12 +31,12 @@ import("core.project.config") -- @param opt the argument options -- .e.g {arch = "[armv5te|armv6|armv7-a|armv8-a|arm64-v8a]"} -- --- @return the toolchains array. .e.g {{bin = .., cross = ..}, .. } +-- @return the ndk toolchains array. .e.g {{bin = .., cross = ..}, .. } -- -- @code -- --- local toolchains = find_toolchains("/xxx/android-ndk-r10e") --- local toolchains = find_toolchains("/xxx/android-ndk-r10e", {arch = "arm64-v8a"}) +-- local toolchains = find_ndk("/xxx/android-ndk-r10e") +-- local toolchains = find_ndk("/xxx/android-ndk-r10e", {arch = "arm64-v8a"}) -- -- @endcode -- diff --git a/xmake/platforms/cross/check.lua b/xmake/platforms/cross/check.lua index 183a20985..d05a8f492 100644 --- a/xmake/platforms/cross/check.lua +++ b/xmake/platforms/cross/check.lua @@ -23,7 +23,7 @@ -- -- imports -import("detect.sdks.find_cross_toolchains") +import("detect.sdks.find_cross_toolchain") import(".checker") -- check the architecture @@ -44,15 +44,13 @@ function _toolchains(config) return _g.TOOLCHAINS end - -- find cross toolchains + -- find cross toolchain local cross = "" - for _, toolchain in ipairs(find_cross_toolchains(config.get("sdk") or config.get("toolchains"), {bin = config.get("toolchains"), cross = config.get("cross")})) do - if toolchain.bin and toolchain.cross then - config.set("cross", toolchain.cross, {readonly = true, force = true}) - config.set("toolchains", toolchain.bin, {readonly = true, force = true}) - cross = toolchain.cross - break - end + local toolchain = find_cross_toolchain(config.get("sdk") or config.get("toolchains"), {bin = config.get("toolchains"), cross = config.get("cross")}) + if toolchain then + config.set("cross", toolchain.cross, {readonly = true, force = true}) + config.set("toolchains", toolchain.bin, {readonly = true, force = true}) + cross = toolchain.cross end -- init toolchains diff --git a/xmake/platforms/linux/check.lua b/xmake/platforms/linux/check.lua index 6031839e1..0910ff86b 100644 --- a/xmake/platforms/linux/check.lua +++ b/xmake/platforms/linux/check.lua @@ -23,7 +23,7 @@ -- -- imports -import("detect.sdks.find_cross_toolchains") +import("detect.sdks.find_cross_toolchain") import(".checker") -- check the architecture @@ -49,15 +49,13 @@ function _toolchains(config) return _g.TOOLCHAINS end - -- find cross toolchains + -- find cross toolchain local cross = "" - for _, toolchain in ipairs(find_cross_toolchains(config.get("sdk") or config.get("toolchains"), {bin = config.get("toolchains"), cross = config.get("cross")})) do - if toolchain.bin and toolchain.cross then - config.set("cross", toolchain.cross, {readonly = true, force = true}) - config.set("toolchains", toolchain.bin, {readonly = true, force = true}) - cross = toolchain.cross - break - end + local toolchain = find_cross_toolchain(config.get("sdk") or config.get("toolchains"), {bin = config.get("toolchains"), cross = config.get("cross")}) + if toolchain then + config.set("cross", toolchain.cross, {readonly = true, force = true}) + config.set("toolchains", toolchain.bin, {readonly = true, force = true}) + cross = toolchain.cross end -- init toolchains diff --git a/xmake/platforms/mingw/check.lua b/xmake/platforms/mingw/check.lua index bb5654665..0b2c2b870 100644 --- a/xmake/platforms/mingw/check.lua +++ b/xmake/platforms/mingw/check.lua @@ -23,7 +23,7 @@ -- -- imports -import("detect.sdks.find_cross_toolchains") +import("detect.sdks.find_cross_toolchain") import(".checker") -- get toolchains @@ -40,15 +40,13 @@ function _toolchains(config) arch = "i686" end - -- find cross toolchains + -- find cross toolchain local cross = "" - for _, toolchain in ipairs(find_cross_toolchains(config.get("sdk") or config.get("toolchains"), {bin = config.get("toolchains"), cross = config.get("cross")})) do - if toolchain.bin and toolchain.cross and toolchain.cross:find(arch) then - config.set("cross", toolchain.cross) - config.set("toolchains", toolchain.bin) - cross = toolchain.cross - break - end + local toolchain = find_cross_toolchain(config.get("sdk") or config.get("toolchains"), {bin = config.get("toolchains"), cross = config.get("cross")}) + if toolchain then + config.set("cross", toolchain.cross, {readonly = true, force = true}) + config.set("toolchains", toolchain.bin, {readonly = true, force = true}) + cross = toolchain.cross end -- make toolchains |
