Blame noconfig/visualc.mak

Packit Service 8bf002
# makefile to compile MCPP version 2.7.1 and later for Visual C / nmake
Packit Service 8bf002
#       2008/11 kmatsui
Packit Service 8bf002
# You must first edit BINDIR, LIBDIR and INCDIR according to your system.
Packit Service 8bf002
# To make compiler-independent-build of MCPP do:
Packit Service 8bf002
#       nmake
Packit Service 8bf002
# To make Visual-C-specific-build of MCPP do:
Packit Service 8bf002
#       nmake COMPILER=MSC
Packit Service 8bf002
# To re-compile MCPP using Visual-C-specific-build of MCPP do:
Packit Service 8bf002
#       nmake COMPILER=MSC PREPROCESSED=1
Packit Service 8bf002
# To link kmmalloc V.2.5.3 (malloc() package of kmatsui) or later do:
Packit Service 8bf002
#   (Note: Visual C 2005 and 2008 cannot coexist with kmmalloc)
Packit Service 8bf002
#       nmake [PREPROCESSED=1] KMMALLOC=1
Packit Service 8bf002
# To make mcpp.lib (subroutine-build of mcpp) do:
Packit Service 8bf002
#       nmake MCPP_LIB=1 mcpplib
Packit Service 8bf002
#       nmake MCPP_LIB=1 mcpplib_install
Packit Service 8bf002
# To make testmain.c (sample to use mcpp.lib) against mcpp.lib do
Packit Service 8bf002
#   (add 'DLL_IMPORT=1' to link against the DLL):
Packit Service 8bf002
#       nmake [OUT2MEM=1] testmain
Packit Service 8bf002
#       nmake [OUT2MEM=1] testmain_install
Packit Service 8bf002
# To use this Makefile in IDE of Visual C, include $(targ)_install target
Packit Service 8bf002
#	in $(targ) target, since the IDE can't handle install target.
Packit Service 8bf002

Packit Service 8bf002
NAME = mcpp
Packit Service 8bf002

Packit Service 8bf002
CC = cl
Packit Service 8bf002
CFLAGS = $(CFLAGS) -Za -c	# -Zi
Packit Service 8bf002
	# Add -Zi for debugging on Visual C / IDE
Packit Service 8bf002
LINKFLAGS = -Fe$(NAME)	# -Zi
Packit Service 8bf002
CPPFLAGS = $(CPPFLAGS) -D_CRT_SECURE_NO_DEPRECATE # -Za
Packit Service 8bf002
	# -D_CRT_SECURE_NO_DEPRECATE for Visual C 2005, 2008
Packit Service 8bf002
	# -Za should not be specified for compiler-independent-built MCPP
Packit Service 8bf002

Packit Service 8bf002
!if "$(COMPILER)"=="MSC"
Packit Service 8bf002
CPPFLAGS = $(CPPFLAGS) -DCOMPILER=MSC
Packit Service 8bf002
# BINDIR : Adjust to your system.
Packit Service 8bf002
#	for Visual C 2003
Packit Service 8bf002
#BINDIR = "$(MSVCDIR)"\bin
Packit Service 8bf002
#	for Visual C 2005, 2008
Packit Service 8bf002
BINDIR = "$(VCINSTALLDIR)"\bin
Packit Service 8bf002
!else
Packit Service 8bf002
# compiler-independent-build: use compiler-independent directory
Packit Service 8bf002
BINDIR = \PUB\bin
Packit Service 8bf002
!endif
Packit Service 8bf002

Packit Service 8bf002
!ifdef KMMALLOC
Packit Service 8bf002
MEM_MACRO = -DKMMALLOC -D_MEM_DEBUG -DXMALLOC
Packit Service 8bf002
MEMLIB = kmmalloc_debug.lib
Packit Service 8bf002
!else
Packit Service 8bf002
MEM_MACRO =
Packit Service 8bf002
MEMLIB =
Packit Service 8bf002
!endif
Packit Service 8bf002

Packit Service 8bf002
OBJS = main.obj directive.obj eval.obj expand.obj support.obj system.obj \
Packit Service 8bf002
        mbchar.obj
Packit Service 8bf002

Packit Service 8bf002
$(NAME).exe : $(OBJS)
Packit Service 8bf002
	$(CC) $(LINKFLAGS) $(OBJS) $(MEMLIB)
Packit Service 8bf002
#install :
Packit Service 8bf002
# Visual C++ / IDE "makefile project" does not have "make install" command
Packit Service 8bf002
	copy /b $(NAME).exe $(BINDIR)\$(NAME).exe
Packit Service 8bf002

Packit Service 8bf002
!ifdef PREPROCESSED
Packit Service 8bf002
# make a "pre-preprocessed" header file to recompile MCPP with MCPP.
Packit Service 8bf002
mcpp.H	: system.H internal.H
Packit Service 8bf002
	$(BINDIR)\$(NAME) $(CPPFLAGS) $(LANG) $(MEM_MACRO) preproc.c mcpp.H
Packit Service 8bf002
$(OBJS) : mcpp.H
Packit Service 8bf002
system.H: noconfig.H
Packit Service 8bf002
!else
Packit Service 8bf002
$(OBJS) : noconfig.H
Packit Service 8bf002
main.obj directive.obj eval.obj expand.obj support.obj system.obj mbchar.obj: \
Packit Service 8bf002
        system.H internal.H
Packit Service 8bf002
!endif
Packit Service 8bf002

Packit Service 8bf002
!ifdef PREPROCESSED
Packit Service 8bf002
.c.obj	:
Packit Service 8bf002
	$(BINDIR)\$(NAME) -DPREPROCESSED $(CPPFLAGS) $< $(
Packit Service 8bf002
	$(CC) $(CFLAGS) -TC $(
Packit Service 8bf002
!else
Packit Service 8bf002
.c.obj	:
Packit Service 8bf002
	$(CC) $(CFLAGS) $(CPPFLAGS) $(MEM_MACRO) $<
Packit Service 8bf002
!endif
Packit Service 8bf002

Packit Service 8bf002
clean	:
Packit Service 8bf002
	-del *.obj *.i mcpp.H *.exe *.lib *.dll *.exp *.so
Packit Service 8bf002

Packit Service 8bf002
!ifdef	MCPP_LIB
Packit Service 8bf002
#LIBDIR = "$(MSVCDIR)"\lib
Packit Service 8bf002
LIBDIR = "$(VCINSTALLDIR)"\lib
Packit Service 8bf002
INCDIR = "$(VCINSTALLDIR)"\include
Packit Service 8bf002
CFLAGS = $(CFLAGS) -DMCPP_LIB
Packit Service 8bf002

Packit Service 8bf002
mcpplib: mcpplib_lib mcpplib_dll
Packit Service 8bf002
# To use in Visual C IDE
Packit Service 8bf002
#mcpplib: mcpplib_lib mcpplib_dll mcpplib_install
Packit Service 8bf002

Packit Service 8bf002
# Debug mode: Do 'nmake DEBUG=1 ...'
Packit Service 8bf002
!ifdef DEBUG
Packit Service 8bf002
CFLAGS = $(CFLAGS) -MDd -D_DEBUG
Packit Service 8bf002
LIBSUFFIX = d
Packit Service 8bf002
!else
Packit Service 8bf002
CFLAGS = $(CFLAGS) -O2 -MD -DNDEBUG
Packit Service 8bf002
!endif
Packit Service 8bf002

Packit Service 8bf002
mcpplib_lib:	$(OBJS)
Packit Service 8bf002
	lib -out:mcpp$(LIBSUFFIX).lib $(OBJS)
Packit Service 8bf002

Packit Service 8bf002
# DLL
Packit Service 8bf002
DLL_VER = 0
Packit Service 8bf002
SOBJS = main.so directive.so eval.so expand.so support.so system.so mbchar.so
Packit Service 8bf002
.SUFFIXES: .so
Packit Service 8bf002
.c.so	:
Packit Service 8bf002
	$(CC) $(CFLAGS) $(CPPFLAGS) $(MEM_MACRO) -DDLL_EXPORT -TC -Fo$*.so $<
Packit Service 8bf002
mcpplib_dll:	$(SOBJS)
Packit Service 8bf002
	$(CC) -LD -Femcpp$(DLL_VER)$(LIBSUFFIX) $(SOBJS) $(MEMLIB)
Packit Service 8bf002
mcpplib_install:
Packit Service 8bf002
	copy mcpp$(LIBSUFFIX).lib $(LIBDIR)
Packit Service 8bf002
	copy mcpp$(DLL_VER)$(LIBSUFFIX).lib $(LIBDIR)
Packit Service 8bf002
	copy mcpp$(DLL_VER)$(LIBSUFFIX).dll $(BINDIR)
Packit Service 8bf002
	copy mcpp_lib.h $(INCDIR)
Packit Service 8bf002
	copy mcpp_out.h $(INCDIR)
Packit Service 8bf002
	$(CC) main_libmcpp.c -Fe$(NAME).exe 	\
Packit Service 8bf002
			$(LIBDIR)\mcpp$(DLL_VER)$(LIBSUFFIX).lib	\
Packit Service 8bf002
			-link -force:multiple
Packit Service 8bf002
	copy $(NAME).exe $(BINDIR)
Packit Service 8bf002
mcpplib_uninstall:
Packit Service 8bf002
	del $(LIBDIR)\mcpp$(LIBSUFFIX).lib	\
Packit Service 8bf002
			$(LIBDIR)\mcpp$(DLL_VER)$(LIBSUFFIX).lib	\
Packit Service 8bf002
			$(BINDIR)\mcpp$(DLL_VER)$(LIBSUFFIX).dll
Packit Service 8bf002
	del $(BINDIR)\$(NAME).exe
Packit Service 8bf002
	del $(INCDIR)\mcpp*
Packit Service 8bf002
!endif
Packit Service 8bf002

Packit Service 8bf002
# use mcpp as a subroutine from testmain.c
Packit Service 8bf002
!ifdef	DLL_IMPORT
Packit Service 8bf002
CFLAGS = $(CFLAGS) -DDLL_IMPORT
Packit Service 8bf002
LINKLIB = mcpp$(DLL_VER)$(LIBSUFFIX).lib
Packit Service 8bf002
!else
Packit Service 8bf002
LINKLIB = mcpp$(LIBSUFFIX).lib
Packit Service 8bf002
!endif
Packit Service 8bf002
TMAIN_LINKFLAGS = testmain.obj -Fetestmain.exe $(LIBDIR)\$(LINKLIB) \
Packit Service 8bf002
			-link -force:multiple
Packit Service 8bf002
!ifdef	OUT2MEM
Packit Service 8bf002
# output to memory buffer
Packit Service 8bf002
CFLAGS = $(CFLAGS) -DOUT2MEM
Packit Service 8bf002
!endif
Packit Service 8bf002
testmain	: testmain.obj
Packit Service 8bf002
	$(CC) $(TMAIN_LINKFLAGS)
Packit Service 8bf002
testmain_install	:
Packit Service 8bf002
	copy testmain.exe $(BINDIR)
Packit Service 8bf002
testmain_uninstall	:
Packit Service 8bf002
	del $(BINDIR)\testmain.exe