X-Git-Url: https://robinkrens.nl/gitweb/?a=blobdiff_plain;f=Makefile;h=949e28733c7ffff460e766d5449e81aa01fec813;hb=3c683b21e9a0e75935e081a0e07553e620a73cfe;hp=dbcbc85358215bab8e497cc6eecfeee808a8cbd1;hpb=2ad654f037bae2ec8f0223179c4b96c23308c34d;p=cortex-from-scratch diff --git a/Makefile b/Makefile index dbcbc85..949e287 100644 --- a/Makefile +++ b/Makefile @@ -1,36 +1,88 @@ +# Copyright 2019 - Robin Krens +# +# TODO: Somehow integrate this assembly start.asm (start.o) +# + +# Cross compilers links CC=arm-none-eabi-gcc LD=arm-none-eabi-ld -AR=$(TOOLROOT)/arm-none-eabi-ar AS=arm-none-eabi-as MKIMG=arm-none-eabi-objcopy +# Compiler flags LDFLAGS+= -mthumb -mcpu=cortex-m3 -CFLAGS+= -mcpu=cortex-m3 -mthumb -g +ASFLAGS+= -mcpu=cortex-m3 -mthumb -g +CFLAGS+= -mcpu=cortex-m3 -mthumb -g -ffreestanding + +# Include directory +INCLUDE+= -Iinclude + +BIN = bin + +ODIR = obj +_OBJ = ivt.o systick.o sysinfo.o term.o main.o clock.o rtc.o +OBJ = $(patsubst %, $(ODIR)/%,$(_OBJ)) + +DDIR = obj/drivers +_DRIVERS = uart.o tm1637.o led.o tsensor.o at24c.o +DRIVERS = $(patsubst %, $(DDIR)/%,$(_DRIVERS)) + +LDIR = obj/lib +_LIBS = string.o stdio.o regfunc.o pool.o tinyprintf.o +LIBS = $(patsubst %, $(LDIR)/%,$(_LIBS)) +$(DDIR)/%.o: drivers/%.c + @mkdir -p $(@D) + $(CC) -c $< $(CFLAGS) $(INCLUDE) -o $@ + +$(ODIR)/%.o: %.c + @mkdir -p $(@D) + $(CC) -c $< $(CFLAGS) -I./include -o $@ + +$(LDIR)/%.o: lib/%.c + @mkdir -p $(@D) + $(CC) -c $< $(CFLAGS) -I./include -o $@ + +# Start up machine assembly as: - $(AS) $(CFLAGS) -o start.o start.asm + $(AS) $(ASFLAGS) -o start.o start.asm -all: - $(AS) $(CFLAGS) -o start.o start.asm - $(CC) $(CFLAGS) -c -I./include -ffreestanding -o main.o main.c - $(CC) $(CFLAGS) -c -I./include -ffreestanding -o uart.o uart.c - $(CC) $(CFLAGS) -c -I./include -ffreestanding -o ivt.o ivt.c - $(CC) $(CFLAGS) -c -I./include -ffreestanding -o systick.o systick.c - $(LD) -nostartfiles -T link.ld -o start.out start.o main.o uart.o ivt.o systick.o - $(MKIMG) -Obinary -R .data start.out kernel.bin +# Compile and link all +kernel: $(OBJ) $(DRIVERS) $(LIBS) + $(AS) $(ASFLAGS) -o start.o start.asm + $(LD) -nostartfiles -Map $(BIN)/$@.MAP -T link.ld -o $(BIN)/$@.ELF start.o $^ --print-memory-usage + @echo "Creating binary..." + @mkdir -p $(BIN) + $(MKIMG) -Obinary -R .data $(BIN)/$@.ELF $(BIN)/$@.bin +# Run in Qemu; note this is a patched version for stm32-f103c8 run: - /usr/local/bin/qemu-system-arm -serial stdio -M stm32-f103c8 -kernel kernel.bin + /usr/local/bin/qemu-system-arm -serial stdio -M stm32-f103c8 -kernel $(BIN)/kernel.bin + +# Examine all sections +examine-all: + arm-none-eabi-objdump -D $(BIN)/kernel.ELF | less + +# Examine just headers +examine-header: + arm-none-eabi-objdump -x $(BIN)/kernel.ELF | less + +# Flash kernel to board +flash: + stm32flash -w $(BIN)/kernel.bin -v /dev/ttyUSB0 -examine: - arm-none-eabi-objdump -S start.out +.PHONY: clean -%.o: %.c - $(CC) -c $(CFLAGS) $< -o $@ - $(CC) -MM $(CFLAGS) $< > $*.d +clean: + rm -rf $(ODIR)/* start.o $(BIN)/kernel.* -%.o: %.s - $(CC) -c $(CFLAGS) $< -o $@ +# Altijd handig deze template +#%.o: %.c +# $(CC) -c $(CFLAGS) $< -o $@ +# $(CC) -MM $(CFLAGS) $< > $*.d +# +#%.o: %.s +# $(CC) -c $(CFLAGS) $< -o $@