START_ADDRESS=0x1000

CC=gcc -c -O2 -Wall -nostdinc -I $(INCDIR) -ffreestanding
#CC=/home/bin/gcc/bin/gcc -c -O2 -Wall -nostdinc -I $(INCDIR) -ffreestanding
#CC=/home/bin/egcs/bin/gcc -c -O2 -Wall -nostdinc -I $(INCDIR) -ffreestanding
LD=ld -s -x --oformat binary
DEP=gcc -nostdinc -I $(INCDIR) -M

INCDIR=./
BINDIR=bin/
DEPSDIR=deps/
TOOLSDIR=tools/
TOOLSBINDIR=tools/bin/
NETDIR=net/

OBJECT=setup1.o setup2.o lib1.o lib2.o except.o interrupt1.o interrupt2.o mp.o sp.o\
	mm.o time.o proc.o segment.o console.o fs.o floppy.o ata.o pci.o device.o serial.o\
	error.o elf.o miscdev.o ext2_fs.o signal.o apm1.o apm2.o reboot1.o reboot2.o\
	$(NETDIR)ether.o $(NETDIR)rt8139.o $(NETDIR)ip.o $(NETDIR)arp.o $(NETDIR)icmp.o

DEPS=$(OBJECT:.o=.d)


#********************************************* Make *****************************************************

all:deps bin/setup bin/bootload


deps:$(addprefix $(DEPSDIR),$(DEPS))

$(DEPSDIR)%.d:%.c
	(echo -n $(BINDIR);$(DEP) $<) > $@

$(DEPSDIR)%.d:%.S
	(echo -n $(BINDIR);$(DEP) $<) > $@

include $(addprefix $(DEPSDIR),$(DEPS))


bin/setup:$(addprefix $(BINDIR),$(OBJECT))
	$(LD) -Ttext $(START_ADDRESS) -o $@ $^ -Map bin/link.map

$(BINDIR)%.o:%.S
	$(CC) -o $@ $<

$(BINDIR)%.o:%.c
	$(CC) -o $@ $<


bin/bootload:bootload.S config.h bin/setup
	$(TOOLSBINDIR)size bin/setup | $(TOOLSBINDIR)inputstr bootload.S SETUP_SIZE=		# setupΥbootload.S
	$(CC) -o bin/bootload.o bootload.S
	$(LD) -Ttext 0 -o bin/bootload bin/bootload.o


floppy:
	$(TOOLSDIR)copy


clean:
	rm -fr $(BINDIR)*
	rm -fr $(DEPSDIR)*
	mkdir $(BINDIR)net
	mkdir $(DEPSDIR)net
