build-ffmpeg.sh 3.5 KB

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