# GNU 'make' # # 10.2 Catalogue of Built-In Rules # ================================ # # Compiling C programs # 'N.o' is made automatically from 'N.c' with a recipe of the form # '$(CC) $(CPPFLAGS) $(CFLAGS) -c'. # # Assembling and preprocessing assembler programs # 'N.o' is made automatically from 'N.s' by running the assembler, # 'as'. The precise recipe is '$(AS) $(ASFLAGS)'. # # 'N.s' is made automatically from 'N.S' by running the C # preprocessor, 'cpp'. The precise recipe is '$(CPP) $(CPPFLAGS)'. # Preprocessor CPP := arm-none-eabi-cpp CPPFLAGS := # Assembler AS := arm-none-eabi-as ASFLAGS := # C Compiler CC := arm-none-eabi-gcc CFLAGS := -march=armv7e-m+fp \ -mtune=cortex-m4 \ -mthumb \ -mfloat-abi=hard \ -std=gnu90 \ -ffreestanding \ -fsingle-precision-constant \ -pedantic \ -pedantic-errors \ -Wall \ -Wextra \ -Wconversion \ -Wstrict-prototypes \ -Wshadow \ -Wundef \ -Wdouble-promotion # Linker LD := arm-none-eabi-ld LDFLAGS := -nostdlib LDLIBS := # objcopy OC := arm-none-eabi-objcopy OCFLAGS := --output-target=binary # Build objs := kernel.o lds := kernel.ld LDFLAGS += -T $(lds) elf := kernel.elf bin := kernel.bin # Targets all : $(bin) clean : rm -f $(bin) $(elf) $(objs) .PHONY : all clean $(bin) : $(elf) $(OC) $(OCFLAGS) $< $@ $(elf) : $(objs) $(lds) $(LD) $(filter %.o,$^) $(LDFLAGS) $(LDLIBS) -o $@