Skip to content

Make sure the latest stable Android NDK can produce an Android SDK bundle #85365

@finagolfin

Description

@finagolfin

Description

The Swift SDK for Android only supports the latest LTS NDK, which is now NDK 27d. However, we should make sure the latest stable NDK, now 29, is also working, in preparation for the next LTS NDK being released.

I just tried using the official CI script to build with NDK 29 and I'm seeing C++ interop compilation errors for the first time, when trying to build CxxStdlib.o:

[1793/2251][ 79%][4788.025s] Compiling /home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/stdlib/public/Cxx/std//ANDROID/aarch64/CxxStdlib.o
FAILED: stdlib/public/Cxx/std/ANDROID/aarch64/CxxStdlib.o /home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/stdlib/public/Cxx/std/ANDROID/aarch64/CxxStdlib.o 
cd /home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/stdlib/public/Cxx/std && /home/build-user/build/swift-project/cmake-linux-x86_64/bin/cmake -E make_directory /home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/stdlib/public/Cxx/std/ANDROID/aarch64 && /home/build-user/build/swift-project/cmake-linux-x86_64/bin/cmake -E env PYTHONIOENCODING=UTF8 LD_LIBRARY_PATH=/usr/local/swift/lib/swift/linux /usr/bin/python3.12 /source/swift-project/swift/utils/line-directive @/home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/stdlib/public/Cxx/std/5b258c27ce8b90a75dfad006a0053b49e299d8f2.txt -- /home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/./bin/swiftc -c -sdk /home/build-user/build/ndk/android-ndk-r29/toolchains/llvm/prebuilt/linux-x86_64/sysroot -target aarch64-unknown-linux-android -resource-dir /home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/./lib/swift -O -D SWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY -D SWIFT_ENABLE_EXPERIMENTAL_DISTRIBUTED -D SWIFT_ENABLE_EXPERIMENTAL_DIFFERENTIABLE_PROGRAMMING -D SWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING -D SWIFT_ENABLE_EXPERIMENTAL_OBSERVATION -D SWIFT_ENABLE_SYNCHRONIZATION -D SWIFT_ENABLE_VOLATILE -D SWIFT_RUNTIME_OS_VERSIONING -D SWIFT_STDLIB_ENABLE_UNICODE_DATA -D SWIFT_STDLIB_ENABLE_VECTOR_TYPES -D SWIFT_STDLIB_HAS_COMMANDLINE -D SWIFT_STDLIB_HAS_STDIN -D SWIFT_STDLIB_HAS_ENVIRON -Xcc -DSWIFT_STDLIB_HAS_ENVIRON -D SWIFT_CONCURRENCY_USES_DISPATCH -D SWIFT_STDLIB_OVERRIDABLE_RETAIN_RELEASE -D SWIFT_THREADING_PTHREADS -static -tools-directory /home/build-user/build/swift-project/Ninja-Release/llvm-linux-x86_64/./bin -module-cache-path /home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/./module-cache -no-link-objc-runtime -enable-library-evolution -library-level api -Xfrontend -require-explicit-availability=ignore -Xfrontend -enforce-exclusivity=unchecked -D SWIFT_ENABLE_REFLECTION -module-name CxxStdlib -swift-version 5 -Xfrontend -empty-abi-descriptor -runtime-compatibility-version none -disable-autolinking-runtime-compatibility-dynamic-replacements -Xfrontend -disable-autolinking-runtime-compatibility-concurrency -Xfrontend -disable-objc-interop -enable-experimental-feature NoncopyableGenerics2 -enable-experimental-feature SuppressedAssociatedTypes -enable-experimental-feature SE427NoInferenceOnExtension -enable-experimental-feature NonescapableTypes -enable-experimental-feature LifetimeDependence -enable-experimental-feature InoutLifetimeDependence -enable-experimental-feature LifetimeDependenceMutableAccessors -enable-upcoming-feature MemberImportVisibility -cxx-interoperability-mode=default -Xfrontend -module-interface-preserve-types-as-written -enable-experimental-feature AssumeResilientCxxTypes -enable-experimental-feature Lifetimes -enable-experimental-feature AllowUnsafeAttribute -strict-memory-safety -disable-upcoming-feature MemberImportVisibility -warn-implicit-overrides -Xfrontend -enable-lexical-lifetimes=false -Xfrontend -disable-implicit-concurrency-module-import -Xfrontend -disable-implicit-string-processing-module-import -Xfrontend -prespecialize-generic-metadata -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 9999:macOS\ 9999,\ iOS\ 9999,\ watchOS\ 9999,\ tvOS\ 9999 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 9999:macOS\ 9999,\ iOS\ 9999,\ watchOS\ 9999,\ tvOS\ 9999 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.0:macOS\ 10.14.4,\ iOS\ 12.2,\ watchOS\ 5.2,\ tvOS\ 12.2 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.0:macOS\ 10.14.4,\ iOS\ 12.2,\ watchOS\ 5.2,\ tvOS\ 12.2 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.1:macOS\ 10.15,\ iOS\ 13.0,\ watchOS\ 6.0,\ tvOS\ 13.0 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.1:macOS\ 10.15,\ iOS\ 13.0,\ watchOS\ 6.0,\ tvOS\ 13.0 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.2:macOS\ 10.15.4,\ iOS\ 13.4,\ watchOS\ 6.2,\ tvOS\ 13.4 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.2:macOS\ 10.15.4,\ iOS\ 13.4,\ watchOS\ 6.2,\ tvOS\ 13.4 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.3:macOS\ 11.0,\ iOS\ 14.0,\ watchOS\ 7.0,\ tvOS\ 14.0 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.3:macOS\ 11.0,\ iOS\ 14.0,\ watchOS\ 7.0,\ tvOS\ 14.0 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.4:macOS\ 11.3,\ iOS\ 14.5,\ watchOS\ 7.4,\ tvOS\ 14.5 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.4:macOS\ 11.3,\ iOS\ 14.5,\ watchOS\ 7.4,\ tvOS\ 14.5 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.5:macOS\ 12.0,\ iOS\ 15.0,\ watchOS\ 8.0,\ tvOS\ 15.0 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.5:macOS\ 12.0,\ iOS\ 15.0,\ watchOS\ 8.0,\ tvOS\ 15.0 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.6:macOS\ 12.3,\ iOS\ 15.4,\ watchOS\ 8.5,\ tvOS\ 15.4 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.6:macOS\ 12.3,\ iOS\ 15.4,\ watchOS\ 8.5,\ tvOS\ 15.4 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.7:macOS\ 13.0,\ iOS\ 16.0,\ watchOS\ 9.0,\ tvOS\ 16.0 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.7:macOS\ 13.0,\ iOS\ 16.0,\ watchOS\ 9.0,\ tvOS\ 16.0 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.8:macOS\ 13.3,\ iOS\ 16.4,\ watchOS\ 9.4,\ tvOS\ 16.4 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.8:macOS\ 13.3,\ iOS\ 16.4,\ watchOS\ 9.4,\ tvOS\ 16.4 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.9:macOS\ 14.0,\ iOS\ 17.0,\ watchOS\ 10.0,\ tvOS\ 17.0 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.9:macOS\ 14.0,\ iOS\ 17.0,\ watchOS\ 10.0,\ tvOS\ 17.0 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 5.10:macOS\ 14.4,\ iOS\ 17.4,\ watchOS\ 10.4,\ tvOS\ 17.4,\ visionOS\ 1.1 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 5.10:macOS\ 14.4,\ iOS\ 17.4,\ watchOS\ 10.4,\ tvOS\ 17.4,\ visionOS\ 1.1 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 6.0:macOS\ 15.0,\ iOS\ 18.0,\ watchOS\ 11.0,\ tvOS\ 18.0,\ visionOS\ 2.0 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 6.0:macOS\ 15.0,\ iOS\ 18.0,\ watchOS\ 11.0,\ tvOS\ 18.0,\ visionOS\ 2.0 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 6.1:macOS\ 15.4,\ iOS\ 18.4,\ watchOS\ 11.4,\ tvOS\ 18.4,\ visionOS\ 2.4 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 6.1:macOS\ 15.4,\ iOS\ 18.4,\ watchOS\ 11.4,\ tvOS\ 18.4,\ visionOS\ 2.4 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 6.2:macOS\ 26.0,\ iOS\ 26.0,\ watchOS\ 26.0,\ tvOS\ 26.0,\ visionOS\ 26.0 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 6.2:macOS\ 26.0,\ iOS\ 26.0,\ watchOS\ 26.0,\ tvOS\ 26.0,\ visionOS\ 26.0 -Xfrontend -define-availability -Xfrontend SwiftStdlib\ 6.3:macOS\ 9999,\ iOS\ 9999,\ watchOS\ 9999,\ tvOS\ 9999,\ visionOS\ 9999 -Xfrontend -define-availability -Xfrontend StdlibDeploymentTarget\ 6.3:macOS\ 9999,\ iOS\ 9999,\ watchOS\ 9999,\ tvOS\ 9999,\ visionOS\ 9999 -Xfrontend -define-availability -Xfrontend SwiftCompatibilitySpan\ 5.0:macOS\ 10.14.4,\ iOS\ 12.2,\ watchOS\ 5.2,\ tvOS\ 12.2,\ visionOS\ 1.0 -Xfrontend -define-availability -Xfrontend SwiftCompatibilitySpan\ 6.2:macOS\ 26.0,\ iOS\ 26.0,\ watchOS\ 26.0,\ tvOS\ 26.0,\ visionOS\ 26.0 -Xfrontend -target-min-inlining-version -Xfrontend min -whole-module-optimization -color-diagnostics -parse-as-library -resource-dir /home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/./lib/swift -I /home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/./lib/swift/android -o /home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/stdlib/public/Cxx/std//ANDROID/aarch64/CxxStdlib.o @/home/build-user/build/swift-project/Ninja-Release/swift-linux-x86_64/stdlib/public/Cxx/std/5b258c27ce8b90a75dfad006a0053b49e299d8f2.txt
/home/build-user/build/ndk/android-ndk-r29/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/wchar.h:141:39: error: redefinition of '__libcpp_wcschr'
139 | #      if defined(__cplusplus) && !defined(_LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS) && defined(_LIBCPP_PREFERRED_OVERLOAD)
140 | extern "C++" {
141 | inline _LIBCPP_HIDE_FROM_ABI wchar_t* __libcpp_wcschr(const wchar_t* __s, wchar_t __c) {
    |                                       |- error: redefinition of '__libcpp_wcschr'
    |                                       `- note: previous definition is here
142 |   return (wchar_t*)wcschr(__s, __c);
143 | }

I can't make head or tails of this error, @egorzhdan or @hnrklssn, any idea?

Additional information

I'm building the latest Nov. 3 trunk snapshot tag using NDK 29.

Metadata

Metadata

Assignees

No one assigned

    Labels

    AndroidPlatform: Androidc++ interopFeature: Interoperability with C++task

    Type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions