From 8db43c6290ee04145264c04728a030dd74f87452 Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sun, 18 May 2025 19:10:36 -0400 Subject: [PATCH 1/2] Support 16 KB page sizes on Android Android 15+ requires that native libraries be compiled with a linker flag to support 16 KB page sizes. See: https://developer.android.com/guide/practices/page-sizes#compile-r26-lower --- stdlib/cmake/modules/AddSwiftStdlib.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stdlib/cmake/modules/AddSwiftStdlib.cmake b/stdlib/cmake/modules/AddSwiftStdlib.cmake index ce113989ad75d..089f5f30acbb5 100644 --- a/stdlib/cmake/modules/AddSwiftStdlib.cmake +++ b/stdlib/cmake/modules/AddSwiftStdlib.cmake @@ -2469,6 +2469,8 @@ function(add_swift_target_library name) list(APPEND swiftlib_link_flags_all "-shared") # TODO: Instead of `lib${name}.so` find variable or target property which already have this value. list(APPEND swiftlib_link_flags_all "-Wl,-soname,lib${name}.so") + # Ensure compatibility with Android 15+ devices using 16KB memory pages. + list(APPEND swiftlib_link_flags_all "-Wl,-z,max-page-size=16384") endif() if (SWIFTLIB_BACK_DEPLOYMENT_LIBRARY) From c0e1412896477ed633781a134593ac0aab662fdb Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Sat, 19 Jul 2025 18:22:01 -0400 Subject: [PATCH 2/2] Add 16KB page size to Android flags in targets.py --- utils/swift_build_support/swift_build_support/targets.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/swift_build_support/swift_build_support/targets.py b/utils/swift_build_support/swift_build_support/targets.py index fba09416ddb90..7f3f35ec8097c 100644 --- a/utils/swift_build_support/swift_build_support/targets.py +++ b/utils/swift_build_support/swift_build_support/targets.py @@ -164,7 +164,8 @@ def swift_flags(self, args): android_toolchain_path = self.ndk_toolchain_path(args) flags += '-sdk %s/sysroot ' % (android_toolchain_path) - flags += '-tools-directory %s/bin' % (android_toolchain_path) + flags += '-tools-directory %s/bin ' % (android_toolchain_path) + flags += '-Xclang-linker -Wl,-z,max-page-size=16384' return flags def cmake_options(self, args):