################################################################################
# Makefile for a wxiPhone project
# Needs wxWidgets 2.9.1 or later.
#
# Available configurations:
#
# simulator-debug
# simulator-release
# device-debug
# device-release
#
# Usage: make CONFIG=<configuration> [app|clean|wx|cleanwx|install|uninstall|help]
#
# For example, to make a simulator version of wxWidgets and this application,
# then copy it to the simulator:
#
# make CONFIG=simulator-debug wx
# make CONFIG=simulator-debug app install
#
# Now you can run the simulator, and your app. The simulator is typically in
# /Developer/Platforms/iPhoneSimulator.platform/Developer/Applications
################################################################################

################################################################################
# GLOBAL VARIABLES
################################################################################

WX=/Users/juliansm/wx2dev/wxWidgets
CONFIG=simulator-debug

SDKVER=3.2
GCCVER=4.2
IPHONEOS_DEPLOYMENT_TARGET=$(SDKVER)
DEVROOT_SIMULATOR=/Developer/Platforms/iPhoneSimulator.platform/Developer
SDKROOT_SIMULATOR=$(DEVROOT_SIMULATOR)/SDKs/iPhoneSimulator$(SDKVER).sdk
DEVROOT_DEVICE=/Developer/Platforms/iPhoneOS.platform/Developer
SDKROOT_DEVICE=$(DEVROOT_DEVICE)/SDKs/iPhoneOS$(SDKVER).sdk
FRAMEWORKS_SIMULATOR=-framework IOKit -framework UIKit -framework CFNetwork -framework AudioToolbox -framework CoreFoundation -framework CoreGraphics -framework OpenGLES -framework Foundation -framework QuartzCore
FRAMEWORKS_DEVICE=$(FRAMEWORKS_SIMULATOR)
CONFIGURE_OPTIONS=--with-iphone --disable-shared --with-threads --with-opengl \
            --disable-stc --disable-ribbon --disable-richtext --disable-aui --disable-propgrid \
            --disable-xrc --disable-mdi

SIMULATOR_APP_LOCATION=$(shell echo $(HOME))/Library/Application Support/iPhone Simulator/4.0/Applications
PROGRAMTOPLEVELFOLDER=Minimal
PROGRAM=minimal
APPICONSOURCE=wxiphonesample.png

################################################################################
# device-debug
################################################################################

ifeq ($(CONFIG),device-debug)
WXDIR=$(WX)
WXVERSION:=$(shell echo `$(WXDIR)/iPhoneOSDebug-$(SDKVER)/wx-config --version`)
DEVROOT=$(DEVROOT_DEVICE)
SDKROOT=$(SDKROOT_DEVICE)

CXX=$(DEVROOT)/usr/bin/arm-apple-darwin10-g++-4.2.1 -isysroot $(SDKROOT) -miphoneos-version-min=$(IPHONEOS_DEPLOYMENT_TARGET)
CC=$(DEVROOT)/usr/bin/arm-apple-darwin10-gcc-4.2.1 -isysroot $(SDKROOT) -miphoneos-version-min=$(IPHONEOS_DEPLOYMENT_TARGET)
OBJCXXFLAGS=-fobjc-legacy-dispatch

CONFIGURE_CPPFLAGS=-mno-thumb -fpascal-strings -gdwarf-2 -fobjc-abi-version=2 -I$(SDKROOT)/usr/lib/gcc/arm-apple-darwin10/4.2.1/include/ -I$(SDKROOT)/usr/include -I$(SDKROOT)/usr/include/c++/4.2.1/armv6-apple-darwin10 -L$(SDKROOT)/usr/lib
CONFIGURE_CXX=$(DEVROOT)/usr/bin/arm-apple-darwin10-g++-4.2.1
CONFIGURE_CC=$(DEVROOT)/usr/bin/arm-apple-darwin10-gcc-4.2.1
CONFIGURE_OBJCXXFLAGS=-fobjc-legacy-dispatch
CONFIGURE_DEBUG_OPTIONS=--enable-debug --host=arm-apple-darwin

OUTPUTPATH=iPhoneOSDebug-$(SDKVER)/$(PROGRAMTOPLEVELFOLDER)
OBJECTPATH=iPhoneOSDebug-$(SDKVER)

BUILDPATHS=$(OBJECTPATH) $(OUTPUTPATH)/$(PROGRAM).app
WXLIBBUILDPATH=$(WXDIR)/$(OBJECTPATH)
LIBS=`$(WXLIBBUILDPATH)/wx-config --inplace --exec-prefix="$(WXLIBBUILDPATH)" --libs`
LINKERFLAGS=$(FRAMEWORKS_SIMULATOR)
WARNINGFLAGS=-Wall
OPTFLAGS=-O0
DEBUGFLAGS=-ggdb
LIBPATH=
CPPINC=`$(WXLIBBUILDPATH)/wx-config --cxxflags`
GCCFLAGS=$(CONFIGURE_CPPFLAGS)
LDFLAGS=$(LIBS) $(LIBPATH) $(LINKERFLAGS)
CPPFLAGS=$(CPPINC) $(GCCFLAGS) $(DEBUGFLAGS) $(OPTFLAGS) $(WARNINGFLAGS)
LIBDIRNAME=$(WXLIBBUILDPATH)/lib
MACPACKAGEINFO=$(OUTPUTPATH)/$(PROGRAM).app/PkgInfo
INFOPLISTSOURCE=Info.plist

################################################################################
# device-release
################################################################################

else
ifeq ($(CONFIG),device-release)
WXDIR=$(WX)
WXVERSION:=$(shell echo `$(WXDIR)/iPhoneOSRelease-$(SDKVER)/wx-config --version`)
DEVROOT=$(DEVROOT_DEVICE)
SDKROOT=$(SDKROOT_DEVICE)

CXX=$(DEVROOT)/usr/bin/arm-apple-darwin10-g++-4.2.1 -isysroot $(SDKROOT) -miphoneos-version-min=$(IPHONEOS_DEPLOYMENT_TARGET)
CC=$(DEVROOT)/usr/bin/arm-apple-darwin10-gcc-4.2.1 -isysroot $(SDKROOT) -miphoneos-version-min=$(IPHONEOS_DEPLOYMENT_TARGET)
OBJCXXFLAGS=-fobjc-legacy-dispatch

CONFIGURE_CPPFLAGS=-mno-thumb -fpascal-strings -gdwarf-2 -fobjc-abi-version=2 -I$(SDKROOT)/usr/lib/gcc/arm-apple-darwin10/4.2.1/include/ -I$(SDKROOT)/usr/include -I$(SDKROOT)/usr/include/c++/4.2.1/armv6-apple-darwin10 -L$(SDKROOT)/usr/lib
CONFIGURE_CXX=$(DEVROOT)/usr/bin/arm-apple-darwin10-g++-4.2.1
CONFIGURE_CC=$(DEVROOT)/usr/bin/arm-apple-darwin10-gcc-4.2.1
LDFLAGS=-L$(SDKROOT)/usr/lib
CONFIGURE_OBJCXXFLAGS=-fobjc-legacy-dispatch
CONFIGURE_DEBUG_OPTIONS=--disable-debug --host=arm-apple-darwin

OUTPUTPATH=iPhoneOSRelease-$(SDKVER)/$(PROGRAMTOPLEVELFOLDER)
OBJECTPATH=iPhoneOSRelease-$(SDKVER)

BUILDPATHS=$(OBJECTPATH) $(OUTPUTPATH)/$(PROGRAM).app
WXLIBBUILDPATH=$(WXDIR)/$(OBJECTPATH)
LIBS=`$(WXLIBBUILDPATH)/wx-config --inplace --exec-prefix="$(WXLIBBUILDPATH)" --libs`
LINKERFLAGS=$(FRAMEWORKS_SIMULATOR)
WARNINGFLAGS=-Wall
OPTFLAGS=-O2
DEBUGFLAGS=
LIBPATH=
CPPINC=`$(WXLIBBUILDPATH)/wx-config --cxxflags`
GCCFLAGS=$(CONFIGURE_CPPFLAGS)
LDFLAGS=$(LIBS) $(LIBPATH) $(LINKERFLAGS)
CPPFLAGS=$(CPPINC) $(GCCFLAGS) $(DEBUGFLAGS) $(OPTFLAGS) $(WARNINGFLAGS)
LIBDIRNAME=$(WXLIBBUILDPATH)/lib
MACPACKAGEINFO=$(OUTPUTPATH)/$(PROGRAM).app/PkgInfo
INFOPLISTSOURCE=Info.plist

################################################################################
# simulator-debug
################################################################################

else
ifeq ($(CONFIG),simulator-debug)
WXDIR=$(WX)
WXVERSION:=$(shell echo `$(WXDIR)/iPhoneSimulatorDebug-$(SDKVER)/wx-config --version`)
DEVROOT=$(DEVROOT_SIMULATOR)
SDKROOT=$(SDKROOT_SIMULATOR)

CXX=$(DEVROOT)/usr/bin/g++-$(GCCVER) -isysroot $(SDKROOT) -miphoneos-version-min=$(IPHONEOS_DEPLOYMENT_TARGET)
CC=$(DEVROOT)/usr/bin/gcc-$(GCCVER) -isysroot $(SDKROOT) -miphoneos-version-min=$(IPHONEOS_DEPLOYMENT_TARGET)
OBJCXXFLAGS=-fobjc-legacy-dispatch

CONFIGURE_CPPFLAGS=-fpascal-strings -gdwarf-2 -fobjc-abi-version=2
CONFIGURE_CXX=$(DEVROOT)/usr/bin/g++-$(GCCVER)
CONFIGURE_CC=$(DEVROOT)/usr/bin/gcc-$(GCCVER)
CONFIGURE_OBJCXXFLAGS=-fobjc-legacy-dispatch
CONFIGURE_DEBUG_OPTIONS=--enable-debug

OUTPUTPATH=iPhoneSimulatorDebug-$(SDKVER)/$(PROGRAMTOPLEVELFOLDER)
OBJECTPATH=iPhoneSimulatorDebug-$(SDKVER)

BUILDPATHS=$(OBJECTPATH) $(OUTPUTPATH)/$(PROGRAM).app
WXLIBBUILDPATH=$(WXDIR)/$(OBJECTPATH)
LIBS=`$(WXLIBBUILDPATH)/wx-config --inplace --exec-prefix="$(WXLIBBUILDPATH)" --libs`
LINKERFLAGS=$(FRAMEWORKS_SIMULATOR)
WARNINGFLAGS=-Wall
OPTFLAGS=-O0
DEBUGFLAGS=-ggdb
LIBPATH=
CPPINC=`$(WXLIBBUILDPATH)/wx-config --cxxflags`
GCCFLAGS=$(CONFIGURE_CPPFLAGS)
LDFLAGS=$(LIBS) $(LIBPATH) $(LINKERFLAGS)
CPPFLAGS=$(CPPINC) $(GCCFLAGS) $(DEBUGFLAGS) $(OPTFLAGS) $(WARNINGFLAGS)
LIBDIRNAME=$(WXLIBBUILDPATH)/lib
MACPACKAGEINFO=$(OUTPUTPATH)/$(PROGRAM).app/PkgInfo
INFOPLISTSOURCE=Info.plist

################################################################################
# simulator-release
################################################################################

else
WXDIR=$(WX)
WXVERSION:=$(shell echo `$(WXDIR)/iPhoneSimulatorRelease-$(SDKVER)/wx-config --version`)
DEVROOT=$(DEVROOT_SIMULATOR)
SDKROOT=$(SDKROOT_SIMULATOR)

CXX=$(DEVROOT)/usr/bin/g++-$(GCCVER) -isysroot $(SDKROOT) -miphoneos-version-min=$(IPHONEOS_DEPLOYMENT_TARGET)
CC=$(DEVROOT)/usr/bin/gcc-$(GCCVER) -isysroot $(SDKROOT) -miphoneos-version-min=$(IPHONEOS_DEPLOYMENT_TARGET)
OBJCXXFLAGS=-fobjc-legacy-dispatch

CONFIGURE_CPPFLAGS=-fpascal-strings -gdwarf-2 -fobjc-abi-version=2
CONFIGURE_CXX=$(DEVROOT)/usr/bin/g++-$(GCCVER)
CONFIGURE_CC=$(DEVROOT)/usr/bin/gcc-$(GCCVER)
CONFIGURE_OBJCXXFLAGS=-fobjc-legacy-dispatch
CONFIGURE_DEBUG_OPTIONS=--disable-debug

OUTPUTPATH=iPhoneSimulatorRelease-$(SDKVER)/$(PROGRAMTOPLEVELFOLDER)
OBJECTPATH=iPhoneSimulatorRelease-$(SDKVER)

BUILDPATHS=$(OBJECTPATH) $(OUTPUTPATH)/$(PROGRAM).app
WXLIBBUILDPATH=$(WXDIR)/$(OBJECTPATH)
LIBS=`$(WXLIBBUILDPATH)/wx-config --inplace --exec-prefix="$(WXLIBBUILDPATH)" --libs`
LINKERFLAGS=$(FRAMEWORKS_SIMULATOR)
WARNINGFLAGS=-Wall
OPTFLAGS=-O2
DEBUGFLAGS=
LIBPATH=
CPPINC=`$(WXLIBBUILDPATH)/wx-config --cxxflags`
GCCFLAGS=$(CONFIGURE_CPPFLAGS)
LDFLAGS=$(LIBS) $(LIBPATH) $(LINKERFLAGS)
CPPFLAGS=$(CPPINC) $(GCCFLAGS) $(DEBUGFLAGS) $(OPTFLAGS) $(WARNINGFLAGS)
LIBDIRNAME=$(WXLIBBUILDPATH)/lib
MACPACKAGEINFO=$(OUTPUTPATH)/$(PROGRAM).app/PkgInfo
INFOPLISTSOURCE=Info.plist
endif
endif
endif

################################################################################
# APP-SPECIFIC OBJECT LIST AND RULES
################################################################################

OBJECTS=$(OBJECTPATH)/minimal.o

$(OBJECTPATH)/minimal.o:	minimal.cpp
	$(CXX) -c -o $@ $(CPPFLAGS) minimal.cpp

################################################################################
# TARGETS
################################################################################

app:	$(BUILDPATHS) $(MACPACKAGEINFO) $(OUTPUTPATH)/$(PROGRAM).app/$(PROGRAM)

$(OBJECTPATH):
	mkdir -p $(OBJECTPATH)

$(OUTPUTPATH)/$(PROGRAM).app:
	mkdir -p $(OUTPUTPATH)/$(PROGRAM).app

clean:
	rm -fr $(OBJECTPATH)
	rm -fr $(OUTPUTPATH)

help:
	@echo "Usage: make -f Makefile CONFIG=[simulator-debug|simulator-release|device-debug|device-release] [app|clean|wx|cleanwx|install|uninstall|help]"

$(OUTPUTPATH)/$(PROGRAM).app/$(PROGRAM):	$(OBJECTS)
	$(CXX) -o $@ $(OBJECTS) $(LDFLAGS)

$(OUTPUTPATH)/$(PROGRAM).app/PkgInfo: $(OUTPUTPATH)/$(PROGRAM).app/$(PROGRAM) $(INFOPLISTSOURCE)
	mkdir -p $(OUTPUTPATH)/$(PROGRAM).app
	mkdir -p $(OUTPUTPATH)/Documents
	mkdir -p $(OUTPUTPATH)/Library
	mkdir -p $(OUTPUTPATH)/tmp
	cp $(INFOPLISTSOURCE) $(OUTPUTPATH)/$(PROGRAM).app/Info.plist
	echo "APPL????" >$(OUTPUTPATH)/$(PROGRAM).app/PkgInfo
	cp $(APPICONSOURCE) $(OUTPUTPATH)/$(PROGRAM).app/Icon.png

wx:
	@mkdir -p $(WXLIBBUILDPATH) ; \
	cd $(WXLIBBUILDPATH) ; \
        if test ! -f Makefile ; then rm -f *.o *.d ; \
        rm -f *.cache ; \
        $(WXDIR)/configure $(CONFIGURE_OPTIONS) \
            $(CONFIGURE_DEBUG_OPTIONS) \
            --with-macosx-sdk=$(SDKROOT) \
            --with-macosx-version-min=$(IPHONEOS_DEPLOYMENT_TARGET) \
            CXX="$(CONFIGURE_CXX)" CC="$(CONFIGURE_CC)" CPPFLAGS="$(CONFIGURE_CPPFLAGS)" OBJCXXFLAGS="$(CONFIGURE_OBJCXXFLAGS)" ; \
        fi; \
        make;

cleanwx:
	rm -f -r $(WXLIBBUILDPATH)

install:
	rm -f -r "$(SIMULATOR_APP_LOCATION)/$(PROGRAMTOPLEVELFOLDER)"
	cp -r $(OUTPUTPATH) "$(SIMULATOR_APP_LOCATION)/$(PROGRAMTOPLEVELFOLDER)"

uninstall:
	rm -f -r "$(SIMULATOR_APP_LOCATION)/$(PROGRAMTOPLEVELFOLDER)"

.PHONY:	app clean wx cleanwx install uninstall

test:
	@echo $(CONFIG) $(WXLIBBUILDPATH)
