Big cleanup in Makefile to follow Makefile standards a bit better.

minor edits to create-disk.sh to work with some of the changes for now
This commit is contained in:
2025-09-09 11:03:50 -04:00
parent 7cc0b4a392
commit 4e05efaa6b
2 changed files with 70 additions and 47 deletions

102
Makefile
View File

@@ -17,46 +17,69 @@ INCDIR := include
BUILD_DIR := build BUILD_DIR := build
IMG := $(BUILD_DIR)/disk.img IMG := $(BUILD_DIR)/disk.img
IMGZ := $(BUILD_DIR)/disk.img.gz IMGZ := $(BUILD_DIR)/disk.img.gz
DEP_DIR := $(BUILD_DIR)/deps
# Get current Git version (tag) and hash # Get current Git version (tag) and hash
GIT_VERSION := $(shell git describe --tags) GIT_VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo unknown)
GIT_HASH := $(shell git rev-parse HEAD) GIT_HASH := $(shell git rev-parse HEAD 2>/dev/null || echo unknown)
GIT_NASM_DEFINES := -D __GIT_VER__='"$(GIT_VERSION)"' -D __GIT_HASH__='"$(GIT_HASH)"' GIT_NASM_DEFINES := -D __GIT_VER__='"$(GIT_VERSION)"' -D __GIT_HASH__='"$(GIT_HASH)"'
NASMFLAGS := -Wall -f bin -i$(INCDIR)/ $(GIT_NASM_DEFINES) NASMFLAGS := -Wall -f bin -i$(INCDIR)/ $(GIT_NASM_DEFINES)
QEMU ?= qemu-system-i386 QEMU ?= qemu-system-i386
QEMU_OPTS ?= -L ./bin/ -bios bios.bin -cpu pentium3 -m 128 -S -s -monitor stdio -nic none QEMU_OPTS ?= -L ./bin/ -bios bios.bin -cpu pentium3 -m 64 -S -s -monitor stdio -nic none
MBR_SRCS := $(wildcard src/mbr/*.nasm)
VBR_SRCS := $(wildcard src/vbr/*.nasm)
STAGE2_SRCS := $(wildcard src/stage2/*.nasm)
BOOTTEST_SRCS := $(wildcard src/miniboot32/*.nasm)
MBR_BINS := $(patsubst src/mbr/%.nasm, $(BUILD_DIR)/mbr/%.bin, $(MBR_SRCS))
VBR_BINS := $(patsubst src/vbr/%.nasm, $(BUILD_DIR)/vbr/%.bin, $(VBR_SRCS))
STAGE2_BINS := $(patsubst src/stage2/%.nasm, $(BUILD_DIR)/stage2/%.bin, $(STAGE2_SRCS))
BOOTTEST_BINS := $(patsubst src/miniboot32/%.nasm, $(BUILD_DIR)/miniboot32/%.bin, $(BOOTTEST_SRCS))
ALL_BINS := $(MBR_BINS) $(VBR_BINS) $(STAGE2_BINS) $(BOOTTEST_BINS)
.DEFAULT_GOAL := all
.DELETE_ON_ERROR:
.PHONY: all mbr vbr stage2 boottest clean run run_qemu run_bochs img imgz help .PHONY: all mbr vbr stage2 boottest clean run run_qemu run_bochs img imgz help
all: $(IMG) $(IMGZ) $(ALL_BINS)
mbr: $(MBR_BINS)
vbr: $(VBR_BINS)
stage2: $(STAGE2_BINS)
boottest: $(BOOTTEST_BINS)
mbr_source_files := $(wildcard src/mbr/*.nasm) # Build Rules
vbr_source_files := $(wildcard src/vbr/*.nasm)
stage2_source_files := $(wildcard src/stage2/*.nasm)
boottest_source_files := $(wildcard src/miniboot32/*.nasm)
mbr_binary_files := $(patsubst src/mbr/%.nasm, build/%.bin, $(mbr_source_files)) $(BUILD_DIR)/mbr/%.bin: src/mbr/%.nasm | $(DEP_DIR)
vbr_binary_files := $(patsubst src/vbr/%.nasm, build/%.bin, $(vbr_source_files)) @mkdir -p $(@D)
stage2_binary_files := $(patsubst src/stage2/%.nasm, build/%.bin, $(stage2_source_files)) @nasm $(NASMFLAGS) -MD $(DEP_DIR)/$*.d -MT $@ $< -o $@
boottest_binary_files := $(patsubst src/miniboot32/%.nasm, build/%.bin, $(boottest_source_files))
all: $(IMG) $(IMGZ) $(mbr_binary_files) $(vbr_binary_files) $(stage2_binary_files) $(BUILD_DIR)/vbr/%.bin: src/vbr/%.nasm | $(DEP_DIR)
mbr: $(mbr_binary_files) @mkdir -p $(@D)
vbr: $(vbr_binary_files) @nasm $(NASMFLAGS) -MD $(DEP_DIR)/$*.d -MT $@ $< -o $@
stage2: $(stage2_binary_files)
boottest: $(boottest_binary_files)
clean: $(BUILD_DIR)/stage2/%.bin: src/stage2/%.nasm | $(DEP_DIR)
@rm -v $(BUILD_DIR)/*.bin @mkdir -p $(@D)
@rm -v $(BUILD_DIR)/*.map @nasm $(NASMFLAGS) -MD $(DEP_DIR)/$*.d -MT $@ $< -o $@
@rm -v $(BUILD_DIR)/*.img
@rm -v $(BUILD_DIR)/output/*.img.gz
@rm -v $(BUILD_DIR)/output/*.tar.gz
run: $(IMG) $(BUILD_DIR)/miniboot32/%.bin: src/miniboot32/%.nasm | $(DEP_DIR)
@$(QEMU) $(QEMU_OPTS) -hda $(IMG) @mkdir -p $(@D)
@nasm $(NASMFLAGS) -MD $(DEP_DIR)/$*.d -MT $@ $< -o $@
run_bochs: $(IMG)
@bochs -q $(DEP_DIR):
@mkdir -p $@
# Disk image's
$(IMG): $(ALL_BINS) | $(@D) scripts/create-disk.sh
@scripts/create-disk.sh
$(IMGZ): $(IMG)
@gzip -9kc $(IMG) > $(IMGZ)
img: $(IMG) img: $(IMG)
@file $(IMG) @file $(IMG)
@@ -64,24 +87,19 @@ img: $(IMG)
imgz: $(IMGZ) imgz: $(IMGZ)
@file $(IMGZ) @file $(IMGZ)
build/%.bin: src/mbr/%.nasm # Helpers
@mkdir -p $(shell dirname $@)
@nasm $(NASMFLAGS) $(GIT_NASM_DEFINES) $< -o $@
build/%.bin: src/vbr/%.nasm run: $(IMG)
@mkdir -p $(shell dirname $@) @$(QEMU) $(QEMU_OPTS) -hda $(IMG)
@nasm $(NASMFLAGS) $(GIT_NASM_DEFINES) $< -o $@
build/%.bin: src/stage2/%.nasm run_bochs: $(IMG)
@mkdir -p $(shell dirname $@) @bochs -q
@nasm $(NASMFLAGS) $(GIT_NASM_DEFINES) $< -o $@
build/%.bin: src/miniboot32/%.nasm clean:
@mkdir -p $(shell dirname $@) @$(RM) -rv $(BUILD_DIR)/
@nasm $(NASMFLAGS) $(GIT_NASM_DEFINES) $< -o $@
$(IMG): $(mbr_binary_files) $(vbr_binary_files) $(stage2_binary_files) $(boottest_binary_files) help:
@scripts/create-disk.sh @awk '/^[A-Za-z0-9_%-]+:/{print $$1}' $(MAKEFILE_LIST) | sed 's/:$$//' | sort -u
$(IMGZ): $(IMG) # Include header deps
@gzip -9kc $(IMG) > $(IMGZ) -include $(wildcard $(DEP_DIR)/*.d)

View File

@@ -21,10 +21,10 @@ if [ $(id -u) = 0 ]; then
fi fi
# paths to bootcode # paths to bootcode
mbr_file=build/mbr.bin mbr_file=build/mbr/mbr.bin
vbr_file=build/vbr.bin vbr_file=build/vbr/vbr.bin
stage2_file=build/stage2.bin stage2_file=build/stage2/stage2.bin
boottest_file=build/BOOTi686.bin boottest_file=build/miniboot32/BOOTi686.bin
# Disk creation options # Disk creation options
disk_img=build/disk.img disk_img=build/disk.img
@@ -161,9 +161,14 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
dd if="$part_img" of="$disk_img" bs=$disk_sector_size seek=$part_start conv=notrunc dd if="$part_img" of="$disk_img" bs=$disk_sector_size seek=$part_start conv=notrunc
echo " *** Outputing disk images will be in ./build/output/* *** " echo " *** Outputing disk images will be in ./build/output/* *** "
if [ ! -d ./build/output ]; then
echo "./build/output does not exist. creating"
mkdir -p ./build/output
fi
gzip -9c "$disk_img" > "$disk_img_final" gzip -9c "$disk_img" > "$disk_img_final"
gzip -9c "$part_img" > "$part_img_final" gzip -9c "$part_img" > "$part_img_final"
tar caf "$artifacts_archive" build/*.bin build/*.map tar caf "$artifacts_archive" --exclude ./build/output ./build/
else else
# Unknown. # Unknown.
echo "Unknown OS type! Supported build hosts systems are GNU/Linux (& WSL)" echo "Unknown OS type! Supported build hosts systems are GNU/Linux (& WSL)"