You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
5.2 KiB
186 lines
5.2 KiB
#!/bin/sh
|
|
|
|
# Make in //
|
|
if [ -z "$MAKEFLAGS" ]; then
|
|
UNAMES=$(uname -s)
|
|
MAKEFLAGS=
|
|
if which nproc >/dev/null; then
|
|
MAKEFLAGS=-j`nproc`
|
|
elif [ "$UNAMES" == "Darwin" ] && which sysctl >/dev/null; then
|
|
MAKEFLAGS=-j`sysctl -n machdep.cpu.thread_count`
|
|
fi
|
|
fi
|
|
|
|
echo "MAKEFLAGS: ${MAKEFLAGS}"
|
|
|
|
#########
|
|
# FLAGS #
|
|
#########
|
|
if [ "${ANDROID_ABI}" = "arm" ] ; then
|
|
ANDROID_ABI="armeabi-v7a"
|
|
elif [ "${ANDROID_ABI}" = "arm64" ] ; then
|
|
ANDROID_ABI="arm64-v8a"
|
|
fi
|
|
|
|
# Set up ABI variables
|
|
if [ "${ANDROID_ABI}" = "x86" ] ; then
|
|
TARGET_TUPLE="i686-linux-android"
|
|
PLATFORM_SHORT_ARCH="x86"
|
|
elif [ "${ANDROID_ABI}" = "x86_64" ] ; then
|
|
TARGET_TUPLE="x86_64-linux-android"
|
|
PLATFORM_SHORT_ARCH="x86_64"
|
|
HAVE_64=1
|
|
elif [ "${ANDROID_ABI}" = "arm64-v8a" ] ; then
|
|
TARGET_TUPLE="aarch64-linux-android"
|
|
HAVE_ARM=1
|
|
HAVE_64=1
|
|
PLATFORM_SHORT_ARCH="arm64"
|
|
elif [ "${ANDROID_ABI}" = "armeabi-v7a" ] ; then
|
|
TARGET_TUPLE="arm-linux-androideabi"
|
|
HAVE_ARM=1
|
|
PLATFORM_SHORT_ARCH="arm"
|
|
else
|
|
echo "Unknown ABI: '${ANDROID_ABI}'. Die, die, die!"
|
|
exit 2
|
|
fi
|
|
|
|
# try to detect NDK version
|
|
REL=$(grep -o '^Pkg.Revision.*[0-9]*.*' $ANDROID_NDK/source.properties |cut -d " " -f 3 | cut -d "." -f 1)
|
|
|
|
if [ "$REL" -eq 18 ]; then
|
|
if [ "${HAVE_64}" = 1 ]; then
|
|
ANDROID_API=21
|
|
else
|
|
ANDROID_API=17
|
|
fi
|
|
else
|
|
echo "NDK v18 needed, cf. https://developer.android.com/ndk/downloads/"
|
|
exit 1
|
|
fi
|
|
|
|
NDK_FORCE_ARG=
|
|
NDK_TOOLCHAIN_DIR=${PWD}/toolchains/${PLATFORM_SHORT_ARCH}
|
|
NDK_TOOLCHAIN_PROPS=${NDK_TOOLCHAIN_DIR}/source.properties
|
|
NDK_TOOLCHAIN_PATH=${NDK_TOOLCHAIN_DIR}/bin
|
|
|
|
if [ "`cat \"${NDK_TOOLCHAIN_PROPS}\" 2>/dev/null`" != "`cat \"${ANDROID_NDK}/source.properties\"`" ];then
|
|
echo "NDK changed, making new toolchain"
|
|
NDK_FORCE_ARG="--force"
|
|
fi
|
|
|
|
$ANDROID_NDK/build/tools/make_standalone_toolchain.py \
|
|
--arch ${PLATFORM_SHORT_ARCH} \
|
|
--api ${ANDROID_API} \
|
|
--stl libc++ \
|
|
${NDK_FORCE_ARG} \
|
|
--install-dir ${NDK_TOOLCHAIN_DIR} 2> /dev/null
|
|
if [ ! -d ${NDK_TOOLCHAIN_PATH} ];
|
|
then
|
|
echo "make_standalone_toolchain.py failed"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -z "${NDK_FORCE_ARG}" ];then
|
|
# Don't mess up nl_langinfo() detection since this symbol is not present for 64
|
|
# bits
|
|
if [ "${HAVE_64}" = 1 ];then
|
|
rm ${NDK_TOOLCHAIN_DIR}/sysroot/usr/local/include/langinfo.h
|
|
fi
|
|
fi
|
|
|
|
if [ ! -z "${NDK_FORCE_ARG}" ];then
|
|
cp "$ANDROID_NDK/source.properties" "${NDK_TOOLCHAIN_PROPS}"
|
|
fi
|
|
|
|
# Add the NDK toolchain to the PATH, needed both for contribs and for building
|
|
# stub libraries
|
|
CROSS_TOOLS=${NDK_TOOLCHAIN_PATH}/${TARGET_TUPLE}-
|
|
|
|
export PATH="${NDK_TOOLCHAIN_PATH}:${PATH}"
|
|
ON_WINDOWS=0
|
|
if [ ! -z "$MSYSTEM_PREFIX" ] ; then
|
|
# The make.exe and awk.exe from the toolchain don't work in msys
|
|
export PATH="$MSYSTEM_PREFIX/bin:/usr/bin:${NDK_TOOLCHAIN_PATH}:${PATH}"
|
|
ON_WINDOWS=1
|
|
fi
|
|
|
|
##########
|
|
# CFLAGS #
|
|
##########
|
|
|
|
VLC_CFLAGS="-std=gnu11"
|
|
VLC_CXXFLAGS="-std=gnu++11"
|
|
if [ "$NO_OPTIM" = "1" ];
|
|
then
|
|
VLC_CFLAGS="${VLC_CFLAGS} -g -O0"
|
|
VLC_CXXFLAGS="${VLC_CXXFLAGS} -g -O0"
|
|
else
|
|
VLC_CFLAGS="${VLC_CFLAGS} -g -O2"
|
|
VLC_CXXFLAGS="${VLC_CXXFLAGS} -g -O2"
|
|
fi
|
|
|
|
VLC_CFLAGS="${VLC_CFLAGS} -fstrict-aliasing -funsafe-math-optimizations"
|
|
VLC_CXXFLAGS="${VLC_CXXFLAGS} -fstrict-aliasing -funsafe-math-optimizations"
|
|
|
|
# Setup CFLAGS per ABI
|
|
if [ "${ANDROID_ABI}" = "armeabi-v7a" ] ; then
|
|
EXTRA_CFLAGS="-march=armv7-a -mfpu=neon -mcpu=cortex-a8"
|
|
EXTRA_CFLAGS="${EXTRA_CFLAGS} -mthumb -mfloat-abi=softfp"
|
|
elif [ "${ANDROID_ABI}" = "x86" ] ; then
|
|
EXTRA_CFLAGS="-mtune=atom -msse3 -mfpmath=sse -m32"
|
|
fi
|
|
|
|
EXTRA_CFLAGS="${EXTRA_CFLAGS} -MMD -MP -fpic -ffunction-sections -funwind-tables \
|
|
-fstack-protector-strong -Wno-invalid-command-line-argument -Wno-unused-command-line-argument \
|
|
-no-canonical-prefixes -fno-integrated-as"
|
|
EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} -fexceptions -frtti"
|
|
EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} -D__STDC_FORMAT_MACROS=1 -D__STDC_CONSTANT_MACROS=1 -D__STDC_LIMIT_MACROS=1"
|
|
|
|
#################
|
|
# Setup LDFLAGS #
|
|
#################
|
|
|
|
EXTRA_LDFLAGS="${VLC_LDFLAGS}"
|
|
if [ ${ANDROID_ABI} = "armeabi-v7a" ]; then
|
|
EXTRA_PARAMS=" --enable-neon"
|
|
EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -Wl,--fix-cortex-a8"
|
|
fi
|
|
NDK_LIB_DIR="${NDK_TOOLCHAIN_DIR}/${TARGET_TUPLE}/lib"
|
|
if [ "${PLATFORM_SHORT_ARCH}" = "x86_64" ];then
|
|
NDK_LIB_DIR="${NDK_LIB_DIR}64"
|
|
elif [ "${PLATFORM_SHORT_ARCH}" = "arm" ]; then
|
|
NDK_LIB_DIR="${NDK_LIB_DIR}/armv7-a"
|
|
fi
|
|
|
|
EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${NDK_LIB_DIR} -lc++abi"
|
|
VLC_LDFLAGS="${EXTRA_LDFLAGS}"
|
|
|
|
# Release or not?
|
|
if [ "$RELEASE" = 1 ]; then
|
|
OPTS=""
|
|
EXTRA_CFLAGS="${EXTRA_CFLAGS} -DNDEBUG "
|
|
NDK_DEBUG=0
|
|
else
|
|
OPTS="--enable-debug"
|
|
NDK_DEBUG=1
|
|
fi
|
|
|
|
if [ "${ASAN}" = 1 ];then
|
|
VLC_CFLAGS="${VLC_CFLAGS} -O0 -fno-omit-frame-pointer -fsanitize=address"
|
|
VLC_CXXFLAGS="${VLC_CXXFLAGS} -O0 -fno-omit-frame-pointer -fsanitize=address"
|
|
VLC_LDFLAGS="${VLC_LDFLAGS} -ldl -fsanitize=address"
|
|
fi
|
|
|
|
###############
|
|
# DISPLAY ABI #
|
|
###############
|
|
|
|
echo "ABI: $ANDROID_ABI"
|
|
echo "API: $ANDROID_API"
|
|
echo "PATH: $PATH"
|
|
|
|
echo "EXTRA_CFLAGS: ${EXTRA_CFLAGS}"
|
|
echo "VLC_CFLAGS: ${VLC_CFLAGS}"
|
|
echo "VLC_CXXFLAGS: ${VLC_CXXFLAGS}"
|
|
|
|
echo ok
|
|
|