@@ -9,6 +9,9 @@ override OUTPUT := csmwrap
9
9
# Target architecture to build for. Default to x86_64.
10
10
ARCH := x86_64
11
11
12
+ # Install prefix; /usr/local is a good, standard default pick.
13
+ PREFIX := /usr/local
14
+
12
15
# Check if the architecture is supported.
13
16
ifeq ($(filter $(ARCH ) ,ia32 x86_64) ,)
14
17
$(error Architecture $(ARCH) not supported)
@@ -17,28 +20,39 @@ endif
17
20
# Default user QEMU flags. These are appended to the QEMU command calls.
18
21
QEMUFLAGS := -m 2G
19
22
20
- # User controllable cross compiler prefix.
21
- CROSS_COMPILE :=
22
- CROSS_PREFIX := $(CROSS_COMPILE )
23
+ # User controllable toolchain and toolchain prefix.
24
+ TOOLCHAIN :=
25
+ TOOLCHAIN_PREFIX :=
26
+ ifneq ($(TOOLCHAIN ) ,)
27
+ ifeq ($(TOOLCHAIN_PREFIX),)
28
+ TOOLCHAIN_PREFIX := $(TOOLCHAIN ) -
29
+ endif
30
+ endif
23
31
24
32
# User controllable C compiler command.
25
- ifneq ($(CROSS_PREFIX ) ,)
26
- CC := $(CROSS_PREFIX ) gcc
33
+ ifneq ($(TOOLCHAIN_PREFIX ) ,)
34
+ CC := $(TOOLCHAIN_PREFIX ) gcc
27
35
else
28
36
CC := cc
29
37
endif
30
38
31
39
# User controllable linker command.
32
- LD := $(CROSS_PREFIX ) ld
40
+ LD := $(TOOLCHAIN_PREFIX ) ld
33
41
34
42
# User controllable objcopy command.
35
- OBJCOPY := $(CROSS_PREFIX ) objcopy
43
+ OBJCOPY := $(TOOLCHAIN_PREFIX ) objcopy
36
44
37
45
# User controllable objdump command.
38
- OBJDUMP := $(CROSS_PREFIX ) objdump
46
+ OBJDUMP := $(TOOLCHAIN_PREFIX ) objdump
39
47
40
48
# User controllable strip command.
41
- STRIP := $(CROSS_PREFIX ) strip
49
+ STRIP := $(TOOLCHAIN_PREFIX ) strip
50
+
51
+ # Defaults overrides for variables if using "llvm" as toolchain.
52
+ ifeq ($(TOOLCHAIN ) ,llvm)
53
+ CC := clang
54
+ LD := ld.lld
55
+ endif
42
56
43
57
# User controllable C flags.
44
58
CFLAGS := -g -O2 -pipe
@@ -56,7 +70,7 @@ LDFLAGS :=
56
70
BUILD_VERSION := $(shell git describe --tags --always 2>/dev/null || echo "Unknown")
57
71
58
72
# Check if CC is Clang.
59
- override CC_IS_CLANG := $(shell ! $(CC ) --version 2>/dev/null | grep 'clang' >/dev/null 2>&1 ; echo $$? )
73
+ override CC_IS_CLANG := $(shell ! $(CC ) --version 2>/dev/null | grep -q '^Target: ' ; echo $$? )
60
74
61
75
# Save user CFLAGS, CPPFLAGS, and LDFLAGS before we append internal flags.
62
76
override USER_CFLAGS := $(CFLAGS )
@@ -98,7 +112,7 @@ override NASMFLAGS += \
98
112
ifeq ($(ARCH ) ,ia32)
99
113
ifeq ($(CC_IS_CLANG),1)
100
114
override CC += \
101
- -target i686-unknown-none
115
+ -target i686-unknown-none-elf
102
116
endif
103
117
override CFLAGS += \
104
118
-m32 \
@@ -114,7 +128,7 @@ endif
114
128
ifeq ($(ARCH ) ,x86_64)
115
129
ifeq ($(CC_IS_CLANG),1)
116
130
override CC += \
117
- -target x86_64-unknown-none
131
+ -target x86_64-unknown-none-elf
118
132
endif
119
133
override CFLAGS += \
120
134
-m64 \
@@ -137,12 +151,12 @@ override LDFLAGS += \
137
151
-pie \
138
152
-z text \
139
153
-z max-page-size=0x1000 \
140
- -gc-sections \
154
+ -- gc-sections \
141
155
-T nyu-efi/$(ARCH ) /link_script.lds
142
156
143
157
# Use "find" to glob all *.c, *.S, and *.asm{32,64} files in the tree and obtain the
144
158
# object and header dependency file names.
145
- override SRCFILES := $(shell find -L src cc-runtime/src nyu-efi/$(ARCH ) uACPI/source -type f | LC_ALL=C sort)
159
+ override SRCFILES := $(shell find -L src cc-runtime/src nyu-efi/$(ARCH ) uACPI/source -type f 2>/dev/null | LC_ALL=C sort)
146
160
override CFILES := $(filter % .c,$(SRCFILES ) )
147
161
override ASFILES := $(filter % .S,$(SRCFILES ) )
148
162
ifeq ($(ARCH ) ,ia32)
@@ -257,6 +271,18 @@ distclean: seabios/.config
257
271
rm -rf src/bins
258
272
rm -rf bin-* obj-* ovmf
259
273
274
+ # Install the final built executable to its final on-root location.
275
+ .PHONY : install
276
+ install : all
277
+ install -d " $( DESTDIR) $( PREFIX) /share/$( OUTPUT) "
278
+ install -m 644 bin-$(ARCH ) /$(OUTPUT ) .efi " $( DESTDIR) $( PREFIX) /share/$( OUTPUT) /$( OUTPUT) -$( ARCH) .efi"
279
+
280
+ # Try to undo whatever the "install" target did.
281
+ .PHONY : uninstall
282
+ uninstall :
283
+ rm -f " $( DESTDIR) $( PREFIX) /share/$( OUTPUT) /$( OUTPUT) -$( ARCH) .efi"
284
+ -rmdir " $( DESTDIR) $( PREFIX) /share/$( OUTPUT) "
285
+
260
286
# SeaBIOS build targets.
261
287
SEABIOS_EXTRAVERSION := -CSMWrap-$(BUILD_VERSION )
262
288
.PHONY : seabios
0 commit comments