Skip to content

Instantly share code, notes, and snippets.

@smellman
Created December 6, 2012 12:28
Show Gist options
  • Save smellman/4224116 to your computer and use it in GitHub Desktop.
Save smellman/4224116 to your computer and use it in GitHub Desktop.
OpenSSLをiPhone向けにビルドしてみる(armv7)
# wget http://openssl.org/source/openssl-1.0.1c.tar.gz
# mkdir build config_temp tmp target
# SDKROOT=/Applications/Xcode4.4.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk ARCHS=armv7 BUILD_DIR=/Users/btm/tmp/openssl/build CONFIGURATION_TEMP_DIR=/Users/btm/tmp/openssl/config_temp TARGET_BUILD_DIR=/Users/btm/tmp/openssl/target PROJECT_TEMP_DIR=/Users/btm/tmp/openssl/tmp sh build.sh
#set | grep ARCH
#set -x
## Determine the appropriate openssl source path to use
## Introduced by michaeltyson, adapted to account for OPENSSL_SRC build path
# locate src archive file if present
SRC_ARCHIVE=`ls openssl*tar.gz 2>/dev/null`
SRCROOT=.
# if there is an openssl directory immediately under the openssl.xcode source
# folder then build there
if [ -d "$SRCROOT/openssl" ]; then
OPENSSL_SRC="$SRCROOT/openssl"
# else, if there is a openssl.tar.gz in the directory, expand it to openssl
# and use it
elif [ -f "$SRC_ARCHIVE" ]; then
OPENSSL_SRC="$PROJECT_TEMP_DIR/openssl"
if [ ! -d "$OPENSSL_SRC" ]; then
echo "extracting $SRC_ARCHIVE..."
mkdir "$OPENSSL_SRC"
tar -C "$OPENSSL_SRC" --strip-components=1 -zxf "$SRC_ARCHIVE" || exit 1
cp -RL "$OPENSSL_SRC/include" "$TARGET_BUILD_DIR"
fi
# else, if $OPENSSL_SRC is not already defined (i.e. by prerequisites for SQLCipher XCode config)
# then assume openssl is in the current directory
elif [ ! -d "$OPENSSL_SRC" ]; then
OPENSSL_SRC="$SRCROOT"
fi
echo "***** using $OPENSSL_SRC for openssl source code *****"
# check whether libcrypto.a already exists - we'll only build if it does not
if [ -f "$TARGET_BUILD_DIR/libcrypto.a" ]; then
echo "***** Using previously-built libary $TARGET_BUILD_DIR/libcrypto.a - skipping build *****"
echo "***** To force a rebuild clean project and clean dependencies *****"
exit 0;
else
echo "***** No previously-built libary present at $TARGET_BUILD_DIR/libcrypto.a - performing build *****"
fi
# figure out the right set of build architectures for this run
BUILDARCHS="$ARCHS"
echo "***** creating universal binary for architectures: $BUILDARCHS *****"
if [ "$SDKROOT" != "" ]; then
ISYSROOT="-isysroot $SDKROOT"
fi
echo "***** using ISYSROOT $ISYSROOT *****"
OPENSSL_OPTIONS="no-krb5 no-gost"
echo "***** using OPENSSL_OPTIONS $OPENSSL_OPTIONS *****"
cd "$OPENSSL_SRC"
for BUILDARCH in $BUILDARCHS
do
echo "***** BUILDING UNIVERSAL ARCH $BUILDARCH ******"
make clean
# disable assembler
echo "***** configuring WITHOUT assembler optimizations based on architecture $BUILDARCH and build style $BUILD_STYLE *****"
./config no-asm $OPENSSL_OPTIONS -openssldir="$BUILD_DIR"
ASM_DEF="-UOPENSSL_BN_ASM_PART_WORDS"
echo "***** run make for $BUILDARCH *****"
make CFLAG="-D_DARWIN_C_SOURCE $ASM_DEF -arch $BUILDARCH $ISYSROOT -Wno-unused-value -Wno-parentheses" SHARED_LDFLAGS="-arch $BUILDARCH -dynamiclib"
echo "***** copying intermediate libraries to $CONFIGURATION_TEMP_DIR/$BUILDARCH-*.a *****"
cp libcrypto.a "$CONFIGURATION_TEMP_DIR"/$BUILDARCH-libcrypto.a
cp libssl.a "$CONFIGURATION_TEMP_DIR"/$BUILDARCH-libssl.a
done
echo "***** creating universallibraries in $TARGET_BUILD_DIR *****"
mkdir -p "$TARGET_BUILD_DIR"
lipo -create "$CONFIGURATION_TEMP_DIR/"*-libcrypto.a -output "$TARGET_BUILD_DIR/libcrypto.a"
lipo -create "$CONFIGURATION_TEMP_DIR/"*-libssl.a -output "$TARGET_BUILD_DIR/libssl.a"
echo "***** removing temporary files from $CONFIGURATION_TEMP_DIR *****"
rm -f "$CONFIGURATION_TEMP_DIR/"*-libcrypto.a
rm -f "$CONFIGURATION_TEMP_DIR/"*-libssl.a
echo "***** executing ranlib on libraries in $TARGET_BUILD_DIR *****"
ranlib "$TARGET_BUILD_DIR/libcrypto.a"
ranlib "$TARGET_BUILD_DIR/libssl.a"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment