#
# /emx/src/lib/makefile
#
# This makefile has been designed for dmake 3.8.
#
# Don't forget to SET SWITCHAR=-
#
GCC=gcc -O -Wall -mprobe
AR=ar
I=/emx/include/
E=$(I)sys/emx.h
L=\emx\lib\ #

##############################################################################

.SUFFIXES: .a .lib

.a.lib:
	emxomf -sl $<

.o.obj:
	emxomf -sl $<

.PHONY: all-dos all-os2 clean cleanall default libc libcdll libcdll-emx \
        libcdll-gcc libcdll-libc libcdll-cdll libcdll-par libcdll-ser \
        libcmt cdllobj cdllobj-a cdllobj-lib emx libgcc ctordtor \
        graph os2 sys video moddef emxwrap mkdir omflib recurse \
        rec-all rec-libc rec-ctype rec-emx rec-emxload rec-gcc rec-graph \
        rec-hw rec-io rec-cdll rec-malloc rec-math rec-misc rec-moddef \
        rec-nls rec-os2 rec-process rec-startup rec-str rec-sys rec-time \
        rec-video



##############################################################################

default .SEQUENTIAL: all-dos

all-dos .SEQUENTIAL: $(L)crt0.o $(L)dll0.o $(L)binmode.o \
            libc libgcc os2 emx graph video moddef \
            $(L)g.a $(L)m.a

all-os2 .SEQUENTIAL: all-dos sys libcdll libcmt cdllobj ctordtor emxwrap omflib

omflib .SEQUENTIAL: $(L)crt0.obj $(L)dll0.obj $(L)res0.obj $(L)binmode.obj \
        $(L)gcc.lib $(L)c.lib $(L)g.lib $(L)m.lib $(L)os2.lib \
        $(L)cmt.lib $(L)emxst.lib $(L)emxmt.lib $(L)emx2.lib \
        $(L)emxio.lib $(L)graph.lib $(L)video.lib $(L)moddef.lib \
        $(L)cdllobj.lib $(L)ctor.obj $(L)dtor.obj \
        $(L)objc.lib $(L)termcap.lib $(L)gpp.lib \
        $(L)iostream.lib $(L)curses.lib $(L)bsd.lib

cleanall: clean
	$(MAKE) recurse RDIR=all RTARGET=clean DELOPT=$(DELOPT)

clean:
	-del $(L)*.o $(DELOPT)
	-del $(L)*.obj $(DELOPT)
	-del $(L)c.a $(DELOPT)
	-del $(L)cmt.a $(DELOPT)
	-del $(L)g.a $(DELOPT)
	-del $(L)m.a $(DELOPT)
	-del $(L)gcc.a $(DELOPT)
	-del $(L)os2.a $(DELOPT)
	-del $(L)emxst.a $(DELOPT)
	-del $(L)emxmt.a $(DELOPT)
	-del $(L)emx2.a $(DELOPT)
	-del $(L)emxio.a $(DELOPT)
	-del $(L)wrap.a $(DELOPT)
	-del $(L)c.lib $(DELOPT)
	-del $(L)cmt.lib $(DELOPT)
	-del $(L)g.lib $(DELOPT)
	-del $(L)m.lib $(DELOPT)
	-del $(L)gcc.lib $(DELOPT)
	-del $(L)os2.lib $(DELOPT)
	-del $(L)emxst.lib $(DELOPT)
	-del $(L)emxmt.lib $(DELOPT)
	-del $(L)emx2.lib $(DELOPT)
	-del $(L)emxio.lib $(DELOPT)
	-del $(L)curses.lib $(DELOPT)
	-del $(L)termcap.lib $(DELOPT)
	-del $(L)bsd.lib $(DELOPT)

##############################################################################

recurse: rec-$(RDIR)

RECURSE=$(RTARGET) DELOPT=$(DELOPT)

rec-all .SEQUENTIAL: rec-libc rec-os2 rec-gcc rec-emx rec-sys rec-cdll \
                     rec-moddef rec-graph rec-video

rec-libc .SEQUENTIAL: rec-ctype rec-hw rec-io rec-malloc rec-math rec-misc \
                      rec-nls rec-process rec-startup rec-str rec-time \
                      rec-emxload

rec-ctype .SETDIR=ctype:
	$(MAKE) $(RECURSE)

rec-emx .SETDIR=emx:
	$(MAKE) $(RECURSE)

rec-emxload .SETDIR=emxload:
	$(MAKE) $(RECURSE)

rec-gcc .SETDIR=gcc:
	$(MAKE) $(RECURSE)

rec-graph .SETDIR=graph:
	$(MAKE) $(RECURSE)

rec-hw .SETDIR=hw:
	$(MAKE) $(RECURSE)

rec-io .SETDIR=io:
	$(MAKE) $(RECURSE)

rec-malloc .SETDIR=malloc:
	$(MAKE) $(RECURSE)

rec-math .SETDIR=math:
	$(MAKE) $(RECURSE)

rec-moddef .SETDIR=moddef:
	$(MAKE) $(RECURSE)

rec-misc .SETDIR=misc:
	$(MAKE) $(RECURSE)

rec-cdll .SETDIR=cdll:
	$(MAKE) $(RECURSE)

rec-nls .SETDIR=nls:
	$(MAKE) $(RECURSE)

rec-os2 .SETDIR=os2:
	$(MAKE) $(RECURSE)

rec-process .SETDIR=process:
	$(MAKE) $(RECURSE)

rec-startup .SETDIR=startup:
	$(MAKE) $(RECURSE)

rec-str .SETDIR=str:
	$(MAKE) $(RECURSE)

rec-sys .SETDIR=sys:
	$(MAKE) $(RECURSE)

rec-time .SETDIR=time:
	$(MAKE) $(RECURSE)

rec-video .SETDIR=video:
	$(MAKE) $(RECURSE)

##############################################################################

$(L)crt0.o: startup/crt0.s
	$(GCC) -c -x assembler-with-cpp -o $(L)crt0.o startup/crt0.s

$(L)dll0.o: startup/dll0.s
	$(GCC) -c -x assembler-with-cpp -o $(L)dll0.o startup/dll0.s

$(L)binmode.o: io/binmode.s
	$(GCC) -c -x assembler-with-cpp -o $(L)binmode.o io/binmode.s

$(L)crt0.obj: startup/crt0.s
	$(GCC) -c -x assembler-with-cpp -DOMF -o crt0omf.o startup/crt0.s
	emxomf -m_text -ds -o $(L)crt0.obj crt0omf.o

$(L)dll0.obj: startup/dll0.s
	$(GCC) -c -x assembler-with-cpp -DOMF -o dll0omf.o startup/dll0.s
	emxomf -l_text -ds -o $(L)dll0.obj dll0omf.o

$(L)res0.obj: startup/res0.s
	$(GCC) -c -x assembler-with-cpp -DOMF -o res0omf.o startup/res0.s
	emxomf -l_text -ds -o $(L)res0.obj res0omf.o

$(L)binmode.obj: $(L)binmode.o
	emxomf -sl $(L)binmode.o

libc:
	$(MAKE) recurse RDIR=libc RTARGET=libc

libcmt:
	$(MAKE) recurse RDIR=libc RTARGET=libcmt

cdllobj: cdllobj-a cdllobj-lib

cdllobj-a:
	$(MAKE) recurse RDIR=libc RTARGET=cdllobj
	$(MAKE) recurse RDIR=cdll RTARGET=cdllobj

cdllobj-lib: $(L)cdllobj.lib

ctordtor: $(L)ctor.o $(L)dtor.o

libgcc .SETDIR=gcc:
	$(MAKE) libgcc

os2 .SETDIR=os2:
	$(MAKE) os2

emxwrap .SETDIR=os2:
	$(MAKE) emxwrap

emx .SETDIR=emx:
	$(MAKE) emx

sys .SETDIR=sys:
	$(MAKE) sys

graph .SETDIR=graph:
	$(MAKE) graph

video .SETDIR=video:
	$(MAKE) video

moddef .SETDIR=moddef:
	$(MAKE) moddef

$(L)g.a:
	$(AR) s $(L)g.a

$(L)m.a:
	$(AR) s $(L)m.a

$(L)gcc.lib: $(L)gcc.a
$(L)c.lib: $(L)c.a
$(L)cmt.lib: $(L)cmt.a
$(L)cdllobj.lib: $(L)cdllobj.a
$(L)emxst.lib: $(L)emxst.a
$(L)emxmt.lib: $(L)emxmt.a
$(L)emx2.lib: $(L)emx2.a
$(L)emxio.lib: $(L)emxio.a
$(L)graph.lib: $(L)graph.a
$(L)video.lib: $(L)video.a
$(L)moddef.lib: $(L)moddef.a
$(L)os2.lib: $(L)os2.a
$(L)curses.lib: $(L)curses.a
$(L)termcap.lib: $(L)termcap.a
$(L)gpp.lib: $(L)gpp.a
$(L)iostream.lib: $(L)iostream.a
$(L)objc.lib: $(L)objc.a
$(L)bsd.lib: $(L)bsd.a
$(L)g.lib: $(L)g.a
$(L)m.lib: $(L)m.a
$(L)ctor.obj: $(L)ctor.o
$(L)dtor.obj: $(L)dtor.o

$(L)ctor.o: startup/mt/ctor.o
	copy startup\mt\ctor.o $(L)ctor.o

$(L)dtor.o: startup/mt/dtor.o
	copy startup\mt\dtor.o $(L)dtor.o

libcdll .SEQUENTIAL: libcdll-par libcdll-ser
libcdll-par: $(L)dll0.obj $(L)emx2.lib $(L)os2.lib
libcdll-ser .SEQUENTIAL: libcdll-libc libcdll-gcc libcdll-emx libcdll-cdll

libcdll-libc:
	$(MAKE) recurse RDIR=libc RTARGET=libcdll

libcdll-gcc:
	$(MAKE) recurse RDIR=gcc RTARGET=libcdll

libcdll-emx:
	$(MAKE) recurse RDIR=emx RTARGET=libcdll

libcdll-cdll $(L)cdll.a $(L)cdll.lib .UPDATEALL:
	$(MAKE) recurse RDIR=cdll RTARGET=libcdll

##############################################################################

mkdir .IGNORE:
	mkdir ctype\mt
	mkdir ctype\st
	mkdir ctype\dll
	mkdir emx\mt
	mkdir emx\st
	mkdir emxload\mt
	mkdir emxload\st
	mkdir emxload\dll
	mkdir hw\mt
	mkdir hw\st
	mkdir hw\dll
	mkdir io\mt
	mkdir io\st
	mkdir io\dll
	mkdir malloc\mt
	mkdir malloc\st
	mkdir malloc\dll
	mkdir math\mt
	mkdir math\st
	mkdir math\dll
	mkdir misc\mt
	mkdir misc\st
	mkdir misc\dll
	mkdir nls\mt
	mkdir nls\st
	mkdir nls\dll
	mkdir process\mt
	mkdir process\st
	mkdir process\dll
	mkdir startup\mt
	mkdir startup\st
	mkdir startup\dll
	mkdir str\mt
	mkdir str\st
	mkdir str\dll
	mkdir sys\mt
	mkdir sys\st
	mkdir time\mt
	mkdir time\st
	mkdir time\dll
