X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=bootcensus;a=blobdiff_plain;f=Makefile;h=8a1216126054621384d8eaa5fa2d15ef50e80d7b;hp=0722ce4d6f5a5cd0ea4dc8c0dd357e5bcc9cc6d0;hb=84d954eff1e78353c2d17a9ad5e057e5a07aee5e;hpb=559dd7c3c836a69eac46bd12c7ef61bb5de8882c diff --git a/Makefile b/Makefile index 0722ce4..8a12161 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,23 @@ -csrc = $(wildcard src/*.c) $(wildcard src/libc/*.c) -ssrc = $(wildcard src/*.s) $(wildcard src/libc/*.s) $(wildcard src/boot/*.s) -obj = $(csrc:.c=.o) $(ssrc:.s=.o) +csrc = $(wildcard src/*.c) $(wildcard src/libc/*.c) $(wildcard src/census/*.c) +ssrc = $(wildcard src/*.s) $(wildcard src/libc/*.s) $(wildcard src/boot/*.s) $(wildcard src/census/*.s) +Ssrc = $(wildcard src/*.S) +obj = $(csrc:.c=.o) $(ssrc:.s=.o) $(Ssrc:.S=.o) dep = $(obj:.o=.d) -elf = test -bin = test.bin +elf = bcensus +bin = bcensus.bin warn = -pedantic -Wall +#opt = -O2 dbg = -g inc = -Isrc -Isrc/libc +gccopt = -fno-pic -ffreestanding -nostdinc -fno-builtin -ffast-math -CFLAGS = $(ccarch) -march=i386 $(warn) $(dbg) -nostdinc -fno-builtin $(inc) $(def) +CFLAGS = $(ccarch) -march=i386 $(warn) $(opt) $(dbg) $(gccopt) $(inc) $(def) ASFLAGS = $(asarch) -march=i386 $(dbg) -nostdinc -fno-builtin $(inc) -LDFLAGS = $(ldarch) -T pcboot.ld -print-gc-sections +LDFLAGS = $(ldarch) -nostdlib -T pcboot.ld -print-gc-sections +#QEMU_FLAGS = -fda floppy.img -serial file:serial.log -soundhw sb16 +QEMU_FLAGS = -hda disk.img -serial file:serial.log -soundhw sb16 ifneq ($(shell uname -m), i386) ccarch = -m32 @@ -20,24 +25,54 @@ ifneq ($(shell uname -m), i386) ldarch = -m elf_i386 endif +.PHONY: all +all: disk.img #floppy.img + +disk.img: boot.img blank.img + @echo + @echo - patching pcboot onto the blank disk image ... + cp blank.img $@ + dd if=boot.img of=$@ bs=512 status=none conv=notrunc + dd if=blank.img of=$@ bs=1 seek=440 skip=440 count=70 status=none conv=notrunc + +blank.img: + @echo + @echo - generating blank disk image with FAT partition ... + dd if=/dev/zero of=part.img bs=1024 count=63488 + mkfs -t vfat -n PCBOOT part.img + dd if=/dev/zero of=$@ bs=1024 count=65536 + echo start=2048 type=c | sfdisk $@ + dd if=part.img of=$@ bs=512 seek=2048 conv=notrunc + rm part.img + floppy.img: boot.img dd if=/dev/zero of=$@ bs=512 count=2880 dd if=$< of=$@ conv=notrunc +pcboot.iso: floppy.img + rm -rf cdrom + git archive --format=tar --prefix=cdrom/ HEAD | tar xf - + cp $< cdrom + mkisofs -o $@ -R -J -V pcboot -b $< cdrom + + boot.img: bootldr.bin $(bin) cat bootldr.bin $(bin) >$@ -# bootldr.bin will contain only .boot and .boot2 +# bootldr.bin will contain .boot, .boot2, .bootend, and .lowtext bootldr.bin: $(elf) - objcopy -O binary -j '.boot*' $< $@ + objcopy -O binary -j '.boot*' -j .lowtext $< $@ -# the main binary will contain every section *except* .boot and .boot2 +# the main binary will contain every section *except* those $(bin): $(elf) - objcopy -O binary -R '.boot*' $< $@ + objcopy -O binary -R '.boot*' -R .lowtext $< $@ $(elf): $(obj) $(LD) -o $@ $(obj) -Map link.map $(LDFLAGS) +%.o: %.S + $(CC) -o $@ $(CFLAGS) -c $< + -include $(dep) %.d: %.c @@ -45,7 +80,7 @@ $(elf): $(obj) .PHONY: clean clean: - rm -f $(obj) $(bin) boot.img floppy.img link.map + rm -f $(obj) $(bin) boot.img floppy.img disk.img link.map .PHONY: cleandep cleandep: @@ -55,11 +90,30 @@ cleandep: disasm: bootldr.disasm $(elf).disasm bootldr.disasm: $(elf) - objdump -d $< -j .boot -j .boot2 -m i8086 >$@ + objdump -d $< -j .boot -j .boot2 -j .lowtext -m i8086 >$@ $(elf).disasm: $(elf) - objdump -d $< -j .startup -j .text -m i386 >$@ + objdump -d $< -j .startup -j .text -j .lowtext -m i386 >$@ + +$(elf).sym: $(elf) + objcopy --only-keep-debug $< $@ .PHONY: run run: $(bin) - qemu-system-i386 -fda floppy.img -serial file:serial.log + qemu-system-i386 $(QEMU_FLAGS) + +.PHONY: debug +debug: $(bin) $(elf).sym + qemu-system-i386 $(QEMU_FLAGS) -s -S + +.PHONY: sym +sym: $(elf).sym + +.PHONY: mount +mount: disk.img + mount -o loop,offset=1048576 $< /mnt + +.PHONY: data +data: blank.img + mcopy -D o -i $<@@1M data/* ::.data + $(MAKE)