]> git.sesse.net Git - vlc/blobdiff - extras/package/ios/build.sh
extras/ios: rework LDFLAGS handling and enable vpx for the scary build flavor
[vlc] / extras / package / ios / build.sh
index 0409e8892cf588a567c00c079da46318d476af84..778e28bde5aff72759a8c289edbd3be6de22d2d7 100755 (executable)
@@ -3,17 +3,25 @@ set -e
 
 PLATFORM=OS
 VERBOSE=no
-SDK_VERSION=5.1
-SDK_MIN=5.0
+DEBUG=no
+SDK_VERSION=7.0
+SDK_MIN=6.1
+SIXTYFOURBIT_SDK_MIN=7.0
+ARCH=armv7
+SCARY=yes
 
 usage()
 {
 cat << EOF
-usage: $0 [-s] [-k sdk]
+usage: $0 [-s] [-d] [-v] [-k sdk]
 
 OPTIONS
-   -k       Specify which sdk to use ('xcodebuild -showsdks', current: ${SDK})
-   -s       Build for simulator
+   -k <sdk version>      Specify which sdk to use ('xcodebuild -showsdks', current: ${SDK_VERSION})
+   -s            Build for simulator
+   -a <arch>     Specify which arch to use (current: ${ARCH})
+   -d            Enable debug
+   -v            Enable verbose command-line output
+   -w            Build a limited stack of non-scary libraries only
 EOF
 }
 
@@ -34,7 +42,7 @@ info()
     echo "[${blue}info${normal}] $1"
 }
 
-while getopts "hvsk:" OPTION
+while getopts "hvwdsk:a:" OPTION
 do
      case $OPTION in
          h)
@@ -46,10 +54,18 @@ do
              ;;
          s)
              PLATFORM=Simulator
-             SDK=${SDK_MIN}
+             ;;
+         d)
+             DEBUG=yes
+             ;;
+         w)
+             SCARY=no
              ;;
          k)
-             SDK=$OPTARG
+             SDK_VERSION=$OPTARG
+             ;;
+         a)
+             ARCH=$OPTARG
              ;;
          ?)
              usage
@@ -69,15 +85,18 @@ if [ "$VERBOSE" = "yes" ]; then
    out="/dev/stdout"
 fi
 
-info "Building libvlc for the iOS"
+info "Building libvlc for iOS"
 
 if [ "$PLATFORM" = "Simulator" ]; then
-    TARGET="i686-apple-darwin11"
-    ARCH="i386"
+    TARGET="${ARCH}-apple-darwin11"
 else
     TARGET="arm-apple-darwin11"
-    ARCH="armv7"
-    OPTIM="-mno-thumb"
+fi
+
+if [ "$DEBUG" = "yes" ]; then
+    OPTIM="-O0 -g"
+else
+    OPTIM="-O3 -g"
 fi
 
 info "Using ${ARCH} with SDK version ${SDK_VERSION}"
@@ -100,24 +119,19 @@ then
     exit 1
 fi
 
-BUILDDIR="${VLCROOT}/build-ios-${PLATFORM}"
-
-PREFIX="${VLCROOT}/install-ios-${PLATFORM}"
+BUILDDIR="${VLCROOT}/build-ios-${PLATFORM}/${ARCH}"
 
-IOS_GAS_PREPROCESSOR="${VLCROOT}/extras/tools/gas/gas-preprocessor.pl"
+PREFIX="${VLCROOT}/install-ios-${PLATFORM}/${ARCH}"
 
 export PATH="${VLCROOT}/extras/tools/build/bin:${VLCROOT}/contrib/${TARGET}/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
 
-# contains gas-processor.pl
-export PATH=$PATH:${VLCROOT}/extras/package/ios/resources
-
 info "Building tools"
 spushd "${VLCROOT}/extras/tools"
 ./bootstrap
 make && make .gas
 spopd
 
-info "Building contrib for iOS in '${VLCROOT}/contrib/iPhone${PLATFORM}'"
+info "Building contrib for iOS in '${VLCROOT}/contrib/iPhone${PLATFORM}-${ARCH}'"
 
 # The contrib will read the following
 export AR="xcrun ar"
@@ -129,16 +143,24 @@ export CXX="xcrun clang++"
 export LD="xcrun ld"
 export STRIP="xcrun strip"
 
+export PLATFORM=$PLATFORM
+export SDK_VERSION=$SDK_VERSION
+
+export CFLAGS="-isysroot ${SDKROOT} -arch ${ARCH} ${OPTIM}"
 
-export SDKROOT
 if [ "$PLATFORM" = "OS" ]; then
-export CFLAGS="-isysroot ${SDKROOT} -arch ${ARCH} -mcpu=cortex-a8 -miphoneos-version-min=${SDK_MIN} ${OPTIM}"
+if [ "$ARCH" != "arm64" ]; then
+export CFLAGS="${CFLAGS} -mcpu=cortex-a8 -miphoneos-version-min=${SDK_MIN}"
+else
+export CFLAGS="${CFLAGS} -miphoneos-version-min=${SIXTYFOURBIT_SDK_MIN}"
+fi
 else
-export CFLAGS="-isysroot ${SDKROOT} -arch ${ARCH} -miphoneos-version-min=${SDK_MIN} ${OPTIM}"
+export CFLAGS="${CFLAGS} -miphoneos-version-min=${SIXTYFOURBIT_SDK_MIN}"
 fi
+
+export CXXFLAGS="${CFLAGS} -stdlib=libstdc++"
+
 export CPPFLAGS="${CFLAGS}"
-export CXXFLAGS="${CFLAGS}"
-export OBJCFLAGS="${CFLAGS}"
 
 export CPP="xcrun cc -E"
 export CXXCPP="xcrun c++ -E"
@@ -150,45 +172,54 @@ if [ "$PLATFORM" = "Simulator" ]; then
     export OBJCFLAGS="-fobjc-abi-version=2 -fobjc-legacy-dispatch ${OBJCFLAGS}"
 fi
 
+export LDFLAGS="-L${SDKROOT}/usr/lib -arch ${ARCH} -isysroot ${SDKROOT}"
+
 if [ "$PLATFORM" = "OS" ]; then
-  export LDFLAGS="-L${SDKROOT}/usr/lib -arch ${ARCH}  -isysroot ${SDKROOT}  -miphoneos-version-min=${SDK_MIN} "
+    EXTRA_CFLAGS="-arch ${ARCH}"
+    EXTRA_LDFLAGS="-arch ${ARCH}"
+if [ "$ARCH" != "arm64" ]; then
+    EXTRA_CFLAGS+=" -mcpu=cortex-a8"
+    EXTRA_CFLAGS+=" -miphoneos-version-min=${SDK_MIN}"
+    EXTRA_LDFLAGS+=" -Wl,-ios_version_min,${SDK_MIN}"
+    export LDFLAGS="${LDFLAGS} -Wl,-ios_version_min,${SDK_MIN}"
+else
+    EXTRA_CFLAGS+=" -miphoneos-version-min=${SIXTYFOURBIT_SDK_MIN}"
+    EXTRA_LDFLAGS+=" -Wl,-ios_version_min,${SIXTYFOURBIT_SDK_MIN}"
+    export LDFLAGS="${LDFLAGS} -Wl,-ios_version_min,${SIXTYFOURBIT_SDK_MIN}"
+fi
 else
-  export LDFLAGS="-syslibroot=${SDKROOT}/ -arch ${ARCH} "
+    EXTRA_CFLAGS="-arch ${ARCH}"
+    EXTRA_CFLAGS+=" -miphoneos-version-min=${SIXTYFOURBIT_SDK_MIN}"
+    EXTRA_LDFLAGS=" -Wl,-ios_version_min,${SIXTYFOURBIT_SDK_MIN}"
+    export LDFLAGS="${LDFLAGS} -Wl-ios_version_min,${SIXTYFOURBIT_SDK_MIN}"
 fi
 
+
 info "LD FLAGS SELECTED = '${LDFLAGS}'"
 
 spushd ${VLCROOT}/contrib
 
 echo ${VLCROOT}
-mkdir -p "${VLCROOT}/contrib/iPhone${PLATFORM}"
-cd "${VLCROOT}/contrib/iPhone${PLATFORM}"
+mkdir -p "${VLCROOT}/contrib/iPhone${PLATFORM}-${ARCH}"
+cd "${VLCROOT}/contrib/iPhone${PLATFORM}-${ARCH}"
 
 if [ "$PLATFORM" = "OS" ]; then
-    if [ "$SDK_VERSION" = "6.0" ]; then
-      export AS="${IOS_GAS_PREPROCESSOR} clang"
-      export ASCPP="${IOS_GAS_PREPROCESSOR} clang"
-      export CCAS="${IOS_GAS_PREPROCESSOR} clang"
-    else
-      export AS="${IOS_GAS_PREPROCESSOR} xcrun clang"
-      export ASCPP="${IOS_GAS_PREPROCESSOR} xcrun clang"
-      export CCAS="${IOS_GAS_PREPROCESSOR} xcrun clang"
+    export AS="gas-preprocessor.pl ${CC}"
+    export ASCPP="gas-preprocessor.pl ${CC}"
+    export CCAS="gas-preprocessor.pl ${CC}"
+    if [ "$ARCH" = "arm64" ]; then
+        export GASPP_FIX_XCODE5=1
     fi
 else
-  export AS="xcrun as"
-  export ASCPP="xcrun as"
+    export ASCPP="xcrun as"
 fi
 
-../bootstrap --host=${TARGET} --build="i686-apple-darwin10" --disable-disc --disable-sout \
-    --enable-small \
+../bootstrap --build=x86_64-apple-darwin11 --host=${TARGET} --prefix=${VLCROOT}/contrib/${TARGET}-${ARCH} --arch=${ARCH} --disable-gpl \
+    --disable-disc --disable-sout \
     --disable-sdl \
     --disable-SDL_image \
-    --disable-fontconfig \
-    --disable-ass \
-    --enable-freetype2 \
-    --enable-iconv \
-    --disable-fribidi \
-    --disable-zvbi \
+    --disable-iconv \
+    --enable-zvbi \
     --disable-kate \
     --disable-caca \
     --disable-gettext \
@@ -196,16 +227,29 @@ fi
     --disable-upnp \
     --disable-gme \
     --disable-tremor \
-    --disable-vorbis \
+    --enable-vorbis \
     --disable-sidplay2 \
     --disable-samplerate \
     --disable-goom \
-    --disable-gcrypt \
-    --disable-gnutls \
+    --disable-vncserver \
     --disable-orc \
     --disable-schroedinger \
     --disable-libmpeg2 \
-    --disable-mad > ${out}
+    --disable-chromaprint \
+    --disable-mad \
+    --enable-fribidi \
+    --enable-libxml2 \
+    --enable-freetype2 \
+    --enable-ass \
+    --disable-fontconfig \
+    --disable-gpg-error \
+    --disable-lua \
+    --enable-vpx \
+    --enable-taglib > ${out}
+
+echo "EXTRA_CFLAGS += ${EXTRA_CFLAGS}" >> config.mak
+echo "EXTRA_LDFLAGS += ${EXTRA_LDFLAGS}" >> config.mak
+make fetch
 make
 spopd
 
@@ -226,71 +270,65 @@ if [ ".$PLATFORM" != ".Simulator" ]; then
     export AVFORMAT_LIBS="-L${PREFIX}/lib -lavcodec -lz -lavutil -lavformat"
 fi
 
-export DVBPSI_CFLAGS="-I${VLCROOT}/contrib-ios-${TARGET}/include "
-export DVBPSI_LIBS="-L${VLCROOT}/contrib-ios-${TARGET}/lib "
-
-export SWSCALE_CFLAGS="-I${VLCROOT}/contrib-ios-${TARGET}/include "
-export SWSCALE_LIBS="-L${VLCROOT}/contrib-ios-${TARGET}/lib "
-
-
-
 mkdir -p ${BUILDDIR}
 spushd ${BUILDDIR}
 
 info ">> --prefix=${PREFIX} --host=${TARGET}"
 
+if [ "$DEBUG" = "yes" ]; then
+    DEBUGFLAG="--enable-debug"
+else
+    DEBUGFLAG="--disable-debug"
+fi
+
+if [ "$SCARY" = "yes" ]; then
+       SCARYFLAG="--enable-dvbpsi --enable-avcodec"
+else
+       SCARYFLAG="--disable-dca --disable-dvbpsi --disable-avcodec --disable-avformat --disable-zvbi --enable-vpx"
+fi
+
 # Run configure only upon changes.
 if [ "${VLCROOT}/configure" -nt config.log -o \
      "${THIS_SCRIPT_PATH}" -nt config.log ]; then
-CONTRIB_DIR=${VLCROOT}/contrib-ios-${TARGET} \
 ${VLCROOT}/configure \
     --prefix="${PREFIX}" \
     --host="${TARGET}" \
-    --enable-debug \
+    --with-contrib="${VLCROOT}/contrib/${TARGET}-${ARCH}" \
     --enable-static \
+    ${DEBUGFLAG} \
+    ${SCARYFLAG} \
     --disable-macosx \
-    --disable-macosx-vout \
     --disable-macosx-dialog-provider \
     --disable-macosx-qtkit \
     --disable-macosx-eyetv \
     --disable-macosx-vlc-app \
-    --enable-audioqueue \
-    --enable-ios-vout \
+    --disable-macosx-avfoundation \
+    --disable-audioqueue \
     --disable-shared \
-    --disable-macosx-quartztext \
-    --enable-avcodec \
+    --enable-macosx-quartztext \
     --enable-mkv \
-    --enable-dvbpsi \
-    --enable-swscale \
-    --disable-projectm \
+    --enable-opus \
     --disable-sout \
     --disable-faad \
     --disable-lua \
-    --disable-mad \
     --disable-a52 \
-    --disable-fribidi \
-    --disable-macosx-audio \
+    --enable-fribidi \
     --disable-qt --disable-skins2 \
-    --disable-libgcrypt \
     --disable-vcd \
     --disable-vlc \
     --disable-vlm \
     --disable-httpd \
     --disable-nls \
     --disable-glx \
-    --disable-visual \
-    --disable-lua \
     --disable-sse \
     --enable-neon \
     --disable-notify \
     --enable-live555 \
     --enable-realrtsp \
-    --enable-dvbpsi \
     --enable-swscale \
     --disable-projectm \
-    --disable-libass \
-    --disable-sqlite \
-    --disable-libxml2 \
+    --enable-libass \
+    --enable-libxml2 \
     --disable-goom \
     --disable-dvdread \
     --disable-dvdnav \
@@ -299,20 +337,21 @@ ${VLCROOT}/configure \
     --disable-libva \
     --disable-gme \
     --disable-tremor \
-    --disable-vorbis \
+    --enable-vorbis \
     --disable-fluidsynth \
     --disable-jack \
     --disable-pulse \
-    --disable-sout \
-    --disable-faad \
-    --disable-lua \
-    --disable-mad \
     --disable-mtp \
-    --disable-ogg \
-    --disable-speex \
-    --disable-theora \
-    --disable-flac \
-    --disable-mmx > ${out} # MMX and SSE support requires llvm which is broken on Simulator
+    --enable-ogg \
+    --enable-speex \
+    --enable-theora \
+    --enable-flac \
+    --disable-screen \
+    --enable-freetype \
+    --enable-taglib \
+    --disable-mmx \
+    --disable-addonmanagermodules \
+    --disable-mad > ${out} # MMX and SSE support requires llvm which is broken on Simulator
 fi
 
 CORE_COUNT=`sysctl -n machdep.cpu.core_count`
@@ -323,4 +362,111 @@ make -j$MAKE_JOBS > ${out}
 
 info "Installing libvlc"
 make install > ${out}
+
+find ${PREFIX}/lib/vlc/plugins -name *.a -type f -exec cp '{}' ${PREFIX}/lib/vlc/plugins \;
+rm -rf "${PREFIX}/contribs"
+cp -R "${VLCROOT}/contrib/${TARGET}-${ARCH}" "${PREFIX}/contribs"
+
+info "Removing unneeded modules"
+blacklist="
+stats
+access_bd
+shm
+access_imem
+oldrc
+real
+hotkeys
+gestures
+dynamicoverlay
+rss
+ball
+marq
+magnify
+audiobargraph_
+clone
+mosaic
+osdmenu
+puzzle
+mediadirs
+t140
+ripple
+motion
+sharpen
+grain
+posterize
+mirror
+wall
+scene
+blendbench
+psychedelic
+alphamask
+netsync
+audioscrobbler
+motiondetect
+motionblur
+export
+smf
+podcast
+bluescreen
+erase
+stream_filter_record
+speex_resampler
+remoteosd
+magnify
+gradient
+tospdif
+dtstofloat32
+logger
+visual
+fb
+aout_file
+dummy
+invert
+sepia
+wave
+hqdn3d
+headphone_channel_mixer
+gaussianblur
+gradfun
+extract
+colorthres
+antiflicker
+anaglyph
+remap
+oldmovie
+vhs
+demuxdump
+fingerprinter
+"
+
+if [ "$SCARY" = "no" ]; then
+blacklist="${blacklist}
+dts
+dvbsub
+svcd
+hevc
+packetizer_mlp
+a52
+vc1
+uleaddvaudio
+librar
+libvoc
+avio
+chorus_flanger
+smooth
+cvdsub
+libmod
+libdash
+libmpgv
+dolby_surround
+mpeg_audio"
+fi
+
+echo ${blacklist}
+
+for i in ${blacklist}
+do
+    find ${PREFIX}/lib/vlc/plugins -name *$i* -type f -exec rm '{}' \;
+done
+
 popd