Skip to content
This repository was archived by the owner on Aug 21, 2024. It is now read-only.

Commit 7730d87

Browse files
committed
Fix Makefile rules and recipies
- Prerequisities for various makefile targets are now properly specified for the build and configure processes to run as expected, e.g. only rebuilding certain targets when certain relevant files are changed. - Removed the 'configure' prerequisite from 'all', making it easier to build after making changes, without redundantly redoing the initial configuration procedure. - Added the 'bootfs-clean' makefile target for removing floppy.img (or whatever $(BOOTFS_IMAGE) points to). - Symbolic link targets for include directories in $(MUSL_BUILD_DIR) now respect the value of $(LINUX_HEADERS_DIR). - Avoid using brace expansion in shell scripting, for better compatibility with shells. - Some minor formatting improvements.
1 parent 3e0f562 commit 7730d87

File tree

2 files changed

+44
-26
lines changed

2 files changed

+44
-26
lines changed

Makefile

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ LINUX_HEADERS_DIR := linux-headers
2828
LINUX_BZIMAGE := $(LINUX_DIR)/arch/x86/boot/bzImage
2929
BOOTFS_IMAGE := floppy.img
3030

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
3334
source: $(MUSL_DIR) $(BUSYBOX_DIR) $(LINUX_DIR)
3435
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
3737
reset:
3838
rm -rf "$(MUSL_DIR)" "$(MUSL_BUILD_DIR)" "$(BUSYBOX_DIR)" "$(LINUX_DIR)" \
3939
"$(LINUX_HEADERS_DIR)" "$(ROOTFS_DIR)" "$(ROOTFS_CPIO)" \
@@ -42,8 +42,13 @@ reset:
4242
$(MUSL_DIR):
4343
git clone --depth=1 "$(MUSL_SOURCE)" "$(MUSL_DIR)"
4444

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
4752

4853
# These symlinks ensure that programs and headers required for building BusyBox
4954
# under musl are present (besides musl-gcc).
@@ -55,49 +60,52 @@ $(MUSL_BUILD_DIR):
5560
ln -s "$$(which objcopy)" "$(MUSL_BUILD_DIR)"/bin/musl-objcopy
5661
ln -s "$$(which objdump)" "$(MUSL_BUILD_DIR)"/bin/musl-objdum
5762
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
6267

63-
$(MUSL_GCC): $(MUSL_DIR) $(MUSL_BUILD_DIR) $(LINUX_HEADERS_DIR) | musl-configure
68+
$(MUSL_GCC): | $(MUSL_DIR) $(MUSL_BUILD_DIR)
6469
$(MAKE) -C "$(MUSL_DIR)" -j "$$(nproc)" all
6570
$(MAKE) -C "$(MUSL_DIR)" install
6671

67-
.PHONY: musl-update musl-configure musl-clean
68-
72+
.PHONY: musl-update
6973
musl-update: $(MUSL_DIR)
7074
git -C "$(MUSL_DIR)" pull
7175

76+
.PHONY: musl-configure
7277
musl-configure: $(MUSL_DIR)
7378
cd "$(MUSL_DIR)" && ./configure --prefix=../"$(MUSL_BUILD_DIR)"
7479

80+
.PHONY: musl-clean
7581
musl-clean:
7682
[ -d "$(MUSL_DIR)" ] && $(MAKE) -C "$(MUSL_DIR)" distclean
7783
rm -rf "$(MUSL_BUILD_DIR)"
7884

7985
$(BUSYBOX_DIR):
8086
git clone --depth=1 "$(BUSYBOX_SOURCE)" "$(BUSYBOX_DIR)"
8187

82-
$(BUSYBOX): $(BUSYBOX_DIR) $(MUSL_BUILD_DIR) | busybox-configure
88+
$(BUSYBOX): $(BUSYBOX_DIR)/.config $(MUSL_GCC) | $(BUSYBOX_DIR)
8389
$(MAKE) -C "$(BUSYBOX_DIR)" -j "$$(nproc)" CC=../$(MUSL_GCC) all
8490

85-
.PHONY: busybox-update busybox-configure busybox-clean
86-
91+
.PHONY: busybox-update
8792
busybox-update: $(BUSYBOX_DIR)
8893
git -C "$(BUSYBOX_DIR)" pull
8994

90-
busybox-configure: $(BUSYBOX_DIR) $(MUSL_GCC)
95+
.PHONY: busybox-configure
96+
busybox-configure: $(BUSYBOX_DIR)
9197
cp "$(BUSYBOX_CONFIG)" "$(BUSYBOX_DIR)"/.config
9298
$(MAKE) -C "$(BUSYBOX_DIR)" CC=../$(MUSL_GCC) oldconfig
9399

100+
.PHONY: busybox-clean
94101
busybox-clean:
95102
[ -d "$(BUSYBOX_DIR)" ] && $(MAKE) -C "$(BUSYBOX_DIR)" distclean
96103

97104
# https://www.kernel.org/doc/Documentation/admin-guide/devices.txt
98105
define _ROOTFS_BUILD_CMDS :=
99106
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
101109
$(MAKE) -C "$(BUSYBOX_DIR)" CC=../$(MUSL_GCC) CONFIG_PREFIX=../"$(ROOTFS_DIR)" install
102110
mknod "$(ROOTFS_DIR)"/dev/null c 1 3
103111
mknod "$(ROOTFS_DIR)"/dev/zero c 1 5
@@ -116,7 +124,7 @@ cd "$(ROOTFS_DIR)" && find . | cpio -H newc -o > ../"$(ROOTFS_CPIO)"
116124
rm -rf "$(ROOTFS_DIR)"
117125
endef
118126
export ROOTFS_BUILD_CMDS := $(value _ROOTFS_BUILD_CMDS)
119-
$(ROOTFS_CPIO): $(BUSYBOX)
127+
$(ROOTFS_CPIO): $(BUSYBOX) $(ROOTFS_OVERLAYDIR)
120128
# We don't need actual root privileges for this operation.
121129
echo "$${ROOTFS_BUILD_CMDS}" | fakeroot
122130

@@ -127,22 +135,23 @@ rootfs-clean:
127135
$(LINUX_DIR):
128136
git clone --depth=1 "$(LINUX_SOURCE)" "$(LINUX_DIR)"
129137

130-
$(LINUX_HEADERS_DIR): $(LINUX_DIR)
138+
$(LINUX_HEADERS_DIR): | $(LINUX_DIR)
131139
$(MAKE) -C "$(LINUX_DIR)" \
132140
headers_install INSTALL_HDR_PATH=../"$(LINUX_HEADERS_DIR)"
133141

134-
$(LINUX_BZIMAGE): $(LINUX_DIR) $(ROOTFS_CPIO) | linux-configure
142+
$(LINUX_BZIMAGE): $(LINUX_DIR)/.config $(ROOTFS_CPIO) | $(LINUX_DIR)
135143
$(MAKE) -C "$(LINUX_DIR)" -j "$$(nproc)" bzImage
136144

137-
.PHONY: linux-update linux-configure linux-clean
138-
145+
.PHONY: linux-update
139146
linux-update: $(LINUX_DIR)
140147
git -C "$(LINUX_DIR)" pull
141148

149+
.PHONY: linux-configure
142150
linux-configure: $(LINUX_DIR)
143151
cp "$(LINUX_CONFIG)" "$(LINUX_DIR)"/.config
144152
$(MAKE) -C "$(LINUX_DIR)" oldconfig
145153

154+
.PHONY: linux-clean
146155
linux-clean:
147156
[ -d "$(LINUX_DIR)" ] && $(MAKE) -C "$(LINUX_DIR)" distclean
148157
rm -rf "$(LINUX_HEADERS_DIR)"
@@ -169,15 +178,18 @@ export BOOTFS_BUILD_CMDS := $(value _BOOTFS_BUILD_CMDS)
169178
$(BOOTFS_IMAGE): $(LINUX_BZIMAGE)
170179
dd if=/dev/zero of="$(BOOTFS_IMAGE)" \
171180
bs=1024 count="$(BOOTFS_SIZE)" conv=fsync
172-
173181
# losetup, mount and mkfs.fat likely require actual root privileges.
174182
echo "$${BOOTFS_BUILD_CMDS}" | sudo -s
175183

176-
.PHONY: runqemu-bzImage runqemu-floppy.img
184+
.PHONY: bootfs-clean
185+
bootfs-clean:
186+
rm -f "$(BOOTFS_IMAGE)"
177187

188+
.PHONY: runqemu-bzImage
178189
runqemu-bzImage:
179190
$(QEMU_CMD) -kernel "$(LINUX_BZIMAGE)"
180191

192+
.PHONY: runqemu-floppy.img
181193
runqemu-$(BOOTFS_IMAGE):
182194
# QEMU's UEFI implementation doesn't seem to support booting from an internal
183195
# FDD, so we simulate an external USB-connected drive instead.

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,13 @@ Makefile host system requirements:
3232
- the usual core utilities found on GNU/Linux installations
3333
- `make`, obviously
3434

35-
To fetch, configure and build everything at one go, run:
35+
To fetch sources and perform initial configuration, run:
36+
37+
```sh
38+
make configure
39+
```
40+
41+
Afterwards, to start the actual build process:
3642

3743
```sh
3844
make

0 commit comments

Comments
 (0)