summaryrefslogtreecommitdiff
path: root/website-kernel/Makefile
blob: eb5a76e1b3deecf21ad7a30e4a6440f3f5109ead (plain)
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
CC = clang
LD = ld.lld
OBJCOPY = llvm-objcopy

COMPILER = $(shell $(CC) --version | head -n 1)
LINKER = $(shell $(LD) --version | head -n 1)
ARCH_NAME = 32-bit RISC-V, IM_Zicsr ISA, little endian, unknown ELF, System V ABI

CFLAGS = \
	--target=riscv32-unknown-elf \
	-march=rv32im_zicsr \
	-mabi=ilp32 \
	-ffreestanding \
	-fno-builtin \
	-nostdlib \
	-nostdinc \
	-nodefaultlibs \
	-DVERSION='"$(VERSION)"' \
	-DCOMPILER_NAME='"$(COMPILER)"' \
	-DLINKER_NAME='"$(LINKER)"' \
	-DARCH_NAME='"$(ARCH_NAME)"' \
	-static \
	-ffunction-sections -fdata-sections -fno-common \
	-Iinclude -O2 -g3 \
	-Wall -Wextra -Werror -Wundef

LD_FLAGS = \
	-T $(LINKER_SCRIPT) -nostdlib -m elf32lriscv --gc-sections

OBJCOPY_FLAGS = \
	-O binary \
	--strip-all \
	--remove-section=.comment \
	--remove-section=.debug* \
	--remove-section=.note* \
	--remove-section=.eh_frame \
	--remove-section=.eh_frame_ptr \
	--remove-section=.eh_frame_hdr

C_SRCS = $(shell find . -name '*.c')
S_SRCS = $(shell find . -name '*.S')
C_OBJECTS = $(C_SRCS:.c=.o)
S_OBJECTS = $(S_SRCS:.S=.o)
ALL_OBJECTS = $(C_OBJECTS) $(S_OBJECTS)
LINKER_SCRIPT = arch/linker.ld

KERNEL_BINARY = Image.bin
KERNEL_ELF = arch/webos-kernel.elf

$(V).SILENT:

%.o: %.c
	@echo " CC $<"
	$(CC) $(CFLAGS) -c $< -o $@
%.o: %.S
	@echo " AS $<"
	$(CC) $(CFLAGS) -c $< -o $@
$(KERNEL_ELF): $(ALL_OBJECTS)  $(LINKER_SCRIPT)
	@echo " LD $@"
	$(LD) $(LD_FLAGS) -o $@ $(ALL_OBJECTS)
$(KERNEL_BINARY): $(KERNEL_ELF)
	@echo " OBJCOPY $@"
	$(OBJCOPY) $(OBJCOPY_FLAGS) $(KERNEL_ELF) $(KERNEL_BIN)
clean:
	@echo " CLEAN $(ALL_OBJECTS)"
	$(RM) $(ALL_OBJECTS)
	@echo " CLEAN $(KERNEL_ELF)"
	$(RM) $(KERNEL_ELF)
	@echo " CLEAN $(KERNEL_BINARY)"
	$(RM) $(KERNEL_BINARY)

.PHONY: all clean
all: $(KERNEL_BINARY)