xexexe

Building FreeType for Mac OS and IOS

折腾了一下FreeType,感觉很是强大,一个功能很丰富的开源库。下载了源码,编译为静态库花了点功夫。

我的本地环境
OSX 10.12.5
XCode 8.3.2

Starting point
Freetype 2.8
Extract archive, and in Terminal: cd freetype-2.8

OSX

1
2
3
4
./configure CFLAGS="-arch i386" --without-zlib --without-png --without-bzip2
make clean
make
cp objs/.libs/libfreetype.a libfreetype-i386.a

1
2
3
4
./configure CFLAGS="-arch x86_64" --without-zlib --without-png --without-bzip2
make clean
make
cp objs/.libs/libfreetype.a libfreetype-x86_64.a

然后将两个库合并为一个:

1
lipo -c libfreetype-i386.a libfreetype-x86_64.a -o libfreetype.a

IOS
模拟器使用OSX相同的库

1
2
3
4
./configure CFLAGS="-arch i386" --without-zlib --without-png --without-bzip2
make clean
make
cp objs/.libs/libfreetype.a libfreetype-i386.a

1
2
3
4
./configure CFLAGS="-arch x86_64" --without-zlib --without-png --without-bzip2
make clean
make
cp objs/.libs/libfreetype.a libfreetype-x86_64.a

真机下的编译,有点复杂,arm7和arm64。

1
2
3
4
./configure --without-zlib --without-png --without-bzip2 '--prefix=/usr/local/iPhone' '--host=arm-apple-darwin' '--enable-static=yes' '--enable-shared=no' 'CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang' 'CFLAGS=-arch armv7 -pipe -std=c99 -Wno-trigraphs -fpascal-strings -O2 -Wreturn-type -Wunused-variable -fmessage-length=0 -fvisibility=hidden -miphoneos-version-min=8.0 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/usr/include/libxml2/ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/' 'AR=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar' 'LDFLAGS=-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/ -miphoneos-version-min=8.0'
make clean
make
cp objs/.libs/libfreetype.a libfreetype-armv7.a

1
2
3
4
./configure --without-zlib --without-png --without-bzip2 '--prefix=/usr/local/iPhone' '--host=arm-apple-darwin' '--enable-static=yes' '--enable-shared=no' 'CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang' 'CFLAGS=-arch arm64 -pipe -std=c99 -Wno-trigraphs -fpascal-strings -O2 -Wreturn-type -Wunused-variable -fmessage-length=0 -fvisibility=hidden -miphoneos-version-min=8.0 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/usr/include/libxml2/ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/' 'AR=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar' 'LDFLAGS=-arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/ -miphoneos-version-min=8.0'
make clean
make
cp objs/.libs/libfreetype.a libfreetype-arm64.a

将这些所有的库合并在一起

1
lipo -c libfreetype-i386.a libfreetype-x86_64.a libfreetype-armv7.a libfreetype-arm64.a -o libfreetype.a

在arm7和arm64上的编译我遇到的坑,是ar的位置改变了。
https://stackoverflow.com/questions/32638016/ar-is-missing-after-upgrade-to-xcode-7/32638880#32638880

参考:
https://github.com/arielm/Freetype/wiki/Building-instructions