-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
109 lines (92 loc) · 3.42 KB
/
Makefile
File metadata and controls
109 lines (92 loc) · 3.42 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
# Makefile for building the Linux kernel with GCC 13.4
# Variables
LINUX_DIR := linux
COLLOID_KERNEL_DIR := colloid/tpp/linux-6.3/
KBUILD := kbuild
BUILD_DIR := $(LINUX_DIR)/$(KBUILD)
COLLOID_BUILD_DIR := $(COLLOID_KERNEL_DIR)/$(KBUILD)
CC_VER := gcc-13
JOBS := $(shell nproc)
KERNEL_IMAGE := $(BUILD_DIR)/arch/x86/boot/bzImage
COLLOID_KERNEL_IMAGE := $(COLLOID_BUILD_DIR)/arch/x86/boot/bzImage
QEMU := qemu-system-x86_64
QEMU_MEM := 4G
QEMU_CPUS := 8
QEMU_DISK := rootfs.img
QEMU_COLLOID_DISK := colloid_rootfs.img
QEMU_EXTRA := -nographic -serial mon:stdio
.PHONY: all colloid config kernel fs boot clean colloid colloid_config colloid_kernel colloid_fs boot_colloid
# Default target: configure then build
all: config kernel fs boot
colloid: colloid_config colloid_kernel colloid_fs boot_colloid
# Step 1: prepare kernel configuration
config:
mkdir -p $(BUILD_DIR)
$(MAKE) CC=$(CC_VER) -C $(LINUX_DIR) O=$(CURDIR)/$(BUILD_DIR) defconfig
config_cloudlab:
mkdir -p $(BUILD_DIR)
$(MAKE) CC=$(CC_VER) -C $(LINUX_DIR) O=$(CURDIR)/$(BUILD_DIR) defconfig
cp kernel-configs/cloudlab-v6.6.config $(BUILD_DIR)/.config
yes "" | make oldconfig
colloid_config:
mkdir -p $(COLLOID_BUILD_DIR)
$(MAKE) CC=$(CC_VER) -C $(COLLOID_KERNEL_DIR) O=$(CURDIR)/$(COLLOID_BUILD_DIR) defconfig
yes "" | $(MAKE) CC=$(CC_VER) -C $(COLLOID_KERNEL_DIR) O=$(CURDIR)/$(COLLOID_BUILD_DIR) oldconfig
colloid_config_cloudlab:
mkdir -p $(COLLOID_BUILD_DIR)
$(MAKE) CC=$(CC_VER) -C $(COLLOID_KERNEL_DIR) O=$(CURDIR)/$(COLLOID_BUILD_DIR) defconfig
cp kernel-configs/cloudlab-colloid.config $(COLLOID_BUILD_DIR)/.config
# Step 2: build kernel image and modules, stop at first fatal error
kernel:
mkdir -p $(BUILD_DIR)
$(MAKE) CC=$(CC_VER) -C $(LINUX_DIR) O=$(CURDIR)/$(BUILD_DIR) -j"$(JOBS)" bzImage modules LOCALVERSION=-my-k --stop
colloid_kernel:
mkdir -p $(COLLOID_BUILD_DIR)
$(MAKE) CC=$(CC_VER) -C $(COLLOID_KERNEL_DIR) O=$(CURDIR)/$(COLLOID_BUILD_DIR) -j"$(JOBS)" bzImage modules LOCALVERSION=-colloid --stop
$(MAKE) CC=$(CC_VER) -C $(COLLOID_KERNEL_DIR) O=$(CURDIR)/$(COLLOID_BUILD_DIR) -j"$(JOBS)" modules_install LOCALVERSION=-colloid --stop
colloid_deb:
$(MAKE) CC=$(CC_VER) -C $(COLLOID_KERNEL_DIR) O=$(CURDIR)/$(COLLOID_BUILD_DIR) -j"$(JOBS)" bindeb-pkg --stop
# Optional: clean up build artifacts
clean:
@echo "==> Cleaning kernel tree..."
cd $(LINUX_DIR) && \
make clean
@echo "==> Clean complete. Returned to parent directory."
fs:
chmod +x build_rootfs.sh && ./build_rootfs.sh
colloid_fs:
chmod +x build_colloid_rootfs.sh && ./build_colloid_rootfs.sh
boot:
@echo "==> Booting kernel in QEMU..."
$(QEMU) \
-enable-kvm \
-cpu host \
-machine q35,accel=kvm \
-kernel $(KERNEL_IMAGE) \
-initrd $(QEMU_DISK) \
-smp $(QEMU_CPUS) \
-m $(QEMU_MEM) \
-object memory-backend-ram,id=mem0,size=2G \
-object memory-backend-ram,id=mem1,size=2G \
-numa node,nodeid=0,memdev=mem0 \
-numa node,nodeid=1,memdev=mem1 \
-append "console=ttyS0" \
$(QEMU_EXTRA)
@echo "==> QEMU session ended."
boot_colloid:
@echo "==> Booting colloid kernel in QEMU..."
$(QEMU) \
-enable-kvm \
-cpu host \
-machine q35,accel=kvm \
-kernel $(COLLOID_KERNEL_IMAGE) \
-initrd $(QEMU_COLLOID_DISK) \
-smp $(QEMU_CPUS) \
-m $(QEMU_MEM) \
-object memory-backend-ram,id=mem0,size=2G \
-object memory-backend-ram,id=mem1,size=2G \
-numa node,nodeid=0,memdev=mem0 \
-numa node,nodeid=1,memdev=mem1 \
-append "console=ttyS0" \
$(QEMU_EXTRA)
@echo "==> QEMU session ended."