-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathMakefile
More file actions
324 lines (260 loc) · 10.8 KB
/
Copy pathMakefile
File metadata and controls
324 lines (260 loc) · 10.8 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
#########################
# Makefile for Lyos #
#########################
VERSION = 0
PATCHLEVEL = 4
SUBLEVEL = 1
EXTRAVERSION =
SUBARCH := $(shell uname -m | sed -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/)
ARCH ?= $(SUBARCH)
ifeq ($(ARCH),i386)
ARCH := x86
endif
ifeq ($(ARCH),i686)
ARCH := x86
endif
ifeq ($(ARCH),x86_64)
ARCH := x86
endif
ifeq ($(ARCH),arm)
SUBARCH := arm
endif
ifeq ($(ARCH),aarch64)
ARCH := arm64
endif
ifeq ($(ARCH),riscv32)
ARCH := riscv
endif
ifeq ($(ARCH),riscv64)
ARCH := riscv
endif
export SUBARCH ARCH
# Import configuration
ifeq ($(wildcard .config),)
else
-include .config
export
endif
KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
export KERNELVERSION
# Directories
SRCDIR = $(shell pwd)
INCDIR = $(SRCDIR)/include
SERVERSINCDIR = $(SRCDIR)/servers
SYSINCDIR = $(SRCDIR)/include/sys
ARCHINCDIR = $(SRCDIR)/include/arch/$(ARCH)
LIBDIR = $(SRCDIR)/lib/
ARCHDIR = $(SRCDIR)/arch/$(ARCH)
ARCHINC = $(ARCHDIR)/include
ARCHLIB = $(ARCHDIR)/lib
OBJDIR ?= $(SRCDIR)/obj
DESTDIR ?= $(OBJDIR)/destdir.$(SUBARCH)
LIBOUTDIR = $(DESTDIR)/lib
PATH := $(SRCDIR)/toolchain/local/bin:$(PATH)
export SRCDIR INCDIR SYSINCDIR ARCHINCDIR LIBDIR ARCHDIR DESTDIR BINDIR LIBOUTDIR ARCHINC ARCHLIB PATH
HD = lyos-disk.img
# Programs, flags, etc.
HOSTCC = gcc
HOSTLD = ld
AS = $(SUBARCH)-elf-lyos-as
AR = $(SUBARCH)-elf-lyos-ar
CC = $(SUBARCH)-elf-lyos-gcc
CPP = $(SUBARCH)-elf-lyos-g++
LD = $(SUBARCH)-elf-lyos-ld
OBJCOPY = $(SUBARCH)-elf-lyos-objcopy
INSTALL = install
CFLAGS = -I $(INCDIR)/ -I$(LIBDIR) -I $(ARCHINCDIR)/ -L$(LIBOUTDIR)/ -fno-builtin -fno-stack-protector -Wall -O2
ASFLAGS = -I $(INCDIR)/ -I $(ARCHINCDIR)/
SERVERCFLAGS = -I $(INCDIR)/ -I $(SERVERSINCDIR)/ -I$(LIBDIR) -I $(ARCHINCDIR)/ -L$(LIBOUTDIR)/ -Wall -static -O2
MAKEFLAGS += --no-print-directory -I $(SRCDIR)/utils/mk/
ARFLAGS = rcs
MAKE = make
ifeq ($(CONFIG_DEBUG_INFO),y)
CFLAGS += -g
SERVERCFLAGS += -g
endif
export AS ASM CC CPP LD OBJCOPY INSTALL CFLAGS ASFLAGS ARFLAGS HOSTCC HOSTLD SERVERCFLAGS
LYOSKERNEL = $(ARCHDIR)/lyos.elf
ifeq ($(CONFIG_COMPRESS_GZIP),y)
ZIP = gzip
LYOSZKERNEL = $(ARCHDIR)/lyos.gz
endif
LYOSINITRD = $(ARCHDIR)/initrd.tar
DASMOUTPUT = lyos.elf.asm
COLORDEFAULT= \033[0m
COLORRED = \033[1;31m
COLORGREEN = \033[1;32m
COLORYELLOW = \033[1;33m
COLORBLUE = \033[1;34m
CONFIGDIR = $(SRCDIR)/include/config
CONFIGIN = $(SRCDIR)/config.in
CONF = $(SRCDIR)/scripts/config/conf
MCONF = $(SRCDIR)/scripts/config/mconf
AUTOCONFINC = $(SRCDIR)/include/config/autoconf.h
CONFIGINC = $(SRCDIR)/.config
DEFCONFIG = $(ARCHDIR)/configs/$(SUBARCH)_defconfig
KCONFIG_AUTOHEADER = include/config/autoconf.h
export KCONFIG_AUTOHEADER
VERBOSE ?= 0
ifeq ($(VERBOSE), 1)
Q =
else
Q = @
endif
export Q
# All Phony Targets
.PHONY : all everything disasm clean realclean mrproper install help config menuconfig \
setup-toolchain libraries install-libraries kernel fs install-fs drivers install-drivers \
servers install-servers net install-net objdirs kvm kvm-debug install-headers tests
# Default entry point
all : clean everything
include $(ARCHDIR)/Makefile
everything : $(CONFIGINC) $(AUTOCONFINC) genconf objdirs install-headers libraries install-libraries fs install-fs drivers \
install-drivers servers install-servers net install-net kernel initrd
setup-toolchain:
@echo -e '$(COLORGREEN)Setting up toolchain...$(COLORDEFAULT)'
@./scripts/setup-toolchain.sh
$(CONFIGINC):
@echo -e '$(COLORYELLOW)Using default configuration$(COLORDEFAULT)'
@cp $(DEFCONFIG) $(CONFIGINC)
$(AUTOCONFINC):
@$(MAKE) -f Makefile silentoldconfig
genconf:
@echo -e '$(COLORGREEN)Generating compile.h...$(COLORDEFAULT)'
@echo -e '\tGEN\tcompile.h'
@sh ./scripts/genversion.sh
@$(shell ./scripts/gencompile.sh $(ARCH) $(SUBARCH) $(KERNELVERSION) $(CC) $(CONFIG_LOCALVERSION) $(CONFIG_LOCALVERSION_AUTO) $(CONFIG_SMP))
config: $(CONFIGIN) $(CONFIGINC)
@(cd scripts/config; make config)
$(CONF) $(CONFIGIN)
@$(MAKE) -f Makefile silentoldconfig
menuconfig: $(CONFIGIN) $(CONFIGINC)
@(cd scripts/config; make menuconfig)
$(MCONF) $(CONFIGIN)
@$(MAKE) -f Makefile silentoldconfig
defconfig: $(CONFIGIN) $(CONFIGINC)
@(cd scripts/config; make config)
$(CONF) --defconfig=$(DEFCONFIG) $(CONFIGIN)
@$(MAKE) -f Makefile silentoldconfig
silentoldconfig:
@rm -rf $(CONFIGDIR)
@mkdir $(CONFIGDIR)
@(cd scripts/config; make config)
$(CONF) --silentoldconfig $(CONFIGIN)
clean:
@echo -e '$(COLORRED)Removing object files...$(COLORDEFAULT)'
$(Q)$(MAKE) -C lib $(MAKEFLAGS) clean
$(Q)$(MAKE) -C fs $(MAKEFLAGS) clean
$(Q)$(MAKE) -C drivers $(MAKEFLAGS) clean
$(Q)$(MAKE) -C servers $(MAKEFLAGS) clean
realclean :
@echo -e '$(COLORRED)Removing object files...$(COLORDEFAULT)'
$(Q)$(MAKE) -C lib $(MAKEFLAGS) realclean
$(Q)$(MAKE) -C fs $(MAKEFLAGS) realclean
$(Q)$(MAKE) -C drivers $(MAKEFLAGS) realclean
$(Q)$(MAKE) -C servers $(MAKEFLAGS) realclean
$(Q)$(MAKE) -C tests $(MAKEFLAGS) realclean
$(Q)$(MAKE) -C utils $(MAKEFLAGS) realclean
mrproper:
@echo -e '$(COLORRED)Removing object files...$(COLORDEFAULT)'
@find . \( -path ./toolchain -o -path ./obj \) -prune -path ./obj -prune -o -name "*.o" -exec rm -f {} \;
@echo -e '$(COLORRED)Removing compile.h...$(COLORDEFAULT)'
@rm -f $(INCLUDEDIR)/lyos/compile.h
@echo -e '$(COLORRED)Removing configure files...$(COLORDEFAULT)'
@rm -f $(CONFIGINC) $(CONFIGINC).old
@rm -rf $(CONFIGDIR)
install: install-libraries install-fs install-drivers
update-disk:
$(Q)$(MAKE) -C utils $(MAKEFLAGS)
$(Q)$(MAKE) -C utils $(MAKEFLAGS) install
@sudo bash scripts/update-disk.sh
kvm:
@qemu-system-x86_64 -smp 2 -kernel $(LYOSKERNEL) -append "console=ttyS0 video=1024x768 watchdog=1" -initrd "$(LYOSINITRD),$(DESTDIR)/sbin/mm,$(DESTDIR)/sbin/pm,$(DESTDIR)/sbin/servman,$(DESTDIR)/sbin/devman,$(DESTDIR)/sbin/sched,$(DESTDIR)/sbin/vfs,$(DESTDIR)/sbin/systask,$(DESTDIR)/sbin/tty,$(DESTDIR)/sbin/ramdisk,$(DESTDIR)/sbin/initfs,$(DESTDIR)/sbin/sysfs,$(DESTDIR)/sbin/ipc,$(DESTDIR)/sbin/netlink,$(DESTDIR)/sbin/init" -drive id=hda,file=lyos-disk-$(SUBARCH).img,format=raw,if=none -device virtio-blk-pci,drive=hda -netdev user,id=net0,hostfwd=tcp::5555-:22 -device virtio-net,netdev=net0 -object filter-dump,id=f1,netdev=net0,file=dump.dat -device pci-ohci -device usb-kbd -m 2048 -serial stdio -vga virtio -display sdl -cpu host,pmu=true --enable-kvm # --trace usb_ohci_*
kvm-telnet:
@qemu-system-x86_64 -smp 2 -kernel $(LYOSKERNEL) -append "console=ttyS0 video=1024x768 watchdog=1" -initrd "$(LYOSINITRD),$(DESTDIR)/sbin/mm,$(DESTDIR)/sbin/pm,$(DESTDIR)/sbin/servman,$(DESTDIR)/sbin/devman,$(DESTDIR)/sbin/sched,$(DESTDIR)/sbin/vfs,$(DESTDIR)/sbin/systask,$(DESTDIR)/sbin/tty,$(DESTDIR)/sbin/ramdisk,$(DESTDIR)/sbin/initfs,$(DESTDIR)/sbin/sysfs,$(DESTDIR)/sbin/ipc,$(DESTDIR)/sbin/init" -net nic,model=rtl8139 -net user -hda lyos-disk.img -m 2048 -serial telnet:localhost:4321,server,nowait -nographic -cpu host,pmu=true --enable-kvm
kvm-disk:
@qemu-system-x86_64 -smp 2 -drive id=hda,file=lyos-disk.img,format=raw,if=none -device virtio-blk-pci,drive=hda -m 2048 -serial stdio -vga std -sdl -cpu host,pmu=true --enable-kvm
kvm-debug:
@qemu-system-x86_64 -s -S -smp 2 -kernel $(LYOSKERNEL) -append "console=ttyS0 video=1024x768 watchdog=1" -initrd "$(LYOSINITRD),$(DESTDIR)/sbin/mm,$(DESTDIR)/sbin/pm,$(DESTDIR)/sbin/servman,$(DESTDIR)/sbin/devman,$(DESTDIR)/sbin/sched,$(DESTDIR)/sbin/vfs,$(DESTDIR)/sbin/systask,$(DESTDIR)/sbin/tty,$(DESTDIR)/sbin/ramdisk,$(DESTDIR)/sbin/initfs,$(DESTDIR)/sbin/sysfs,$(DESTDIR)/sbin/ipc,$(DESTDIR)/sbin/netlink,$(DESTDIR)/sbin/init" -drive id=hda,file=lyos-disk-$(SUBARCH).img,format=raw,if=none -device virtio-blk-pci,drive=hda -netdev user,id=net0,hostfwd=tcp::5555-:22 -device virtio-net,netdev=net0 -object filter-dump,id=f1,netdev=net0,file=dump.dat -device pci-ohci -device usb-kbd -m 2048 -serial stdio -vga virtio -display sdl -cpu host,pmu=true --enable-kvm
disk-image:
$(Q)$(MAKE) -C utils $(MAKEFLAGS)
$(Q)$(MAKE) -C utils $(MAKEFLAGS) install
@sudo bash scripts/setup-disk.sh
initrd:
$(Q)$(MAKE) -C utils $(MAKEFLAGS)
$(Q)$(MAKE) -C utils $(MAKEFLAGS) install
@(cd ramdisk; make)
disasm :
@echo -e '$(COLORBLUE)Disassembling the kernel...$(COLORDEFAULT)'
@echo -e '\tDASM\t$(LYOSKERNEL)'
@$(DASM) $(DASMFLAGS) $(LYOSKERNEL) > $(DASMOUTPUT)
help :
@echo "Make options:"
@echo "-----------------------------------------------------------------"
@echo "make\t\t: build everything."
@echo "-----------------------------------------------------------------"
@echo "make clean\t: remove all object files but keep config files."
@echo "make realclean\t: remove all object files and config file."
@echo "make install\t: install everything to DESTDIR."
objdirs:
@(mkdir -p $(OBJDIR))
@(mkdir -p $(DESTDIR))
@(mkdir -p $(DESTDIR)/bin)
@(mkdir -p $(DESTDIR)/boot)
@(mkdir -p $(DESTDIR)/lib)
@(mkdir -p $(DESTDIR)/sbin)
@(mkdir -p $(DESTDIR)/usr/include)
@(mkdir -p $(DESTDIR)/usr/bin)
@(mkdir -p $(DESTDIR)/usr/sbin)
libraries:
@echo -e '$(COLORGREEN)Compiling libraries...$(COLORDEFAULT)'
$(Q)$(MAKE) -C lib $(MAKEFLAGS)
install-libraries:
@echo -e '$(COLORGREEN)Installing libraries...$(COLORDEFAULT)'
$(Q)$(MAKE) -C lib $(MAKEFLAGS) install
install-headers:
@echo -e '$(COLORGREEN)Installing headers...$(COLORDEFAULT)'
@cp -rf include/uapi/* $(DESTDIR)/usr/include
@cp -rf $(ARCHINCDIR)/uapi/asm $(DESTDIR)/usr/include
kernel:
@echo -e '$(COLORGREEN)Compiling the kernel...$(COLORDEFAULT)'
@(cd kernel; make)
ifeq ($(CONFIG_COMPRESS_GZIP),y)
@@echo -e '$(COLORGREEN)Compressing the kernel...$(COLORDEFAULT)'
@echo -e '\tZIP\t$(LYOSZKERNEL)'
@$(ZIP) -cfq $(LYOSKERNEL) > $(LYOSZKERNEL)
@cp -f $(LYOSZKERNEL) $(DESTDIR)/boot/
endif
@@echo -e '$(COLORGREEN)Kernel is ready.$(COLORDEFAULT)'
fs:
@echo -e '$(COLORGREEN)Compiling filesystem servers...$(COLORDEFAULT)'
$(Q)$(MAKE) -C fs $(MAKEFLAGS)
install-fs:
@echo -e '$(COLORGREEN)Installing filesystem servers...$(COLORDEFAULT)'
$(Q)$(MAKE) -C fs $(MAKEFLAGS) install
drivers:
@echo -e '$(COLORGREEN)Compiling device drivers...$(COLORDEFAULT)'
$(Q)$(MAKE) -C drivers $(MAKEFLAGS)
install-drivers:
@echo -e '$(COLORGREEN)Installing device drivers...$(COLORDEFAULT)'
$(Q)$(MAKE) -C drivers $(MAKEFLAGS) install
servers:
@echo -e '$(COLORGREEN)Compiling servers...$(COLORDEFAULT)'
$(Q)$(MAKE) -C servers $(MAKEFLAGS)
install-servers:
@echo -e '$(COLORGREEN)Installing servers...$(COLORDEFAULT)'
$(Q)$(MAKE) -C servers $(MAKEFLAGS) install
net:
@echo -e '$(COLORGREEN)Compiling network drivers...$(COLORDEFAULT)'
$(Q)$(MAKE) -C net $(MAKEFLAGS)
install-net:
@echo -e '$(COLORGREEN)Installing network drivers...$(COLORDEFAULT)'
$(Q)$(MAKE) -C net $(MAKEFLAGS) install
tests:
@echo -e '$(COLORGREEN)Compiling and installing tests...$(COLORDEFAULT)'
$(Q)$(MAKE) -C tests $(MAKEFLAGS)
$(Q)$(MAKE) -C tests $(MAKEFLAGS) install