blob: b799cf1355a16ee6639132609ac72ed90db5bedc (
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
|
V =
ifeq ($(strip $(V)),)
E = @echo
Q = @
else
E = @\#
Q =
endif
CC = $(CROSS_COMPILE)gcc$(CC_SUFFIX)
LD = $(CROSS_COMPILE)ld
QEMU ?= qemu-system-riscv64
SRC = $(filter-out hsm.ld.S, $(wildcard *.S *.c))
OBJ = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(SRC)))
LINKER = hsm.ld
KERNEL = hsm
ISA ?= rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
ASFLAGS = -march=$(ISA) -mabi=lp64d -mcmodel=medany -fno-PIE -g
CCFLAGS = $(ASFLAGS) -std=gnu17 -nostdinc -nostdlib -O0
WARNINGS = -Werror -Wpedantic -Wall -Wextra -Wcast-align -Wcast-qual -Winit-self \
-Wmissing-include-dirs -Wredundant-decls -Wshadow -Wsign-conversion \
-Wswitch-default -Wundef -Wunreachable-code
CCFLAGS += $(WARNINGS)
LDFLAGS = -static -melf64lriscv -z noexecstack -T $(LINKER)
QEMU_FLAGS += -nographic
CPUS ?= 4
.PHONY: hsm
$(KERNEL): config $(OBJ)
$(Q) $(CC) -E $(LINKER).S -Iinclude/ -o $(LINKER)
$(E) " LD " $@
$(Q) $(LD) $(LDFLAGS) $(OBJ) -o $(KERNEL)
.PHONY: config
config:
$(Q) rm -f config.h
$(Q) echo "#ifndef __CONFIG_H__" >> config.h
$(Q) echo "#define __CONFIG_H__" >> config.h
$(Q) echo -e "\n#define NR_CPUS $(CPUS)\n" >> config.h
$(Q) echo "#if (NR_CPUS < 2 || NR_CPUS > 9)" >> config.h
$(Q) echo " #error \"Use a value of 'CPUS' > 1 and < 10\"" >> config.h
$(Q) echo -e "#endif // #if (NR_CPUS < 2 || NR_CPUS > 9)\n" >> config.h
$(Q) echo "#endif // __CONFIG_H__" >> config.h
.c.o:
$(E) " CC " $(basename $@)
$(Q) $(CC) $(CCFLAGS) -c $< -o $@
.S.o:
$(E) " CC " $(basename $@)
$(Q) $(CC) $(CCFLAGS) -c $< -o $@
.PHONY: clean
clean:
$(Q) rm -f *.o $(KERNEL) $(LINKER) config.h
.PHONY: qemu
qemu: clean $(KERNEL)
$(Q) $(QEMU) $(QEMU_FLAGS) -smp $(CPUS) -machine virt -kernel $(KERNEL)
|