From 3880772eb0e78f95ddec48fafa6833b45bf45dd0 Mon Sep 17 00:00:00 2001
From: Steve Lhomme <robux4@ycbcr.xyz>
Date: Wed, 9 Oct 2024 11:45:07 +0200
Subject: [PATCH] buildsystem: use 16k max page size

By passing "-z max-page-size=16384" to the linker.

Newer Android devices use 16KB and require a recompilation with this flag.
See https://developer.android.com/guide/practices/page-sizes

Neither VLC nor the contribs (used by Android) use PAGE_SIZE directly so it should be fine.

This flag is needed regardless the use of the NDK 27 or not.
---
 buildsystem/build-libvlc.sh | 7 +++++--
 libvlc/jni/libvlc.mk        | 1 +
 libvlc/jni/libvlcjni.mk     | 1 +
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/buildsystem/build-libvlc.sh b/buildsystem/build-libvlc.sh
index 236210b..f445233 100755
--- a/buildsystem/build-libvlc.sh
+++ b/buildsystem/build-libvlc.sh
@@ -167,8 +167,9 @@ fi
 
 # cf. GLOBAL_CFLAGS from ${ANDROID_NDK}/build/core/default-build-commands.mk
 VLC_CFLAGS="${VLC_CFLAGS} -fPIC -fdata-sections -ffunction-sections -funwind-tables \
- -fstack-protector-strong -no-canonical-prefixes"
-VLC_CXXFLAGS="-fexceptions -frtti"
+ -fstack-protector-strong -no-canonical-prefixes -Wl,-z,max-page-size=16384"
+VLC_CXXFLAGS="-fexceptions -frtti -Wl,-z,max-page-size=16384"
+VLC_LDFLAGS="-z max-page-size=16384"
 
 # Release or not?
 if [ "$AVLC_RELEASE" = 1 ]; then
@@ -187,6 +188,7 @@ echo "API:        $ANDROID_API"
 echo "PATH:       $PATH"
 echo "VLC_CFLAGS:        ${VLC_CFLAGS}"
 echo "VLC_CXXFLAGS:      ${VLC_CXXFLAGS}"
+echo "VLC_LDFLAGS:       ${VLC_LDFLAGS}"
 
 if [ -z "$ANDROID_NDK" ]; then
     echo "Please set the ANDROID_NDK environment variable with its path."
@@ -501,6 +503,7 @@ else
 
     echo "EXTRA_CFLAGS=${VLC_CFLAGS}" >> $VLC_CONTRIB_DIR/config.mak
     echo "EXTRA_CXXFLAGS=${VLC_CXXFLAGS}" >> $VLC_CONTRIB_DIR/config.mak
+    echo "EXTRA_LDFLAGS=${VLC_LDFLAGS}" >> $VLC_CONTRIB_DIR/config.mak
     echo "CC=${CROSS_CLANG}" >> $VLC_CONTRIB_DIR/config.mak
     echo "CXX=${CROSS_CLANG}++" >> $VLC_CONTRIB_DIR/config.mak
     echo "AR=${CROSS_TOOLS}ar" >> $VLC_CONTRIB_DIR/config.mak
diff --git a/libvlc/jni/libvlc.mk b/libvlc/jni/libvlc.mk
index cc1279c..2de85b8 100644
--- a/libvlc/jni/libvlc.mk
+++ b/libvlc/jni/libvlc.mk
@@ -34,6 +34,7 @@ LOCAL_LDLIBS := \
     -ljpeg \
     -Wl,-Bsymbolic
 LOCAL_CXXFLAGS := -std=c++17
+LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
 # This duplicates the libvlc* link flags, but it propagates the dependency
 # on the native build which is what we want overall
 LOCAL_STATIC_LIBRARIES := libvlccore libvlccompat libvlc-native
diff --git a/libvlc/jni/libvlcjni.mk b/libvlc/jni/libvlcjni.mk
index aed9b32..10dab50 100644
--- a/libvlc/jni/libvlcjni.mk
+++ b/libvlc/jni/libvlcjni.mk
@@ -17,6 +17,7 @@ LOCAL_SRC_FILES += std_logger.c
 LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/include $(VLC_BUILD_DIR)/include
 LOCAL_CFLAGS := -std=c17
 LOCAL_LDLIBS := -llog
+LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
 LOCAL_SHARED_LIBRARIES := libvlc
 
 include $(BUILD_SHARED_LIBRARY)
-- 
GitLab