1 # Copyright 2019 - Robin Krens
3 # TODO: Somehow integrate this assembly start.asm (start.o)
6 # Cross compilers links
10 MKIMG=arm-none-eabi-objcopy
13 # TODO:Cortex-m3 or Cortex-m0?
14 LDFLAGS+= -mthumb -mcpu=cortex-m3
15 ASFLAGS+= -mcpu=cortex-m3 -mthumb -g
16 CFLAGS+= -mcpu=cortex-m3 -mthumb -g -ffreestanding
23 _OBJ = ivt.o systick.o sysinfo.o term.o main.o clock.o
24 OBJ = $(patsubst %, $(ODIR)/%,$(_OBJ))
27 _DRIVERS = uart.o tm1637.o led.o
28 DRIVERS = $(patsubst %, $(DDIR)/%,$(_DRIVERS))
31 _LIBS = string.o stdio.o regfunc.o pool.o
32 LIBS = $(patsubst %, $(LDIR)/%,$(_LIBS))
34 $(DDIR)/%.o: drivers/%.c
36 $(CC) -c $< $(CFLAGS) $(INCLUDE) -o $@
40 $(CC) -c $< $(CFLAGS) -I./include -o $@
44 $(CC) -c $< $(CFLAGS) -I./include -o $@
46 # Start up machine assembly
48 $(AS) $(ASFLAGS) -o start.o start.asm
50 # Compile and link all
51 kernel: $(OBJ) $(DRIVERS) $(LIBS)
52 $(AS) $(ASFLAGS) -o start.o start.asm
53 $(LD) -nostartfiles -Map $(BIN)/$@.MAP -T link.ld -o $(BIN)/$@.ELF start.o $^ --print-memory-usage
54 @echo "Creating binary..."
56 $(MKIMG) -Obinary -R .data $(BIN)/$@.ELF $(BIN)/$@.bin
58 # Run in Qemu; note this is a patched version for stm32-f103c8
60 /usr/local/bin/qemu-system-arm -serial stdio -M stm32-f103c8 -kernel $(BIN)/kernel.bin
62 # Examine all sections
64 arm-none-eabi-objdump -D $(BIN)/kernel.ELF | less
66 # Examine just headers
68 arm-none-eabi-objdump -x $(BIN)/kernel.ELF | less
70 # Flash kernel to board
72 stm32flash -w $(BIN)/kernel.bin -v /dev/ttyUSB0
77 rm -rf $(ODIR)/* start.o $(BIN)/kernel.*
79 # Altijd handig deze template
81 # $(CC) -c $(CFLAGS) $< -o $@
82 # $(CC) -MM $(CFLAGS) $< > $*.d
85 # $(CC) -c $(CFLAGS) $< -o $@