summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2024-01-16 00:46:17 +0800
committerruki <[email protected]>2024-01-16 00:46:17 +0800
commitd3589b0d7954ed7f37dea0c19299341054cd3f3c (patch)
tree9365eb2d2916d80715768e7c21c8b4666b26f835
parent45f0750451087954ca4d649192d593341dd809f9 (diff)
support android ndk r26b #4614
-rw-r--r--xmake/toolchains/ndk/load.lua144
1 files changed, 80 insertions, 64 deletions
diff --git a/xmake/toolchains/ndk/load.lua b/xmake/toolchains/ndk/load.lua
index 2b5b7b8f5..6f386178b 100644
--- a/xmake/toolchains/ndk/load.lua
+++ b/xmake/toolchains/ndk/load.lua
@@ -229,79 +229,95 @@ function main(toolchain)
end
-- only for c++ stl
- if config.get("ndk_stdcxx") and cxxstl_sdkdir and os.isdir(cxxstl_sdkdir) then
+ if config.get("ndk_stdcxx") then
+ if cxxstl_sdkdir and os.isdir(cxxstl_sdkdir) then
- -- the toolchains archs
- local toolchains_archs =
- {
- ["armv5te"] = "armeabi" -- deprecated
- , ["armv7-a"] = "armeabi-v7a" -- deprecated
- , ["armeabi"] = "armeabi" -- removed in ndk r17
- , ["armeabi-v7a"] = "armeabi-v7a"
- , ["arm64-v8a"] = "arm64-v8a"
- , i386 = "x86" -- deprecated
- , x86 = "x86"
- , x86_64 = "x86_64"
- , mips = "mips" -- removed in ndk r17
- , mips64 = "mips64" -- removed in ndk r17
- }
- local toolchains_arch = toolchains_archs[arch]
+ -- the toolchains archs
+ local toolchains_archs =
+ {
+ ["armv5te"] = "armeabi" -- deprecated
+ , ["armv7-a"] = "armeabi-v7a" -- deprecated
+ , ["armeabi"] = "armeabi" -- removed in ndk r17
+ , ["armeabi-v7a"] = "armeabi-v7a"
+ , ["arm64-v8a"] = "arm64-v8a"
+ , i386 = "x86" -- deprecated
+ , x86 = "x86"
+ , x86_64 = "x86_64"
+ , mips = "mips" -- removed in ndk r17
+ , mips64 = "mips64" -- removed in ndk r17
+ }
+ local toolchains_arch = toolchains_archs[arch]
- -- add c++ stl include and link directories
- if toolchains_arch then
- toolchain:add("linkdirs", format("%s/libs/%s", cxxstl_sdkdir, toolchains_arch))
- end
- if ndk_cxxstl:startswith("c++") or ndk_cxxstl:startswith("llvmstl") then
- toolchain:add("cxxflags", "-nostdinc++")
- toolchain:add("sysincludedirs", format("%s/include", cxxstl_sdkdir))
+ -- add c++ stl include and link directories
if toolchains_arch then
- toolchain:add("sysincludedirs", format("%s/libs/%s/include", cxxstl_sdkdir, toolchains_arch))
+ toolchain:add("linkdirs", format("%s/libs/%s", cxxstl_sdkdir, toolchains_arch))
end
- local abi_path = path.join(ndk, "sources", "cxx-stl", "llvm-libc++abi")
- local before_r13 = path.join(abi_path, "libcxxabi")
- local after_r13 = path.join(abi_path, "include")
- if os.isdir(before_r13) then
- toolchain:add("sysincludedirs", before_r13)
- elseif os.isdir(after_r13) then
- toolchain:add("sysincludedirs", after_r13)
+ if ndk_cxxstl:startswith("c++") or ndk_cxxstl:startswith("llvmstl") then
+ toolchain:add("cxxflags", "-nostdinc++")
+ toolchain:add("sysincludedirs", format("%s/include", cxxstl_sdkdir))
+ if toolchains_arch then
+ toolchain:add("sysincludedirs", format("%s/libs/%s/include", cxxstl_sdkdir, toolchains_arch))
+ end
+ local abi_path = path.join(ndk, "sources", "cxx-stl", "llvm-libc++abi")
+ local before_r13 = path.join(abi_path, "libcxxabi")
+ local after_r13 = path.join(abi_path, "include")
+ if os.isdir(before_r13) then
+ toolchain:add("sysincludedirs", before_r13)
+ elseif os.isdir(after_r13) then
+ toolchain:add("sysincludedirs", after_r13)
+ end
+ elseif ndk_cxxstl:startswith("gnustl") then
+ toolchain:add("cxxflags", "-nostdinc++")
+ toolchain:add("sysincludedirs", format("%s/include", cxxstl_sdkdir))
+ if toolchains_arch then
+ toolchain:add("sysincludedirs", format("%s/libs/%s/include", cxxstl_sdkdir, toolchains_arch))
+ end
+ elseif ndk_cxxstl:startswith("stlport") then
+ toolchain:add("cxxflags", "-nostdinc++")
+ toolchain:add("sysincludedirs", format("%s/stlport", cxxstl_sdkdir))
end
- elseif ndk_cxxstl:startswith("gnustl") then
- toolchain:add("cxxflags", "-nostdinc++")
- toolchain:add("sysincludedirs", format("%s/include", cxxstl_sdkdir))
- if toolchains_arch then
- toolchain:add("sysincludedirs", format("%s/libs/%s/include", cxxstl_sdkdir, toolchains_arch))
+
+ -- add c++ stl links
+ if ndk_cxxstl == "c++_static" or ndk_cxxstl == "llvmstl_static" then
+ toolchain:add("syslinks", "c++_static", "c++abi")
+ if arm32 then
+ toolchain:add("syslinks", "unwind", "atomic")
+ end
+ elseif ndk_cxxstl == "c++_shared" or ndk_cxxstl == "llvmstl_shared" then
+ toolchain:add("syslinks", "c++_shared", "c++abi")
+ if arm32 then
+ toolchain:add("syslinks", "unwind", "atomic")
+ end
+ elseif ndk_cxxstl == "gnustl_static" then
+ toolchain:add("syslinks", "gnustl_static")
+ elseif ndk_cxxstl == "gnustl_shared" then
+ toolchain:add("syslinks", "gnustl_shared")
+ elseif ndk_cxxstl == "stlport_static" then
+ toolchain:add("syslinks", "stlport_static")
+ elseif ndk_cxxstl == "stlport_shared" then
+ toolchain:add("syslinks", "stlport_shared")
end
- elseif ndk_cxxstl:startswith("stlport") then
- toolchain:add("cxxflags", "-nostdinc++")
- toolchain:add("sysincludedirs", format("%s/stlport", cxxstl_sdkdir))
- end
- -- add c++ stl links
- if ndk_cxxstl == "c++_static" or ndk_cxxstl == "llvmstl_static" then
- toolchain:add("syslinks", "c++_static", "c++abi")
- if arm32 then
- toolchain:add("syslinks", "unwind", "atomic")
+ -- fix 'ld: error: cannot find -lc++' for clang++.exe on r20/windows
+ -- @see https://github.com/xmake-io/xmake/issues/684
+ if ndkver and ndkver >= 20 and (ndk_cxxstl:startswith("c++") or ndk_cxxstl:startswith("llvmstl")) then
+ toolchain:add("ldflags", "-nostdlib++")
+ toolchain:add("shflags", "-nostdlib++")
end
- elseif ndk_cxxstl == "c++_shared" or ndk_cxxstl == "llvmstl_shared" then
- toolchain:add("syslinks", "c++_shared", "c++abi")
- if arm32 then
- toolchain:add("syslinks", "unwind", "atomic")
+ else
+ -- The NDK's libc++ now comes directly from our LLVM toolchain above 26b
+ -- https://github.com/xmake-io/xmake/issues/4614
+ if ndk_cxxstl == "c++_static" then
+ toolchain:add("syslinks", "c++_static")
+ if arm32 then
+ toolchain:add("syslinks", "unwind", "atomic")
+ end
+ elseif ndk_cxxstl == "c++_shared" then
+ toolchain:add("syslinks", "c++_shared")
+ if arm32 then
+ toolchain:add("syslinks", "unwind", "atomic")
+ end
end
- elseif ndk_cxxstl == "gnustl_static" then
- toolchain:add("syslinks", "gnustl_static")
- elseif ndk_cxxstl == "gnustl_shared" then
- toolchain:add("syslinks", "gnustl_shared")
- elseif ndk_cxxstl == "stlport_static" then
- toolchain:add("syslinks", "stlport_static")
- elseif ndk_cxxstl == "stlport_shared" then
- toolchain:add("syslinks", "stlport_shared")
- end
-
- -- fix 'ld: error: cannot find -lc++' for clang++.exe on r20/windows
- -- @see https://github.com/xmake-io/xmake/issues/684
- if ndkver and ndkver >= 20 and (ndk_cxxstl:startswith("c++") or ndk_cxxstl:startswith("llvmstl")) then
- toolchain:add("ldflags", "-nostdlib++")
- toolchain:add("shflags", "-nostdlib++")
end
end
end