Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save typester/15487 to your computer and use it in GitHub Desktop.
Save typester/15487 to your computer and use it in GitHub Desktop.
#!/bin/sh
export iphonefs=$HOME/tmp/iphone/iPhone2.1
export target=arm-apple-darwin9
export leopardsdk=$HOME/tmp/iphone/Developer/SDKs/MacOSX10.5.sdk
export leopardinc=${leopardsdk}/usr/include
export leopardlib=${leopardsdk}/System/Library/Frameworks
export iphoneplt=$HOME/tmp/iphone/Developer/Platforms/iPhoneOS.platform
export iphonesdk=${iphoneplt}/Developer/SDKs/iPhoneOS2.1.sdk
export iphoneinc=${iphonesdk}/usr/include
export iphonelib=${iphonesdk}/System/Library/Frameworks
export prefix=$HOME/app/toolchain/usr
export sysroot=$HOME/app/toolchain/sysroot
export PATH="${prefix}/bin":"${PATH}"
export cctools=$HOME/app/toolchain/src/cctools
export gcc=$HOME/app/toolchain/src/gcc
export csu=$HOME/app/toolchain/src/csu
export build=$HOME/app/toolchain/build
export apple=$HOME/tmp/iphone/apple
mkdir -p "$(dirname "${sysroot}")"
cp -aH "${iphonefs}" "${sysroot}"
cd "${sysroot}"
rm -rf usr/include
cp -a "${leopardinc}" usr/include
cd usr/include
ln -s . System
cp -af "${iphoneinc}"/* .
cp -af "${apple}"/xnu-*/osfmk/* .
cp -af "${apple}"/xnu-*/bsd/* .
cp -af "${apple}"/cctools-*/include/mach .
cp -af "${apple}"/cctools-*/include/mach-o .
cp -af "${iphoneinc}"/mach-o/dyld.h mach-o
cp -af "${leopardinc}"/mach/machine mach
cp -af "${leopardinc}"/mach/machine.h mach
cp -af "${leopardinc}"/machine .
cp -af "${iphoneinc}"/machine .
cp -af "${iphoneinc}"/sys/cdefs.h sys
cp -af "${leopardinc}"/sys/dtrace.h sys
cp -af "${leopardlib}"/Kernel.framework/Headers/machine/disklabel.h machine
cp -af "${apple}"/configd-*/dnsinfo/dnsinfo.h .
cp -a "${apple}"/Libc-*/include/kvm.h .
cp -a "${apple}"/launchd-*/launchd/src/*.h .
cp -a i386/disklabel.h arm
cp -a mach/i386/machine_types.defs mach/arm
## if you don't have mig, just ignore this for now
#for defs in clock_reply exc mach_exc notify; do
# mig -server /dev/null -user /dev/null -header /dev/null \
# -sheader mach/"${defs}"_server.h mach/"${defs}".defs
#done
mkdir Kernel
cp -a "${apple}"/xnu-*/libsa/libsa Kernel
mkdir Security
cp -a "${apple}"/libsecurity_authorization-*/lib/*.h Security
cp -a "${apple}"/libsecurity_cdsa_client-*/lib/*.h Security
cp -a "${apple}"/libsecurity_cdsa_utilities-*/lib/*.h Security
cp -a "${apple}"/libsecurity_cms-*/lib/*.h Security
cp -a "${apple}"/libsecurity_codesigning-*/lib/*.h Security
cp -a "${apple}"/libsecurity_cssm-*/lib/*.h Security
cp -a "${apple}"/libsecurity_keychain-*/lib/*.h Security
cp -a "${apple}"/libsecurity_mds-*/lib/*.h Security
cp -a "${apple}"/libsecurity_ssl-*/lib/*.h Security
cp -a "${apple}"/libsecurity_utilities-*/lib/*.h Security
cp -a "${apple}"/libsecurityd-*/lib/*.h Security
mkdir DiskArbitration
cp -a "${apple}"/DiskArbitration-*/DiskArbitration/*.h DiskArbitration
cp -a "${apple}"/xnu-*/iokit/IOKit .
cp -a "${apple}"/IOKitUser-*/*.h IOKit
cp -a "${apple}"/IOGraphics-*/IOGraphicsFamily/IOKit/graphics IOKit
cp -a "${apple}"/IOHIDFamily-*/IOHIDSystem/IOKit/hidsystem IOKit
for proj in kext ps pwr_mgt; do
mkdir -p IOKit/"${proj}"
cp -a "${apple}"/IOKitUser-*/"${proj}".subproj/*.h IOKit/"${proj}"
done
mkdir IOKit/storage
cp -a "${apple}"/IOStorageFamily-*/*.h IOKit/storage
cp -a "${apple}"/IOCDStorageFamily-*/*.h IOKit/storage
cp -a "${apple}"/IODVDStorageFamily-*/*.h IOKit/storage
mkdir SystemConfiguration
cp -a "${apple}"/configd-*/SystemConfiguration.fproj/*.h SystemConfiguration
mkdir WebCore
cp -a "${apple}"/WebCore-*/bindings/objc/*.h WebCore
cp -aH "${leopardlib}"/CoreFoundation.framework/Headers CoreFoundation
cp -af "${apple}"/CF-*/*.h CoreFoundation
cp -af "${iphonelib}"/CoreFoundation.framework/Headers/* CoreFoundation
for framework in AudioToolbox AudioUnit CoreAudio Foundation; do
cp -aH "${leopardlib}"/"${framework}".framework/Headers "${framework}"
cp -af "${iphonelib}"/"${framework}".framework/Headers/* "${framework}"
done
for framework in AppKit Cocoa CoreData CoreVideo JavaScriptCore OpenGL QuartzCore WebKit; do
cp -aH "${leopardlib}"/"${framework}".framework/Headers "$(basename "${framework}" .framework)"
done
cp -aH "${leopardlib}"/ApplicationServices.framework/Headers ApplicationServices
for service in "${leopardlib}"/ApplicationServices.framework/Frameworks/*.framework; do
cp -aH "${service}"/Headers "$(basename "${service}" .framework)"
done
cp -aH "${leopardlib}"/CoreServices.framework/Headers CoreServices
for service in "${leopardlib}"/CoreServices.framework/Frameworks/*.framework; do
cp -aH "${service}"/Headers "$(basename "${service}" .framework)"
done
for framework in AddressBook AddressBookUI AudioToolbox AudioUnit CFNetwork CoreAudio \
CoreFoundation CoreGraphics CoreLocation Foundation MediaPlayer \
OpenAL OpenGLES QuartzCore Security SystemConfiguration UIKit; do
mkdir -p "${framework}"
cp -af "${iphonelib}"/"${framework}".framework/Headers/* "${framework}"
done
# this step may have a bad hunk in CoreFoundation and thread_status while patching
# these errors are to be ignored, as these are changes for issues Apple has now fixed
wget -qO- http://svn.telesphoreo.org/trunk/tool/include.diff | patch -p3
wget -qO arm/locks.h http://svn.telesphoreo.org/trunk/tool/patches/locks.h
mkdir GraphicsServices
cd GraphicsServices
#wget -q http://svn.telesphoreo.org/trunk/tool/patches/GraphicsServices.h
svn export -r 357 http://svn.telesphoreo.org/trunk/tool/patches/
mv patches/GraphicsServices.h .
rm -rf patches
cd "${sysroot}"
ln -sf gcc/darwin/4.0/stdint.h usr/include
ln -s libstdc++.6.dylib usr/lib/libstdc++.dylib
ln -sfn A System/Library/Frameworks/IOKit.framework/Versions/Current
ln -sf Versions/Current/IOKit System/Library/Frameworks/IOKit.framework
mkdir -p "${csu}"
cd "${csu}"
svn co http://iphone-dev.googlecode.com/svn/trunk/csu .
cp -a *.o "${sysroot}"/usr/lib
cd "${sysroot}"/usr/lib
chmod 644 *.o
cp -af crt1.o crt1.10.5.o
cp -af dylib1.o dylib1.10.5.o
rm -rf "${gcc}"
git clone git://git.saurik.com/llvm-gcc-4.2 "${gcc}"
rm -rf "${cctools}"
svn co http://iphone-dev.googlecode.com/svn/branches/odcctools-9.2-ld "${cctools}"
mkdir -p "${build}"
cd "${build}"
mkdir cctools-iphone
cd cctools-iphone
CFLAGS=-m32 LDFLAGS=-m32 "${cctools}"/configure \
--target="${target}" \
--prefix="${prefix}" \
--disable-ld64
make
make install
mkdir -p "${build}"
cd "${build}"
mkdir gcc-4.2-iphone
cd gcc-4.2-iphone
"${gcc}"/configure \
--target="${target}" \
--prefix="${prefix}" \
--with-sysroot="${sysroot}" \
--enable-languages=c,c++,objc,obj-c++ \
--with-as="${prefix}"/bin/"${target}"-as \
--with-ld="${prefix}"/bin/"${target}"-ld \
--enable-wchar_t=no \
--with-gxx-include-dir=/usr/include/c++/4.0.0
make
make install
mkdir -p "${sysroot}"/"$(dirname "${prefix}")"
ln -s "${prefix}" "${sysroot}"/"$(dirname "${prefix}")"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment