[vlc-devel] [PATCH] extras: fix arch handling in macOS build script
Rémi Denis-Courmont
remi at remlab.net
Wed Dec 9 19:23:07 CET 2020
Le mercredi 9 décembre 2020, 18:33:48 EET Felix Paul Kühne a écrit :
> From: Felix Paul Kühne <felix at feepk.net>
I'm sure Steve is itching to tell you that that's not necessary (though it
actually would be if someone were to git-am this email).
> ---
> extras/package/macosx/build.sh | 27 +++++++-----
> extras/package/macosx/env.build.sh | 71 +++++++++++++++++++++++-------
> 2 files changed, 73 insertions(+), 25 deletions(-)
>
> diff --git a/extras/package/macosx/build.sh b/extras/package/macosx/build.sh
> index 69395ef5d0..554069f97c 100755
> --- a/extras/package/macosx/build.sh
> +++ b/extras/package/macosx/build.sh
> @@ -115,9 +115,13 @@ if [ "$QUIET" = "yes" ]; then
> out="/dev/null"
> fi
>
> -info "Building VLC for the Mac OS X"
> +ACTUAL_ARCH=`get_actual_arch $ARCH`
> +BUILD_ARCH=`get_buildsystem_arch $BUILD_ARCH`
Can you keep it consistent maybe? Call it HOST like below, like contribs and
like autoconf?
>
> -TRIPLET=$(vlcGetTriplet)
> +info "Building VLC for macOS for architecture ${ACTUAL_ARCH} on a
> ${BUILD_ARCH} device" +
> +BUILD_TRIPLET=$(vlcGetBuildTriplet)
> +HOST_TRIPLET=$(vlcGetHostTriplet)
> export SDKROOT
> vlcSetBaseEnvironment
> vlcroot="$(vlcGetRootDir)"
> @@ -157,11 +161,11 @@ info "Building contribs"
> spushd "${vlcroot}/contrib"
>
> if [ "$REBUILD" = "yes" ]; then
> - rm -rf contrib-$TRIPLET
> - rm -rf $TRIPLET
> + rm -rf contrib-$HOST_TRIPLET
> + rm -rf $HOST_TRIPLET
> fi
> -mkdir -p contrib-$TRIPLET && cd contrib-$TRIPLET
> -../bootstrap --build=$TRIPLET --host=$TRIPLET > $out
> +mkdir -p contrib-$HOST_TRIPLET && cd contrib-$HOST_TRIPLET
> +../bootstrap --build=$BUILD_TRIPLET --host=$HOST_TRIPLET > $out
>
> if [ "$CONTRIBFROMSOURCE" = "yes" ]; then
> make list
> @@ -182,6 +186,7 @@ spopd
>
>
> vlcUnsetContribEnvironment
> +vlcSetLibVLCEnvironment
>
> #
> # vlc/bootstrap
> @@ -214,8 +219,8 @@ fi
> if [ "${vlcroot}/configure" -nt Makefile ]; then
>
> ${vlcroot}/extras/package/macosx/configure.sh \
> - --build=$TRIPLET \
> - --host=$TRIPLET \
> + --build=$BUILD_TRIPLET \
> + --host=$HOST_TRIPLET \
> --with-macosx-version-min=$MINIMAL_OSX_VERSION \
> --with-macosx-sdk=$SDKROOT \
> $CONFIGFLAGS \
> @@ -237,7 +242,6 @@ make -j$JOBS
> info "Preparing VLC.app"
> make VLC.app
>
> -
> if [ "$PACKAGETYPE" = "u" ]; then
> info "Copying app with debug symbols into VLC-debug.app and stripping"
> rm -rf VLC-debug.app
> @@ -248,14 +252,15 @@ if [ "$PACKAGETYPE" = "u" ]; then
> (cd VLC-debug.app/Contents/MacOS/lib/ && rm libvlccore.dylib && mv
> libvlccore.*.dylib libvlccore.dylib) (cd VLC-debug.app/Contents/MacOS/lib/
> && rm libvlc.dylib && mv libvlc.*.dylib libvlc.dylib)
>
> -
> find VLC.app/ -name "*.dylib" -exec strip -x {} \;
> find VLC.app/ -type f -name "VLC" -exec strip -x {} \;
> find VLC.app/ -type f -name "Sparkle" -exec strip -x {} \;
> find VLC.app/ -type f -name "Growl" -exec strip -x {} \;
> find VLC.app/ -type f -name "Breakpad" -exec strip -x {} \;
>
> +if [ "$BUILD_TRIPLET" = "$HOST_TRIPLET" ]; then
> bin/vlc-cache-gen VLC.app/Contents/MacOS/plugins
> +fi
Indentation.
And obviously, this might make VLC load times suck, depending how fast the
hardware is, and if PIC is supported or not.
> info "Building VLC release archive"
> make package-macosx-release
> @@ -273,3 +278,5 @@ fi
> if [ ! -z "$VLCBUILDDIR" ]; then
> popd
> fi
> +
> +vlcUnsetLibVLCEnvironment
This is a big strange and brittle approach. As in, it won't work properly if
the original values actually were set. Normally, to restore environment
variables, you just set them (in a child process) and exit.
> diff --git a/extras/package/macosx/env.build.sh
> b/extras/package/macosx/env.build.sh index 755722fb9b..894a6f9fd2 100755
> --- a/extras/package/macosx/env.build.sh
> +++ b/extras/package/macosx/env.build.sh
> @@ -1,16 +1,40 @@
> #!/bin/bash
>
> ARCH="x86_64"
> +BUILD_ARCH=`uname -m | cut -d. -f1`
> MINIMAL_OSX_VERSION="10.11"
>
> +get_actual_arch() {
> + if [ "$1" = "aarch64" ]; then
> + echo "arm64"
> + else
> + echo "$1"
> + fi
> +}
> +
> +get_buildsystem_arch() {
> + if [ "$1" = "arm64" ]; then
> + echo "aarch64"
> + else
> + echo "$1"
> + fi
> +}
>
> -vlcGetTriplet() {
> +vlcGetOSXKernelVersion() {
> local OSX_KERNELVERSION=$(uname -r | cut -d. -f1)
> if [ ! -z "$VLC_FORCE_KERNELVERSION" ]; then
> OSX_KERNELVERSION="$VLC_FORCE_KERNELVERSION"
> fi
>
> - echo "$ARCH-apple-darwin$OSX_KERNELVERSION"
> + echo "$OSX_KERNELVERSION"
> +}
> +
> +vlcGetBuildTriplet() {
> + echo "$BUILD_ARCH-apple-darwin$(vlcGetOSXKernelVersion)"
> +}
> +
> +vlcGetHostTriplet() {
> + echo "$ARCH-apple-darwin$(vlcGetOSXKernelVersion)"
> }
>
> # Gets VLCs root dir based on location of this file, also follow symlinks
> @@ -25,30 +49,32 @@ vlcGetRootDir() {
> }
>
> vlcSetBaseEnvironment() {
> - local LOCAL_TRIPLET="$TRIPLET"
> - if [ -z "$LOCAL_TRIPLET" ]; then
> - LOCAL_TRIPLET="$(vlcGetTriplet)"
> + local LOCAL_BUILD_TRIPLET="$BUILD_TRIPLET"
> + if [ -z "$LOCAL_BUILD_TRIPLET" ]; then
> + LOCAL_BUILD_TRIPLET="$(vlcGetBuildTriplet)"
> fi
>
> local VLC_ROOT_DIR="$(vlcGetRootDir)"
>
> echo "Setting base environment"
> - echo "Using VLC root dir $VLC_ROOT_DIR and triplet $LOCAL_TRIPLET"
> + echo "Using VLC root dir $VLC_ROOT_DIR, build triplet
> $LOCAL_BUILD_TRIPLET and host triplet $(vlcGetHostTriplet)"
>
> + export AR="$(xcrun --find ar)"
> export CC="$(xcrun --find clang)"
> export CXX="$(xcrun --find clang++)"
> + export NM="$(xcrun --find nm)"
> export OBJC="$(xcrun --find clang)"
> export OBJCXX="$(xcrun --find clang++)"
> - export AR="$(xcrun --find ar)"
> export RANLIB="$(xcrun --find ranlib)"
> - export NM="$(xcrun --find nm)"
> + export STRINGS="`xcrun --find strings`"
> + export STRIP="`xcrun --find strip`"
Looks like a different problem being fixed?
>
> python3Path=$(echo
> /Library/Frameworks/Python.framework/Versions/3.*/bin | awk '{print $1;}')
> if [ ! -d "$python3Path" ]; then
> python3Path=""
> fi
>
> - export
> PATH="${VLC_ROOT_DIR}/extras/tools/build/bin:${VLC_ROOT_DIR}/contrib/${LOCA
> L_TRIPLET}/bin:$python3Path:${VLC_PATH}:/bin:/sbin:/usr/bin:/usr/sbin" +
> export
> PATH="${VLC_ROOT_DIR}/extras/tools/build/bin:${VLC_ROOT_DIR}/contrib/${LOCA
> L_BUILD_TRIPLET}/bin:$python3Path:${VLC_PATH}:/bin:/sbin:/usr/bin:/usr/sbin"
> }
>
> vlcSetSymbolEnvironment() {
> @@ -110,13 +136,13 @@ vlcSetContribEnvironment() {
> export CXXFLAGS="-Werror=partial-availability"
> export OBJCFLAGS="-Werror=partial-availability"
>
> - export EXTRA_CFLAGS="-isysroot $SDKROOT
> -mmacosx-version-min=$MINIMAL_OSX_VERSION
> -DMACOSX_DEPLOYMENT_TARGET=$MINIMAL_OSX_VERSION" - export
> EXTRA_LDFLAGS="-isysroot $SDKROOT -mmacosx-version-min=$MINIMAL_OSX_VERSION
> -DMACOSX_DEPLOYMENT_TARGET=$MINIMAL_OSX_VERSION" + export
> EXTRA_CFLAGS="-isysroot $SDKROOT -mmacosx-version-min=$MINIMAL_OSX_VERSION
> -DMACOSX_DEPLOYMENT_TARGET=$MINIMAL_OSX_VERSION -arch $ACTUAL_ARCH" +
> export EXTRA_LDFLAGS="-isysroot $SDKROOT
> -mmacosx-version-min=$MINIMAL_OSX_VERSION
> -DMACOSX_DEPLOYMENT_TARGET=$MINIMAL_OSX_VERSION -arch $ACTUAL_ARCH" export
> XCODE_FLAGS="MACOSX_DEPLOYMENT_TARGET=$MINIMAL_OSX_VERSION -sdk $SDKROOT
> WARNING_CFLAGS=-Werror=partial-availability" }
>
> vlcUnsetContribEnvironment() {
> - echo "Unsetting contrib flags, prepare VLC flags"
> + echo "Unsetting contrib flags"
>
> unset CFLAGS
> unset CXXFLAGS
> @@ -125,13 +151,26 @@ vlcUnsetContribEnvironment() {
> unset EXTRA_CFLAGS
> unset EXTRA_LDFLAGS
> unset XCODE_FLAGS
> +}
> +
> +vlcSetLibVLCEnvironment() {
> + echo "Setting libVLC flags"
>
> # Enable debug symbols by default
> - export CFLAGS="-g"
> - export CXXFLAGS="-g"
> - export OBJCFLAGS="-g"
> + export CFLAGS="-g -arch $ACTUAL_ARCH"
> + export CXXFLAGS="-g -arch $ACTUAL_ARCH"
> + export OBJCFLAGS="-g -arch $ACTUAL_ARCH"
> + export LDFLAGS="-arch $ACTUAL_ARCH"
> }
>
> +vlcUnsetLibVLCEnvironment() {
> + echo "Unsetting libVLC flags"
> +
> + unset CFLAGS
> + unset CXXFLAGS
> + unset OBJCFLAGS
> + unset LDFLAGS
> +}
>
> # Parameter handling
>
> @@ -151,9 +190,11 @@ fi
> if [ "$VLC_ENV_MODE" = "contrib" ]; then
> vlcSetBaseEnvironment
> vlcSetSymbolEnvironment
> + vlcUnsetLibVLCEnvironment
> vlcSetContribEnvironment "$MINIMAL_OSX_VERSION"
> elif [ "$VLC_ENV_MODE" = "vlc" ]; then
> vlcSetBaseEnvironment
> vlcSetSymbolEnvironment
> vlcUnsetContribEnvironment
> + vlcSetLibVLCEnvironment
> fi
--
Rémi Denis-Courmont
More information about the vlc-devel
mailing list