blob: 01f259c802e55384421f85d9614d040366d8b24c (
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
74
|
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
VERSION = 0.1.0-alpha
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_BINARY)
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)
|