Alessandro Bonazzi e075990ed3 Patch level : 12.0 no-patch
Files correlati     :
Commento            :

Aggiunto il preprocessore c++ mcpp per sostituire il compilatore nella compilazione delle maschere.
2020-11-28 16:24:08 +01:00

180 lines
5.0 KiB
Makefile

# makefile to compile MCPP version 2.7.2 and later for CygWIN / GCC / GNU make
# 2008/09 kmatsui
#
# First, you must edit GCCDIR, BINDIR, INCDIR, gcc_maj_ver and gcc_min_ver.
# To make compiler-independent-build of MCPP do:
# make
# make install
# To make GCC-specific-build of MCPP:
# make COMPILER=GNUC
# make COMPILER=GNUC install
# To re-compile MCPP using GCC-specific-build of MCPP do:
# make COMPILER=GNUC PREPROCESSED=1
# make COMPILER=GNUC PREPROCESSED=1 install
# To make libmcpp (subroutine build of mcpp):
# make MCPP_LIB=1 mcpplib
# make MCPP_LIB=1 mcpplib_install
# To make testmain using libmcpp (add 'DLL_IMPORT=1' to link against DLL):
# make [OUT2MEM=1] testmain
# make [OUT2MEM=1] testmain_install
# COMPILER:
# Specify whether make a compiler-independent-build or GCC-specific-build
# compiler-independent-build: empty
# compiler-specific-build: GNUC
# NAME: name of mcpp executable
NAME = mcpp
# CC: name of gcc executable
# e.g. cc, gcc, gcc-2.95.3, i686-pc-linux-gnu-gcc-3.4.3
CC = gcc
CXX = g++
CFLAGS = -c -O2 -Wall #-v
CPPFLAGS =
#CPPFLAGS = -Wp,-vQW3
# for MCPP to output a bit verbose diagnosis to "mcpp.err"
LINKFLAGS = -o $(NAME)
ifeq ($(COMPILER), )
# compiler-independent-build
CPPOPTS =
# BINDIR: directory to install mcpp: /usr/bin or /usr/local/bin
BINDIR = /usr/local/bin
# INCDIR: directory to install mcpp_lib.h, mcpp_out.h for libmcpp
INCDIR = /usr/local/include
else
# compiler-specific-build: Adjust for your system
ifeq ($(COMPILER), GNUC)
# The directory where 'gcc' (cc) command is located
GCCDIR = /usr/bin
#GCCDIR = /usr/local/bin
# set GCC version
gcc_maj_ver = 3
gcc_min_ver = 4
# INCDIR: version specific include directory
#INCDIR = /usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5/include
INCDIR = /usr/lib/gcc/i686-pc-cygwin/3.4.4/include
CPPOPTS = -DCOMPILER=$(COMPILER)
# BINDIR: the directory where cpp0 or cc1 resides
#BINDIR = /usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5
BINDIR = /usr/lib/gcc/i686-pc-cygwin/3.4.4
cpu = i386
#cpu = x86_64
ifeq ($(gcc_maj_ver), 2)
cpp_call = $(BINDIR)/cpp0.exe
else
cpp_call = $(BINDIR)/cc1.exe
endif
endif
endif
OBJS = main.o directive.o eval.o expand.o support.o system.o mbchar.o
$(NAME): $(OBJS)
$(CC) $(OBJS) $(LINKFLAGS)
PREPROCESSED = 0
ifeq ($(PREPROCESSED), 1)
CMACRO = -DPREPROCESSED
#CPPFLAGS += -std=c99
# '-std=c99' option is sometimes necessary to work around
# the confusion of system header files
# Make a "pre-preprocessed" header file to recompile MCPP with MCPP.
mcpp.H : system.H noconfig.H internal.H
ifeq ($(COMPILER), GNUC)
$(CC) -v -E -Wp,-b $(CPPFLAGS) $(CPPOPTS) -o mcpp.H preproc.c
else
@echo "Do 'sudo make COMPILER=GNUC install' prior to recompile."
@echo "Then, do 'make COMPILER=GNUC PREPROCESSED=1'."
@exit
endif
$(OBJS) : mcpp.H
else
CMACRO = $(CPPOPTS)
$(OBJS) : noconfig.H
main.o directive.o eval.o expand.o support.o system.o mbchar.o: \
system.H internal.H
endif
.c.o :
$(CC) $(CFLAGS) $(CMACRO) $(CPPFLAGS) $<
install :
install -s -b $(NAME).exe $(BINDIR)/$(NAME).exe
ifeq ($(COMPILER), GNUC)
@./set_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)' \
'$(cpp_call)' '$(CC)' '$(CXX)' 'x$(CPPFLAGS)' 'x.exe' 'ln -s' \
'$(INCDIR)' SYS_CYGWIN $(cpu)
endif
clean :
-rm *.o *.so *.exe mcpp.H mcpp.err libmcpp.* cygmcpp.*
uninstall:
rm -f $(BINDIR)/$(NAME).exe
ifeq ($(COMPILER), GNUC)
@./unset_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)' \
'$(cpp_call)' '$(CC)' '$(CXX)' 'x.exe' 'ln -s' '$(INCDIR)' SYS_CYGWIN
endif
ifeq ($(COMPILER), )
LIBDIR = /usr/local/lib
ifeq ($(MCPP_LIB), 1)
# compiler-independent-build and MCPP_LIB=1
CFLAGS += -DMCPP_LIB
mcpplib : mcpplib_a mcpplib_dll
mcpplib_a: $(OBJS)
ar -rv libmcpp.a $(OBJS)
# DLL
DLL_VER = 0
SOBJS = main.so directive.so eval.so expand.so support.so system.so mbchar.so
.SUFFIXES: .so
.c.so :
$(CC) $(CFLAGS) $(MEM_MACRO) -c -DPIC -o $*.so $*.c
mcpplib_dll: $(SOBJS)
$(CC) -shared -o cygmcpp-$(DLL_VER).dll $(SOBJS) -Wl,--enable-auto-image-base,--out-implib,libmcpp.dll.a
mcpplib_install:
cp libmcpp.a libmcpp.dll.a $(LIBDIR)
cp cygmcpp-$(DLL_VER).dll $(BINDIR)
ranlib $(LIBDIR)/libmcpp.a
cp mcpp_lib.h mcpp_out.h $(INCDIR)
$(CC) -o $(NAME) main_libmcpp.c $(LIBDIR)/libmcpp.dll.a
install -s -b $(NAME).exe $(BINDIR)/$(NAME).exe
mcpplib_uninstall:
rm -f $(LIBDIR)/libmcpp.a $(LIBDIR)/libmcpp.dll.a $(BINDIR)/cygmcpp-$(DLL_VER).dll
rm -f $(BINDIR)/$(NAME).exe
rm -f $(INCDIR)/mcpp*
endif
# use mcpp as a subroutine from testmain.c
ifeq ($(OUT2MEM), 1)
# output to memory buffer
CFLAGS += -DOUT2MEM
endif
TMAIN_LINKFLAGS = testmain.o -o testmain.exe
ifeq ($(DLL_IMPORT), 1)
TMAIN_LINKFLAGS += $(LIBDIR)/libmcpp.dll.a
CFLAGS += -DDLL_IMPORT
else
TMAIN_LINKFLAGS += $(LIBDIR)/libmcpp.a
endif
testmain : testmain.o
$(CC) $(TMAIN_LINKFLAGS)
testmain_install :
install -s testmain.exe $(BINDIR)/testmain.exe
testmain_uninstall :
rm -f $(BINDIR)/testmain.exe
endif