1# makefile to compile MCPP version 2.7.2 for FreeBSD / GCC / UCB make 2# 2008/11 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 do: 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 link malloc() package of kmatsui do: 15# make [COMPILER=GNUC] [PREPROCESSED=1] MALLOC=KMMALLOC 16# make [COMPILER=GNUC] [PREPROCESSED=1] MALLOC=KMMALLOC install 17# To make libmcpp (subroutine build of mcpp): 18# make MCPP_LIB=1 mcpplib 19# make MCPP_LIB=1 mcpplib_install 20# To make testmain using libmcpp: 21# make [OUT2MEM=1] testmain 22# make [OUT2MEM=1] testmain_install 23# It usually needs root privilege to do 'make *install'. 24 25# COMPILER: 26# Specify whether make a compiler-independent-build or GCC-specific-build 27# compiler-independent-build: empty 28# compiler-specific-build: GNUC 29 30# NAME: name of mcpp executable 31NAME ?= mcpp 32CC = gcc 33CXX = g++ 34CFLAGS = -c -O2 -Wall # -ggdb -v 35# for gcc 4.1 or later (Don't use this option to compile libmcpp) 36#CFLAGS += -fstack-protector 37CPPFLAGS = 38#CPPFLAGS = -Wp,-v,-Q,-W3 39 # for MCPP to output a bit verbose diagnosis to "mcpp.err" 40 41LINKFLAGS = -o $(NAME) 42# for gcc 4.1 or later (Don't use this option to compile libmcpp) 43#LINKFLAGS += -fstack-protector 44 45.if empty(COMPILER) 46# compiler-independent-build 47CPPOPTS = 48# BINDIR: directory to install mcpp: /usr/bin or /usr/local/bin 49BINDIR = /usr/local/bin 50# INCDIR: directory to install mcpp_lib.h, mcpp_out.h for libmcpp 51INCDIR = /usr/local/include 52 53.else 54# compiler-specific-build: Adjust for your system 55 56.if ! empty(COMPILER) && $(COMPILER) == GNUC 57# The directory 'gcc' (cc) command is located (/usr/bin or /usr/local/bin) 58GCCDIR ?= /usr/bin 59# Set GCC version 60gcc_maj_ver = 3 61gcc_min_ver = 4 62# INCDIR: the compiler's version specific include directory, if it exists, 63# /usr/local/include or /usr/include, if it does not exist 64INCDIR = /usr/local/include 65#INCDIR ?= /usr/local/gcc-4.1.1/lib/gcc-lib/i386-unknown-freebsd6.3/4.1.1/include 66CPPOPTS = -DCOMPILER=$(COMPILER) -DINC_DIR=\"$(INCDIR)\" 67 68# BINDIR: the directory where cpp0 or cc1 resides 69BINDIR ?= /usr/libexec 70#BINDIR ?= /usr/local/gcc-4.1.1/lib/gcc-lib/i386-unknown-freebsd6.3/4.1.1 71cpu = i386 72#cpu = x86_64 73#cpu = ppc 74#cpu = ppc64 75.if $(gcc_maj_ver) == 2 76cpp_call = $(BINDIR)/cpp0 77.else 78cpp_call = $(BINDIR)/cc1 79.endif 80.endif 81.endif 82 83MALLOC = 84.if !empty(MALLOC) 85.if $(MALLOC) == KMMALLOC 86 LINKFLAGS += -L/usr/local/lib -lkmmalloc_debug 87 MEM_MACRO = -D_MEM_DEBUG -DXMALLOC -I/usr/local/include 88.endif 89 MEM_MACRO += -D$(MALLOC) 90.else 91 MEM_MACRO = 92.endif 93 94OBJS = main.o directive.o eval.o expand.o support.o system.o mbchar.o 95 96all : $(NAME) 97$(NAME) : $(OBJS) 98 $(CC) $(OBJS) $(LINKFLAGS) 99 100PREPROCESSED ?= 0 101 102.if $(PREPROCESSED) == 1 103CMACRO = -DPREPROCESSED 104# Make a "pre-preprocessed" header file to recompile MCPP with MCPP. 105mcpp.H : system.H noconfig.H internal.H 106.if ! empty(COMPILER) && $(COMPILER) == GNUC 107 $(CC) -E -Wp,-b $(CPPFLAGS) $(CPPOPTS) $(MEM_MACRO) -o mcpp.H preproc.c 108.else 109 @echo "Do 'sudo make COMPILER=GNUC install' prior to recompile." 110 @echo "Then, do 'make COMPILER=GNUC PREPROCESSED=1'." 111 @exit 112.endif 113$(OBJS) : mcpp.H 114.else 115CMACRO = $(MEM_MACRO) $(CPPOPTS) 116$(OBJS) : noconfig.H 117main.o directive.o eval.o expand.o support.o system.o mbchar.o: \ 118 system.H internal.H 119.endif 120 121.c.o : 122 $(CC) $(CFLAGS) $(CMACRO) $(CPPFLAGS) $< 123 124install : 125 install -s $(NAME) $(BINDIR)/$(NAME) 126.if ! empty(COMPILER) && $(COMPILER) == GNUC 127 @./set_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)' \ 128 '$(cpp_call)' '$(CC)' '$(CXX)' 'x$(CPPFLAGS)' 'x' 'ln -s' \ 129 '$(INCDIR)' SYS_FREEBSD $(cpu) 130.endif 131 132clean : 133 -rm *.o *.so $(NAME) mcpp.H mcpp.err libmcpp.* 134 135uninstall: 136 rm -f $(BINDIR)/$(NAME) 137.if ! empty(COMPILER) && $(COMPILER) == GNUC 138 @./unset_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)' \ 139 '$(cpp_call)' '$(CC)' '$(CXX)' 'x' 'ln -s' '$(INCDIR)' SYS_FREEBSD 140.endif 141 142.if empty(COMPILER) 143.if ! empty(MCPP_LIB) && $(MCPP_LIB) == 1 144# compiler-independent-build and MCPP_LIB is specified: 145CFLAGS += -DMCPP_LIB 146LIBDIR = /usr/local/lib 147 148mcpplib : mcpplib_a mcpplib_so 149 150mcpplib_a: $(OBJS) 151 ar -rv libmcpp.a $(OBJS) 152 153# shared library 154# mcpp 2.6.*: 0, mcpp 2.7: 1, mcpp 2.7.1: 2, mcpp 2.7.2: 3 155CUR = 3 156# mcpp 2.6.3: 0, mcpp 2.6.4: 1, mcpp 2.7, 2.7.1, 2.7.2: 0 157REV = 0 158# mcpp 2.6.*: 0, mcpp 2.7: 1, mcpp 2.7.1: 2, mcpp 2.7.2: 3 159AGE = 3 160SHLIB_VER = 0.$(CUR).$(REV) 161SOBJS = main.so directive.so eval.so expand.so support.so system.so mbchar.so 162.SUFFIXES: .so 163.c.so : 164 $(CC) $(CFLAGS) $(MEM_MACRO) -c -fpic -o $*.so $*.c 165mcpplib_so: $(SOBJS) 166 $(CC) -shared -o libmcpp.so.$(SHLIB_VER) $(SOBJS) # -fstack-protector 167 chmod a+x libmcpp.so.$(SHLIB_VER) 168 169mcpplib_install: 170 cp libmcpp.a libmcpp.so.$(SHLIB_VER) $(LIBDIR) 171 ranlib $(LIBDIR)/libmcpp.a 172 ln -sf libmcpp.so.$(SHLIB_VER) $(LIBDIR)/libmcpp.so 173 ln -sf libmcpp.so.$(SHLIB_VER) $(LIBDIR)/libmcpp.so.$(CUR) 174 # You should do 'ldconfig' as a root after install. 175 cp mcpp_lib.h mcpp_out.h $(INCDIR) 176 $(CC) -o $(NAME) main_libmcpp.c -l $(NAME) 177 install -s $(NAME) $(BINDIR) 178 179mcpplib_uninstall: 180 rm -f $(LIBDIR)/libmcpp.a $(LIBDIR)/libmcpp.so.$(SHLIB_VER) $(LIBDIR)/libmcpp.so.$(CUR) $(LIBDIR)/libmcpp.so 181 rm -f $(BINDIR)/$(NAME) 182 rm -f $(INCDIR)/mcpp* 183.endif 184 185# use mcpp as a subroutine from testmain.c 186.if ! empty(OUT2MEM) && $(OUT2MEM) == 1 187# output to memory buffer 188CFLAGS += -DOUT2MEM 189.endif 190TMAIN_LINKFLAGS = testmain.o -o testmain -L /usr/local/lib -l $(NAME) 191.if ! empty(MALLOC) && $(MALLOC) == KMMALLOC 192 TMAIN_LINKFLAGS += -l kmmalloc_debug 193.endif 194testmain : testmain.o 195 $(CC) $(TMAIN_LINKFLAGS) 196testmain_install : 197 install -s testmain $(BINDIR)/testmain 198testmain_uninstall : 199 rm -f $(BINDIR)/testmain 200.endif 201 202