blob: 339f63ee8edbc59e2e25b62f313d4bc2db25f180 (
plain) (
blame)
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
|
DO != echo > deps.mk
# this could be done better
DEBUGFLAGS != [ $(DEBUG) ] && echo "-O0 -ggdb3 -DDEBUG" || echo "-flto -O2"
CFLAGS = -fno-pie -ffreestanding -nostdlib -std=c11 -Wall -Wextra
DEPFLAGS = -MT $@ -MMD -MP -MF $@.d
all: apos.bin
ARCH ?= riscv
CROSS_COMPILE ?= riscv64-unknown-elf-
# Common programs
CC := gcc
AR := ar
CPP := cpp
OBJCOPY ?= objcopy
OBJCOPY_FLAGS ?= -Obinary
COMMON_SOURCES != echo common/*.c
KERNEL_SOURCES != echo kernel/*.c $(COMMON_SOURCES)
INIT_SOURCES := $(COMMON_SOURCES)
CLEANUP := build deps.mk kernel.* init.* apos.bin
CLEANUP_CMD :=
include arch/$(ARCH)/source.mk
INCLUDE_FLAGS := -I include -I arch/$(ARCH)/include\
-include config.h -include arch/$(ARCH)/config.h
COMPILE = $(CROSS_COMPILE)$(CC) $(DEBUGFLAGS)\
$(CFLAGS) $(ARCH_FLAGS) $(DEPFLAGS) $(INCLUDE_FLAGS)
GENELF = $(CROSS_COMPILE)$(CC) $(DEBUGFLAGS)\
$(CFLAGS) $(ARCH_FLAGS) $(INCLUDE_FLAGS)
GENLINK = $(CROSS_COMPILE)$(CPP) $(DEPFLAGS) $(INCLUDE_FLAGS)
STRIPLINK = sed -n '/^[^\#]/p'
KERNEL_LINK := arch/$(ARCH)/conf/kernel-link
INIT_LINK := arch/$(ARCH)/conf/init-link
KERNEL_OBJECTS != ./scripts/gen-deps --kern "$(KERNEL_SOURCES)"
INIT_OBJECTS != ./scripts/gen-deps --init "$(INIT_SOURCES)"
KERNEL_LD != ./scripts/gen-deps --link "$(KERNEL_LINK).S"
INIT_LD != ./scripts/gen-deps --link "$(INIT_LINK).S"
include deps.mk
apos.bin: kernel.elf init.elf
$(CROSS_COMPILE)$(OBJCOPY) $(OBJCOPY_FLAGS) kernel.elf kernel.bin
$(CROSS_COMPILE)$(OBJCOPY) $(OBJCOPY_FLAGS) init.elf init.bin
./scripts/gen-padding 4096 init.bin
cat init.bin kernel.bin > $@
kernel.elf: $(KERNEL_OBJECTS) $(KERNEL_LD)
$(GENELF) -T $(KERNEL_LD) $(KERNEL_OBJECTS) -o $@
init.elf: $(INIT_OBJECTS) $(INIT_LD)
$(GENELF) -T $(INIT_LD) $(INIT_OBJECTS) -o $@
clean:
$(RM) -r $(CLEANUP)
clean_run: clean
$(CLEANUP_CMD)
|