bb0b2bc69725481e1a2f594f06220fa5da0a4e5c
[rpikern] / Makefile
1 csrc = $(wildcard src/*.c) $(wildcard src/libc/*.c)
2 ssrc = $(wildcard src/*.s) $(wildcard src/libc/*.s)
3 Ssrc = $(wildcard src/*.S) $(wildcard src/libc/*.S)
4 obj = $(csrc:.c=.o) $(ssrc:.s=.o) $(Ssrc:.S=.o)
5 dep = $(csrc:.c=.d)
6 elf = rpikern.elf
7 bin = rpikern.bin
8
9 ifneq ($(shell uname -m | sed 's/^arm.*/arm/'), arm)
10         toolprefix = arm-linux-gnueabihf-
11         CPP = $(toolprefix)cpp
12         CC = $(toolprefix)gcc
13         AS = $(toolprefix)as
14         LD = $(toolprefix)ld
15         OBJCOPY = $(toolprefix)objcopy
16 endif
17
18 warn = -pedantic -Wall
19 dbg = -g
20 inc = -Isrc -Isrc/libc
21 gccopt = -marm -fno-pic -ffreestanding -nostdinc -ffast-math -fno-math-errno -MMD
22 #arch = -mcpu=arm1176jzf-s
23 arch = -mcpu=cortex-a7
24
25 CFLAGS = $(arch) $(warn) $(opt) $(dbg) $(gccopt) $(inc) $(def)
26 ASFLAGS = $(arch) $(dbg) $(inc)
27 LDFLAGS = -nostdlib -T rpikern.ld -print-gc-sections
28
29 QEMU_FLAGS = -vnc :0 -m 1024 -M raspi2 -serial stdio -d guest_errors
30
31
32 $(bin): $(elf)
33         $(OBJCOPY) -O binary $< $@
34
35 $(elf): $(obj)
36         $(LD) -o $@ $(obj) -Map link.map $(LDFLAGS)
37
38 -include $(dep)
39
40 .PHONY: clean
41 clean:
42         rm -f $(obj) $(bin) $(elf) link.map
43
44 .PHONY: cleandep
45 cleandep:
46         rm -f $(dep)
47
48 .PHONY: run
49 run: $(elf)
50         qemu-system-arm $(QEMU_FLAGS) -kernel $(elf)
51
52 .PHONY: disasm
53 disasm: $(elf)
54         $(toolprefix)objdump -D $<
55
56 .PHONY: install
57 install: $(bin)
58         cp $(bin) /srv/tftp/$(bin)