# makefile to compile MCPP version 2.7.2 for Mac OS X / GCC / GNU make # 2008/09 kmatsui # # First, you must edit NAME, GCCDIR, BINDIR, INCDIR, # gcc_maj_ver, gcc_min_ver, arch, target_cc. # To make compiler-independent-build of MCPP: # make # sudo make install # To make GCC-specific-build of MCPP: # make COMPILER=GNUC # sudo make COMPILER=GNUC install # To re-compile MCPP using GCC-specific-build of MCPP do: # make COMPILER=GNUC PREPROCESSED=1 # sudo make COMPILER=GNUC PREPROCESSED=1 install # To link malloc() package of kmatsui do: # make [COMPILER=GNUC] [PREPROCESSED=1] MALLOC=KMMALLOC # sudo make [COMPILER=GNUC] [PREPROCESSED=1] MALLOC=KMMALLOC install # To make libmcpp (subroutine build of mcpp): # make MCPP_LIB=1 mcpplib # sudo make MCPP_LIB=1 mcpplib_install # To make testmain using libmcpp: # make [OUT2MEM=1] testmain # sudo 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 #NAME = powerpc-apple-darwin9-mcpp #NAME = i686-apple-darwin9-mcpp # CC, CXX: name of gcc, g++ executable # CC: default, GCC-specific-build # $(arch)-apple-darwin?-gcc-VERSION: # cross-compile of compiler-independent-build CC = gcc #CC = powerpc-apple-darwin9-gcc-4.0.1 #CC = i686-apple-darwin9-gcc-4.0.1 CXX = g++ #CXX = powerpc-apple-darwin9-g++-4.0.1 #CXX = i686-apple-darwin9-g++-4.0.1 CFLAGS = -c -Wall -O2 # -ggdb -O0 -v # for gcc 4.1 or later (Don't use this option to compile libmcpp) #CFLAGS += -fstack-protector CPPFLAGS = LINKFLAGS = -o $(NAME) # for gcc 4.1 or later (Don't use this option to compile libmcpp) #LINKFLAGS += -fstack-protector # for gcc 4.1 or later # for universal binary of MacOS 10.4 and 10.5, x86 and ppc #UFLAGS = -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -arch i386 -arch ppc 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 mcpplib 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 = 4 gcc_min_ver = 0 # INCDIR: GCC's version specific include directory # Mac OS X Leopard INCDIR = /usr/lib/gcc/i686-apple-darwin9/4.0.1/include #INCDIR = /usr/lib/gcc/powerpc-apple-darwin9/4.0.1/include CPPOPTS = -DCOMPILER=$(COMPILER) # BINDIR: Where mcpp should be installed # Mac OS X Leopard BINDIR = /usr/libexec/gcc/i686-apple-darwin9/4.0.1 #BINDIR = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1 # target_cc: the compiler into which mcpp is installed # gcc: default # $(arch)-apple-darwin?-gcc-VERSION: target is the cross-compiler target_cc = gcc #target_cc = powerpc-apple-darwin9-gcc-4.0.1 #target_cc = i686-apple-darwin9-gcc-4.0.1 arch = i386 #arch = ppc ifeq ($(gcc_maj_ver), 2) cpp_call = $(BINDIR)/cpp0 else cpp_call = $(BINDIR)/cc1 endif endif endif ifneq ($(MALLOC), ) ifeq ($(MALLOC), KMMALLOC) LINKFLAGS += -lkmmalloc_debug MEM_MACRO = -D_MEM_DEBUG -DXMALLOC endif MEM_MACRO += -D$(MALLOC) else MEM_MACRO = endif OBJS = main.o directive.o eval.o expand.o support.o system.o mbchar.o all : $(NAME) $(NAME): $(OBJS) $(CC) $(UFLAGS) $(OBJS) $(LINKFLAGS) PREPROCESSED = 0 ifeq ($(PREPROCESSED), 1) CMACRO = -DPREPROCESSED #CPPFLAGS = -Wp,-v,-Q,-W3 # for MCPP to output a bit verbose diagnosis to "mcpp.err" # Make a "pre-preprocessed" header file to recompile MCPP with MCPP. mcpp.H : system.H noconfig.H internal.H ifeq ($(COMPILER), GNUC) $(CC) -E -Wp,-b $(CPPFLAGS) $(CPPOPTS) $(MEM_MACRO) -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 = $(MEM_MACRO) $(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) $(UFLAGS) $(CMACRO) $(CPPFLAGS) $< install : install -s $(NAME) $(BINDIR)/$(NAME) ifeq ($(COMPILER), GNUC) @./set_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)' \ '$(cpp_call)' '$(CC)' '$(CXX)' 'x$(CPPFLAGS)' 'x' 'ln -s' \ '$(INCDIR)' SYS_MAC $(arch) $(target_cc) endif clean : -rm *.o *.so $(NAME) mcpp.H mcpp.err libmcpp.* uninstall: rm -f $(BINDIR)/$(NAME) ifeq ($(COMPILER), GNUC) @./unset_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)' \ '$(cpp_call)' '$(CC)' '$(CXX)' 'x' 'ln -s' '$(INCDIR)' SYS_MAC \ $(target_cc) endif ifeq ($(COMPILER), ) ifeq ($(MCPP_LIB), 1) # compiler-independent-build and MCPP_LIB=1 CFLAGS += -DMCPP_LIB LIBDIR = /usr/local/lib mcpplib : mcpplib_a mcpplib_so mcpplib_a: $(OBJS) ar -rv libmcpp.a $(OBJS) # shared library # mcpp 2.6.*: 0, mcpp 2.7: 1, mcpp 2.7.1: 2, mcpp 2.7.2: 3 CUR = 3 # mcpp 2.6.3: 0, mcpp 2.6.4: 1, mcpp 2.7, 2.7.1, 2.7.2: 0 REV = 0 # mcpp 2.6.*: 0, mcpp 2.7: 1, mcpp 2.7.1: 2, mcpp 2.7.2: 3 AGE = 3 SHLIB_VER = 0.$(CUR).$(REV) SOBJS = main.so directive.so eval.so expand.so support.so system.so mbchar.so .SUFFIXES: .so .c.so : $(CC) $(CFLAGS) $(UFLAGS) $(MEM_MACRO) -c -fno-common -o $*.so $*.c mcpplib_so: $(SOBJS) $(CC) $(UFLAGS) -dynamiclib -o libmcpp.$(SHLIB_VER).dylib $(SOBJS) chmod a+x libmcpp.$(SHLIB_VER).dylib mcpplib_install: cp libmcpp.a libmcpp.$(SHLIB_VER).dylib $(LIBDIR) ranlib $(LIBDIR)/libmcpp.a ln -sf libmcpp.$(SHLIB_VER).dylib $(LIBDIR)/libmcpp.dylib ln -sf libmcpp.$(SHLIB_VER).dylib $(LIBDIR)/libmcpp.0.dylib cp mcpp_lib.h mcpp_out.h $(INCDIR) # You should do 'ldconfig' as a root after install. $(CC) -o $(NAME) main_libmcpp.c -l $(NAME) install -s $(NAME) $(BINDIR) mcpplib_uninstall: rm -f $(LIBDIR)/libmcpp.a $(LIBDIR)/libmcpp.$(SHLIB_VER).dylib $(LIBDIR)/libmcpp.0.dylib $(LIBDIR)/libmcpp.dylib rm -f $(BINDIR)/$(NAME) 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 -l $(NAME) ifeq ($(MALLOC), KMMALLOC) TMAIN_LINKFLAGS += -l kmmalloc_debug endif testmain : testmain.o $(CC) $(UFLAGS) $(TMAIN_LINKFLAGS) testmain_install : install -s testmain $(BINDIR)/testmain testmain_uninstall : rm -f $(BINDIR)/testmain endif