summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-10-16 22:52:54 +0800
committerruki <[email protected]>2025-10-16 22:52:54 +0800
commit61dda4e81f4c4328f49eaa439dd6fca4f94954a3 (patch)
tree60456450989c81cc3eefbc6b1935812c56413866
parent014e5b8b3e1078fc42a06e8eeecd2be1ad26a8a7 (diff)
improve old ndk to support gcc
-rw-r--r--xmake/modules/detect/sdks/find_ndk.lua16
-rw-r--r--xmake/toolchains/ndk/check.lua1
-rw-r--r--xmake/toolchains/ndk/load.lua23
3 files changed, 30 insertions, 10 deletions
diff --git a/xmake/modules/detect/sdks/find_ndk.lua b/xmake/modules/detect/sdks/find_ndk.lua
index 0ac0a4f83..43d822845 100644
--- a/xmake/modules/detect/sdks/find_ndk.lua
+++ b/xmake/modules/detect/sdks/find_ndk.lua
@@ -158,7 +158,13 @@ function _find_ndk_sysroot(sdkdir)
end
-- find the ndk toolchain
-function _find_ndk(sdkdir, arch, ndk_sdkver, ndk_toolchains_ver)
+function _find_ndk(opt)
+ opt = opt or {}
+ local arch = opt.arch
+ local sdkdir = opt.sdkdir
+ local ndk_sdkver = opt.ndk_sdkver
+ local ndk_toolchains_ver = opt.ndk_toolchains_ver
+ local compiler = opt.compiler
-- find ndk root directory
sdkdir = _find_ndkdir(sdkdir)
@@ -204,7 +210,7 @@ function _find_ndk(sdkdir, arch, ndk_sdkver, ndk_toolchains_ver)
local llvm_toolchain
local prebuilt = (is_host("macosx") and "darwin" or os.host()) .. "-x86_64"
local bindir = find_directory("bin", path.join(sdkdir, "toolchains", "llvm", "prebuilt", prebuilt)) -- larger than ndk r16
- if bindir then
+ if bindir and compiler ~= "gcc" then
llvm_toolchain = path.directory(bindir)
else
bindir = find_directory("bin", path.join(sdkdir, "toolchains", gcc_toolchain_subdir, "prebuilt", "*"))
@@ -285,7 +291,11 @@ function main(sdkdir, opt)
local arch = opt.arch or config.get("arch") or "armeabi-v7a"
-- find ndk
- local ndk = _find_ndk(sdkdir or config.get("ndk") or global.get("ndk"), arch, opt.sdkver or config.get("ndk_sdkver"), opt.toolchains_ver or config.get("ndk_toolchains_ver"))
+ local ndk = _find_ndk({sdkdir = sdkdir or config.get("ndk") or global.get("ndk"),
+ arch = arch,
+ ndk_sdkver = opt.sdkver or config.get("ndk_sdkver"),
+ ndk_toolchains_ver = opt.toolchains_ver or config.get("ndk_toolchains_ver"),
+ compiler = opt.compiler})
if ndk and ndk.sdkdir then
config.set("ndk", ndk.sdkdir, {force = true, readonly = true})
config.set("ndkver", ndk.ndkver, {force = true, readonly = true})
diff --git a/xmake/toolchains/ndk/check.lua b/xmake/toolchains/ndk/check.lua
index 2845623c1..dc929085e 100644
--- a/xmake/toolchains/ndk/check.lua
+++ b/xmake/toolchains/ndk/check.lua
@@ -43,6 +43,7 @@ function _check_ndk(toolchain)
ndk = find_ndk(toolchain:config("ndk") or config.get("ndk"), {force = true, verbose = true,
plat = toolchain:plat(),
arch = toolchain:arch(),
+ compiler = toolchain:config("gcc") and "gcc" or "clang",
sdkver = toolchain:config("sdkver")})
end
if ndk then
diff --git a/xmake/toolchains/ndk/load.lua b/xmake/toolchains/ndk/load.lua
index 5a3c0ed4d..cee7f8c3e 100644
--- a/xmake/toolchains/ndk/load.lua
+++ b/xmake/toolchains/ndk/load.lua
@@ -85,16 +85,25 @@ function main(toolchain)
local ndk_sdkver = toolchain:config("ndk_sdkver")
-- set toolset
- toolchain:set("toolset", "cc", "clang", cross .. "gcc")
- toolchain:set("toolset", "cxx", "clang++", cross .. "g++")
- toolchain:set("toolset", "cpp", "clang -E", cross .. "gcc -E")
- toolchain:set("toolset", "as", "clang", cross .. "gcc")
- toolchain:set("toolset", "ld", "clang++", "clang", cross .. "g++", cross .. "gcc")
- toolchain:set("toolset", "sh", "clang++", "clang", cross .. "g++", cross .. "gcc")
+ local use_gcc = toolchain:config("gcc")
+ if use_gcc then
+ toolchain:set("toolset", "cc", cross .. "gcc")
+ toolchain:set("toolset", "cxx", cross .. "g++")
+ toolchain:set("toolset", "cpp", cross .. "gcc -E")
+ toolchain:set("toolset", "as", cross .. "gcc")
+ toolchain:set("toolset", "ld", cross .. "g++", cross .. "gcc")
+ toolchain:set("toolset", "sh", cross .. "g++", cross .. "gcc")
+ else
+ toolchain:set("toolset", "cc", "clang", cross .. "gcc")
+ toolchain:set("toolset", "cxx", "clang++", cross .. "g++")
+ toolchain:set("toolset", "cpp", "clang -E", cross .. "gcc -E")
+ toolchain:set("toolset", "as", "clang", cross .. "gcc")
+ toolchain:set("toolset", "ld", "clang++", "clang", cross .. "g++", cross .. "gcc")
+ toolchain:set("toolset", "sh", "clang++", "clang", cross .. "g++", cross .. "gcc")
+ end
toolchain:set("toolset", "ar", gcc_toolchain_bin and path.join(gcc_toolchain_bin, cross .. "ar") or (cross .. "ar"), "llvm-ar")
toolchain:set("toolset", "ranlib", gcc_toolchain_bin and path.join(gcc_toolchain_bin, cross .. "ranlib") or (cross .. "ranlib"))
toolchain:set("toolset", "strip", gcc_toolchain_bin and path.join(gcc_toolchain_bin, cross .. "strip") or (cross .. "strip"), "llvm-strip")
-
-- gnustl and stlport have been removed in ndk r18 (deprecated in ndk r17)
-- https://github.com/android/ndk/wiki/Changelog-r18
local old_runtimes = {"gnustl_static", "gnustl_shared", "stlport_static", "stlport_shared"}