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

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

.PHONY: clean default dll-all dll-mt dll-st dll-fwd import import-st import-mt

DLL=\emx\dll\ #

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

O_IMPORT = $(L)appinit.o $(L)dllinit.o $(L)ctor.o $(L)dtor.o
OBJ_IMPORT = $(L)appinit.obj $(L)dllinit.obj $(L)ctor.obj $(L)dtor.obj

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:
	$(MAKE) DIRNAME=mt DLLNAME=emxlibcm dll

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

dll-fwd: $(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

clean:
	-del *.o $(DELOPT)
	-del *.obj $(DELOPT)
	-del tmp.def $(DELOPT)

#
# Create C runtime DLL
#
DLL_OBJS = $(L)dll0.obj revision.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

$(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
#
# Create import libraries
#
$(IMPORT_LIB).a: $(IMPORT_LIB).lib $(O_IMPORT)
	emximp -o $(IMPORT_LIB).a $(IMPORT_LIB).lib
	ar rJ $(IMPORT_LIB).a $(O_IMPORT)
	ar s $(IMPORT_LIB).a

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

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

$(DLL)emxlibc.dll: emxlibc.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/syscalls.h
	$(ASMCMD) -I../emx oldunwin.s
