-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
51 lines (37 loc) · 1.34 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
ARCH = arm-none-eabi
CC = ${ARCH}-gcc
AS = ${ARCH}-as
LD = ${ARCH}-ld
AR = ${ARCH}-ar
OBJCOPY = ${ARCH}-objcopy
PLATFORM = qemu
#PLATFORM = raspi
CFLAGS = -O3 -std=c99 -Werror -DTNKERNEL_PORT_ARM -DPLATFORM=$(PLATFORM)
#CFLAGS = -O0 -g -std=c99 -Werror -DTNKERNEL_PORT_ARM -DPLATFORM=$(PLATFORM)
CFLAGS_FOR_TARGET = -mcpu=arm1176jzf-s
#ASFLAGS = -g
ASFLAGS =
ASFLAGS_FOR_TARGET = -mcpu=arm1176jzf-s
LDFLAGS = -nostdlib -static --error-unresolved-symbols
SYSLIBS = /usr/local/lib/gcc/arm-none-eabi/4.6.1/libgcc.a
MODULES := kernel bsp bsp/generic bsp/$(PLATFORM) lib lambda
SRC_DIR := $(addprefix src/,$(MODULES))
OBJ_DIR := obj
ASRC := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.s))
AOBJ := $(addprefix obj/, $(notdir $(ASRC:.s=.o)))
CSRC := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c))
COBJ := $(addprefix obj/, $(notdir $(CSRC:.c=.o)))
INCLUDES := -Isrc $(addprefix -I,$(SRC_DIR))
vpath %.c $(SRC_DIR)
vpath %.s $(SRC_DIR)
$(OBJ_DIR)/%.o: %.c
$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c -o $(OBJ_DIR)/$*.o $<
$(OBJ_DIR)/%.o: %.s
$(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $(OBJ_DIR)/$*.o $<
OBJ = $(AOBJ) $(COBJ)
bin/kernel.img: bin/kernel.elf
${OBJCOPY} -O binary $< $@
bin/kernel.elf: lambdapi.ld $(OBJ)
${LD} ${LDFLAGS} -T lambdapi.ld $(OBJ) ${SYSLIBS} -o $@
clean:
rm -f bin/*.elf bin/*.img obj/*.o