diff options
| author | ruki <[email protected]> | 2024-01-16 00:46:17 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2024-01-16 00:46:17 +0800 |
| commit | d3589b0d7954ed7f37dea0c19299341054cd3f3c (patch) | |
| tree | 9365eb2d2916d80715768e7c21c8b4666b26f835 | |
| parent | 45f0750451087954ca4d649192d593341dd809f9 (diff) | |
support android ndk r26b #4614
| -rw-r--r-- | xmake/toolchains/ndk/load.lua | 144 |
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 |
