Blame noconfig/mingw.mak

Packit Service 8bf002
# makefile to compile MCPP version 2.7.2 and later for MinGW / GCC / GNU make
Packit Service 8bf002
#   2008/09   kmatsui
Packit Service 8bf002
#
Packit Service 8bf002
# First, you must edit GCCDIR, BINDIR, INCDIR, gcc_maj_ver and gcc_min_ver.
Packit Service 8bf002
# To make compiler-independent-build of MCPP do:
Packit Service 8bf002
#       make 
Packit Service 8bf002
#       make install
Packit Service 8bf002
# To make GCC-specific-build of MCPP:
Packit Service 8bf002
#       make COMPILER=GNUC
Packit Service 8bf002
#       make COMPILER=GNUC install
Packit Service 8bf002
# To re-compile MCPP using GCC-specific-build of MCPP do:
Packit Service 8bf002
#       make COMPILER=GNUC PREPROCESSED=1
Packit Service 8bf002
#       make COMPILER=GNUC PREPROCESSED=1 install
Packit Service 8bf002
# To link malloc() package of kmatsui do:
Packit Service 8bf002
#       make [COMPILER=GNUC] [PREPROCESSED=1] MALLOC=KMMALLOC
Packit Service 8bf002
#       make [COMPILER=GNUC] [PREPROCESSED=1] MALLOC=KMMALLOC install
Packit Service 8bf002
# To make libmcpp (subroutine build of mcpp):
Packit Service 8bf002
#       make MCPP_LIB=1 mcpplib
Packit Service 8bf002
#       make MCPP_LIB=1 mcpplib_install
Packit Service 8bf002
# To make testmain using libmcpp (add 'DLL_IMPORT=1' to link against DLL):
Packit Service 8bf002
#       make [OUT2MEM=1] testmain
Packit Service 8bf002
#       make [OUT2MEM=1] testmain_install
Packit Service 8bf002
Packit Service 8bf002
# COMPILER:
Packit Service 8bf002
#   Specify whether make a compiler-independent-build or GCC-specific-build
Packit Service 8bf002
# compiler-independent-build:   empty
Packit Service 8bf002
# compiler-specific-build:      GNUC
Packit Service 8bf002
Packit Service 8bf002
# NAME: name of mcpp executable
Packit Service 8bf002
NAME = mcpp
Packit Service 8bf002
Packit Service 8bf002
# CC:   name of gcc executable
Packit Service 8bf002
#       e.g. gcc, mingw32-gcc
Packit Service 8bf002
CC = gcc
Packit Service 8bf002
CXX = g++
Packit Service 8bf002
CFLAGS = -c -O2 -Wall   #-v 
Packit Service 8bf002
CPPFLAGS =
Packit Service 8bf002
Packit Service 8bf002
LINKFLAGS = -o $(NAME)
Packit Service 8bf002
Packit Service 8bf002
ifeq    ($(COMPILER), )
Packit Service 8bf002
# compiler-independent-build
Packit Service 8bf002
CPPOPTS =
Packit Service 8bf002
# BINDIR:   directory to install mcpp: /usr/bin or /usr/local/bin
Packit Service 8bf002
BINDIR = /usr/local/bin
Packit Service 8bf002
# INCDIR:   directory to install mcpp_lib.h, mcpp_out.h for libmcpp
Packit Service 8bf002
INCDIR = /usr/local/include
Packit Service 8bf002
Packit Service 8bf002
else
Packit Service 8bf002
# compiler-specific-build:  Adjust for your system
Packit Service 8bf002
Packit Service 8bf002
ifeq    ($(COMPILER), GNUC)
Packit Service 8bf002
# The directory where 'gcc' (cc) command is located
Packit Service 8bf002
GCCDIR = /mingw/bin
Packit Service 8bf002
# set GCC version
Packit Service 8bf002
gcc_maj_ver = 3
Packit Service 8bf002
gcc_min_ver = 4
Packit Service 8bf002
# INCDIR:   version specific include directory
Packit Service 8bf002
INCDIR = /mingw/lib/gcc/mingw32/3.4.5/include
Packit Service 8bf002
CPPOPTS = -DCOMPILER=$(COMPILER)
Packit Service 8bf002
Packit Service 8bf002
# BINDIR:   the directory where cc1 resides
Packit Service 8bf002
BINDIR = /mingw/libexec/gcc/mingw32/3.4.5
Packit Service 8bf002
cpp_call = $(BINDIR)/cc1.exe
Packit Service 8bf002
cpu = i386
Packit Service 8bf002
#cpu = x86_64
Packit Service 8bf002
endif
Packit Service 8bf002
endif
Packit Service 8bf002
Packit Service 8bf002
LIBDIR = /usr/local/lib
Packit Service 8bf002
Packit Service 8bf002
ifneq   ($(MALLOC), )
Packit Service 8bf002
ifeq    ($(MALLOC), KMMALLOC)
Packit Service 8bf002
        LINKFLAGS += -lkmmalloc_debug
Packit Service 8bf002
        MEM_MACRO = -D_MEM_DEBUG -DXMALLOC
Packit Service 8bf002
endif
Packit Service 8bf002
        MEM_MACRO += -D$(MALLOC)
Packit Service 8bf002
else
Packit Service 8bf002
        MEM_MACRO =
Packit Service 8bf002
endif
Packit Service 8bf002
Packit Service 8bf002
OBJS = main.o directive.o eval.o expand.o support.o system.o mbchar.o
Packit Service 8bf002
Packit Service 8bf002
$(NAME): $(OBJS)
Packit Service 8bf002
	$(CC) $(OBJS) $(LINKFLAGS)
Packit Service 8bf002
ifeq    ($(COMPILER), GNUC)
Packit Service 8bf002
	$(CC) cc1.c -o cc1.exe
Packit Service 8bf002
endif
Packit Service 8bf002
Packit Service 8bf002
PREPROCESSED = 0
Packit Service 8bf002
Packit Service 8bf002
ifeq	($(PREPROCESSED), 1)
Packit Service 8bf002
CMACRO = -DPREPROCESSED
Packit Service 8bf002
# Make a "pre-preprocessed" header file to recompile MCPP with MCPP.
Packit Service 8bf002
mcpp.H	: system.H noconfig.H internal.H
Packit Service 8bf002
ifeq    ($(COMPILER), GNUC)
Packit Service 8bf002
	$(CC) -v -E -Wp,-b $(CPPFLAGS) $(CPPOPTS) $(MEM_MACRO) -o mcpp.H preproc.c
Packit Service 8bf002
else
Packit Service 8bf002
	@echo "Do 'sudo make COMPILER=GNUC install' prior to recompile."
Packit Service 8bf002
	@echo "Then, do 'make COMPILER=GNUC PREPROCESSED=1'."
Packit Service 8bf002
	@exit
Packit Service 8bf002
endif
Packit Service 8bf002
$(OBJS) : mcpp.H
Packit Service 8bf002
else
Packit Service 8bf002
CMACRO = $(CPPOPTS) $(MEM_MACRO)
Packit Service 8bf002
$(OBJS) : noconfig.H
Packit Service 8bf002
main.o directive.o eval.o expand.o support.o system.o mbchar.o:   \
Packit Service 8bf002
        system.H internal.H
Packit Service 8bf002
endif
Packit Service 8bf002
Packit Service 8bf002
.c.o	:
Packit Service 8bf002
	$(CC) $(CFLAGS) $(CMACRO) $(CPPFLAGS) $<
Packit Service 8bf002
Packit Service 8bf002
install :
Packit Service 8bf002
	install -s -b $(NAME).exe $(BINDIR)/$(NAME).exe
Packit Service 8bf002
ifeq    ($(COMPILER), GNUC)
Packit Service 8bf002
	@./set_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)'    \
Packit Service 8bf002
            '$(cpp_call)' '$(CC)' '$(CXX)' 'x$(CPPFLAGS)' 'x.exe' 'ln -s'   \
Packit Service 8bf002
            '$(INCDIR)' SYS_MINGW $(cpu)
Packit Service 8bf002
endif
Packit Service 8bf002
Packit Service 8bf002
clean	:
Packit Service 8bf002
	-rm *.o *.so *.exe cc1.exe mcpp.H mcpp.err libmcpp.*
Packit Service 8bf002
Packit Service 8bf002
uninstall:
Packit Service 8bf002
	rm -f $(BINDIR)/$(NAME).exe
Packit Service 8bf002
ifeq    ($(COMPILER), GNUC)
Packit Service 8bf002
	@./unset_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)'   \
Packit Service 8bf002
            '$(cpp_call)' '$(CC)' '$(CXX)' 'x.exe' 'ln -s' '$(INCDIR)' SYS_MINGW
Packit Service 8bf002
endif
Packit Service 8bf002
Packit Service 8bf002
ifeq    ($(COMPILER), )
Packit Service 8bf002
ifeq    ($(MCPP_LIB), 1)
Packit Service 8bf002
# compiler-independent-build and MCPP_LIB is specified:
Packit Service 8bf002
CFLAGS += -DMCPP_LIB
Packit Service 8bf002
Packit Service 8bf002
mcpplib :   mcpplib_a mcpplib_dll
Packit Service 8bf002
Packit Service 8bf002
mcpplib_a:  $(OBJS)
Packit Service 8bf002
	ar -rv libmcpp.a $(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) $(MEM_MACRO) -DDLL_EXPORT -c -o $*.so $*.c
Packit Service 8bf002
# -fPIC is not necessary for MinGW
Packit Service 8bf002
mcpplib_dll: $(SOBJS)
Packit Service 8bf002
	$(CC) -shared $(SOBJS) -o libmcpp-$(DLL_VER).dll -Wl,--enable-auto-image-base,--out-implib,libmcpp.dll.a
Packit Service 8bf002
Packit Service 8bf002
mcpplib_install:
Packit Service 8bf002
	cp libmcpp.a libmcpp.dll.a $(LIBDIR)
Packit Service 8bf002
	cp libmcpp-$(DLL_VER).dll $(BINDIR)
Packit Service 8bf002
	ranlib $(LIBDIR)/libmcpp.a
Packit Service 8bf002
	cp mcpp_lib.h mcpp_out.h $(INCDIR)
Packit Service 8bf002
	$(CC) -o $(NAME) main_libmcpp.c $(LIBDIR)/libmcpp.dll.a
Packit Service 8bf002
	install -s -b $(NAME).exe $(BINDIR)/$(NAME).exe
Packit Service 8bf002
mcpplib_uninstall:
Packit Service 8bf002
	rm -f $(LIBDIR)/libmcpp.a $(LIBDIR)/libmcpp.dll.a $(BINDIR)/libmcpp-$(DLL_VER).dll
Packit Service 8bf002
	rm -f $(BINDIR)/$(NAME).exe
Packit Service 8bf002
	rm -f $(INCDIR)/mcpp*
Packit Service 8bf002
endif
Packit Service 8bf002
Packit Service 8bf002
# use mcpp as a subroutine from testmain.c
Packit Service 8bf002
ifeq    ($(OUT2MEM), 1)
Packit Service 8bf002
# output to memory buffer
Packit Service 8bf002
CFLAGS += -DOUT2MEM
Packit Service 8bf002
endif
Packit Service 8bf002
TMAIN_LINKFLAGS = testmain.o -o testmain.exe
Packit Service 8bf002
ifeq    ($(DLL_IMPORT), 1)
Packit Service 8bf002
TMAIN_LINKFLAGS += $(LIBDIR)/libmcpp.dll.a
Packit Service 8bf002
CFLAGS += -DDLL_IMPORT
Packit Service 8bf002
else
Packit Service 8bf002
TMAIN_LINKFLAGS += $(LIBDIR)/libmcpp.a
Packit Service 8bf002
endif
Packit Service 8bf002
ifeq    ($(MALLOC), KMMALLOC)
Packit Service 8bf002
    TMAIN_LINKFLAGS += -lkmmalloc_debug
Packit Service 8bf002
endif
Packit Service 8bf002
testmain :   testmain.o
Packit Service 8bf002
	$(CC) $(TMAIN_LINKFLAGS)
Packit Service 8bf002
testmain_install :
Packit Service 8bf002
	install -s testmain.exe $(BINDIR)/testmain.exe
Packit Service 8bf002
testmain_uninstall   :
Packit Service 8bf002
	rm -f $(BINDIR)/testmain.exe
Packit Service 8bf002
Packit Service 8bf002
endif