[Android] buildsystem: add an option to build C++ code with static runtime
Steve Lhomme
git at videolan.org
Wed Aug 6 07:29:40 UTC 2025
vlc-android | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Thu Jun 26 11:11:49 2025 +0200| [eed66c42a6cedad13bffd425143cc82e44192600] | committer: Steve Lhomme
buildsystem: add an option to build C++ code with static runtime
By default we use the dynamic runtime and need to ship libc++_shared.so.
This needs the counterpart on the libvlcjni script so that all our code is built with the same C++ runtime configuration.
> https://code.videolan.org/videolan/vlc-android/commit/eed66c42a6cedad13bffd425143cc82e44192600
---
buildsystem/compile-medialibrary.sh | 14 ++++++++++++--
buildsystem/compile.sh | 12 ++++++++++--
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/buildsystem/compile-medialibrary.sh b/buildsystem/compile-medialibrary.sh
index 8bd334494f..a6a5c13f0b 100755
--- a/buildsystem/compile-medialibrary.sh
+++ b/buildsystem/compile-medialibrary.sh
@@ -14,6 +14,7 @@ while [ $# -gt 0 ]; do
echo "Use -a to set the ARCH"
echo "Use --release to build in release mode"
echo "Use --reset to reset code from git"
+ echo "Use --static-cpp to use the static C++ runtime"
exit 1
;;
a | -a)
@@ -24,12 +25,21 @@ while [ $# -gt 0 ]; do
RELEASE=1
;;
reset | --reset)
- RESET=1
+ RESET=1 # used when calling compile-libvlc.sh
+ ;;
+ --static-cpp)
+ AVLC_STATIC_CXX=1 # used when calling compile-libvlc.sh
;;
esac
shift
done
+if [ "$AVLC_STATIC_CXX" = 1 ]; then
+ NDK_APP_STL="c++_static"
+else
+ NDK_APP_STL="c++_shared"
+fi
+
SRC_DIR=$PWD
# gets TARGET_TUPLE / ANDROID_API / CLANG_PREFIX / CROSS_CLANG / VLC_CFLAGS / VLC_CXXFLAGS / NDK_DEBUG / MAKEFLAGS / LIBVLCJNI_SRC_DIR
AVLC_SOURCED=1 . libvlcjni/buildsystem/compile-libvlc.sh
@@ -220,7 +230,7 @@ MEDIALIBRARY_LDLIBS="-L$LIBVLCJNI_SRC_DIR/libvlc/jni/libs/${ANDROID_ABI}/ -lvlc
-lc++abi"
$NDK_BUILD -C medialibrary \
- APP_STL="c++_shared" \
+ APP_STL="$NDK_APP_STL" \
LOCAL_CPP_FEATURES="rtti exceptions" \
LOCAL_LDFLAGS="-Wl,-z,max-page-size=16384" \
APP_BUILD_SCRIPT=jni/Android.mk \
diff --git a/buildsystem/compile.sh b/buildsystem/compile.sh
index 9283a49ed4..c71138c266 100755
--- a/buildsystem/compile.sh
+++ b/buildsystem/compile.sh
@@ -40,6 +40,7 @@ while [ $# -gt 0 ]; do
echo "Use -b to bypass libvlc source checks (vlc custom sources)"
echo "Use -t to use prebuilt contribs for LibVLC"
echo "Use -m2 to set the maven local repository path to use"
+ echo "Use --static-cpp to use the static C++ runtime"
exit 0
;;
a|-a)
@@ -99,6 +100,9 @@ while [ $# -gt 0 ]; do
-vlc4)
FORCE_VLC_4=1
;;
+ --static-cpp)
+ AVLC_STATIC_CXX=1
+ ;;
*)
diagnostic "$0: Invalid option '$1'."
diagnostic "$0: Try --help for more information."
@@ -337,6 +341,10 @@ fi
############
diagnostic "Configuring"
+if [ "$AVLC_STATIC_CXX" = 1 ]; then
+ CONFIG_ARGS="$CONFIG_ARGS --static-cpp"
+fi
+
# Build LibVLC if asked for it, or needed by medialibrary
OUT_DBG_DIR="$(pwd -P)/.dbg/${ANDROID_ABI}"
mkdir -p $OUT_DBG_DIR
@@ -351,13 +359,13 @@ if [ "$BUILD_MEDIALIB" != 1 ] || [ ! -d "${VLC_LIBJNI_PATH}/libvlc/jni/libs/" ];
fi
if ${VLC_LIBJNI_PATH}/vlc/extras/ci/check-url.sh "$VLC_PREBUILT_CONTRIBS_URL"; then CONTRIB_FLAGS="--with-prebuilt-contribs"; fi
fi
- ${VLC_LIBJNI_PATH}/buildsystem/compile-libvlc.sh -a ${ARCH} ${CONTRIB_FLAGS}
+ ${VLC_LIBJNI_PATH}/buildsystem/compile-libvlc.sh -a ${ARCH} ${CONTRIB_FLAGS} ${CONFIG_ARGS}
cp -a ${VLC_LIBJNI_PATH}/libvlc/jni/obj/local/${ANDROID_ABI}/*.so "${OUT_DBG_DIR}"
fi
if [ "$NO_ML" != 1 ]; then
- medialig_args="-a $ANDROID_ABI"
+ medialig_args="-a $ANDROID_ABI $CONFIG_ARGS"
if [ "$RELEASE" = 1 ]; then
medialig_args="$medialig_args --release"
fi
More information about the Android
mailing list