1# makefile to compile MCPP version 2.7.2 and later for CygWIN / GCC / GNU make 2# 2008/09 kmatsui 3# 4# First, you must edit GCCDIR, BINDIR, INCDIR, gcc_maj_ver and gcc_min_ver. 5# To make compiler-independent-build of MCPP do: 6# make 7# make install 8# To make GCC-specific-build of MCPP: 9# make COMPILER=GNUC 10# make COMPILER=GNUC install 11# To re-compile MCPP using GCC-specific-build of MCPP do: 12# make COMPILER=GNUC PREPROCESSED=1 13# make COMPILER=GNUC PREPROCESSED=1 install 14# To make libmcpp (subroutine build of mcpp): 15# make MCPP_LIB=1 mcpplib 16# make MCPP_LIB=1 mcpplib_install 17# To make testmain using libmcpp (add 'DLL_IMPORT=1' to link against DLL): 18# make [OUT2MEM=1] testmain 19# make [OUT2MEM=1] testmain_install 20 21# COMPILER: 22# Specify whether make a compiler-independent-build or GCC-specific-build 23# compiler-independent-build: empty 24# compiler-specific-build: GNUC 25 26# NAME: name of mcpp executable 27NAME = mcpp 28 29# CC: name of gcc executable 30# e.g. cc, gcc, gcc-2.95.3, i686-pc-linux-gnu-gcc-3.4.3 31CC = gcc 32CXX = g++ 33CFLAGS = -c -O2 -Wall #-v 34CPPFLAGS = 35#CPPFLAGS = -Wp,-vQW3 36 # for MCPP to output a bit verbose diagnosis to "mcpp.err" 37 38LINKFLAGS = -o $(NAME) 39 40ifeq ($(COMPILER), ) 41# compiler-independent-build 42CPPOPTS = 43# BINDIR: directory to install mcpp: /usr/bin or /usr/local/bin 44BINDIR = /usr/local/bin 45# INCDIR: directory to install mcpp_lib.h, mcpp_out.h for libmcpp 46INCDIR = /usr/local/include 47 48else 49# compiler-specific-build: Adjust for your system 50 51ifeq ($(COMPILER), GNUC) 52# The directory where 'gcc' (cc) command is located 53GCCDIR = /usr/bin 54#GCCDIR = /usr/local/bin 55# set GCC version 56gcc_maj_ver = 3 57gcc_min_ver = 4 58# INCDIR: version specific include directory 59#INCDIR = /usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5/include 60INCDIR = /usr/lib/gcc/i686-pc-cygwin/3.4.4/include 61CPPOPTS = -DCOMPILER=$(COMPILER) 62 63# BINDIR: the directory where cpp0 or cc1 resides 64#BINDIR = /usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5 65BINDIR = /usr/lib/gcc/i686-pc-cygwin/3.4.4 66cpu = i386 67#cpu = x86_64 68ifeq ($(gcc_maj_ver), 2) 69cpp_call = $(BINDIR)/cpp0.exe 70else 71cpp_call = $(BINDIR)/cc1.exe 72endif 73endif 74endif 75 76OBJS = main.o directive.o eval.o expand.o support.o system.o mbchar.o 77 78$(NAME): $(OBJS) 79 $(CC) $(OBJS) $(LINKFLAGS) 80 81PREPROCESSED = 0 82 83ifeq ($(PREPROCESSED), 1) 84CMACRO = -DPREPROCESSED 85#CPPFLAGS += -std=c99 86 # '-std=c99' option is sometimes necessary to work around 87 # the confusion of system header files 88# Make a "pre-preprocessed" header file to recompile MCPP with MCPP. 89mcpp.H : system.H noconfig.H internal.H 90ifeq ($(COMPILER), GNUC) 91 $(CC) -v -E -Wp,-b $(CPPFLAGS) $(CPPOPTS) -o mcpp.H preproc.c 92else 93 @echo "Do 'sudo make COMPILER=GNUC install' prior to recompile." 94 @echo "Then, do 'make COMPILER=GNUC PREPROCESSED=1'." 95 @exit 96endif 97$(OBJS) : mcpp.H 98else 99CMACRO = $(CPPOPTS) 100$(OBJS) : noconfig.H 101main.o directive.o eval.o expand.o support.o system.o mbchar.o: \ 102 system.H internal.H 103endif 104 105.c.o : 106 $(CC) $(CFLAGS) $(CMACRO) $(CPPFLAGS) $< 107 108install : 109 install -s -b $(NAME).exe $(BINDIR)/$(NAME).exe 110ifeq ($(COMPILER), GNUC) 111 @./set_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)' \ 112 '$(cpp_call)' '$(CC)' '$(CXX)' 'x$(CPPFLAGS)' 'x.exe' 'ln -s' \ 113 '$(INCDIR)' SYS_CYGWIN $(cpu) 114endif 115 116clean : 117 -rm *.o *.so *.exe mcpp.H mcpp.err libmcpp.* cygmcpp.* 118 119uninstall: 120 rm -f $(BINDIR)/$(NAME).exe 121ifeq ($(COMPILER), GNUC) 122 @./unset_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)' \ 123 '$(cpp_call)' '$(CC)' '$(CXX)' 'x.exe' 'ln -s' '$(INCDIR)' SYS_CYGWIN 124endif 125 126ifeq ($(COMPILER), ) 127LIBDIR = /usr/local/lib 128ifeq ($(MCPP_LIB), 1) 129# compiler-independent-build and MCPP_LIB=1 130CFLAGS += -DMCPP_LIB 131 132mcpplib : mcpplib_a mcpplib_dll 133 134mcpplib_a: $(OBJS) 135 ar -rv libmcpp.a $(OBJS) 136 137# DLL 138DLL_VER = 0 139SOBJS = main.so directive.so eval.so expand.so support.so system.so mbchar.so 140.SUFFIXES: .so 141.c.so : 142 $(CC) $(CFLAGS) $(MEM_MACRO) -c -DPIC -o $*.so $*.c 143mcpplib_dll: $(SOBJS) 144 $(CC) -shared -o cygmcpp-$(DLL_VER).dll $(SOBJS) -Wl,--enable-auto-image-base,--out-implib,libmcpp.dll.a 145 146mcpplib_install: 147 cp libmcpp.a libmcpp.dll.a $(LIBDIR) 148 cp cygmcpp-$(DLL_VER).dll $(BINDIR) 149 ranlib $(LIBDIR)/libmcpp.a 150 cp mcpp_lib.h mcpp_out.h $(INCDIR) 151 $(CC) -o $(NAME) main_libmcpp.c $(LIBDIR)/libmcpp.dll.a 152 install -s -b $(NAME).exe $(BINDIR)/$(NAME).exe 153mcpplib_uninstall: 154 rm -f $(LIBDIR)/libmcpp.a $(LIBDIR)/libmcpp.dll.a $(BINDIR)/cygmcpp-$(DLL_VER).dll 155 rm -f $(BINDIR)/$(NAME).exe 156 rm -f $(INCDIR)/mcpp* 157endif 158 159# use mcpp as a subroutine from testmain.c 160ifeq ($(OUT2MEM), 1) 161# output to memory buffer 162CFLAGS += -DOUT2MEM 163endif 164TMAIN_LINKFLAGS = testmain.o -o testmain.exe 165ifeq ($(DLL_IMPORT), 1) 166TMAIN_LINKFLAGS += $(LIBDIR)/libmcpp.dll.a 167CFLAGS += -DDLL_IMPORT 168else 169TMAIN_LINKFLAGS += $(LIBDIR)/libmcpp.a 170endif 171testmain : testmain.o 172 $(CC) $(TMAIN_LINKFLAGS) 173testmain_install : 174 install -s testmain.exe $(BINDIR)/testmain.exe 175testmain_uninstall : 176 rm -f $(BINDIR)/testmain.exe 177 178endif 179 180