#
#	zbeos makefile
#

include ../make.pre

OBJ_DIR		= obj
TARGET		= $(OBJ_DIR)/bootloader
MALLOC_LIB	= ../src/malloc/kitmalloc_sta.a
CFLAGS		+= -D_BUILDING_root=1
LDFLAGS		= -imagebase 0x3ff000 -nodefaults

ELFLD 		:= $(shell pwd)/tools/ld.elf
ELFLDFLAGS  := -b mwcoff-i386
OBJDUMPRAW  := $(shell pwd)/tools/objdump.rawdump
ENCAPS 		:= $(shell pwd)/tools/encaps
ENCAPSSYMS  := _input_data _input_len

LIBS		:= \
			$(OBJ_DIR)/kitruntime_sta.a \
			$(OBJ_DIR)/kitc_sta.a \
			$(OBJ_DIR)/glue-noinit.a

OBJS		:= \
			$(OBJ_DIR)/adaptec_stub.o \
			$(OBJ_DIR)/tables.o \
			$(OBJ_DIR)/bt_start.o \
			$(OBJ_DIR)/bt_cpu_asm.o \
			$(OBJ_DIR)/drvrlist.o \
			$(OBJ_DIR)/fslist.o \
			$(OBJ_DIR)/init.o \
			$(OBJ_DIR)/intel_bootui.o \
			$(OBJ_DIR)/intel_boothal.o \
			$(OBJ_DIR)/intel_fake.o \
			$(OBJ_DIR)/platform_crash.o \
			$(OBJ_DIR)/kb.o \
			$(OBJ_DIR)/matrox.o \
			$(OBJ_DIR)/video.o \
			$(OBJ_DIR)/bt_common.o \
			$(OBJ_DIR)/bt_dprintf.o \
			$(OBJ_DIR)/bt_load_pe.o \
			$(OBJ_DIR)/bt_partition.o \
			$(OBJ_DIR)/bt_sem.o \
			$(OBJ_DIR)/debugio.o \
			$(OBJ_DIR)/fake.o \
			$(OBJ_DIR)/alloc.o \
			$(OBJ_DIR)/dmalloc.o \
			$(OBJ_DIR)/lock.o \
			$(OBJ_DIR)/sl.o \
			$(OBJ_DIR)/cache.o \
			$(OBJ_DIR)/fsil.o \
			$(OBJ_DIR)/posix.o \
			$(OBJ_DIR)/devfs.o \
			$(OBJ_DIR)/rootfs.o \
			$(OBJ_DIR)/bootmenu.o \
			$(OBJ_DIR)/dma.o \
			$(OBJ_DIR)/int.o \
			$(OBJ_DIR)/pic.o \
			$(OBJ_DIR)/platform.o \
			$(OBJ_DIR)/videoprintf.o \
			$(OBJ_DIR)/intr.o \
			$(OBJ_DIR)/bootdata.o \
			$(OBJ_DIR)/systime.o \
			$(OBJ_DIR)/timer.o \
			$(OBJ_DIR)/flopdma.o \
			$(OBJ_DIR)/ide.o \
			$(OBJ_DIR)/rtc.o \
			$(OBJ_DIR)/sio.o \
			$(OBJ_DIR)/sio16550.o \
			$(OBJ_DIR)/pci.o \
			$(OBJ_DIR)/scsi_cam.o \
			$(OBJ_DIR)/scsi_cd.o \
			$(OBJ_DIR)/scsi_dsk.o \
			$(OBJ_DIR)/attr.o \
			$(OBJ_DIR)/bitmap.o \
			$(OBJ_DIR)/debug.o \
			$(OBJ_DIR)/dir.o \
			$(OBJ_DIR)/dstream.o \
			$(OBJ_DIR)/file.o \
			$(OBJ_DIR)/fsinfo.o \
			$(OBJ_DIR)/index.o \
			$(OBJ_DIR)/inode.o \
			$(OBJ_DIR)/io.o \
			$(OBJ_DIR)/log.o \
			$(OBJ_DIR)/mount.o \
			$(OBJ_DIR)/sysdep.o \
			$(OBJ_DIR)/util.o \
			$(OBJ_DIR)/walk.o \
			$(OBJ_DIR)/btclose.o \
			$(OBJ_DIR)/btdebug.o \
			$(OBJ_DIR)/btdelete.o \
			$(OBJ_DIR)/btdup.o \
			$(OBJ_DIR)/bterrors.o \
			$(OBJ_DIR)/btfind.o \
			$(OBJ_DIR)/btgoto.o \
			$(OBJ_DIR)/btinsert.o \
			$(OBJ_DIR)/btio.o \
			$(OBJ_DIR)/btlabel.o \
			$(OBJ_DIR)/btload.o \
			$(OBJ_DIR)/btopen.o \
			$(OBJ_DIR)/btoopen.o \
			$(OBJ_DIR)/btpage1.o \
			$(OBJ_DIR)/btpage2.o \
			$(OBJ_DIR)/btravrs.o \
			$(OBJ_DIR)/btseek.o \
			$(OBJ_DIR)/btzap.o
 
all : $(TARGET) $(OBJ_DIR)/zbeos

$(TARGET):	$(OBJ_DIR) $(MALLOC_LIB)
	$(LD) $(LDFLAGS) -map $@.xMAP -o $@ $(OBJS) $(LIBS) $(MALLOC_LIB)

$(OBJ_DIR):
	mkdir -p $(OBJ_DIR)
	(cur=`pwd`;cd $(OBJ_DIR); tar xzf $$cur/zbeosobj.tar.gz)

clean:
	rm -fr $(OBJ_DIR)
	rm -fr $(TARGET)*
	(cd $(dir $(MALLOC_LIB)); $(MAKE) $@)
	cd buildtools; $(MAKE) clean;

$(MALLOC_LIB):	FORCE
	(cd $(dir $(MALLOC_LIB)); $(MAKE) static )

#
# zbeos stuff
#
$(OBJ_DIR)/zbeos: $(OBJ_DIR)/vmbe
	-rm -f $(OBJ_DIR)/zbeos
	echo Building final image with bootsector and setup code...
	cd $(OBJ_DIR); ./build bootsect setup vmbe.out CURRENT > zbeos
	echo "zbeos created:"
	ls -l $(OBJ_DIR)/zbeos

$(OBJ_DIR)/vmbe: $(OBJ_DIR)/piggy.o $(OBJ_DIR)/head.o $(OBJ_DIR)/misc.o
	echo Adding startup and decompression code...
	cd $(OBJ_DIR); $(ELFLD) -Ttext 0x1000 -m elf_i386 -e startup_32 -o vmbe $(ELFLDFLAGS) head.o misc.o piggy.o
	-rm -f $(OBJ_DIR)/vmbe.out
	echo Dumping ELF object to raw data...
	$(OBJDUMPRAW) -q -k -o 0x1000 $(OBJ_DIR)/vmbe > $(OBJ_DIR)/vmbe.out

$(OBJ_DIR)/piggy.o: buildtools $(TARGET)
	-rm -f $(OBJ_DIR)/$(TARGET).gz $(OBJ_DIR)/$(TARGET).out
	echo Converting boot rom to raw data...
	$(OBJ_DIR)/dumpraw $(TARGET) $(TARGET).out
	echo Compressing raw boot rom image...
	gzip -f -9 < $(TARGET).out > $(TARGET).out.gz
	echo Encapsulating compressed boot rom image in an ELF object...
	$(ENCAPS) --target elf32-i386 piggy.o $(TARGET).out.gz $(ENCAPSSYMS)

buildtools: FORCE
	cd buildtools/; $(MAKE)



FORCE:


