Skip to content

Commit

Permalink
add build ios framework script
Browse files Browse the repository at this point in the history
rename bundle
  • Loading branch information
LincolnLaw committed Oct 25, 2017
1 parent 92e0663 commit c464b66
Show file tree
Hide file tree
Showing 3 changed files with 197 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
scratch*
thin*
fat*
FFmpeg.framework
FFmpeg-*
.DS_Store
191 changes: 191 additions & 0 deletions build-ffmpeg-iOS-framework.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
#!/bin/sh

# directories
SCRATCH=`pwd`/"scratch"
ARCHS="arm64 armv7 i386 x86_64"

FFMPEG_VERSION="3.4"
export FFMPEG_VERSION
HEADER_SUFFIX=".h"
CURRENT_FOLDER=`pwd`
FRAMEWORK_NAME="FFmpeg"
FRAMEWORK_EXT=".framework"
FRAMEWORK="$FRAMEWORK_NAME$FRAMEWORK_EXT"
BUILD_FOLDER="$CURRENT_FOLDER/FFmpeg-iOS"
BUILD_THIN_FOLDER="$CURRENT_FOLDER/thin"
BUILD_INCLUDE_FOLDER="$BUILD_FOLDER/include"
BUILD_LIB_FOLDER="$BUILD_FOLDER/lib"
OUTPUT_FOLDER="$CURRENT_FOLDER/$FRAMEWORK"
OUTPUT_INFO_PLIST_FILE="$OUTPUT_FOLDER/Info.plist"
OUTPUT_HEADER_FOLDER="$OUTPUT_FOLDER/Headers"
OUTPUT_UMBRELLA_HEADER="$OUTPUT_HEADER_FOLDER/ffmpeg.h"
OUTPUT_MODULES_FOLDER="$OUTPUT_FOLDER/Modules"
OUTPUT_MODULES_FILE="$OUTPUT_MODULES_FOLDER/module.modulemap"
VERSION_NEW_NAME="Version.h"
BUNDLE_ID="org.ffmpeg.FFmpeg"

function CreateFramework() {
rm -rf $OUTPUT_FOLDER
mkdir -p $OUTPUT_HEADER_FOLDER $OUTPUT_MODULES_FOLDER
}

function CompileSource() {
./build-ffmpeg.sh $ARCHS
./build-ffmpeg.sh lipo
}

function MergeStaticLibrary() {
local files=""

for ARCH in $ARCHS; do
folder="$SCRATCH/$ARCH"
name="$FRAMEWORK_NAME$ARCH.a"
ar cru $name $(find $folder -name "*.o")
files="$files $name"
done

lipo -create $files -output FFmpeg

for file in $files; do
rm -rf $file
done
mv $FRAMEWORK_NAME $OUTPUT_FOLDER
}

function RenameHeader() {
local include_folder="$(pwd)/FFmpeg-iOS/include"
local need_replace_version_folder=""
for folder in "$include_folder"/*; do
local folder_name=`basename $folder`
local verstion_file_name="$folder_name$VERSION_NEW_NAME"
for header in "$folder"/*; do
local header_name=`basename $header`

local dst_name=$header_name
if [ $header_name == "version.h" ]; then
dst_name=$verstion_file_name
fi

local dst_folder=$OUTPUT_HEADER_FOLDER
local file_name="$folder/$header_name"
local dst_file_name="$dst_folder/$dst_name"
cp $file_name $dst_file_name
find "$dst_folder" -name "$dst_name" -type f -exec sed -i '' "s/\"version.h\"/\"$verstion_file_name\"/g" {} \;
done
need_replace_version_folder="$need_replace_version_folder $folder_name"
done

for folder_name in $need_replace_version_folder; do
local verstion_file_name="$folder_name$VERSION_NEW_NAME"
find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/\"$folder_name\/version.h\"/\"$verstion_file_name\"/g" {} \;
done
find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/libavformat\///g" {} \;
find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/libavutil\///g" {} \;
find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/libavcodec\///g" {} \;
}

# COPY MISSING inttypes.h
function CopyInttype() {
local file="$(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/clang/include/inttypes.h"
cp $file $OUTPUT_HEADER_FOLDER
find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/<inttypes.h>/\"inttypes.h\"/g" {} \;
}

function CreateModulemapAndUmbrellaHeader() {
#create ffmpeg.h
cat > $OUTPUT_UMBRELLA_HEADER <<EOF
#import <Foundation/Foundation.h>
#import <VideoToolbox/VideoToolbox.h>
#import <AudioToolbox/AudioToolbox.h>
#include "avcodec.h"
#include "avdevice.h"
#include "avfilter.h"
#include "avformat.h"
#include "avutil.h"
#include "swscale.h"
#include "swresample.h"
double FFmpegVersionNumber = $FFMPEG_VERSION;
EOF

cat > $OUTPUT_MODULES_FILE <<EOF
framework module $FRAMEWORK_NAME {
umbrella header "ffmpeg.h"
export *
module * { export * }
}
EOF
}

function CreateInfoPlist() {
DEFAULT_iOS_SDK_VERSION=`defaults read $(xcode-select -p)/Platforms/iPhoneOS.platform/version CFBundleShortVersionString`
DTCompiler=`defaults read $(xcode-select -p)/../info DTCompiler`
DTPlatformBuild=`defaults read $(xcode-select -p)/../info DTPlatformBuild`
DTSDKBuild=`defaults read $(xcode-select -p)/../info DTSDKBuild`
DTXcode=`defaults read $(xcode-select -p)/../info DTXcode`
DTXcodeBuild=`defaults read $(xcode-select -p)/../info DTXcodeBuild`
OS_BUILD_VERSION=$(sw_vers -buildVersion)
cat > $OUTPUT_INFO_PLIST_FILE <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>$OS_BUILD_VERSION</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$FRAMEWORK_NAME</string>
<key>CFBundleIdentifier</key>
<string>$BUNDLE_ID</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$FRAMEWORK_NAME</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>$FFMPEG_VERSION</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>iPhoneOS</string>
</array>
<key>CFBundleVersion</key>
<string>1</string>
<key>DTCompiler</key>
<string>$DTCompiler</string>
<key>DTPlatformBuild</key>
<string>$DTPlatformBuild</string>
<key>DTPlatformName</key>
<string>iphoneos</string>
<key>DTPlatformVersion</key>
<string>$DEFAULT_iOS_SDK_VERSION</string>
<key>DTSDKBuild</key>
<string>$DTSDKBuild</string>
<key>DTSDKName</key>
<string>iphoneos$DEFAULT_iOS_SDK_VERSION</string>
<key>DTXcode</key>
<string>$DTXcode</string>
<key>DTXcodeBuild</key>
<string>$DTXcodeBuild</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
</dict>
</plist>
EOF
}

CompileSource
CreateFramework
MergeStaticLibrary
RenameHeader
CreateModulemapAndUmbrellaHeader
CopyInttype
CreateInfoPlist
6 changes: 5 additions & 1 deletion build-ffmpeg.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
#!/bin/sh

# directories
SOURCE="ffmpeg-3.4"
FF_VERSION="3.4"
if [[ $FFMPEG_VERSION != "" ]]; then
FF_VERSION=$FFMPEG_VERSION
fi
SOURCE="ffmpeg-$FF_VERSION"
FAT="FFmpeg-iOS"

SCRATCH="scratch"
Expand Down

0 comments on commit c464b66

Please sign in to comment.