CC_OPT=-O2 -Wall -I../include
LD_OPT=-s
FILES=dlmapi dlmexcp dlmimage dlmreslv dlmsig dlmsym hash main npxsetup
EXE=dlmstub

SRC=*.cc *.h
OBJECTS=$(foreach name, $(FILES) dlmexp, $(name).o)
DET_OBJECTS=$(foreach name, $(FILES) ~dlmexp, $(name).o)
REMOVE=$(foreach name, $(FILES) dlmexp, $(name).dep $(name).o) $(EXE).exe
REMOVE+=~dlmexp.o dlmexp.hh ~dlmstub.exe parsemap.exe dlmstub.mpd
REMOVE+=libc/* libc.dlm
SOURCES=$(foreach name, $(FILES) dlmexp, $(name).c)

DEPLIST = $(foreach name, $(FILES), $(name).dep)
MAKEDEPS=$(CC) $(CC_OPT) -MM $< | sed -e 's/\($*\.o\)[ :]*/\1 $@ : /g' >$@

all : start $(EXE).exe libc.dlm done

install : all
	@echo Installing
	cp libc.dlm ../../lib/dlm
	cp dlmstub.exe ../../lib/dlm

start : parsemap.exe
	@echo Building : $(EXE).exe

parsemap.exe : util/parsemap.c
	@echo Building : parsemap.exe
	gcc -Xlinker -s -o parsemap.exe util/parsemap.c

done :
	@echo Done.

clean :
	@echo Removing rebuildable files :
	@echo $(REMOVE)
	@rm -f $(REMOVE)

deps : $(DEPLIST)
# include $(SOURCES:.c=.dep)

%.dep: %.c
	@echo Creating dependencies for $<
	@echo >dlmexp.hh
	@$(MAKEDEPS)

dlmstub.mpd : $(DET_OBJECTS)
	gcc -o ~$(EXE).exe $(foreach opt,$(LD_OPT), -Xlinker $(opt)) -Xlinker -Map -Xlinker dlmstub.mpd $(DET_OBJECTS) $(foreach lib,$(LIBS), -l$(lib))

$(EXE).exe : $(OBJECTS)
	gcc -o $(EXE).exe $(foreach opt,$(LD_OPT), -Xlinker $(opt))  $(OBJECTS) $(foreach lib,$(LIBS), -l$(lib))

%.o: %.c
	gcc $(CC_OPT) -c $< -o $@

~dlmexp.o: dlmexp.c
	gcc $(CC_OPT) -c $< -o $@ -DDETECT_USED

dlmexp.hh: dlmstub.mpd
	@echo Generating implicit export list
	@parsemap $< s > $@

dlmexp.o : dlmexp.hh


# ===========================
# This will build libc.dlm
# ===========================

libc.dlm: parsemap.exe dlmstub.mpd
	@echo Building libc.dlm
	rm -f libc/*
	parsemap dlmstub.mpd o >libc/rmobj.lst
	cd libc
	cp $(DJDIR)/lib/libc.a .
	cp $(DJDIR)/lib/gcc-lib/djgpp/2.81/libgcc.a .
	ar x libc.a
	rm libc.a
	ar x libgcc.a
	rm libgcc.a
	rm @rmobj.lst
	ld -r -o ~libc.o *.o -T../../../lib/dlm/dlm.djl
	dlmman ~libc.o -c ../libc.dlm
	rm ~libc.o
	cd ..
