@@ -28,12 +28,12 @@ LINUX_HEADERS_DIR := linux-headers
28
28
LINUX_BZIMAGE := $(LINUX_DIR ) /arch/x86/boot/bzImage
29
29
BOOTFS_IMAGE := floppy.img
30
30
31
- .PHONY : all source update configure build clean reset
32
- all : configure $(BOOTFS_IMAGE )
31
+ .PHONY : all configure source update clean reset
32
+ all : $(BOOTFS_IMAGE )
33
+ configure : musl-configure busybox-configure linux-configure
33
34
source : $(MUSL_DIR ) $(BUSYBOX_DIR ) $(LINUX_DIR )
34
35
update : musl-update busybox-update linux-update
35
- configure : musl-configure busybox-configure linux-configure
36
- clean : musl-clean busybox-clean rootfs-clean linux-clean
36
+ clean : musl-clean busybox-clean rootfs-clean linux-clean bootfs-clean
37
37
reset :
38
38
rm -rf " $( MUSL_DIR) " " $( MUSL_BUILD_DIR) " " $( BUSYBOX_DIR) " " $( LINUX_DIR) " \
39
39
" $( LINUX_HEADERS_DIR) " " $( ROOTFS_DIR) " " $( ROOTFS_CPIO) " \
@@ -42,8 +42,13 @@ reset:
42
42
$(MUSL_DIR ) :
43
43
git clone --depth=1 " $( MUSL_SOURCE) " " $( MUSL_DIR) "
44
44
45
- $(MUSL_BUILD_DIR ) :
46
- mkdir -p " $( MUSL_BUILD_DIR) " /{bin,include,lib}
45
+ $(MUSL_BUILD_DIR ) : | $(LINUX_HEADERS_DIR )
46
+ rm -rf " $( MUSL_BUILD_DIR) "
47
+
48
+ mkdir "$(MUSL_BUILD_DIR)" \
49
+ "$(MUSL_BUILD_DIR)"/bin \
50
+ "$(MUSL_BUILD_DIR)"/include \
51
+ "$(MUSL_BUILD_DIR)"/lib
47
52
48
53
# These symlinks ensure that programs and headers required for building BusyBox
49
54
# under musl are present (besides musl-gcc).
@@ -55,49 +60,52 @@ $(MUSL_BUILD_DIR):
55
60
ln -s "$$(which objcopy)" "$(MUSL_BUILD_DIR)"/bin/musl-objcopy
56
61
ln -s "$$(which objdump)" "$(MUSL_BUILD_DIR)"/bin/musl-objdum
57
62
ln -s "$$(which pkg-config)" "$(MUSL_BUILD_DIR)"/bin/musl-pkg-config
58
- ln -s ../../linux-headers /include/linux "$(MUSL_BUILD_DIR)"/include/linux
59
- ln -s ../../linux-headers /include/mtd "$(MUSL_BUILD_DIR)"/include/mtd
60
- ln -s ../../linux-headers /include/asm "$(MUSL_BUILD_DIR)"/include/asm
61
- ln -s ../../linux-headers /include/asm-generic "$(MUSL_BUILD_DIR)"/include/asm-generic
63
+ ln -s " ../../$(LINUX_HEADERS_DIR) /include/linux" "$(MUSL_BUILD_DIR)"/include/linux
64
+ ln -s " ../../$(LINUX_HEADERS_DIR) /include/mtd" "$(MUSL_BUILD_DIR)"/include/mtd
65
+ ln -s " ../../$(LINUX_HEADERS_DIR) /include/asm" "$(MUSL_BUILD_DIR)"/include/asm
66
+ ln -s " ../../$(LINUX_HEADERS_DIR) /include/asm-generic" "$(MUSL_BUILD_DIR)"/include/asm-generic
62
67
63
- $(MUSL_GCC ) : $(MUSL_DIR ) $(MUSL_BUILD_DIR ) $( LINUX_HEADERS_DIR ) | musl-configure
68
+ $(MUSL_GCC ) : | $(MUSL_DIR ) $(MUSL_BUILD_DIR )
64
69
$(MAKE ) -C " $( MUSL_DIR) " -j " $$ (nproc)" all
65
70
$(MAKE ) -C " $( MUSL_DIR) " install
66
71
67
- .PHONY : musl-update musl-configure musl-clean
68
-
72
+ .PHONY : musl-update
69
73
musl-update : $(MUSL_DIR )
70
74
git -C " $( MUSL_DIR) " pull
71
75
76
+ .PHONY : musl-configure
72
77
musl-configure : $(MUSL_DIR )
73
78
cd " $( MUSL_DIR) " && ./configure --prefix=../" $( MUSL_BUILD_DIR) "
74
79
80
+ .PHONY : musl-clean
75
81
musl-clean :
76
82
[ -d " $( MUSL_DIR) " ] && $(MAKE ) -C " $( MUSL_DIR) " distclean
77
83
rm -rf " $( MUSL_BUILD_DIR) "
78
84
79
85
$(BUSYBOX_DIR ) :
80
86
git clone --depth=1 " $( BUSYBOX_SOURCE) " " $( BUSYBOX_DIR) "
81
87
82
- $(BUSYBOX ) : $(BUSYBOX_DIR ) $(MUSL_BUILD_DIR ) | busybox-configure
88
+ $(BUSYBOX ) : $(BUSYBOX_DIR ) /.config $(MUSL_GCC ) | $( BUSYBOX_DIR )
83
89
$(MAKE ) -C " $( BUSYBOX_DIR) " -j " $$ (nproc)" CC=../$(MUSL_GCC ) all
84
90
85
- .PHONY : busybox-update busybox-configure busybox-clean
86
-
91
+ .PHONY : busybox-update
87
92
busybox-update : $(BUSYBOX_DIR )
88
93
git -C " $( BUSYBOX_DIR) " pull
89
94
90
- busybox-configure : $(BUSYBOX_DIR ) $(MUSL_GCC )
95
+ .PHONY : busybox-configure
96
+ busybox-configure : $(BUSYBOX_DIR )
91
97
cp " $( BUSYBOX_CONFIG) " " $( BUSYBOX_DIR) " /.config
92
98
$(MAKE ) -C " $( BUSYBOX_DIR) " CC=../$(MUSL_GCC ) oldconfig
93
99
100
+ .PHONY : busybox-clean
94
101
busybox-clean :
95
102
[ -d " $( BUSYBOX_DIR) " ] && $(MAKE ) -C " $( BUSYBOX_DIR) " distclean
96
103
97
104
# https://www.kernel.org/doc/Documentation/admin-guide/devices.txt
98
105
define _ROOTFS_BUILD_CMDS :=
99
106
set -e
100
- mkdir -p "$(ROOTFS_DIR ) "/{root,bin,sbin,dev,proc,etc,sys,tmp}
107
+ rm -rf "$(ROOTFS_DIR ) "
108
+ mkdir "$(ROOTFS_DIR ) " "$(ROOTFS_DIR ) "/root "$(ROOTFS_DIR ) "/bin "$(ROOTFS_DIR ) "/sbin "$(ROOTFS_DIR ) "/dev "$(ROOTFS_DIR ) "/proc "$(ROOTFS_DIR ) "/etc "$(ROOTFS_DIR ) "/sys "$(ROOTFS_DIR ) "/tmp
101
109
$(MAKE ) -C "$(BUSYBOX_DIR ) " CC=../$(MUSL_GCC ) CONFIG_PREFIX=../"$(ROOTFS_DIR ) " install
102
110
mknod "$(ROOTFS_DIR ) "/dev/null c 1 3
103
111
mknod "$(ROOTFS_DIR ) "/dev/zero c 1 5
@@ -116,7 +124,7 @@ cd "$(ROOTFS_DIR)" && find . | cpio -H newc -o > ../"$(ROOTFS_CPIO)"
116
124
rm -rf "$(ROOTFS_DIR ) "
117
125
endef
118
126
export ROOTFS_BUILD_CMDS := $(value _ROOTFS_BUILD_CMDS)
119
- $(ROOTFS_CPIO ) : $(BUSYBOX )
127
+ $(ROOTFS_CPIO ) : $(BUSYBOX ) $( ROOTFS_OVERLAYDIR )
120
128
# We don't need actual root privileges for this operation.
121
129
echo "$${ROOTFS_BUILD_CMDS}" | fakeroot
122
130
@@ -127,22 +135,23 @@ rootfs-clean:
127
135
$(LINUX_DIR ) :
128
136
git clone --depth=1 " $( LINUX_SOURCE) " " $( LINUX_DIR) "
129
137
130
- $(LINUX_HEADERS_DIR ) : $(LINUX_DIR )
138
+ $(LINUX_HEADERS_DIR ) : | $(LINUX_DIR )
131
139
$(MAKE ) -C " $( LINUX_DIR) " \
132
140
headers_install INSTALL_HDR_PATH=../" $( LINUX_HEADERS_DIR) "
133
141
134
- $(LINUX_BZIMAGE ) : $(LINUX_DIR ) $(ROOTFS_CPIO ) | linux-configure
142
+ $(LINUX_BZIMAGE ) : $(LINUX_DIR ) /.config $(ROOTFS_CPIO ) | $( LINUX_DIR )
135
143
$(MAKE ) -C " $( LINUX_DIR) " -j " $$ (nproc)" bzImage
136
144
137
- .PHONY : linux-update linux-configure linux-clean
138
-
145
+ .PHONY : linux-update
139
146
linux-update : $(LINUX_DIR )
140
147
git -C " $( LINUX_DIR) " pull
141
148
149
+ .PHONY : linux-configure
142
150
linux-configure : $(LINUX_DIR )
143
151
cp " $( LINUX_CONFIG) " " $( LINUX_DIR) " /.config
144
152
$(MAKE ) -C " $( LINUX_DIR) " oldconfig
145
153
154
+ .PHONY : linux-clean
146
155
linux-clean :
147
156
[ -d " $( LINUX_DIR) " ] && $(MAKE ) -C " $( LINUX_DIR) " distclean
148
157
rm -rf " $( LINUX_HEADERS_DIR) "
@@ -169,15 +178,18 @@ export BOOTFS_BUILD_CMDS := $(value _BOOTFS_BUILD_CMDS)
169
178
$(BOOTFS_IMAGE ) : $(LINUX_BZIMAGE )
170
179
dd if=/dev/zero of=" $( BOOTFS_IMAGE) " \
171
180
bs=1024 count=" $( BOOTFS_SIZE) " conv=fsync
172
-
173
181
# losetup, mount and mkfs.fat likely require actual root privileges.
174
182
echo "$${BOOTFS_BUILD_CMDS}" | sudo -s
175
183
176
- .PHONY : runqemu-bzImage runqemu-floppy.img
184
+ .PHONY : bootfs-clean
185
+ bootfs-clean :
186
+ rm -f " $( BOOTFS_IMAGE) "
177
187
188
+ .PHONY : runqemu-bzImage
178
189
runqemu-bzImage :
179
190
$(QEMU_CMD ) -kernel " $( LINUX_BZIMAGE) "
180
191
192
+ .PHONY : runqemu-floppy.img
181
193
runqemu-$(BOOTFS_IMAGE ) :
182
194
# QEMU's UEFI implementation doesn't seem to support booting from an internal
183
195
# FDD, so we simulate an external USB-connected drive instead.
0 commit comments