From 678090a2e7e694fa72fb9a4d4c7532e2699e2880 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 6 Sep 2004 07:05:12 +0000 Subject: [PATCH] rombox support: building and zip general makefile: less output git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5043 a1c6a512-1295-4272-9138-f99709370657 --- apps/Makefile | 86 +++++++++++++++++++++++++++++++-------- apps/plugins/Makefile | 22 ++++++---- apps/plugins/lib/Makefile | 15 ++++--- firmware/Makefile | 26 +++++++----- firmware/rom.lds | 17 +++----- tools/Makefile | 1 + tools/buildzip.pl | 7 +++- tools/romsizetest.pl | 22 ++++++++++ 8 files changed, 142 insertions(+), 54 deletions(-) create mode 100755 tools/romsizetest.pl diff --git a/apps/Makefile b/apps/Makefile index 77df0e7db8..478045f047 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -44,6 +44,7 @@ ifdef ARCHOS_ROM endif LDS := $(FIRMWARE)/app.lds +ROMLDS := $(FIRMWARE)/rom.lds ifdef DEBUG DEFINES := -DDEBUG @@ -54,15 +55,23 @@ SRC := $(wildcard *.c) ifeq ($(TARGET), -DARCHOS_FMRECORDER) TOOL_OPT = -fm + MAXROMSIZE = 180208 # 176KB -16 endif ifeq ($(TARGET), -DARCHOS_RECORDERV2) TOOL_OPT = -v2 + MAXROMSIZE = 188400 # 184KB - 16 endif +ifeq ($(TARGET), -DARCHOS_RECORDER) + MAXROMSIZE = 192496 # 188KB - 16 +endif + ifeq ($(ANYREC), RECORDER) SRC += $(wildcard recorder/*.c) CFLAGS += -Irecorder OUTNAME = ajbrec.ajz + # set the ROMTARGET here to make this get built only on recorders + ROMTARGET := $(OBJDIR)/rombox.ucl else ifeq ($(TARGET), -DARCHOS_PLAYER) SRC += $(wildcard player/*.c) @@ -80,6 +89,7 @@ endif OBJS := $(OBJDIR)/lang.o $(SRC:%.c=$(OBJDIR)/%.o) LINKFILE = $(OBJDIR)/linkage.lds +LINKROM = $(OBJDIR)/linkrom.lds ifndef OBJDIR no_configure: @@ -97,7 +107,7 @@ endif ifdef DEBUG all : $(OBJDIR)/rockbox.elf rocks else -all : $(OBJDIR)/$(OUTNAME) $(OBJDIR)/rockbox.ucl rocks +all : $(OBJDIR)/$(OUTNAME) $(OBJDIR)/rockbox.ucl rocks $(ROMTARGET) endif rocks: @@ -112,11 +122,24 @@ $(OBJDIR)/librockbox.a: $(LINKFILE): $(LDS) cat $< | $(CC) -DMEMORYSIZE=$(MEM) $(INCLUDES) $(TARGET) $(DEFINES) -E -P $(ROMBUILD) - >$@ +$(LINKROM): $(ROMLDS) + cat $< | $(CC) -DMEMORYSIZE=$(MEM) $(INCLUDES) $(TARGET) $(DEFINES) -E -P $(ROMBUILD) - >$@ + +$(OBJDIR)/rombox.elf : $(OBJS) $(LINKROM) $(OBJDIR)/librockbox.a + @echo "LD rombox.elf" + @$(CC) -Os -nostdlib -o $@ $(OBJS) -L$(OBJDIR) -lrockbox -lgcc -L$(FIRMWARE) -T$(LINKROM) -Wl,-Map,$(OBJDIR)/rombox.map + $(OBJDIR)/rockbox.elf : $(OBJS) $(LINKFILE) $(OBJDIR)/librockbox.a - $(CC) -Os -nostdlib -o $@ $(OBJS) -L$(OBJDIR) -lrockbox -lgcc -L$(FIRMWARE) -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/rockbox.map + @echo "LD rockbox.elf" + @$(CC) -Os -nostdlib -o $@ $(OBJS) -L$(OBJDIR) -lrockbox -lgcc -L$(FIRMWARE) -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/rockbox.map $(OBJDIR)/rockbox.bin : $(OBJDIR)/rockbox.elf - $(OC) -O binary $< $@ + @echo "OBJCOPY $<" + @$(OC) -O binary $< $@ + +$(OBJDIR)/rombox.bin : $(OBJDIR)/rombox.elf + @echo "OBJCOPY $<" + @$(OC) -O binary $< $@ $(OBJDIR)/rockbox.asm: $(OBJDIR)/rockbox.bin $(TOOLSDIR)/sh2d -sh1 $< > $@ @@ -127,10 +150,30 @@ $(OBJDIR)/$(OUTNAME) : $(OBJDIR)/rockbox.bin $(OBJDIR)/rockbox.ucl: $(OBJDIR)/rockbox.bin @a=`uclpack -h 2>/dev/null`; \ if test -n "$$a"; then \ - echo uclpack --best --2e $< $@ ; \ + echo "UCLPACK rockbox" ; \ uclpack --best --2e $< $@ >/dev/null 2>&1; \ else \ - echo "no uclpack command found, makes a fake UCL file"; \ + echo "no uclpack command found, makes a fake rockbox.ucl"; \ + echo "fake" > $@; \ + fi + +$(OBJDIR)/rombox.ucl: $(OBJDIR)/rombox.bin + @a=`uclpack -h 2>/dev/null`; \ + if test -n "$$a"; then \ + echo "UCLPACK rombox" ; \ + uclpack --none $< $@ >/dev/null 2>&1; \ + if test -s $@; then \ + perl $(TOOLSDIR)/romsizetest.pl $(MAXROMSIZE) $@; \ + if test $$? -ne 0; then \ + echo "removing UCL file again, making it a fake one"; \ + echo "fake" > $@; \ + fi \ + else \ + echo "Your uclpack seems to not support --none, making a fake ucl"; \ + echo "fake" > $@; \ + fi \ + else \ + echo "no uclpack command found, makes a fake rombox.ucl"; \ echo "fake" > $@; \ fi @@ -139,26 +182,34 @@ $(OBJDIR)/credits.raw: $(DOCSDIR)/CREDITS $(OBJDIR)/credits.o: credits.c credits.h $(OBJDIR)/credits.raw @mkdir -p `dirname $@` - $(CC) $(CFLAGS) -c $< -o $@ + @echo "CC $<" + @$(CC) $(CFLAGS) -c $< -o $@ $(OBJDIR)/%.o: %.c @mkdir -p `dirname $@` - $(CC) $(CFLAGS) -c $< -o $@ + @echo "CC $<" + @$(CC) $(CFLAGS) -c $< -o $@ $(OBJDIR)/build.lang: lang/$(LANGUAGE).lang $(TOOLSDIR)/uplang - perl $(TOOLSDIR)/uplang lang/english.lang $< > $@ + @echo "UPLANG" + @perl $(TOOLSDIR)/uplang lang/english.lang $< > $@ $(OBJDIR)/lang.o: $(OBJDIR)/build.lang $(TOOLSDIR)/genlang - perl -s $(TOOLSDIR)/genlang -p=$(OBJDIR)/lang $< - $(CC) $(CFLAGS) -c $(OBJDIR)/lang.c -o $@ + @echo "GENLANG" + @perl -s $(TOOLSDIR)/genlang -p=$(OBJDIR)/lang $< + @echo "CC lang.c" + @$(CC) $(CFLAGS) -c $(OBJDIR)/lang.c -o $@ clean: - -rm -f $(OBJS) $(OBJDIR)/$(OUTNAME) $(OBJDIR)/rockbox.asm \ - $(OBJDIR)/rockbox.bin $(OBJDIR)/rockbox.elf $(OBJDIR)/*.map \ - $(OBJDIR)/lang.o $(OBJDIR)/build.lang $(OBJDIR)/lang.[ch] \ - $(OBJDIR)/credits.raw $(LINKFILE) $(OBJDIR)/rockbox.ucl - -$(RM) -r $(OBJDIR)/$(DEPS) - $(MAKE) -C plugins clean + @echo "cleaning apps" + @-rm -f $(OBJS) $(OBJDIR)/$(OUTNAME) $(OBJDIR)/rockbox.asm \ + $(OBJDIR)/rockbox.bin $(OBJDIR)/rockbox.elf $(OBJDIR)/*.map \ + $(OBJDIR)/lang.o $(OBJDIR)/build.lang $(OBJDIR)/lang.[ch] \ + $(OBJDIR)/credits.raw $(LINKFILE) $(OBJDIR)/rockbox.ucl \ + $(LINKROM) $(OBJDIR)/rombox.ucl $(OBJDIR)/rombox.bin \ + $(OBJDIR)/rombox.elf + @-$(RM) -r $(OBJDIR)/$(DEPS) + @$(MAKE) -C plugins clean DEPS:=.deps DEPDIRS:=$(DEPS) @@ -180,8 +231,7 @@ tags: $(OBJDIR)/$(DEPS)/%.d: %.c @$(SHELL) -c 'for d in $(DEPDIRS); do { if [ ! -d $(OBJDIR)/$$d ]; then mkdir $(OBJDIR)/$$d; fi; }; done' - @echo "Updating dependencies for $(OBJDIR)/$<" - @$(SHELL) -ec '$(CC) -MM $(CFLAGS) $< \ + @$(SHELL) -ec '$(CC) -MM $(CFLAGS) $< 2>/dev/null \ |sed '\''s|\($*\)\.o[ :]*|$(OBJDIR)/\1.o $(<:%.c=%.d) : |g'\'' > $@; \ [ -s $@ ] || rm -f $@' diff --git a/apps/plugins/Makefile b/apps/plugins/Makefile index d86cbf5263..4790d1e1e5 100644 --- a/apps/plugins/Makefile +++ b/apps/plugins/Makefile @@ -40,25 +40,31 @@ no_configure: endif $(OBJDIR)/%.elf: $(OBJDIR)/%.o $(LINKFILE) $(OBJDIR)/libplugin.a - $(CC) -O -nostdlib -o $@ $< -L$(OBJDIR) -lplugin -lgcc -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/$*.map + @echo "LD $@" + @$(CC) -O -nostdlib -o $@ $< -L$(OBJDIR) -lplugin -lgcc -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/$*.map $(OBJDIR)/%.rock : $(OBJDIR)/%.elf - $(OC) -O binary $< $@ + @echo "OBJCOPY $<" + @$(OC) -O binary $< $@ $(OBJDIR)/%.o: %.c ../plugin.h Makefile - $(CC) $(CFLAGS) -c $< -o $@ + @echo "CC $<" + @$(CC) $(CFLAGS) -c $< -o $@ all: $(OBJDIR)/libplugin.a $(ROCKS) - echo "done" + @echo "plugins done" $(OBJDIR)/libplugin.a: - $(MAKE) -C lib TARGET=$(TARGET) DEBUG=$(DEBUG) OBJDIR=$(OBJDIR) VERSION=$(VERSION) EXTRA_DEFINES="$(EXTRA_DEFINES)" MEM=${MEM} + @echo "MAKE in lib" + @$(MAKE) -C lib TARGET=$(TARGET) DEBUG=$(DEBUG) OBJDIR=$(OBJDIR) VERSION=$(VERSION) EXTRA_DEFINES="$(EXTRA_DEFINES)" MEM=${MEM} # MEM should be passed on to this makefile with the chosen memory size given # in number of MB $(LINKFILE): $(LDS) - $(CC) -DMEMORYSIZE=$(MEM) $(DEFINES) -x c -E -P $< >$@ + @echo "build $@" + @$(CC) -DMEMORYSIZE=$(MEM) $(DEFINES) -x c -E -P $< >$@ clean: - -rm -f $(ROCKS) $(LINKFILE) $(OBJDIR)/*.rock - $(MAKE) -C lib clean + @echo "cleaning plugins" + @-rm -f $(ROCKS) $(LINKFILE) $(OBJDIR)/*.rock + @$(MAKE) -C lib clean diff --git a/apps/plugins/lib/Makefile b/apps/plugins/lib/Makefile index 929ee98763..7ff79b5342 100644 --- a/apps/plugins/lib/Makefile +++ b/apps/plugins/lib/Makefile @@ -62,25 +62,28 @@ no_configure: endif all: $(OUTPUT) + @echo "lib done" $(OUTPUT): $(OBJS) - $(AR) ruv $@ $+ + @echo "AR $@" + @$(AR) ruv $@ $+ >/dev/null $(OBJDIR)/%.o: %.c @mkdir -p `dirname $@` - $(CC) $(CFLAGS) -c $< -o $@ + @echo "CC $<" + @$(CC) $(CFLAGS) -c $< -o $@ tags: @$(SHELL) -c 'for d in $(DIRS); do { etags -o $(OBJDIR)/TAGS -a $$d/*.[ch]; }; done' clean: - rm -f $(OBJS) $(OUTPUT) - rm -rf $(OBJDIR)/$(DEPS) + @echo "cleaning lib" + @rm -f $(OBJS) $(OUTPUT) + @rm -rf $(OBJDIR)/$(DEPS) $(OBJDIR)/$(DEPS)/%.d: %.c @$(SHELL) -c 'for d in $(DEPDIRS); do { if [ ! -d $(OBJDIR)/$$d ]; then mkdir $(OBJDIR)/$$d; fi; }; done' - @echo "Updating dependencies for $<" - @$(SHELL) -ec '$(CC) -MM $(CFLAGS) $< \ + @$(SHELL) -ec '$(CC) -MM $(CFLAGS) $< 2>/dev/null \ |sed '\''s|\($*\)\.o[ :]*|$(OBJDIR)/\1.o $(<:%.c=%.d) : |g'\'' > $@; \ [ -s $@ ] || rm -f $@' diff --git a/firmware/Makefile b/firmware/Makefile index 38bcd4cc86..afcdb191d5 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -62,35 +62,41 @@ $(TOOLSDIR)/convbdf: $(MAKE) -C $(TOOLSDIR) $(OUTPUT): $(OBJS) - $(AR) ruv $@ $+ + @echo "AR $@" + @$(AR) ruv $@ $+ >/dev/null $(OBJDIR)/%.o: %.c @mkdir -p `dirname $@` - $(CC) $(CFLAGS) -c $< -o $@ + @echo "CC $<" + @$(CC) $(CFLAGS) -c $< -o $@ $(OBJDIR)/%.o: %.S @mkdir -p `dirname $@` - $(CC) $(CFLAGS) -c $< -o $@ + @echo "CC $<" + @$(CC) $(CFLAGS) -c $< -o $@ tags: @$(SHELL) -c 'for d in $(DIRS); do { etags -o $(OBJDIR)/TAGS -a $$d/*.[ch]; }; done' clean: - rm -f $(OBJS) $(OUTPUT) $(OBJDIR)/sysfont.c - rm -rf $(OBJDIR)/$(DEPS) + @echo "cleaning firmware" + @rm -f $(OBJS) $(OUTPUT) $(OBJDIR)/sysfont.c + @rm -rf $(OBJDIR)/$(DEPS) # Special targets $(OBJDIR)/thread.o: thread.c export/thread.h - $(CC) -c -O -fomit-frame-pointer $(CFLAGS) $< -o $@ + @echo "CC thread.c" + @$(CC) -c -O -fomit-frame-pointer $(CFLAGS) $< -o $@ $(OBJDIR)/sysfont.o: fonts/clR6x8.bdf - $(TOOLSDIR)/convbdf -c -o $(OBJDIR)/sysfont.c $< - $(CC) $(CFLAGS) -c $(OBJDIR)/sysfont.c -o $@ + @echo "CONVBDF" + @$(TOOLSDIR)/convbdf -c -o $(OBJDIR)/sysfont.c $< + @echo "CC sysfont.c" + @$(CC) $(CFLAGS) -c $(OBJDIR)/sysfont.c -o $@ $(OBJDIR)/$(DEPS)/%.d: %.c @$(SHELL) -c 'for d in $(DEPDIRS); do { if [ ! -d $(OBJDIR)/$$d ]; then mkdir $(OBJDIR)/$$d; fi; }; done' - @echo "Updating dependencies for $<" - @$(SHELL) -ec '$(CC) -MM $(CFLAGS) $< \ + @$(SHELL) -ec '$(CC) -MM $(CFLAGS) $< 2>/dev/null \ |sed '\''s|\($*\)\.o[ :]*|$(OBJDIR)/\1.o $(<:%.c=%.d) : |g'\'' > $@; \ [ -s $@ ] || rm -f $@' diff --git a/firmware/rom.lds b/firmware/rom.lds index c5492431b2..a759ed2f9f 100644 --- a/firmware/rom.lds +++ b/firmware/rom.lds @@ -24,15 +24,14 @@ SECTIONS . = _datastart + 0x200; *(.data) . = ALIGN(0x4); - _dataend = .; + _dataend = .; + . = ALIGN(0x10); /* Maintain proper alignment for .text section */ } > DRAM - .datacopy : - { - . += SIZEOF(.data); - } > FLASH - - .text : + /* TRICK ALERT! Newer versions of the linker don't allow output sections + to overlap even if one of them is empty, so advance the location pointer + "by hand" */ + .text LOADADDR(.data) + SIZEOF(.data) : { *(.init.text) *(.text) @@ -44,10 +43,6 @@ SECTIONS *(.rodata) *(.rodata.str1.4) . = ALIGN(0x4); - } > FLASH - - .iramcopy : - { _iramcopy = .; } > FLASH diff --git a/tools/Makefile b/tools/Makefile index 5fec4b1dbe..43218d99f6 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -11,6 +11,7 @@ CFLAGS := -O -ansi TARGETS := scramble descramble sh2d bmp2rb convbdf generate_rocklatin all: $(TARGETS) + @echo "tools done" scramble: scramble.c diff --git a/tools/buildzip.pl b/tools/buildzip.pl index 4db1f5e4bb..94e6f21a81 100755 --- a/tools/buildzip.pl +++ b/tools/buildzip.pl @@ -106,7 +106,12 @@ sub buildzip { if($image) { # image is blank when this is a simulator - `cp rockbox.ucl .rockbox/`; # UCL for flashing + if( filesize("rockbox.ucl") > 1000 ) { + `cp rockbox.ucl .rockbox/`; # UCL for flashing + } + if( filesize("rombox.ucl") > 1000) { + `cp rombox.ucl .rockbox/`; # UCL for flashing + } } } diff --git a/tools/romsizetest.pl b/tools/romsizetest.pl new file mode 100755 index 0000000000..2b96c3cdaf --- /dev/null +++ b/tools/romsizetest.pl @@ -0,0 +1,22 @@ +#!/usr/bin/perl + +# +# Check that the given file is smaller than the given size and if not, return +# an error code. Used to verify that the rombox.ucl file fits on the particular +# model you build for. + +sub filesize { + my ($filename)=@_; + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, + $atime,$mtime,$ctime,$blksize,$blocks) + = stat($filename); + return $size; +} + +my $max = $ARGV[0]; +my $file = filesize($ARGV[1]); + +if($file > $max ) { + print "Output is larger than max ($max)\n"; + exit 1; +}