#
# /emx/src/lib/cdll/makefile
#
.INCLUDE: /emx/src/lib/lib0.mak

.PHONY: clean default libcdll cdllobj

EMXLIBC=\emx\dll\emxlibc.dll
LIBCDLLOBJ=$(L)cdllobj.a

ASMCMD = $(GCC) -D__MT__ -D_LIBCDLL -D_EMXLIBC_DLL -DOMF -Zomf -c -x assembler-with-cpp
CCCMD = $(GCC) -D__MT__ -D_LIBCDLL -D_EMXLIBC_DLL -Zomf -c

.c.obj:
	$(CCCMD) $<

.s.obj:
	$(ASMCMD) $<

default: libcdll

libcdll: $(EMXLIBC) $(L)cdll.a $(L)cdll.lib

cdllobj: $(LIBCDLLOBJ)

clean:
	-del *.o $(DELOPT)
	-del *.obj $(DELOPT)
	-del emxlibc.res $(DELOPT)
	-del io1.c $(DELOPT)
	-del io2.s $(DELOPT)
	-del math1.c $(DELOPT)
	-del math2.s $(DELOPT)
	-del malloc1.c $(DELOPT)
	-del str1.c $(DELOPT)
	-del str2.s $(DELOPT)
	-del time1.c $(DELOPT)
	-del hw1.c $(DELOPT)
	-del gcc1.c $(DELOPT)
	-del gcc2.s $(DELOPT)
	-del ctype1.c $(DELOPT)
	-del emxload1.c $(DELOPT)
	-del misc1.c $(DELOPT)
	-del misc2.s $(DELOPT)
	-del process1.c $(DELOPT)
	-del process2.s $(DELOPT)
	-del nls1.c $(DELOPT)
	-del emx2.s $(DELOPT)
	-del startup1.c $(DELOPT)
	-del startup2.s $(DELOPT)

MTOBJS1 = $(L)dll0.obj iodummy.obj revision.obj
MTOBJS2 = io1.obj io2.obj math1.obj math2.obj math3.obj malloc1.obj str1.obj
MTOBJS3 = str2.obj hw1.obj gcc1.obj gcc2.obj ctype1.obj time1.obj emxload1.obj
MTOBJS4 = misc1.obj misc2.obj process1.obj process2.obj nls1.obj emx2.obj
MTOBJS5 = startup1.obj startup2.obj

INCLUDES = $(I)stdio.h $(I)stdlib.h $(S)emx.h

emxlibc.res: makefile
	echo $(MTOBJS1)+  >emxlibc.res
	echo $(MTOBJS2)+ >>emxlibc.res
	echo $(MTOBJS3)+ >>emxlibc.res
	echo $(MTOBJS4)+ >>emxlibc.res
	echo $(MTOBJS5)  >>emxlibc.res

iodummy.obj: iodummy.s
revision.obj: revision.c

ctype1.obj: ctype1.c $(INCLUDES)
gcc1.obj: gcc1.c $(INCLUDES)
gcc2.obj: gcc2.s
hw1.obj: hw1.c $(INCLUDES)
io2.obj: io2.s
math1.obj: math1.c $(INCLUDES)
misc1.obj: misc1.c $(INCLUDES)
misc2.obj: misc2.s
nls1.obj: nls1.c $(INCLUDES)
process1.obj: process1.c $(INCLUDES)
process2.obj: process2.s
startup1.obj: startup1.c $(INCLUDES)
startup2.obj: startup2.s
str1.obj: str1.c $(INCLUDES)
str2.obj: str2.s
time1.obj: time1.c $(INCLUDES)

emx2.obj: emx2.s ../emx/syscalls.h
	$(ASMCMD) -I../emx emx2.s

emxload1.obj: emxload1.c $(INCLUDES) ../emxload/emxload2.h
	$(CCCMD) -I ../emxload emxload1.c

math2.obj: math2.s ../math/libm.h
	$(ASMCMD) -I../math math2.s

math3.obj: math2.s ../math/libm.h
	$(ASMCMD) -o math3.obj -DLONG_DOUBLE -I../math math2.s

io1.obj: io1.c $(INCLUDES) ../io/ea.h
	$(CCCMD) -I ../io io1.c

malloc1.obj: malloc1.c $(INCLUDES) ../malloc/malloc2.h
	$(CCCMD) -I ../malloc malloc1.c

ctor.o: ../startup/ctor.c
	$(GCC) -c ../startup/ctor.c

dtor.o: ../startup/dtor.c
	$(GCC) -c ../startup/dtor.c

main.o: ../gcc/main.c
	$(GCC) -c ../gcc/main.c

ctor.obj: ctor.o
	emxomf -sl ctor.o

dtor.obj: dtor.o
	emxomf -sl dtor.o

main.obj: main.o
	emxomf -sl main.o

$(EMXLIBC): $(MTOBJS1) $(MTOBJS2) $(MTOBJS3) $(MTOBJS4) $(MTOBJS5) \
    emxlibc.def emxlibc.res
	link386 /nologo /noi /noe /nod @emxlibc.res, emxlibc.dll, \
		nul, $(L)emx2 $(L)os2, emxlibc;
	-emxload -qw
	copy emxlibc.dll $(EMXLIBC)
	del emxlibc.dll

$(L)cdll.a: $(L)cdll.lib ctor.o dtor.o main.o
	emximp -o $(L)cdll.a $(L)cdll.lib
	ar r $(L)cdll.a ctor.o dtor.o main.o
	ar s $(L)cdll.a

$(L)cdll.lib: emxlibc.def ctor.obj dtor.obj main.obj
	emximp -o emxlibc.imp emxlibc.def
	emximp -o $(L)cdll.lib emxlibc.imp
	emxomfar r $(L)cdll.lib ctor.obj dtor.obj main.obj
	-del emxlibc.imp

$(LIBCDLLOBJ): iodummy.o
	-$(AR) d $(LIBCDLLOBJ) __.SYMDEF
	$(AR) r $(LIBCDLLOBJ) iodummy.o
	$(AR) s $(LIBCDLLOBJ)
