[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