Browse Source

rv32: add ROM compilation from source to the Makefile structure

Now when some ROMs are compiled from source, we better actually
compile them...
H. Peter Anvin 1 year ago
parent
commit
3d346603f8
2 changed files with 24 additions and 12 deletions
  1. 24 7
      rv32/Makefile
  2. 0 5
      rv32/roms/abc80/asmsrc/Makefile

+ 24 - 7
rv32/Makefile

@@ -1,6 +1,7 @@
 MAKEFLAGS += -R -r
 
-SUBDIRS  := include test roms fatfs/source zlib
+ASMDIRS  := roms/abc80/asmsrc
+SUBDIRS  := include test roms fatfs/source zlib $(ROMDIRS)
 
 CROSS	  = ../tools/gnu/bin/riscv32-unknown-elf-
 CC	  = $(CROSS)gcc
@@ -40,8 +41,7 @@ gensrcs =
 
 all: sram.bin dram.bin dram.hex checksum.h
 
-LIBS    = max80.a fatfs.a zlib.a
-
+LIBS    = max80.a roms.a fatfs.a zlib.a
 
 ROMS     = $(shell find roms -name '*.rom' -print)
 ROMOBJ   = $(ROMS:.rom=.o)
@@ -57,12 +57,18 @@ LIBOBJ   = debug.o ioregsa.o irqasm.o irqtable.o spurious_irq.o \
 	   abcmem.o abcio.o abcdisk.o abcrtc.o abcpun80.o \
 	   memset.o memcpy.o \
 	   runtest.o start_test.o \
-	   $(COMMONOBJ) $(ROMOBJ)
+	   $(COMMONOBJ)
 
 max80.a: $(LIBOBJ)
 	rm -f $@
 	$(AR) cq $@ $(LIBOBJ)
 
+ROMDEPS = roms
+
+roms.a: $(ROMDEPS)
+	rm -f $@
+	$(AR) cq $@ $(ROMOBJ)
+
 FATFS_C = $(wildcard fatfs/source/*.c)
 FATFS_O = $(FATFS_C:.c=.o)
 fatfs.a: $(FATFS_O)
@@ -141,20 +147,30 @@ ioregsa.S: ioregs.h ioregsa.pl | $(genhdrs)
 	$(PERL) ioregsa.pl $< $@
 
 .PHONY: roms
-roms: $(ROMOBJ) roms.h
+roms: asmsrc
+	$(MAKE) _roms
+
+.PHONY: _roms
+_roms: $(ROMOBJ)
 
 roms/%.o: roms/%.rom rom.S
 	$(CC) $(SFLAGS) $(SFLAGS_$(F<)) \
 		-DNAME=rom_$$(echo '$*' | sed -r -e 's/[^A-Za-z0-9]+/_/g') \
 		-DFILE='"$<"' -c -o $@ rom.S
 
-roms.h: $(ROMS)
+.PHONY: asmsrc
+asmsrc:
+	for d in $(ASMDIRS); do $(MAKE) -C $$d; done
+
+roms.h: roms
 	( for r in $(ROMS); do \
 		cn=$$(echo "$$r" | sed -r -e 's/^roms/rom_/' -e 's/\.rom$$//' \
 			-e 's/[^A-Za-z0-9]+/_/g') ; \
 		stat -c "extern const char $$cn[%s];" "$$r"; \
 	  done ) > $@
 
+abcmem.o: roms.h
+
 %.ild: %.ld | $(genhdrs)
 	$(CC) $(CFLAGS) $(CFLAGS_$<) $(gendeps) \
 		-x assembler-with-cpp \
@@ -168,13 +184,14 @@ irqtable.h: ../iodevs.conf ../tools/iodevs.pl
 	$(PERL) ../tools/iodevs.pl irqh $< $@
 
 clean:
-	for d in . $(SUBDIRS); do \
+	for d in . $(shell find $(SUBDIRS) -type d); do \
 		rm -f $$d/*.a $$d/*.o $$d/*.i $$d/*.s $$d/*.elf $$d/*.bin \
 		$$d/.*.d $$d/*.ild $$d/*.map; \
 	done
 	rm -f $(genhdrs) $(gensrcs) $(ROMOBJ)
 
 spotless: clean
+	for d in $(ASMDIRS); do $(MAKE) -C $$d $@; done
 	rm -f *.mem *.hex *.mif checksum.h
 
 -include $(patsubst %,%/.*.d,. $(SUBDIRS))

+ 0 - 5
rv32/roms/abc80/asmsrc/Makefile

@@ -55,11 +55,6 @@ $(O)/%.s: %.asm $(HDRS)
 	mkdir -p $(@D) && cp -f $< $@
 
 clean:
-	for d in . $(AUXRAM); do \
-		rm -f $$d/*.err $$d/*.lis $$d/*.map $$d/*.sym $$d/*.def \
-			$$d/*.obj $$d/*.o $$d/*.reloc $$d/*.bin $$d/*.lst \
-			$$d/*.s $$d/*.elf ; \
-	done
 
 spotless: clean
 	$(MAKE) O=* spotless_O