:: limine / test / test.mk 3.4 KB raw

1
override CC := $(CC_FOR_TARGET)
2
override CFLAGS := -O2 -g -Wall -Wextra
3
override LDFLAGS :=
4
override LD := $(LD_FOR_TARGET)
5
6
override CC_IS_CLANG := $(shell ! $(CC) --version 2>/dev/null | $(GREP) -q '^Target: '; echo $$?)
7
8
ifeq ($(ARCH),x86)
9
ifeq ($(CC_IS_CLANG),1)
10
override CC += \
11
    -target x86_64-unknown-none-elf
12
endif
13
override LDFLAGS += \
14
    -m elf_x86_64
15
endif
16
ifeq ($(ARCH),aarch64)
17
ifeq ($(CC_IS_CLANG),1)
18
override CC += \
19
    -target aarch64-unknown-none-elf
20
endif
21
override LDFLAGS += \
22
    -m aarch64elf
23
endif
24
ifeq ($(ARCH),riscv64)
25
ifeq ($(CC_IS_CLANG),1)
26
override CC += \
27
    -target riscv64-unknown-none-elf
28
endif
29
override LDFLAGS += \
30
    -m elf64lriscv
31
endif
32
ifeq ($(ARCH),loongarch64)
33
ifeq ($(CC_IS_CLANG),1)
34
override CC += \
35
    -target loongarch64-unknown-none-elf
36
endif
37
override LDFLAGS += \
38
    -m elf64loongarch
39
endif
40
41
override LDFLAGS += \
42
    -Tlinker.ld \
43
    -nostdlib \
44
    -zmax-page-size=0x1000 \
45
    -pie \
46
    -ztext
47
48
override LDFLAGS_MB2 := \
49
    -m elf_i386 \
50
    -Tmultiboot2.ld \
51
    -nostdlib \
52
    -zmax-page-size=0x1000 \
53
    -static
54
55
override LDFLAGS_MB1 := \
56
    -m elf_i386 \
57
    -Tmultiboot.ld \
58
    -nostdlib \
59
    -zmax-page-size=0x1000 \
60
    -static
61
62
override CFLAGS += \
63
    -std=c11 \
64
    -nostdinc \
65
    -ffreestanding \
66
    -fno-stack-protector \
67
    -fno-stack-check \
68
    -fno-lto \
69
    -fPIE \
70
    -I. \
71
    -I../limine-protocol/include \
72
    -I../flanterm/src \
73
    -isystem ../freestnd-c-hdrs/include \
74
    -D_LIMINE_PROTO \
75
    $(EXTRA_CFLAGS)
76
77
ifeq ($(ARCH),x86)
78
override CFLAGS += \
79
    -m64 \
80
    -march=x86-64 \
81
    -mabi=sysv \
82
    -mgeneral-regs-only \
83
    -mno-red-zone
84
endif
85
86
ifeq ($(ARCH),aarch64)
87
override CFLAGS += \
88
    -mcpu=generic \
89
    -march=armv8-a+nofp+nosimd \
90
    -mgeneral-regs-only
91
endif
92
93
ifeq ($(ARCH),riscv64)
94
override CFLAGS += \
95
    -march=rv64imac \
96
    -mabi=lp64 \
97
    -mno-relax
98
override LDFLAGS += \
99
    --no-relax
100
endif
101
102
ifeq ($(ARCH),loongarch64)
103
override CFLAGS += \
104
    -march=loongarch64 \
105
    -mabi=lp64s \
106
    -mfpu=none \
107
    -msimd=none
108
endif
109
110
override CFLAGS_MB := \
111
    -std=c11 \
112
    -nostdinc \
113
    -ffreestanding \
114
    -fno-stack-protector \
115
    -fno-stack-check \
116
    -fno-lto \
117
    -fno-PIC \
118
    -m32 \
119
    -march=i686 \
120
    -mabi=sysv \
121
    -mgeneral-regs-only \
122
    -I. \
123
    -I../common/protos \
124
    -isystem ../freestnd-c-hdrs/include
125
126
ifeq ($(ARCH),x86)
127
all: test.elf multiboot2.elf multiboot.elf
128
else
129
all: test.elf
130
endif
131
132
flanterm.o: ../flanterm/src/flanterm.c
133
	$(CC) $(CFLAGS) -c $< -o $@
134
135
flanterm_fb.o: ../flanterm/src/flanterm_backends/fb.c
136
	$(CC) $(CFLAGS) -c $< -o $@
137
138
test.elf: limine.o e9print.o memory.o flanterm.o flanterm_fb.o
139
	$(LD) $(LDFLAGS) $^ -o $@
140
141
multiboot2.elf: multiboot2_trampoline.o
142
	$(CC) $(CFLAGS_MB) -c memory.c -o memory.o
143
	$(CC) $(CFLAGS_MB) -c multiboot2.c -o multiboot2.o
144
	$(CC) $(CFLAGS_MB) -c e9print.c -o e9print.o
145
	$(LD) $(LDFLAGS_MB2) $^ memory.o multiboot2.o e9print.o -o $@
146
147
multiboot.elf: multiboot_trampoline.o
148
	$(CC) $(CFLAGS_MB) -c memory.c -o memory.o
149
	$(CC) $(CFLAGS_MB) -c multiboot.c -o multiboot.o
150
	$(CC) $(CFLAGS_MB) -c e9print.c -o e9print.o
151
	$(LD) $(LDFLAGS_MB1) $^ memory.o multiboot.o e9print.o -o $@
152
153
%.o: %.c
154
	$(CC) $(CFLAGS) -c $< -o $@
155
156
%.o: %.asm
157
	nasm -felf32 -F dwarf -g $< -o $@
158
159
clean:
160
	rm -rf test.elf limine.o e9print.o memory.o
161
	rm -rf flanterm.o flanterm_fb.o
162
	rm -rf multiboot2.o multiboot2.elf multiboot2_trampoline.o
163
	rm -rf multiboot.o multiboot_trampoline.o multiboot.elf
tab: 248 wrap: offon