#
# /emx/src/lib/cdll/makefile
#
# Build libraries: c_import
# Build DLLs:      liblibcm.dll, emxlibcs.dll, emxlibc.dll
#

.INCLUDE: /emx/src/lib/lib0.mak

.SOURCE.c: ..
.SOURCE.h: ..
.SOURCE.s: ..

.PHONY: clean default dll-all dll-mt dll-st dll-fwd dll-fwd2 \
        import import-st import-mt trace trace-mt trace-st trace-t

DLL=\emx\dll\ #

TARGET_DLL=$(DLL)$(DLLNAME).dll
IMPORT_LIB=$(L)$(DIRNAME)\c_import

ASMCMD = $(GCC) -DOMF -Zomf -c -x assembler-with-cpp
CCCMD = $(GCC) -Zomf -c

.c.obj:
	$(CCCMD) $<

.s.obj:
	$(ASMCMD) $<

default: dll-all import-all

dll-all: dll-mt dll-st dll-fwd

dll-mt .SETDIR=$(CPU):
	$(MAKE) -f ../makefile $(PASSDOWN) DIRNAME=mt DLLNAME=emxlibcm dll

dll-st .SETDIR=$(CPU):
	$(MAKE) -f ../makefile $(PASSDOWN) DIRNAME=st DLLNAME=emxlibcs dll

dll-fwd .SETDIR=$(CPU):
	$(MAKE) -f ../makefile $(PASSDOWN) DIRNAME=dummy DLLNAME=dummy dll-fwd2

dll-fwd2: $(DLL)emxlibc.dll

dll: $(TARGET_DLL)

import-all: import-mt import-st

import-mt:
	$(MAKE) DIRNAME=mt DLLNAME=emxlibcm import

import-st:
	$(MAKE) DIRNAME=st DLLNAME=emxlibcs import

import: $(IMPORT_LIB).lib $(IMPORT_LIB).a

trace: trace-st trace-mt

trace-mt:
	$(MAKE) DLLNAME=emxlibcm trace-t

trace-st:
	$(MAKE) DLLNAME=emxlibcs trace-t

trace-t: $(MAP)$(DLLNAME).tdf

clean:
	-del $(CPU)\*.o $(DELOPT)
	-del $(CPU)\*.obj $(DELOPT)
	-del $(CPU)tmp.def $(DELOPT)
	-del tmp.def $(DELOPT)
	-del tmp.tsf $(DELOPT)
	-del tmp.tss $(DELOPT)
	-del trc00??.tff $(DELOPT)

#
# Create C runtime DLL
#
DLL_OBJS = $(L)dll0.obj revision.obj old_io.obj old_nls.obj
DLL_LIBS = $(L)gcc.lib $(L)$(DIRNAME)\c_dllrt.lib $(L)$(DIRNAME)\c.lib \
           $(L)$(DIRNAME)\emx.lib $(L)emx2.lib $(L)os2.lib $(L)end.lib

$(TARGET_DLL): $(DLL_OBJS) $(DLL_LIBS) \
    ../emxlibc.def ../emxlibc3.def ../$(DLLNAME).sed
	sed -f ../$(DLLNAME).sed ../emxlibc.def ../emxlibc3.def >tmp.def
	link386 /nologo /noi /nod $(DLL_OBJS), $(DLLNAME).dll, \
		$(MAP)$(DLLNAME) /map, $(DLL_LIBS), tmp;
	del tmp.def
	-emxload -qw
	copy $(DLLNAME).dll $(TARGET_DLL)
	del $(DLLNAME).dll

revision.obj: revision.c
old_io.obj: old_io.c $(I)stdlib.h
old_nls.obj: old_io.c

#
# Create import libraries
#
$(IMPORT_LIB).a: $(IMPORT_LIB).lib
	emximp -q -o $(IMPORT_LIB).a $(IMPORT_LIB).lib

$(IMPORT_LIB).lib: emxlibc.def $(DLLNAME).sed emxio.def
	sed -f $(DLLNAME).sed emxlibc.def >tmp.def
	emximp -o $(IMPORT_LIB).lib tmp.def emxio.def
	del tmp.def

#
# Create forwarder emxlibc.dll -> emxlibcm.dll
#
FWD_OBJS = $(L)dll0.obj revision.obj
FWD_LIBS = $(L)c_static.lib $(L)mt\c_import.lib $(L)emx2.lib $(L)end.lib
OLD_OBJS = oldcrt1.obj oldcrt3.obj oldcrtin.obj olddllin.obj oldmain.obj \
           oldmkdir.obj oldunwin.obj iodummy.obj

$(DLL)emxlibc.dll: ../emxlibc.def ../emxlibc2.def ../emxlibc.sed \
		$(FWD_LIBS) $(FWD_OBJS) $(OLD_OBJS)
	sed -f ../emxlibc.sed ../emxlibc.def ../emxlibc2.def >tmp.def
	link386 /nologo /noi /nod $(FWD_OBJS) $(OLD_OBJS), \
		emxlibc.dll, nul, $(FWD_LIBS), tmp; | sed /L4085/d
	del tmp.def
	-emxload -qw
	copy emxlibc.dll $(DLL)emxlibc.dll
	del emxlibc.dll

iodummy.obj: iodummy.s
oldcrt1.obj: oldcrt1.s
oldcrt3.obj: oldcrt3.s
oldcrtin.obj: oldcrtin.c
olddllin.obj: olddllin.c
oldmain.obj: oldmain.c $(I)stdlib.h
oldmkdir.obj: oldmkdir.c $(I)stdlib.h

oldunwin.obj: ../oldunwin.s ../../emx_386/syscalls.h $(ASM386H)
	$(ASMCMD) -I../../emx_386 ../oldunwin.s

#
# Create trace files (requires trcust.exe of os2pdp.zip)
#
$(MAP)$(DLLNAME).tdf: $(MAP)$(DLLNAME).map emxlibc.def \
		emxlibc.tss $(DLLNAME).tss emxlibc.tsf $(DLLNAME).tsf
	copy $(DLLNAME).tsf+emxlibc.tsf tmp.tsf
	copy emxlibc.tss+$(DLLNAME).tss tmp.tss
	emxtsf -d $(DLLNAME) -w1 tmp.tss $(MAP)$(DLLNAME).map emxlibc.def >>tmp.tsf
	trcust tmp.tsf $(MAP)$(DLLNAME).tdf /m=$(MAP)$(DLLNAME).map
