From c6dcec4e0d9af18a3e45d557e9e072c5640d85cd Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Thu, 5 Jan 2012 22:26:08 +0000 Subject: [PATCH] Update OS X library building. - As done with libucl and librbspeex, create universal libraries using ar instead of building twice and using lipo. This notably simplifies things. - Allow overwriting the compiler via command line. This is required for building on OS X. - Update Rockbox Utility to the changed library rules. Fixes building which was broken by the previous Makefile changes. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31588 a1c6a512-1295-4272-9138-f99709370657 --- rbutil/libtools.make | 27 ++++++++------------------- rbutil/rbutilqt/rbutilqt.pro | 25 +++++++++---------------- 2 files changed, 17 insertions(+), 35 deletions(-) diff --git a/rbutil/libtools.make b/rbutil/libtools.make index 4e66161011..0d028e09be 100644 --- a/rbutil/libtools.make +++ b/rbutil/libtools.make @@ -42,10 +42,15 @@ endif endif endif -NATIVECC = gcc +NATIVECC ?= gcc CC ?= gcc +# OS X specifics. Needs to consider cross compiling for Windows. ifeq ($(findstring Darwin,$(shell uname)),Darwin) ifneq ($(findstring mingw,$(CROSS)$(CC)),mingw) +# when building libs for OS X build for both i386 and ppc at the same time. +# This creates fat objects, and ar can only create the archive but not operate +# on it. As a result the ar call must NOT use the u (update) flag. +CFLAGS += -arch ppc -arch i386 # building against SDK 10.4 is not compatible with gcc-4.2 (default on newer Xcode) # might need adjustment for older Xcode. CC ?= gcc-4.0 @@ -105,27 +110,11 @@ $(TARGET_DIR)$(OUTPUT).dll: $(LIBOBJS) $(addprefix $(OBJDIR),$(EXTRALIBOBJS)) $(SILENT)$(CROSS)$(CC) $(CFLAGS) -shared -o $@ $^ \ -Wl,--output-def,$(TARGET_DIR)$(OUTPUT).def +# create lib file from objects $(TARGET_DIR)lib$(OUTPUT)$(RBARCH).a: $(LIBOBJS) $(addprefix $(OBJDIR),$(EXTRALIBOBJS)) @echo AR $(notdir $@) $(SILENT)mkdir -p $(dir $@) - $(SILENT)$(AR) rucs $@ $^ - -# some trickery to build ppc and i386 from a single call -ifeq ($(RBARCH),) -$(TARGET_DIR)lib$(OUTPUT)i386.a: - make RBARCH=i386 TARGET_DIR=$(TARGET_DIR) lib$(OUTPUT)i386.a - -$(TARGET_DIR)lib$(OUTPUT)ppc.a: - make RBARCH=ppc TARGET_DIR=$(TARGET_DIR) lib$(OUTPUT)ppc.a -endif - -lib$(OUTPUT)-universal: $(TARGET_DIR)lib$(OUTPUT)i386.a \ - $(TARGET_DIR)lib$(OUTPUT)ppc.a - @echo LIPO $(notdir $(TARGET_DIR)lib$(OUTPUT).a) - $(SILENT) rm -f $(TARGET_DIR)lib$(OUTPUT).a - $(SILENT)lipo -create $(TARGET_DIR)lib$(OUTPUT)i386.a \ - $(TARGET_DIR)lib$(OUTPUT)ppc.a \ - -output $(TARGET_DIR)lib$(OUTPUT).a + $(SILENT)$(AR) rcs $@ $^ clean: rm -f $(OBJS) $(OUTPUT) $(TARGET_DIR)lib$(OUTPUT)*.a $(OUTPUT).dmg diff --git a/rbutil/rbutilqt/rbutilqt.pro b/rbutil/rbutilqt/rbutilqt.pro index 270e47b1f7..1f281cbce6 100644 --- a/rbutil/rbutilqt/rbutilqt.pro +++ b/rbutil/rbutilqt/rbutilqt.pro @@ -52,13 +52,6 @@ RBBASE_DIR = $$replace(RBBASE_DIR,/rbutil/rbutilqt,) message("Rockbox Base dir: "$$RBBASE_DIR) -# custom rules for rockbox-specific libs -!mac { - RBLIBPOSTFIX = .a -} -mac { - RBLIBPOSTFIX = -universal -} # check for system speex. Add a custom rule for pre-building librbspeex if not # found. Newer versions of speex are split up into libspeex and libspeexdsp, # and some distributions package them separately. Check for both and fall back @@ -83,54 +76,54 @@ librbspeex.commands = $$ADDENV \ TARGET_DIR=$$MYLIBBUILDDIR \ SYS_SPEEX=\"$$LIBSPEEX\" \ CC=\"$$QMAKE_CC\" CFLAGS=\"$$MACHINEFLAGS\" AR=\"$$MYAR\" \ - $(MAKE) -C $$RBBASE_DIR/tools/rbspeex librbspeex$$RBLIBPOSTFIX + $(MAKE) -C $$RBBASE_DIR/tools/rbspeex librbspeex.a libucl.commands = $$ADDENV \ BUILD_DIR=$$MYLIBBUILDDIR/ucl/ \ TARGET_DIR=$$MYLIBBUILDDIR \ CC=\"$$QMAKE_CC\" CFLAGS=\"$$MACHINEFLAGS\" AR=\"$$MYAR\" \ - $(MAKE) -C $$RBBASE_DIR/tools/ucl/src libucl$$RBLIBPOSTFIX + $(MAKE) -C $$RBBASE_DIR/tools/ucl/src libucl.a libipodpatcher.commands = $$ADDENV \ BUILD_DIR=$$MYLIBBUILDDIR/ipodpatcher/ \ TARGET_DIR=$$MYLIBBUILDDIR \ APPVERSION=\"rbutil\" \ CC=\"$$QMAKE_CC\" CFLAGS=\"$$MACHINEFLAGS\" AR=\"$$MYAR\" \ - $(MAKE) -C $$RBBASE_DIR/rbutil/ipodpatcher libipodpatcher$$RBLIBPOSTFIX + $(MAKE) -C $$RBBASE_DIR/rbutil/ipodpatcher libipodpatcher.a libsansapatcher.commands = $$ADDENV \ BUILD_DIR=$$MYLIBBUILDDIR/sansapatcher/ \ TARGET_DIR=$$MYLIBBUILDDIR \ APPVERSION=\"rbutil\" \ CC=\"$$QMAKE_CC\" CFLAGS=\"$$MACHINEFLAGS\" AR=\"$$MYAR\" \ - $(MAKE) -C $$RBBASE_DIR/rbutil/sansapatcher libsansapatcher$$RBLIBPOSTFIX + $(MAKE) -C $$RBBASE_DIR/rbutil/sansapatcher libsansapatcher.a libmkamsboot.commands = $$ADDENV \ BUILD_DIR=$$MYLIBBUILDDIR/mkamsboot/ \ TARGET_DIR=$$MYLIBBUILDDIR \ APPVERSION=\"rbutil\" \ CC=\"$$QMAKE_CC\" CFLAGS=\"$$MACHINEFLAGS\" AR=\"$$MYAR\" \ - $(MAKE) -C $$RBBASE_DIR/rbutil/mkamsboot libmkamsboot$$RBLIBPOSTFIX + $(MAKE) -C $$RBBASE_DIR/rbutil/mkamsboot libmkamsboot.a libmktccboot.commands = $$ADDENV \ BUILD_DIR=$$MYLIBBUILDDIR/mktccboot/ \ TARGET_DIR=$$MYLIBBUILDDIR \ APPVERSION=\"rbutil\" \ CC=\"$$QMAKE_CC\" CFLAGS=\"$$MACHINEFLAGS\" AR=\"$$MYAR\" \ - $(MAKE) -C $$RBBASE_DIR/rbutil/mktccboot libmktccboot$$RBLIBPOSTFIX + $(MAKE) -C $$RBBASE_DIR/rbutil/mktccboot libmktccboot.a libmkmpioboot.commands = $$ADDENV \ BUILD_DIR=$$MYLIBBUILDDIR/mkmpioboot/ \ TARGET_DIR=$$MYLIBBUILDDIR \ APPVERSION=\"rbutil\" \ CC=\"$$QMAKE_CC\" CFLAGS=\"$$MACHINEFLAGS\" AR=\"$$MYAR\" \ - $(MAKE) -C $$RBBASE_DIR/rbutil/mkmpioboot libmkmpioboot$$RBLIBPOSTFIX + $(MAKE) -C $$RBBASE_DIR/rbutil/mkmpioboot libmkmpioboot.a libchinachippatcher.commands = $$ADDENV \ BUILD_DIR=$$MYLIBBUILDDIR/chinachippatcher/ \ TARGET_DIR=$$MYLIBBUILDDIR \ APPVERSION=\"rbutil\" \ CC=\"$$QMAKE_CC\" CFLAGS=\"$$MACHINEFLAGS\" AR=\"$$MYAR\" \ - $(MAKE) -C $$RBBASE_DIR/rbutil/chinachippatcher libchinachippatcher$$RBLIBPOSTFIX + $(MAKE) -C $$RBBASE_DIR/rbutil/chinachippatcher libchinachippatcher.a libmkimxboot.commands = $$ADDENV \ BUILD_DIR=$$MYLIBBUILDDIR/mkimxboot/ \ TARGET_DIR=$$MYLIBBUILDDIR \ APPVERSION=\"rbutil\" \ CC=\"$$QMAKE_CC\" CFLAGS=\"$$MACHINEFLAGS\" AR=\"$$MYAR\" \ - $(MAKE) -C $$RBBASE_DIR/rbutil/mkimxboot libmkimxboot$$RBLIBPOSTFIX + $(MAKE) -C $$RBBASE_DIR/rbutil/mkimxboot libmkimxboot.a # Note: order is important for RBLIBS! The libs are appended to the linker # flags in this order, put libucl at the end. RBLIBS = librbspeex libipodpatcher libsansapatcher libmkamsboot libmktccboot \