# Set the following variables to suit your system:

# The Linux source archive, binary archive, diff, build sub-directory.
LINUX_SRC=linux-2.4.31.tar.bz2
LINUX_SRC_UNPACK=tar xjf
LINUX_BIN=
LINUX_BIN_UNPACK=
LINUX_DIFF=linux-2.4.31.diff
LINUX_DIR=linux-2.4.31
LINUX_BUILD_FROM=source

# The memtest86 source archive, binary archive, diff, build sub-directory.
MEMTEST_SRC=memtest86-3.2.tar.bz2
MEMTEST_SRC_UNPACK=tar xjf
MEMTEST_BIN=memt32.zip
MEMTEST_BIN_UNPACK=unzip
#MEMTEST_DIFF=memtest86-3.2.diff
MEMTEST_DIR=memtest86-3.2
# Source will no longer compile on my system, so use binary.
MEMTEST_BUILD_FROM=binary

# The mprime source archive, binary archive, diff, build sub-directory.
MPRIME_DIR=
MPRIME_SRC=
MPRIME_SRC_UNPACK=
MPRIME_BIN=sprime2414.tar.gz
MPRIME_BIN_UNPACK=tar xzf
#MPRIME_DIFF=
MPRIME_BUILD_FROM=binary

# The BusyBox source archive, binary archive, diff, build sub-directory.
BUSYBOX_SRC=busybox-1.01.tar.bz2
BUSYBOX_SRC_UNPACK=tar xjf
BUSYBOX_BIN=
BUSYBOX_BIN_UNPACK=
BUSYBOX_DIFF=busybox-1.01.diff
BUSYBOX_DIR=busybox-1.01
BUSYBOX_BUILD_FROM=source

# The prefix for commands that need superuser access.
AS_ROOT=su root

# The loop device to use during the build.
LOOP_DEV=/dev/loop0

# Change the version numer if you have changed any source files.
VERSION=1.4

# No more changes should be needed.


.DELETE_ON_ERROR:

.PHONY: bootloader clean realclean

SRC_FILES=README.src Makefile $(BUSYBOX_DIFF) $(LINUX_DIFF) \
          $(MEMTEST_DIFF) $(MPRIME_DIFF)
BIN_FILES=README MD5SUM floppy.bin

all: binary

binary: mmdisk-$(VERSION).zip

source: mmdisk-src-$(VERSION).tar.gz

ifeq ($(BUSYBOX_BUILD_FROM),source)
busybox: $(BUSYBOX_SRC) $(BUSYBOX_DIFF)
	rm -rf $(BUSYBOX_DIR)
	$(BUSYBOX_SRC_UNPACK) $(BUSYBOX_SRC)
	patch -u -p0 -i $(BUSYBOX_DIFF)
	make -C $(BUSYBOX_DIR) busybox
	cp $(BUSYBOX_DIR)/busybox busybox
	rm -r $(BUSYBOX_DIR)
else
busybox: $(BUSYBOX_BIN)
	$(BUSYBOX_BIN_UNPACK) $(BUSYBOX_BIN)
	false # Not implemented
endif

ifeq ($(LINUX_BUILD_FROM),source)
linux: $(LINUX_SRC) $(LINUX_DIFF)
	rm -rf $(LINUX_DIR)
	$(LINUX_SRC_UNPACK) $(LINUX_SRC)
	patch -u -p0 -i $(LINUX_DIFF)
	make -C $(LINUX_DIR) oldconfig bzImage CC="gcc -V3.4"
	cp $(LINUX_DIR)/arch/i386/boot/bzImage ./linux
	rm -r $(LINUX_DIR)
else
linux: $(LINUX_BIN)
	$(LINUX_BIN_UNPACK) $(LINUX_BIN)
	false # Not implemented
endif

ifeq ($(MEMTEST_BUILD_FROM),source)
memtest: $(MEMTEST_SRC) $(MEMTEST_DIFF)
	rm -rf $(MEMTEST_DIR)
	$(MEMTEST_SRC_UNPACK) $(MEMTEST_SRC)
#	patch -u -p0 -i $(MEMTEST_DIFF)
	make -C $(MEMTEST_DIR) memtest.bin
	cp $(MEMTEST_DIR)/memtest.bin memtest
	rm -r $(MEMTEST_DIR)
else
memtest: $(MEMTEST_BIN)
	$(MEMTEST_BIN_UNPACK) $(MEMTEST_BIN) memtest.bin
	mv memtest.bin memtest
	touch memtest
endif

ifeq ($(MPRIME_BUILD_FROM),source)
mprime: $(MPRIME_SRC) $(MPRIME_DIFF)
	$(MPRIME_BIN_UNPACK) $(MPRIME_BIN)
	false # Not implemented
else
mprime: $(MPRIME_BIN)
	$(MPRIME_BIN_UNPACK) $(MPRIME_BIN) mprime
	touch mprime
endif

initrd.gz: src/root/* src/root/etc/* busybox mprime
	cp -a busybox mprime src/root/bin
	genromfs -f initrd -d src/root
	rm src/root/bin/busybox src/root/bin/mprime
	gzip -9 initrd

bootloader:
	losetup $(LOOP_DEV) floppy.bin
	syslinux $(LOOP_DEV)
	losetup -d $(LOOP_DEV)

floppy.bin: initrd.gz src/boot/* linux memtest
	mformat -f 1440 -C -i floppy.bin ::
	@echo "# Superuser access is needed for the next part."
	$(AS_ROOT) make bootloader
	@echo "# Finished superuser part."
	mcopy -i floppy.bin src/boot/* linux initrd.gz memtest ::

MD5SUM: floppy.bin
	md5sum floppy.bin > MD5SUM

README: src/doc/README
	cp -p $< $@

mmdisk-$(VERSION).zip: $(BIN_FILES)
	rm -f $@
	zip -9 -o $@ $(BIN_FILES)

mmdisk-src-$(VERSION).tar.gz: $(SRC_FILES) src/root/* src/boot/* src/doc/*
	rm -f $@
	tar -c $(SRC_FILES) src | gzip -9 > $@

clean:
	rm -f initrd.gz $(BIN_FILES)
	rm -rf $(BUSYBOX_DIR)
	rm -rf $(LINUX_DIR)
	rm -rf $(MEMTEST_DIR)
	rm -rf $(MPRIME_DIR)
	rm -f mmdisk-$(VERSION).zip mmdisk-src-$(VERSION).tar.gz

realclean: clean
	rm -f busybox linux memtest mprime
