Makefile 982 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. MAKEFLAGS += -R -r
  2. CROSS = riscv32-unknown-elf-
  3. CC = $(CROSS)gcc
  4. LD = $(CROSS)ld
  5. OBJCOPY = $(CROSS)objcopy
  6. PERL = perl
  7. CFLAGS = -march=rv32imc -O2 -ggdb3 -mabi=ilp32 \
  8. -mshorten-memrefs -mno-strict-align
  9. LDFLAGS = --section-start=.init=0 -z common-page-size=16 -z max-page-size=16
  10. # Delete output files on error
  11. .DELETE_ON_ERROR:
  12. # Don't delete intermediate files
  13. .SECONDARY:
  14. all: boot.mif
  15. boot.elf: head.o hello.o
  16. boot_depth := 2048
  17. boot_width := 32
  18. %.mif: %.bin bin2mif.pl
  19. $(PERL) bin2mif.pl $< $@ $($*_depth) $($*_width)
  20. %.hex: %.elf
  21. $(OBJCOPY) -O ihex $< $@
  22. %.mem: %.bin
  23. $(BIN2MEM) $< > $@
  24. %.bin: %.elf
  25. $(OBJCOPY) -O binary $< $@
  26. %.elf:
  27. $(LD) $(LDFLAGS) -o $@ $^
  28. %.o: %.c
  29. $(CC) $(CFLAGS) -c -o $@ $<
  30. %.s: %.c
  31. $(CC) $(CFLAGS) -S -o $@ $<
  32. %.i: %.c
  33. $(CC) $(CFLAGS) -E -o $@ $<
  34. %.o: %.S
  35. $(CC) $(CFLAGS) -c -o $@ $<
  36. %.s: %.S
  37. $(CC) $(CFLAGS) -E -o $@ $<
  38. clean:
  39. rm -f *.o *.i *.s *.elf *.bin
  40. spotless: clean
  41. rm -f *.mem *.hex *.mif