# $Id$ ARCH := i386 ifeq ($(ARCH),i386) BITS = 32 endif CC := cc LD := $(LD) ASM := as CFLAGS := -m$(BITS) -Wall -c -Iinclude -Ilibcinclude -nostdlib -ffreestanding CFLAGS_C486SW := -std=c89 $(CFLAGS) -Dasm=__asm__ .PHONY: all clean BASIC := bin/c486sw DRIVERS := rtk8139 DRIVERS2 := ata #Custom init SYSCALLS := mount limine-build: c486sw-limine.iso grub-build: c486sw-grub.iso all: c486sw-limine.iso clean: mkdir -p bin obj lib rm -f bin/* rm -f obj/* rm -f lib/* rm -f include/kern/drivers.h rm -f c486sw-*.iso rm -rf arith64 dist/limine.bin: tnftp -o $@ https://github.com/limine-bootloader/limine/raw/v5.x-branch-binary/limine-bios-cd.bin dist/limine.sys: tnftp -o $@ https://github.com/limine-bootloader/limine/raw/v5.x-branch-binary/limine-bios.sys obj/k%_asm.o: kernsrc/%.s nasm -felf$(BITS) -o $@ $< obj/k%_gnuasm.o: kernsrc/%gnu.s $(ASM) --32 -o $@ $< obj/kkernel.o: kernsrc/kernel.c include/kern/config.h echo \#include \ > include/kern/drivers.h echo \#include \ >> include/kern/drivers.h echo $(addprefix %\#include ,$(addsuffix .h\>,$(addprefix \> include/kern/drivers.h echo "$(addprefix struct+driver_generic*+,$(addsuffix _init(uint16_t+bus,+uint16_t+device);,$(DRIVERS)))" | tr '%' '\n' | tr '+' ' ' >> include/kern/drivers.h $(CC) $(CFLAGS_C486SW) -o $@ $< obj/k%.o: kernsrc/%.c include/kern/%.h include/kern/config.h $(CC) $(CFLAGS_C486SW) -o $@ $< obj/d%.o: kernsrc/dri/%.c include/dri/%.h include/kern/config.h $(CC) $(CFLAGS_C486SW) -o $@ $< obj/f%.o: kernsrc/fs/%.c include/fs/%.h include/kern/config.h $(CC) $(CFLAGS_C486SW) -o $@ $< obj/casm_%.o: libcsrc/%.s nasm -felf$(BITS) -o $@ $< obj/c%.o: libcsrc/%.c libcinclude/%.h $(CC) $(CFLAGS_C486SW) -o $@ $< obj/test.arith64: if [ ! -e arith64 ]; then git clone https://github.com/glitchub/arith64 ; fi cd arith64 && $(CC) $(CFLAGS) -o arith64.o arith64.c cp arith64/arith64.o $@ lib/libc.a: obj/cmount.o \ obj/casm_sym.o \ obj/test.arith64 ar -crs $@ $^ lib/linkthis.o: libcsrc/linkthis.s nasm -DC486SW_VERSION=$(shell grep -m 1 VERSION include/kern/config.h | grep -oE "\"[^\"]+\"" | sed -E 's/"/\\"/g') -DC486SW_RAW_VERSION=$(shell grep -m 1 VERSION include/kern/config.h | grep -oE "\"[^\"]+\"" | sed -E 's/"|\.//g') -felf$(BITS) -o $@ $< bin/c486sw: obj/kboot_$(GNU)asm.o \ obj/kkernel.o \ obj/kio.o \ obj/kpic.o \ obj/ktask.o \ obj/ktask_asm.o \ obj/ktimer.o \ obj/kpci.o \ obj/ksyscall.o \ obj/fdevfs.o \ $(addsuffix .o,$(addprefix obj/d,$(DRIVERS))) \ $(addsuffix .o,$(addprefix obj/d,$(DRIVERS2))) \ $(addsuffix .o,$(addprefix obj/ksc_,$(SYSCALLS))) \ lib/libc.a \ lib/linkthis.o $(LD) -melf_$(ARCH) -T linker.ld -o $@ -nostdlib $^ c486sw-limine.iso: $(BASIC) dist/limine.cfg dist/limine.bin dist/limine.sys rm -rf iso mkdir -p iso/include mkdir -p iso/lib cp bin/c486sw iso/ cp -rf libcinclude/* iso/include/ cp -rf include/* iso/include/ cp -rf dist/limine.cfg iso/ cp -rf lib/* iso/lib/ cp -rf dist/limine.bin iso/limine-bios-cd.bin cp -rf dist/limine.sys iso/limine-bios.sys cd iso && xorrisofs -o ../$@ -b limine-bios-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table -J -R -l -allow-leading-dots -V "C486SW_LIVE" . limine bios-install $@ c486sw-grub.iso: $(BASIC) dist/grub.cfg rm -rf iso mkdir -p iso/boot/grub mkdir -p iso/include mkdir -p iso/lib cp bin/c486sw iso/ cp -rf libcinclude/* iso/include/ cp -rf include/* iso/include/ cp -rf dist/grub.cfg iso/boot/grub/ cp -rf lib/* iso/lib/ grub-mkrescue -J -R -l -V "C486SW_LIVE" -allow-leading-dots -o $@ iso