FS#10253 : mkamsboot v1.0

- Bump version to 1.0
- Add Clipv2 target
- Make mkamsboot work as a library (work by domonoky : FS#10185, with a few modifications by me)
  . Use a macro with variadic arguments for error cases in functions which might error.
  . Add detailed descriptions to functions exported by the library (in the header file)
- modify bin2c.c to produce only one pair of .c/.h files with several files embedded in it
- move files needing to be built by an ARM cross compiler into dualboot/
- commit produced .c/.h files (containing nrv2e_d8.S and dualboot.S built for Clip, Fuze, e200v2, c200v2, m200v4, Clipv2)
- Write a real README file
- cosmetics: indent dualboot.S properly, remove trailing spaces, limit lines to 80 characters
- comments: add/correct comments in dualboot.S and mkamsboot.c
- move back extract_fw.c to utils/AMS/hacking

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21118 a1c6a512-1295-4272-9138-f99709370657
diff --git a/rbutil/mkamsboot/Makefile b/rbutil/mkamsboot/Makefile
index 5a62650..1a5ffd0 100644
--- a/rbutil/mkamsboot/Makefile
+++ b/rbutil/mkamsboot/Makefile
@@ -1,90 +1,48 @@
-CC=gcc
-
 # We use the UCL code available in the Rockbox tools/ directory
-CFLAGS=-I../../tools/ucl/include
+CFLAGS=-I../../tools/ucl/include -Wall
 LIBUCL=../../tools/ucl/src/libucl.a
 
-# Edit the following variables (plus copy/paste another set of rules) when
-# adding a new target.  mkamsboot.c also needs to be edited to refer to these
-# new images.
+ifeq ($(findstring CYGWIN,$(shell uname)),CYGWIN)
+OUTPUT=mkamsboot.exe
+CFLAGS+=-mno-cygwin
+else
+ifeq ($(findstring MINGW,$(shell uname)),MINGW)
+OUTPUT=mkamsboot.exe
+else
+ifeq ($(findstring mingw,$(CC)),mingw)
+OUTPUT=mkamsboot.exe
+else
+OUTPUT=mkamsboot
+endif
+endif
+endif
 
-BOOTIMAGES = dualboot_clip.o dualboot_e200v2.o dualboot_c200v2.o dualboot_m200v4.o dualboot_fuze.o
-BOOTHEADERS = dualboot_clip.h dualboot_e200v2.h dualboot_c200v2.h dualboot_m200v4.h dualboot_fuze.h
+CC?= gcc
 
-CLIPFILES = dualboot_clip.arm-o dualboot_clip.o dualboot_clip.c dualboot_clip.h
-
-E200V2FILES = dualboot_e200v2.arm-o dualboot_e200v2.o dualboot_e200v2.c \
-              dualboot_e200v2.h
-
-M200V4FILES = dualboot_m200v4.arm-o dualboot_m200v4.o dualboot_m200v4.arm-bin \
-              dualboot_m200v4.c dualboot_m200v4.h
-
-C200V2FILES = dualboot_c200v2.arm-o dualboot_c200v2.o dualboot_c200v2.c \
-              dualboot_c200v2.h
-
-FUZEFILES = dualboot_fuze.arm-o dualboot_fuze.o dualboot_fuze.c dualboot_fuze.h
-
-all: mkamsboot
-
-# Dualboot bootloaders
-
-dualboot_clip.arm-o: dualboot.S
-	arm-elf-gcc -DSANSA_CLIP -c -o dualboot_clip.arm-o dualboot.S
-
-dualboot_fuze.arm-o: dualboot.S
-	arm-elf-gcc -DSANSA_FUZE -c -o dualboot_fuze.arm-o dualboot.S
-
-dualboot_e200v2.arm-o: dualboot.S
-	arm-elf-gcc -DSANSA_E200V2 -c -o dualboot_e200v2.arm-o dualboot.S
-
-dualboot_m200v4.arm-o: dualboot.S
-	arm-elf-gcc -DSANSA_M200V4 -c -o dualboot_m200v4.arm-o dualboot.S
-
-dualboot_c200v2.arm-o: dualboot.S
-	arm-elf-gcc -DSANSA_C200V2 -c -o dualboot_c200v2.arm-o dualboot.S
-
-# Rules for the ucl unpack function
-nrv2e_d8.arm-o: nrv2e_d8.S
-	arm-elf-gcc -DPURE_THUMB -c -o nrv2e_d8.arm-o nrv2e_d8.S
-
-
+all: $(OUTPUT)
 
 $(LIBUCL):
 	make -C ../../tools/ucl/src libucl.a
 
+# This file can be generated in the dualboot/ directory
+dualboot.o: dualboot.c
+	$(CC) $(CFLAGS) -c -o dualboot.o dualboot.c
+
 md5.o: md5.c md5.h
 	$(CC) $(CFLAGS) -c -o md5.o -W -Wall md5.c
 
-mkamsboot.o: mkamsboot.c $(BOOTHEADERS) nrv2e_d8.h md5.h
+mkamsboot.o: mkamsboot.c dualboot.h md5.h
 	$(CC) $(CFLAGS) -c -o mkamsboot.o -W -Wall mkamsboot.c
 
-mkamsboot: mkamsboot.o $(BOOTIMAGES) nrv2e_d8.o md5.o $(LIBUCL)
-	$(CC) -o mkamsboot mkamsboot.o $(BOOTIMAGES) nrv2e_d8.o md5.o $(LIBUCL)
+$(OUTPUT): mkamsboot.o md5.o dualboot.o $(LIBUCL)
+	$(CC) $(CFLAGS) -o $(OUTPUT) mkamsboot.o md5.o dualboot.o $(LIBUCL)
 
-# Rules for the ARM code embedded in mkamsboot - assemble, link, then extract
-# the binary code and finally convert to .c/.h for linking with mkamsboot
+libmkamsboot.o: mkamsboot.c dualboot.h md5.h
+	$(CC) $(CFLAGS) -DLIB -c -o libmkamsboot.o -W -Wall mkamsboot.c
 
-%.arm-elf: %.arm-o
-	arm-elf-ld -e 0 -Ttext=0 -o $@ $<
-
-%.arm-bin: %.arm-elf
-	arm-elf-objcopy -O binary $< $@
-
-%.c %.h: %.arm-bin bin2c
-	./bin2c $< $*
-
-# Generic host rule.
-%.o: %.c
-	$(CC) $(CFLAGS) -c -o $@ $<
-
-# Cancel the implicit .S -> .o rule
-%.o: %.S
-
-bin2c: bin2c.c
-	$(CC) -o bin2c bin2c.c
+libmkamsboot.a: libmkamsboot.o md5.o dualboot.o
+	$(AR) ruv libmkamsboot.a libmkamsboot.o md5.o dualboot.o
 
 clean:
-	rm -f mkamsboot mkamsboot.o nrv2e_d8.arm-o nrv2e_d8.arm-elf \
-	nrv2e_d8.arm-bin *~ bin2c nrv2e_d8.c nrv2e_d8.h nrv2e_d8.o md5.o \
-	$(BOOTIMAGES) $(CLIPFILES) $(E200V2FILES) $(M200V4FILES) $(FUZEFILES) \
-	$(C200V2FILES)
+	rm -f $(OUTPUT) mkamsboot.o *~ md5.o dualboot.o \
+	libmkamsboot.o libmkamsboot.a