-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
79 lines (61 loc) · 2.11 KB
/
Makefile
File metadata and controls
79 lines (61 loc) · 2.11 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
OBJS := boot.o memcpy.o strlen.o gpio.o led.o uart.o stdio.o framebuffer.o mmu.o fpu.o smp.o font.o main.o
CROSS := arm-none-eabi-
CC := $(CROSS)gcc
CXX := $(CROSS)g++
CXXFILT := $(CROSS)c++filt
LD := $(CROSS)ld
OBJDUMP := $(CROSS)objdump
OBJCOPY := $(CROSS)objcopy
DEPENDFLAGS := -MD -MP
BASEFLAGS := -O2 -nostdlib -mpoke-function-name -mno-long-calls
BASEFLAGS += -ffreestanding -fomit-frame-pointer -flto
WARNFLAGS := -W -Wall -Wextra -Wshadow -Wcast-align -Wwrite-strings
WARNFLAGS += -Wredundant-decls -Winline
WARNFLAGS += -Wno-endif-labels -Wfloat-equal
WARNFLAGS += -Wformat=2 -Winit-self
WARNFLAGS += -Winvalid-pch -Wmissing-format-attribute
WARNFLAGS += -Wmissing-include-dirs
WARNFLAGS += -Wredundant-decls -Wshadow
WARNFLAGS += -Wswitch -Wsystem-headers
WARNFLAGS += -Wno-pragmas
WARNFLAGS += -Wwrite-strings -Wdisabled-optimization -Wpointer-arith
WARNFLAGS += -Werror -Wno-error=unused-variable -Wno-error=unused-parameter
ARCHFLAGS := -march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16
INCLUDES := -I .
ALLFLAGS := $(DEPENDFLAGS) $(BASEFLAGS) $(WARNFLAGS) $(ARCHFLAGS)
ALLFLAGS += $(INCLUDES) -fPIE
CFLAGS := $(ALLFLAGS) -std=gnu99 -Wstrict-prototypes -Wnested-externs -Winline
CXXFLAGS := $(ALLFLAGS) -std=gnu++11 -fno-exceptions -fno-rtti
# doesn't set constants
#LDFLAGS := $(BASEFLAGS) $(ARCHFLAGS) -flto -fPIE -shared -Wl,-Bstatic
LDFLAGS := $(BASEFLAGS) $(ARCHFLAGS) -fPIE -flto
# Set VERBOSE if you want to see the commands being executed
ifdef VERBOSE
L = @:
Q =
else
L = @echo
Q = @
MAKEFLAGS += --no-print-directory
endif
export L Q
all: kernel.img
kernel.img: kernel.elf
$(L) objcopy $< $@
$(Q) $(OBJCOPY) $< -O binary $@
kernel.elf: link-arm-eabi.ld $(OBJS)
$(L) link $@ $(OBJS)
$(Q) $(CXX) $(LDFLAGS) $(OBJS) -l gcc -Tlink-arm-eabi.ld -o $@
%.o: %.S Makefile
$(L) CC $@ $<
$(Q) $(CC) $(CFLAGS) -c -o $@ $<
%.o: %.c Makefile
$(L) CC $@ $<
$(Q) $(CC) $(CFLAGS) -c -o $@ $<
%.o: %.cc Makefile
$(L) CXX $@ $<
$(Q) $(CXX) $(CXXFLAGS) -c -o $@ $<
clean:
$(L) cleaning kernel.img kernel.elf $(OBJS)
$(Q) rm -f kernel.img kernel.elf $(OBJS)
include *.d