########################################### #### Start of user defined variables ###### ########################################### #BUILD_HOST can be: OSX, Linux, Windows BUILD_HOST="Windows" PRODUCT_NAME=YOUR APPNAME DEFAULT_BACKGROUND=Default.png APP_ICON=icon.png IPHONE_IP=192.168.1.44 SOURCES=\ YOU.M FILES.m\ other.m \ ....m ########################################### BUILT_PRODUCTS_DIR=. CONFIGURATION_TEMP_DIR=. SRCROOT=. IPHONE_APP_FOLDER = /Applications INFOPLIST_FILE=Info.plist ############################################ #### Path to arm-apple-darwin- tools ####### #### Should be set by the toolchain ####### #### not hardcoded. ####### ############################################ ifeq ($(BUILD_HOST),"Linux") CC=arm-apple-darwin-gcc CXX=arm-apple-darwin-g++ else ifeq ($(BUILD_HOST),"Windows") CC=/usr/local/bin/arm-apple-darwin-gcc.exe CXX=/usr/local/bin/arm-apple-darwin-g++.exe else ifeq ($(BUILD_HOST),"OSX") #Is that really necessary ? Can't the OSX #toolchain set the path correctly so we #can merge it with Linux ? I suspect their #toolchain is broken / misconfigured CC=/usr/local/bin/arm-apple-darwin-gcc endif CFLAGS=-g -O2 -Wall -I./ CPPFLAGS= LD=$(CC) ############################################# #### These are all the iPhone frameworks #### #### Extracted from iPhone filesystem #### ############################################# # -framework AddressBook \ # -framework CFNetwork \ # -framework IAP \ # -framework Message \ # -framework Preferences \ # -framework AddressBookUI \ # -framework CoreAudio \ # -framework IOKit \ # -framework MessageUI \ # -framework Security \ # -framework AppSupport \ # -framework CoreFoundation \ # -framework IOMobileFramebuffer \ # -framework MobileBluetooth \ # -framework SystemConfiguration \ # -framework ArtworkCache \ # -framework CoreGraphics \ # -framework ITSync \ # -framework MobileMusicPlayer \ # -framework System \ # -framework AudioToolbox \ # -framework CoreSurface \ # -framework iTunesStore \ # -framework MoviePlayerUI \ # -framework TelephonyUI \ # -framework BluetoothManager \ # -framework CoreTelephony \ # -framework JavaScriptCore \ # -framework MultitouchSupport \ # -framework UIKit \ # -framework Calculate \ # -framework CoreVideo \ # -framework LayerKit \ # -framework MusicLibrary \ # -framework URLify \ # -framework Calendar \ # -framework DeviceLink \ # -framework MBX2D \ # -framework OfficeImport \ # -framework VisualVoicemail \ # -framework Camera \ # -framework Foundation \ # -framework MBXConnect \ # -framework OpenGLES \ # -framework WebCore \ # -framework Celestial \ # -framework GraphicsServices \ # -framework MeCCA \ # -framework PhotoLibrary \ # -framework WebKit \ ############################################ #OSX users define -I/usr/local/arm-apple-darwin/include #and -ObjC... still don't know why ! LDFLAGS=-lobjc \ -fobjc-exceptions \ -framework Foundation \ -framework CoreFoundation \ -framework UIKit \ -framework CoreGraphics \ -framework LayerKit ########################################### ##### End of user defined variables ####### ########################################### ################################################################################################### WRAPPER_NAME=$(PRODUCT_NAME).app EXECUTABLE_NAME=$(PRODUCT_NAME) SOURCES_ABS=$(addprefix $(SRCROOT)/,$(SOURCES)) INFOPLIST_ABS=$(addprefix $(SRCROOT)/,$(INFOPLIST_FILE)) OBJECTS=\ $(patsubst %.c,%.o,$(filter %.c,$(SOURCES))) \ $(patsubst %.cc,%.o,$(filter %.cc,$(SOURCES))) \ $(patsubst %.cpp,%.o,$(filter %.cpp,$(SOURCES))) \ $(patsubst %.m,%.o,$(filter %.m,$(SOURCES))) \ $(patsubst %.M,%.o,$(filter %.M,$(SOURCES))) \ $(patsubst %.mm,%.o,$(filter %.mm,$(SOURCES))) OBJECTS_ABS=$(addprefix $(CONFIGURATION_TEMP_DIR)/,$(OBJECTS)) APP_ABS=$(BUILT_PRODUCTS_DIR)/$(WRAPPER_NAME) PRODUCT_ABS=$(APP_ABS)/$(EXECUTABLE_NAME) all: $(PRODUCT_ABS) run: $(PRODUCT_ABS) scp -r $(APP_ABS) root@$(IPHONE_IP):$(IPHONE_APP_FOLDER) ssh -t root@$(IPHONE_IP) $(IPHONE_APP_FOLDER)/$(PRODUCT_ABS) testrun: $(PRODUCT_ABS) ssh -t root@$(IPHONE_IP) $(IPHONE_APP_FOLDER)/$(PRODUCT_ABS) copy: $(PRODUCT_ABS) scp -r $(APP_ABS) root@$(IPHONE_IP):$(IPHONE_APP_FOLDER) updateExec: $(PRODUCT_ABS) scp $(APP_ABS)/$(EXECUTABLE_NAME) root@$(IPHONE_IP):$(IPHONE_APP_FOLDER)/$(APP_ABS) $(PRODUCT_ABS): $(APP_ABS) $(OBJECTS_ABS) $(LD) $(LDFLAGS) -o $(PRODUCT_ABS) $(OBJECTS_ABS) $(APP_ABS): $(INFOPLIST_ABS) mkdir -p $(APP_ABS) cp $(INFOPLIST_ABS) $(APP_ABS) $(CONFIGURATION_TEMP_DIR)/%.o: $(SRCROOT)/%.m mkdir -p $(dir $@) $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ $(CONFIGURATION_TEMP_DIR)/%.o: $(SRCROOT)/%.cpp mkdir -p $(dir $@) $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ $(CONFIGURATION_TEMP_DIR)/%.o: $(SRCROOT)/%.mm mkdir -p $(dir $@) $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ $(CONFIGURATION_TEMP_DIR)/%.o: $(SRCROOT)/%.M mkdir -p $(dir $@) $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ clean: rm -f $(OBJECTS_ABS) rm -rf $(PRODUCT_ABS) install: $(TARGET) scp -r $(PRODUCT_NAME).app root@$(IPHONE_IP):$(IPHONE_APP_FOLDER) ssh -t root@$(IPHONE_IP) ' killall SpringBoard' cleanMyIphone: ssh -t root@$(IPHONE_IP) 'rm -rf $(IPHONE_APP_FOLDER)/$(WRAPPER_NAME)' cleanMyIphoneAndReload: ssh -t root@$(IPHONE_IP) 'rm -rf $(IPHONE_APP_FOLDER)/$(WRAPPER_NAME); killall SpringBoard' ####################################################################################################