!ifndef ROOTDIR
ROOTDIR = ..\..\..
!endif
!if exists($(ROOTDIR)\make_vc_defs)
!include $(ROOTDIR)\make_vc_defs
!endif
!ifndef TREEDIR
TREEDIR=$(ROOTDIR)
!endif
!include $(TREEDIR)\_build\vc\config\common.mak

CC=$(_BIN_PATH_)cl.exe
LIBR=$(_BIN_PATH_)lib.exe

!if "$(BUILD_PLATFORM)" == "AMD64"
OBJDIR = obj.64.vc
DLLNAME = libCRT64.lib
MASM=$(_BIN_PATH_)ml64.exe
!elseif "$(BUILD_PLATFORM)" == "IA64"
OBJDIR = obj.IA64.vc
DLLNAME = libCRTIA64.lib
!else
OBJDIR = obj.32.vc
DLLNAME = libCRT.lib
MASM=$(_BIN_PATH_)ml.exe
MASM_OPT=/coff
!endif
OBJDIRW = $(OBJDIR)\wide
OUTDIR = ..

!ifdef VC8
COMPAT64=/Wp64
NOWIN98=/OPT:NOWIN98
!endif

!if "$(BUILD_PLATFORM)" == "X86"
LINK32_OBJS = \
$(OBJDIR)\vc_llmul.obj \
$(OBJDIR)\vc_lldiv.obj \
$(OBJDIR)\vc_llrem.obj \
$(OBJDIR)\vc_lldvrm.obj \
$(OBJDIR)\vc_llshl.obj \
$(OBJDIR)\vc_llshr.obj \
$(OBJDIR)\vc_ulldiv.obj \
$(OBJDIR)\vc_ullrem.obj \
$(OBJDIR)\vc_ulldvrm.obj \
$(OBJDIR)\vc_ullshr.obj
!endif

LINK_OBJS = $(LINK32_OBJS) \
$(OBJDIR)\delete.obj \
$(OBJDIR)\delete_array.obj \
$(OBJDIR)\free.obj \
$(OBJDIR)\i64toa.obj \
$(OBJDIRW)\i64toa.obj \
$(OBJDIR)\malloc.obj \
$(OBJDIR)\calloc.obj \
$(OBJDIR)\memchr.obj \
$(OBJDIR)\memcmp.obj \
$(OBJDIR)\memcpy.obj \
$(OBJDIRW)\memcpy.obj \
$(OBJDIR)\memicmp.obj \
$(OBJDIR)\memmove.obj \
$(OBJDIRW)\memmove.obj \
$(OBJDIR)\memset.obj \
$(OBJDIRW)\memset.obj \
$(OBJDIR)\new.obj \
$(OBJDIR)\new_array.obj \
$(OBJDIR)\realloc.obj \
$(OBJDIR)\strchr.obj \
$(OBJDIRW)\strchr.obj \
$(OBJDIR)\strcpy.obj \
$(OBJDIRW)\strcpy.obj \
$(OBJDIR)\strcspn.obj \
$(OBJDIR)\strdup.obj \
$(OBJDIRW)\strdup.obj \
$(OBJDIR)\strncat.obj \
$(OBJDIRW)\strncat.obj \
$(OBJDIR)\strncmp.obj \
$(OBJDIRW)\strncmp.obj \
$(OBJDIR)\strpbrk.obj \
$(OBJDIR)\strncpy.obj \
$(OBJDIRW)\strncpy.obj \
$(OBJDIR)\strrchr.obj \
$(OBJDIRW)\strrchr.obj \
$(OBJDIR)\strstr.obj \
$(OBJDIRW)\strstr.obj \
$(OBJDIR)\strtok.obj \
$(OBJDIRW)\strtok.obj \
$(OBJDIR)\strtol.obj \
$(OBJDIRW)\strtol.obj \
$(OBJDIR)\swab.obj

CPP_BASE=/MP /nologo /c /Gy /J /Gr /GR- /GS- /D_CRT_SECURE_NO_DEPRECATE /EHs-c- /LD /Oi /O2 /W3 $(ENV_INC_OPT)
!ifdef AMD64
CPP_PROJ=$(CPP_BASE) /Oy /Zp8 $(COMPAT64)
!elseif defined(IA64) 
CPP_PROJ=$(CPP_BASE) /Zp8 $(COMPAT64)
!else
CPP_PROJ=$(CPP_BASE) /Oy
!endif

LINKFLAGS=/nologo /nodefaultlib /out:"$(OUTDIR)\$(DLLNAME)"

ALL: dirs $(OUTDIR)\$(DLLNAME)

$(OUTDIR)\$(DLLNAME) : $(LINK_OBJS)
!ifndef __MAKE__
	@$(LIBR) @<<
	$(LINKFLAGS) $(LINK_OBJS)
<<
!else
	@$(LIBR) @&&<
	$(LINKFLAGS) $(LINK_OBJS)
<
!endif

!ifdef __MAKE__
.path.c=.
.path.cpp=.
.path.h=.
.path.hpp=.
.path.asm=.
!endif

!ifndef __MAKE__
.cpp{$(OBJDIR)}.obj::
	@$(CC) @<<
	$(CPP_PROJ) /Fo"$(OBJDIR)\\" $<
<<
!else
.cpp{$(OBJDIR)}.obj:
	@$(CC) $(CPP_PROJ) /Fo"$(OBJDIR)\\" { $< }
!endif

!ifndef __MAKE__
.cpp{$(OBJDIRW)}.obj::
	@$(CC) @<<
	$(CPP_PROJ) /DUNICODE /D_UNICODE /Fo"$(OBJDIRW)\\" $<
<<
!else
.cpp{$(OBJDIRW)}.obj:
	@$(CC) $(CPP_PROJ) /DUNICODE /D_UNICODE /Fo"$(OBJDIRW)\\" { $< }
!endif

.asm{$(OBJDIR)}.obj:
	@$(MASM) /nologo $(MASM_OPT) /c /Fo$@ $<


$(OBJDIR)\delete.obj: delete.cpp crt.hpp
$(OBJDIR)\delete_array.obj: delete_array.cpp crt.hpp
$(OBJDIR)\free.obj: free.cpp crt.hpp
$(OBJDIR)\i64toa.obj: i64toa.cpp crt.hpp
$(OBJDIRW)\i64toa.obj: i64toa.cpp crt.hpp
$(OBJDIR)\malloc.obj: malloc.cpp crt.hpp
$(OBJDIR)\memchr.obj: memchr.cpp crt.hpp
$(OBJDIR)\memcmp.obj: memcmp.cpp crt.hpp
$(OBJDIR)\memcpy.obj: memcpy.cpp crt.hpp
$(OBJDIR)\memicmp.obj: memicmp.cpp crt.hpp
$(OBJDIR)\memmove.obj: memmove.cpp crt.hpp
$(OBJDIR)\memset.obj: memset.cpp crt.hpp
$(OBJDIRW)\memset.obj: memset.cpp crt.hpp
$(OBJDIR)\new.obj: new.cpp crt.hpp crt.hpp
$(OBJDIR)\new_array.obj: new_array.cpp crt.hpp
$(OBJDIR)\realloc.obj: realloc.cpp crt.hpp
$(OBJDIR)\strchr.obj: strchr.cpp crt.hpp
$(OBJDIRW)\strchr.obj: strchr.cpp crt.hpp
$(OBJDIR)\strcpy.obj: strcpy.cpp crt.hpp
$(OBJDIRW)\strcpy.obj: strcpy.cpp crt.hpp
$(OBJDIR)\strcspn.obj: strcspn.cpp crt.hpp
$(OBJDIR)\strdup.obj: strdup.cpp crt.hpp
$(OBJDIRW)\strdup.obj: strdup.cpp crt.hpp
$(OBJDIR)\strncat.obj: strncat.cpp crt.hpp
$(OBJDIRW)\strncat.obj: strncat.cpp crt.hpp
$(OBJDIR)\strncmp.obj: strncmp.cpp crt.hpp
$(OBJDIRW)\strncmp.obj: strncmp.cpp crt.hpp
$(OBJDIR)\strpbrk.obj: strpbrk.cpp crt.hpp
$(OBJDIR)\strncpy.obj: strncpy.cpp crt.hpp
$(OBJDIRW)\strncpy.obj: strncpy.cpp crt.hpp
$(OBJDIR)\strrchr.obj: strrchr.cpp crt.hpp
$(OBJDIRW)\strrchr.obj: strrchr.cpp crt.hpp
$(OBJDIR)\strstr.obj: strstr.cpp crt.hpp
$(OBJDIRW)\strstr.obj: strstr.cpp crt.hpp
$(OBJDIR)\strtok.obj: strtok.cpp crt.hpp
$(OBJDIRW)\strtok.obj: strtok.cpp crt.hpp
$(OBJDIR)\strtol.obj: strtol.cpp crt.hpp
$(OBJDIRW)\strtol.obj: strtol.cpp crt.hpp

.PHONY: dirs
dirs:
	@if not exist "$(OBJDIR)\$(NULL)" mkdir "$(OBJDIR)"
	@if not exist "$(OBJDIRW)\$(NULL)" mkdir "$(OBJDIRW)"
