csrc = $(wildcard src/*.c) $(wildcard src/libc/*.c) ssrc = $(wildcard src/*.s) $(wildcard src/libc/*.s) obj = $(csrc:.c=.o) $(ssrc:.s=.o) dep = $(csrc:.c=.d) elf = kern.elf warn = -pedantic -Wall dbg = -g inc = -Isrc -Isrc/libc gccflags = -fno-pic -ffreestanding -nostdinc -fno-builtin -fcommon CFLAGS = $(ccarch) -march=i386 $(warn) $(opt) $(dbg) $(gccflags) $(inc) $(def) -MMD ASFLAGS = $(asarch) -march=i386 $(dbg) -nostdinc -fno-builtin $(inc) LDFLAGS = $(ldarch) -nostdlib -T kern.ld -print-gc-sections ifneq ($(shell uname -m), i386) ccarch = -m32 asarch = --32 ldarch = -m elf_i386 endif # uncomment to use a specific toolchain #TOOLPREFIX = x86_64-elf- CC = $(TOOLPREFIX)gcc AS = $(TOOLPREFIX)as LD = $(TOOLPREFIX)ld OBJCOPY = $(TOOLPREFIX)objcopy OBJDUMP = $(TOOLPREFIX)objdump $(elf): $(obj) $(LD) -o $@ $(obj) -Map link.map $(LDFLAGS) %.o: %.S $(CC) -o $@ $(CFLAGS) -c $< -include $(dep) .PHONY: clean clean: rm -f $(obj) $(elf) .PHONY: cleandep cleandep: rm -f $(dep) QEMUFLAGS = -serial file:serial.log .PHONY: run run: $(elf) qemu-system-i386 -kernel $(elf) $(QEMUFLAGS) .PHONY: debug debug: $(elf) qemu-system-i386 -kernel $(elf) $(QEMUFLAGS) -s -S