1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- ###############################################################################
- # 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 ?= 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 := -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -MD -ggdb -Werror -fno-omit-frame-pointer -nostdinc -nostdlib -fno-stack-protector
- CFLAGS := -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
- CC := gcc
- # 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)
- $(CC) -c $(CFLAGS) $< -o $@
- $(BUILD):
- mkdir $@
- # Rule to clean files.
- clean :
- -rm -rf $(BUILD)
- -rm -f $(TARGET)
- -rm -f $(LIST)
- -rm -f $(MAP)
|