############################################################################### # 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)