1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Dominik Riebeling 2012-01-05 22:26:08 +00:00
parent 1ef25cd7e0
commit c6dcec4e0d
2 changed files with 17 additions and 35 deletions

View file

@ -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

View file

@ -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 \