build-ffmpeg-tvos.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. #!/bin/sh
  2. # directories
  3. SOURCE="ffmpeg-3.1.1"
  4. FAT="FFmpeg-tvOS"
  5. SCRATCH="scratch-tvos"
  6. # must be an absolute path
  7. THIN=`pwd`/"thin-tvos"
  8. # absolute path to x264 library
  9. #X264=`pwd`/../x264-ios/x264-iOS
  10. #FDK_AAC=`pwd`/fdk-aac/fdk-aac-ios
  11. CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs \
  12. --disable-doc --enable-pic --disable-indev=avfoundation"
  13. if [ "$X264" ]
  14. then
  15. CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-gpl --enable-libx264"
  16. fi
  17. if [ "$FDK_AAC" ]
  18. then
  19. CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-libfdk-aac"
  20. fi
  21. # avresample
  22. #CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-avresample"
  23. ARCHS="arm64 x86_64"
  24. COMPILE="y"
  25. LIPO="y"
  26. DEPLOYMENT_TARGET="9.0"
  27. if [ "$*" ]
  28. then
  29. if [ "$*" = "lipo" ]
  30. then
  31. # skip compile
  32. COMPILE=
  33. else
  34. ARCHS="$*"
  35. if [ $# -eq 1 ]
  36. then
  37. # skip lipo
  38. LIPO=
  39. fi
  40. fi
  41. fi
  42. if [ "$COMPILE" ]
  43. then
  44. if [ ! `which yasm` ]
  45. then
  46. echo 'Yasm not found'
  47. if [ ! `which brew` ]
  48. then
  49. echo 'Homebrew not found. Trying to install...'
  50. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" \
  51. || exit 1
  52. fi
  53. echo 'Trying to install Yasm...'
  54. brew install yasm || exit 1
  55. fi
  56. if [ ! `which gas-preprocessor.pl` ]
  57. then
  58. echo 'gas-preprocessor.pl not found. Trying to install...'
  59. (curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl \
  60. -o /usr/local/bin/gas-preprocessor.pl \
  61. && chmod +x /usr/local/bin/gas-preprocessor.pl) \
  62. || exit 1
  63. fi
  64. if [ ! -r $SOURCE ]
  65. then
  66. echo 'FFmpeg source not found. Trying to download...'
  67. curl http://www.ffmpeg.org/releases/$SOURCE.tar.bz2 | tar xj \
  68. || exit 1
  69. fi
  70. CWD=`pwd`
  71. for ARCH in $ARCHS
  72. do
  73. echo "building $ARCH..."
  74. mkdir -p "$SCRATCH/$ARCH"
  75. cd "$SCRATCH/$ARCH"
  76. CFLAGS="-arch $ARCH"
  77. if [ "$ARCH" = "x86_64" ]
  78. then
  79. PLATFORM="AppleTVSimulator"
  80. CFLAGS="$CFLAGS -mtvos-simulator-version-min=$DEPLOYMENT_TARGET"
  81. else
  82. PLATFORM="AppleTVOS"
  83. CFLAGS="$CFLAGS -mtvos-version-min=$DEPLOYMENT_TARGET -fembed-bitcode"
  84. if [ "$ARCH" = "arm64" ]
  85. then
  86. EXPORT="GASPP_FIX_XCODE5=1"
  87. fi
  88. fi
  89. XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`
  90. CC="xcrun -sdk $XCRUN_SDK clang"
  91. AR="xcrun -sdk $XCRUN_SDK ar"
  92. CXXFLAGS="$CFLAGS"
  93. LDFLAGS="$CFLAGS"
  94. if [ "$X264" ]
  95. then
  96. CFLAGS="$CFLAGS -I$X264/include"
  97. LDFLAGS="$LDFLAGS -L$X264/lib"
  98. fi
  99. if [ "$FDK_AAC" ]
  100. then
  101. CFLAGS="$CFLAGS -I$FDK_AAC/include"
  102. LDFLAGS="$LDFLAGS -L$FDK_AAC/lib"
  103. fi
  104. TMPDIR=${TMPDIR/%\/} $CWD/$SOURCE/configure \
  105. --target-os=darwin \
  106. --arch=$ARCH \
  107. --cc="$CC" \
  108. --ar="$AR" \
  109. $CONFIGURE_FLAGS \
  110. --extra-cflags="$CFLAGS" \
  111. --extra-ldflags="$LDFLAGS" \
  112. --prefix="$THIN/`basename $PWD`" \
  113. || exit 1
  114. xcrun -sdk $XCRUN_SDK make -j3 install $EXPORT || exit 1
  115. cd $CWD
  116. done
  117. fi
  118. if [ "$LIPO" ]
  119. then
  120. echo "building fat binaries..."
  121. mkdir -p $FAT/lib
  122. set - $ARCHS
  123. CWD=`pwd`
  124. cd $THIN/$1/lib
  125. for LIB in *.a
  126. do
  127. cd $CWD
  128. echo lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB 1>&2
  129. lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB || exit 1
  130. done
  131. cd $CWD
  132. cp -rf $THIN/$1/include $FAT
  133. fi
  134. echo Done