# HG changeset patch # User mir3636 # Date 1540381726 -32400 # Node ID 60f5143382387d181340637286683309f961ceab # Parent b5220d63570e15e8b99395ffec0b5ec938db3a6b add diff -r b5220d63570e -r 60f514338238 makefile-armgccbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/makefile-armgccbc Wed Oct 24 20:48:46 2018 +0900 @@ -0,0 +1,78 @@ +############################################################################### +# makefile +# by Alex Chadwick +# +# A makefile script for generation of raspberry pi kernel images. +############################################################################### + +# The toolchain to use. arm-none-eabi works, but there does exist +# arm-bcm2708-linux-gnueabi. +ARMGNU ?= /usr/local/arm-cbc/bin/arm-none-eabi +# ARMGNU ?= arm-none-eabi + +# The intermediate directory for compiled object files. +BUILD = build/ + +# The directory in which source files are stored. +SOURCE = source/ + +# The name of the output file to generate. +TARGET = kernel.img + +# The name of the assembler listing file to generate. +LIST = kernel.list + +# The name of the map file to generate. +MAP = kernel.map + +# The name of the linker script to use. +LINKER = kernel.ld + +# The names of libraries to use. +LIBRARIES := csud + +#CFLAGS := -mfloat-abi=hard -fno-pic -static -Wno-packed-bitfield-compat -fno-builtin -fno-strict-aliasing -fshort-wchar -O2 -Wall -MD -ggdb -Werror -fno-omit-frame-pointer -fno-stack-protector -Wa,-march=armv6 -Wa,-mcpu=arm1176jzf-s -I include +CFLAGS := -mfpu=vfpv4 -mfloat-abi=hard -fno-pic -static -Wno-packed-bitfield-compat -fno-builtin -fno-strict-aliasing -fshort-wchar -O2 -Wall -MD -ggdb -fno-omit-frame-pointer -fno-stack-protector -Wa,-march=armv6 -Wa,-mcpu=arm1176jzf-s -I include + +CC := gcc -B/usr/local/arm-cbc/bin/arm-none-eabi- + +# The names of all object files that must be generated. Deduced from the +# assembly code files in source. +OBJECTS := $(patsubst $(SOURCE)%.s,$(BUILD)%.o,$(wildcard $(SOURCE)*.s)) + +C_OBJS := $(patsubst $(SOURCE)%.c,$(BUILD)%.o,$(wildcard $(SOURCE)*.c)) + +# Rule to make everything. +all: $(TARGET) $(LIST) + +# Rule to remake everything. Does not include clean. +#rebuild: all + +# Rule to make the listing file. +$(LIST) : $(BUILD)output.elf + $(ARMGNU)-objdump -d $(BUILD)output.elf > $(LIST) + +# Rule to make the image file. +$(TARGET) : $(BUILD)output.elf + $(ARMGNU)-objcopy $(BUILD)output.elf -O binary $(TARGET) + +# Rule to make the elf file. +$(BUILD)output.elf : $(OBJECTS) $(C_OBJS) $(LINKER) + $(ARMGNU)-ld --no-undefined $(OBJECTS) $(C_OBJS) -L. $(patsubst %,-l %,$(LIBRARIES)) -Map $(MAP) -o $(BUILD)output.elf -T $(LINKER) + +# Rule to make the object files. +$(BUILD)%.o: $(SOURCE)%.s $(BUILD) + $(ARMGNU)-as -I $(SOURCE) $< -o $@ + +$(BUILD)%.o: $(SOURCE)%.c $(BUILD) + $(ARMGNU)-$(CC) -c $(CFLAGS) $< -o $@ + +$(BUILD): + mkdir $@ + +# Rule to clean files. +clean : + -rm -rf $(BUILD) + -rm -f $(TARGET) + -rm -f $(LIST) + -rm -f $(MAP)