123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #!/usr/bin/env bash
- set -e
- export PATH="$PATH:/usr/bin"
- command -v cygpath >/dev/null && have_cygpath=1
- cygpath() {
- if [ -n "$have_cygpath" ]; then
- command cygpath "$@"
- else
- eval _p='$'$#
- printf '%s\n' "$_p"
- fi
- }
- move_binary() {
- SOURCE=$1
- TARGET=$2
- BINARY=$3
- # run lipo over the command to check whether it really
- # is a binary that we need to merge architectures
- lipo $SOURCE/$BINARY -info &> /dev/null || return 0
- # get the directory name the file is in
- DIRNAME=$(dirname $BINARY)
- # ensure the directory to move the binary to exists
- mkdir -p $TARGET/$DIRNAME
- # now finally move the binary
- mv $SOURCE/$BINARY $TARGET/$BINARY
- }
- move_binaries() {
- SOURCE=$1
- TARGET=$2
- [ ! -d $SOURCE ] && return 0
- pushd $SOURCE
- for BINARY in $(find . -type f); do
- move_binary $SOURCE $TARGET $BINARY
- done
- popd
- }
- merge_binaries() {
- TARGET=$1
- SOURCE=$2
- shift
- shift
- pushd $SOURCE/$1
- BINARIES=$(find . -type f)
- popd
- for BINARY in $BINARIES; do
- COMMAND="lipo -create -output $TARGET/$BINARY"
- for ARCH in $@; do
- COMMAND="$COMMAND -arch $ARCH $SOURCE/$ARCH/$BINARY"
- done
- $($COMMAND)
- done
- }
- export PKG_CONFIG_PATH="$(cygpath -p "${PKG_CONFIG_PATH}")"
- # Export HTTP(S)_PROXY as http(s)_proxy:
- [ -n "$HTTP_PROXY" ] && export http_proxy="$HTTP_PROXY"
- [ -n "$HTTPS_PROXY" ] && export https_proxy="$HTTPS_PROXY"
- PATH_TO_BUILD_DIR=$( cygpath "@BUILD_DIR@")
- PATH_TO_SRC_DIR=$( cygpath "@SOURCE_PATH@")
- PATH_TO_PACKAGE_DIR=$(cygpath "@INST_PREFIX@")
- JOBS=@VCPKG_CONCURRENCY@
- OSX_ARCHS="@OSX_ARCHS@"
- OSX_ARCH_COUNT=0@OSX_ARCH_COUNT@
- # Default to hardware concurrency if unset.
- : ${JOBS:=$(nproc)}
- # Disable asm and x86asm on all android targets because they trigger build failures:
- # arm64 Android build fails with 'relocation R_AARCH64_ADR_PREL_PG_HI21 cannot be used against symbol ff_cos_32; recompile with -fPIC'
- # x86 Android build fails with 'error: inline assembly requires more registers than available'.
- # x64 Android build fails with 'relocation R_X86_64_PC32 cannot be used against symbol ff_h264_cabac_tables; recompile with -fPIC'
- if [ "@VCPKG_CMAKE_SYSTEM_NAME@" = "Android" ]; then
- OPTIONS_arm=" --disable-asm --disable-x86asm"
- OPTIONS_arm64=" --disable-asm --disable-x86asm"
- OPTIONS_x86=" --disable-asm --disable-x86asm"
- OPTIONS_x86_64="${OPTIONS_x86}"
- else
- OPTIONS_arm=" --disable-asm --disable-x86asm"
- OPTIONS_arm64=" --enable-asm --disable-x86asm"
- OPTIONS_x86=" --enable-asm --enable-x86asm"
- OPTIONS_x86_64="${OPTIONS_x86}"
- fi
- build_ffmpeg() {
- # extract build architecture
- BUILD_ARCH=$1
- shift
- echo "BUILD_ARCH=${BUILD_ARCH}"
- # get architecture-specific options
- OPTION_VARIABLE="OPTIONS_${BUILD_ARCH}"
- echo "OPTION_VARIABLE=${OPTION_VARIABLE}"
- echo "=== CONFIGURING ==="
- sh "$PATH_TO_SRC_DIR/configure" "--prefix=$PATH_TO_PACKAGE_DIR" @CONFIGURE_OPTIONS@ --arch=${BUILD_ARCH} ${!OPTION_VARIABLE} $@
- echo "=== BUILDING ==="
- make -j${JOBS} V=1
- echo "=== INSTALLING ==="
- make install
- }
- cd "$PATH_TO_BUILD_DIR"
- if [ $OSX_ARCH_COUNT -gt 0 ]; then
- for ARCH in $OSX_ARCHS; do
- echo "=== CLEANING FOR $ARCH ==="
- make clean && make distclean
- build_ffmpeg $ARCH --extra-cflags=-arch --extra-cflags=$ARCH --extra-ldflags=-arch --extra-ldflags=$ARCH
- echo "=== COLLECTING BINARIES FOR $ARCH ==="
- move_binaries $PATH_TO_PACKAGE_DIR/lib $PATH_TO_BUILD_DIR/stage/$ARCH/lib
- move_binaries $PATH_TO_PACKAGE_DIR/bin $PATH_TO_BUILD_DIR/stage/$ARCH/bin
- done
- echo "=== MERGING ARCHITECTURES ==="
- merge_binaries $PATH_TO_PACKAGE_DIR $PATH_TO_BUILD_DIR/stage $OSX_ARCHS
- else
- build_ffmpeg @BUILD_ARCH@
- fi
|