Skip to content

Instantly share code, notes, and snippets.

@rraallvv
Last active August 29, 2015 14:20
Show Gist options
  • Save rraallvv/afb9317da11116163c70 to your computer and use it in GitHub Desktop.
Save rraallvv/afb9317da11116163c70 to your computer and use it in GitHub Desktop.
Build LuaJIT 2.1
#!/bin/sh
: ${IPHONE_SDKVERSION:=`xcodebuild -showsdks | grep iphoneos | egrep "[[:digit:]]+\.[[:digit:]]+" -o | tail -1`}
: ${XCODE_ROOT:=`xcode-select -print-path`}
: ${SRCDIR:=`pwd`}
: ${IOSBUILDDIR:=`pwd`/build/ios/prebuild}
: ${PREFIXDIR:=`pwd`/build/ios/prefix}
: ${IOSFRAMEWORKDIR:=`pwd`/build/ios}
: ${COMPILER:="clang"}
: ${LUA_VERSION:=5.1.5}
#===============================================================================
ARM_DEV_CMD="xcrun --sdk iphoneos"
SIM_DEV_CMD="xcrun --sdk iphonesimulator"
ARMV6_LIB=$IOSBUILDDIR/lib_luajit_armv6.a
ARMV7_LIB=$IOSBUILDDIR/lib_luajit_armv7.a
ARMV7S_LIB=$IOSBUILDDIR/lib_luajit_armv7s.a
ARM64_LIB=$IOSBUILDDIR/lib_luajit_arm64.a
I386_LIB=$IOSBUILDDIR/lib_luajit_i386.a
X86_64_LIB=$IOSBUILDDIR/lib_luajit_x86_64.a
IOSSYSROOT=$XCODE_ROOT/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS$IPHONE_SDKVERSION.sdk
IOSSIMSYSROOT=$XCODE_ROOT/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator$IPHONE_SDKVERSION.sdk
FILES_INC="$SRCDIR/src/lua.h $SRCDIR/src/lualib.h $SRCDIR/src/lauxlib.h $SRCDIR/src/luaconf.h $SRCDIR/src/lua.hpp $SRCDIR/src/luajit.h"
EXTRA_CFLAGS="-DLUA_USE_DLOPEN"
compile_framework() {
FRAMEWORK_BUNDLE=$1/LuaJIT.framework
FRAMEWORK_VERSION=A
FRAMEWORK_NAME=LuaJIT
shift;
rm -rf $FRAMEWORK_BUNDLE
mkdir -p $FRAMEWORK_BUNDLE
mkdir -p $FRAMEWORK_BUNDLE/Versions
mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION
mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Resources
mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Headers
mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Documentation
ln -s $FRAMEWORK_VERSION $FRAMEWORK_BUNDLE/Versions/Current
ln -s Versions/Current/Headers $FRAMEWORK_BUNDLE/Headers
ln -s Versions/Current/Resources $FRAMEWORK_BUNDLE/Resources
ln -s Versions/Current/Documentation $FRAMEWORK_BUNDLE/Documentation
ln -s Versions/Current/$FRAMEWORK_NAME $FRAMEWORK_BUNDLE/$FRAMEWORK_NAME
FRAMEWORK_INSTALL_NAME=$FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/$FRAMEWORK_NAME
echo "Lipoing library into $FRAMEWORK_INSTALL_NAME..."
$ARM_DEV_CMD lipo -create $@ -output "$FRAMEWORK_INSTALL_NAME" || exit
echo "Framework: Copying includes..."
cp -r $FILES_INC $FRAMEWORK_BUNDLE/Headers/
echo "Framework: Creating plist..."
cat > $FRAMEWORK_BUNDLE/Resources/Info.plist <<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>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${FRAMEWORK_NAME}</string>
<key>CFBundleIdentifier</key>
<string>org.luajit</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>${FRAMEWORK_CURRENT_VERSION}</string>
</dict>
</plist>
EOF
}
mkdir -p $IOSBUILDDIR
compile_arm() {
echo compiling $1 ...
ISDKF="-arch $1 -isysroot $IOSSYSROOT $EXTRA_CFLAGS"
make -C $SRCDIR/src clean libluajit.a HOST_CC="$COMPILER -m32 -arch i386" CROSS="$ARM_DEV_CMD " TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS
cp $SRCDIR/src/libluajit.a $IOSBUILDDIR/lib_luajit_$1.a
}
compile_arm64() {
echo compiling arm64 ...
ISDKF="-arch arm64 -isysroot $IOSSYSROOT $EXTRA_CFLAGS"
make -C $SRCDIR/src clean libluajit.a HOST_CC="$COMPILER -m64 -arch x86_64" CROSS="$ARM_DEV_CMD " TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS
cp $SRCDIR/src/libluajit.a $IOSBUILDDIR/lib_luajit_arm64.a
}
compile_sim() {
echo compiling sim $1 ...
ISDKF="-arch $1 -isysroot $IOSSIMSYSROOT $EXTRA_CFLAGS"
make -C $SRCDIR/src clean libluajit.a HOST_CC="$COMPILER -m32 -arch $1" CROSS="$SIM_DEV_CMD " TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS
cp $SRCDIR/src/libluajit.a $IOSBUILDDIR/lib_luajit_$1.a
}
compile_sim i386
compile_sim x86_64
compile_arm armv7
compile_arm armv7s
compile_arm64
echo build ios framework ...
compile_framework $IOSFRAMEWORKDIR $I386_LIB $X86_64_LIB $ARMV7_LIB $ARMV7S_LIB $ARM64_LIB
echo framework will be at $IOSFRAMEWORKDIR
echo success!
#!/bin/sh
: ${OSX_SDKVERSION:=`xcodebuild -showsdks | grep osx | egrep "[[:digit:]]+\.[[:digit:]]+" -o | tail -1`}
: ${XCODE_ROOT:=`xcode-select -print-path`}
: ${SRCDIR:=`pwd`}
: ${OSXBUILDDIR:=`pwd`/build/osx/prebuild}
: ${PREFIXDIR:=`pwd`/build/osx/prefix}
: ${OSXFRAMEWORKDIR:=`pwd`/build/osx}
: ${COMPILER:="clang"}
: ${LUA_VERSION:=5.1.5}
#===============================================================================
INTEL_DEV_CMD="xcrun --sdk macosx"
X86_64_LIB=$OSXBUILDDIR/lib_luajit_x86_64.a
OSXSYSROOT=$XCODE_ROOT/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$IPHONE_SDKVERSION.sdk
FILES_INC="$SRCDIR/src/lua.h $SRCDIR/src/lualib.h $SRCDIR/src/lauxlib.h $SRCDIR/src/luaconf.h $SRCDIR/src/lua.hpp $SRCDIR/src/luajit.h"
EXTRA_CFLAGS="-DLUA_USE_DLOPEN"
compile_framework() {
FRAMEWORK_BUNDLE=$1/LuaJIT.framework
FRAMEWORK_VERSION=A
FRAMEWORK_NAME=LuaJIT
shift;
rm -rf $FRAMEWORK_BUNDLE
mkdir -p $FRAMEWORK_BUNDLE
mkdir -p $FRAMEWORK_BUNDLE/Versions
mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION
mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Resources
mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Headers
mkdir -p $FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/Documentation
ln -s $FRAMEWORK_VERSION $FRAMEWORK_BUNDLE/Versions/Current
ln -s Versions/Current/Headers $FRAMEWORK_BUNDLE/Headers
ln -s Versions/Current/Resources $FRAMEWORK_BUNDLE/Resources
ln -s Versions/Current/Documentation $FRAMEWORK_BUNDLE/Documentation
ln -s Versions/Current/$FRAMEWORK_NAME $FRAMEWORK_BUNDLE/$FRAMEWORK_NAME
FRAMEWORK_INSTALL_NAME=$FRAMEWORK_BUNDLE/Versions/$FRAMEWORK_VERSION/$FRAMEWORK_NAME
echo "Lipoing library into $FRAMEWORK_INSTALL_NAME..."
$INTEL_DEV_CMD lipo -create $@ -output "$FRAMEWORK_INSTALL_NAME" || exit
echo "Framework: Copying includes..."
cp -r $FILES_INC $FRAMEWORK_BUNDLE/Headers/
echo "Framework: Creating plist..."
cat > $FRAMEWORK_BUNDLE/Resources/Info.plist <<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>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${FRAMEWORK_NAME}</string>
<key>CFBundleIdentifier</key>
<string>org.luajit</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>${FRAMEWORK_CURRENT_VERSION}</string>
</dict>
</plist>
EOF
}
mkdir -p $OSXBUILDDIR
compile_x86_64() {
echo compiling x86_64 ...
ISDKF="-arch x86_64 -isysroot $OSXSYSROOT $EXTRA_CFLAGS"
make -C $SRCDIR/src clean libluajit.a HOST_CC="$COMPILER -arch x86_64"
cp $SRCDIR/src/libluajit.a $OSXBUILDDIR/lib_luajit_x86_64.a
}
compile_x86_64
echo build osx framework ...
compile_framework $OSXFRAMEWORKDIR $X86_64_LIB
echo framework will be at $OSXFRAMEWORKDIR
echo success!
shopt -s extglob
if [ ! -e $BUILT_PRODUCTS_DIR/$EXECUTABLE_NAME ]; then
LUADIR="$SRCROOT/luajit"
mkdir -p $BUILT_PRODUCTS_DIR
for ARCH in $ARCHS ; do
TARGET_ARCH="-m32"
if [ "$ARCH" == "arm64" ] || [ "$ARCH" == "x86_64" ] ; then
TARGET_ARCH="-m64"
fi
TARGET_SYSTEM="Darwin"
if [ $SDKROOT == $iphoneos ] || [ $SDKROOT == $iphonesimulator ] ; then
TARGET_SYSTEM="iOS"
fi
make -C "$LUADIR" CC="clang" HOST_CC="clang $TARGET_ARCH -I/usr/include -isysroot $DEVELOPER_SDK_DIR" HOST_LDFLAGS="-L/usr/lib" TARGET_SYS=$TARGET_SYSTEM CROSS="/usr/bin/" TARGET_FLAGS="-isysroot $SDKROOT -arch $ARCH" clean amalg
if [ ! -e "$LUADIR/src/libluajit.a" ]; then
exit 1
fi
mv "$LUADIR/src/libluajit.a" $BUILT_PRODUCTS_DIR/libluajit-${ARCH}.a
done
lipo -create $BUILT_PRODUCTS_DIR/libluajit-*.a -output $BUILT_PRODUCTS_DIR/$EXECUTABLE_NAME
rm $BUILT_PRODUCTS_DIR/!($EXECUTABLE_PREFIX$PRODUCT_NAME).a
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment