Blame noconfig/linux.mak

Packit b40e2e
# makefile to compile MCPP version 2.7.2 for Linux / GCC / GNU make
Packit b40e2e
#       2008/09 kmatsui
Packit b40e2e
#
Packit b40e2e
# First, you must edit GCCDIR, BINDIR, INCDIR, gcc_maj_ver and gcc_min_ver.
Packit b40e2e
# To make compiler-independent-build of MCPP:
Packit b40e2e
#       make
Packit b40e2e
#       sudo make install
Packit b40e2e
# To make GCC-specific-build of MCPP:
Packit b40e2e
#       make COMPILER=GNUC
Packit b40e2e
#       sudo make COMPILER=GNUC install
Packit b40e2e
# To re-compile MCPP using GCC-specific-build of MCPP do:
Packit b40e2e
#       make COMPILER=GNUC PREPROCESSED=1
Packit b40e2e
#       sudo make COMPILER=GNUC PREPROCESSED=1 install
Packit b40e2e
# To link malloc() package of kmatsui do:
Packit b40e2e
#       make [COMPILER=GNUC] [PREPROCESSED=1] MALLOC=KMMALLOC
Packit b40e2e
#       sudo make [COMPILER=GNUC] [PREPROCESSED=1] MALLOC=KMMALLOC install
Packit b40e2e
# To make libmcpp (subroutine build of mcpp) and mcpp binary linking it:
Packit b40e2e
#       make MCPP_LIB=1 mcpplib
Packit b40e2e
#    	sudo make MCPP_LIB=1 mcpplib_install
Packit b40e2e
# To make testmain using libmcpp:
Packit b40e2e
#       make [OUT2MEM=1] testmain
Packit b40e2e
#       sudo make [OUT2MEM=1] testmain_install
Packit b40e2e
Packit b40e2e
# COMPILER:
Packit b40e2e
#   Specify whether make a compiler-independent-build or GCC-specific-build
Packit b40e2e
# compiler-independent-build:   empty
Packit b40e2e
# compiler-specific-build:      GNUC
Packit b40e2e
Packit b40e2e
# NAME: name of mcpp executable
Packit b40e2e
NAME = mcpp
Packit b40e2e
Packit b40e2e
# CC:   name of gcc executable
Packit b40e2e
#       e.g. cc, gcc, gcc-2.95.3, i686-pc-linux-gnu-gcc-4.1.1
Packit b40e2e
CC = gcc
Packit b40e2e
CXX = g++
Packit b40e2e
CFLAGS = -c -O2 -Wall   # -ggdb -v
Packit b40e2e
# for gcc 4.1 or later (Don't use this option to compile libmcpp)
Packit b40e2e
#CFLAGS += -fstack-protector
Packit b40e2e
CPPFLAGS =
Packit b40e2e
Packit b40e2e
LINKFLAGS = -o $(NAME)
Packit b40e2e
# for gcc 4.1 or later (Don't use this option to compile libmcpp)
Packit b40e2e
#LINKFLAGS += -fstack-protector
Packit b40e2e
Packit b40e2e
ifeq    ($(COMPILER), )
Packit b40e2e
# compiler-independent-build
Packit b40e2e
CPPOPTS =
Packit b40e2e
# BINDIR:   directory to install mcpp: /usr/bin or /usr/local/bin
Packit b40e2e
BINDIR = /usr/local/bin
Packit b40e2e
# INCDIR:   directory to install mcpp_lib.h, mcpp_out.h for mcpplib
Packit b40e2e
INCDIR = /usr/local/include
Packit b40e2e
Packit b40e2e
else
Packit b40e2e
# compiler-specific-build:  Adjust for your system
Packit b40e2e
Packit b40e2e
ifeq    ($(COMPILER), GNUC)
Packit b40e2e
# The directory where 'gcc' (cc) command is located
Packit b40e2e
GCCDIR = /usr/bin
Packit b40e2e
#GCCDIR = /usr/local/bin
Packit b40e2e
# set GCC version
Packit b40e2e
gcc_maj_ver = 3
Packit b40e2e
gcc_min_ver = 3
Packit b40e2e
# INCDIR:   GCC's version specific include directory
Packit b40e2e
#INCDIR = /usr/lib/gcc-lib/i386-vine-linux/2.95.3/include
Packit b40e2e
#INCDIR = /usr/local/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/include
Packit b40e2e
# Vine 4.2
Packit b40e2e
INCDIR = /usr/lib/gcc-lib/i386-vine-linux/3.3.6/include
Packit b40e2e
#INCDIR = /usr/local/lib/gcc/i686-pc-linux-gnu/4.1.1/include
Packit b40e2e
# Debian 4.0
Packit b40e2e
#INCDIR = /usr/lib/gcc/i486-linux-gnu/4.1.2/include
Packit b40e2e
CPPOPTS = -DCOMPILER=$(COMPILER)
Packit b40e2e
Packit b40e2e
#BINDIR = /usr/lib/gcc-lib/i386-vine-linux/2.95.3
Packit b40e2e
#BINDIR = /usr/local/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2
Packit b40e2e
# Vine 4.2
Packit b40e2e
BINDIR = /usr/lib/gcc-lib/i386-vine-linux/3.3.6
Packit b40e2e
#BINDIR = /usr/local/libexec/gcc/i686-pc-linux-gnu/4.1.1
Packit b40e2e
# Debian 4.0
Packit b40e2e
#BINDIR = /usr/lib/gcc/i486-linux-gnu/4.1.2
Packit b40e2e
cpu = i386
Packit b40e2e
#cpu = ppc
Packit b40e2e
#cpu = x86_64
Packit b40e2e
#cpu = ppc64
Packit b40e2e
ifeq ($(gcc_maj_ver), 2)
Packit b40e2e
cpp_call = $(BINDIR)/cpp0
Packit b40e2e
else
Packit b40e2e
cpp_call = $(BINDIR)/cc1
Packit b40e2e
endif
Packit b40e2e
endif
Packit b40e2e
endif
Packit b40e2e
Packit b40e2e
ifneq	($(MALLOC), )
Packit b40e2e
ifeq	($(MALLOC), KMMALLOC)
Packit b40e2e
	LINKFLAGS += -lkmmalloc_debug
Packit b40e2e
	MEM_MACRO = -D_MEM_DEBUG -DXMALLOC
Packit b40e2e
endif
Packit b40e2e
	MEM_MACRO += -D$(MALLOC)
Packit b40e2e
else
Packit b40e2e
	MEM_MACRO =
Packit b40e2e
endif
Packit b40e2e
Packit b40e2e
OBJS = main.o directive.o eval.o expand.o support.o system.o mbchar.o
Packit b40e2e
Packit b40e2e
all	:	$(NAME)
Packit b40e2e
$(NAME): $(OBJS)
Packit b40e2e
	$(CC) $(OBJS) $(LINKFLAGS)
Packit b40e2e
Packit b40e2e
PREPROCESSED = 0
Packit b40e2e
Packit b40e2e
ifeq	($(PREPROCESSED), 1)
Packit b40e2e
CMACRO = -DPREPROCESSED
Packit b40e2e
#CPPFLAGS = -Wp,-v,-Q,-W3
Packit b40e2e
    # for MCPP to output a bit verbose diagnosis to "mcpp.err"
Packit b40e2e
# Make a "pre-preprocessed" header file to recompile MCPP with MCPP.
Packit b40e2e
mcpp.H	: system.H noconfig.H internal.H
Packit b40e2e
ifeq    ($(COMPILER), GNUC)
Packit b40e2e
	$(CC) -E -Wp,-b  $(CPPFLAGS) $(CPPOPTS) $(MEM_MACRO) -o mcpp.H preproc.c
Packit b40e2e
else
Packit b40e2e
	@echo "Do 'sudo make COMPILER=GNUC install' prior to recompile."
Packit b40e2e
	@echo "Then, do 'make COMPILER=GNUC PREPROCESSED=1'."
Packit b40e2e
	@exit
Packit b40e2e
endif
Packit b40e2e
$(OBJS) : mcpp.H
Packit b40e2e
else
Packit b40e2e
CMACRO = $(MEM_MACRO) $(CPPOPTS)
Packit b40e2e
$(OBJS) : noconfig.H
Packit b40e2e
main.o directive.o eval.o expand.o support.o system.o mbchar.o:   \
Packit b40e2e
        system.H internal.H
Packit b40e2e
endif
Packit b40e2e
Packit b40e2e
.c.o	:
Packit b40e2e
	$(CC) $(CFLAGS) $(CMACRO) $(CPPFLAGS) $<
Packit b40e2e
Packit b40e2e
install :
Packit b40e2e
	install -s $(NAME) $(BINDIR)/$(NAME)
Packit b40e2e
ifeq    ($(COMPILER), GNUC)
Packit b40e2e
	@./set_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)'   \
Packit b40e2e
            '$(cpp_call)' '$(CC)' '$(CXX)' 'x$(CPPFLAGS)' 'x' 'ln -s' \
Packit b40e2e
            '$(INCDIR)' SYS_LINUX $(cpu)
Packit b40e2e
endif
Packit b40e2e
Packit b40e2e
clean	:
Packit b40e2e
	-rm *.o *.so $(NAME) mcpp.H mcpp.err libmcpp.*
Packit b40e2e
Packit b40e2e
uninstall:
Packit b40e2e
	rm -f $(BINDIR)/$(NAME)
Packit b40e2e
ifeq    ($(COMPILER), GNUC)
Packit b40e2e
	@./unset_mcpp.sh '$(GCCDIR)' '$(gcc_maj_ver)' '$(gcc_min_ver)'  \
Packit b40e2e
            '$(cpp_call)' '$(CC)' '$(CXX)' 'x' 'ln -s' '$(INCDIR)' SYS_LINUX
Packit b40e2e
endif
Packit b40e2e
Packit b40e2e
ifeq    ($(COMPILER), )
Packit b40e2e
# the directory to install libmcpp into
Packit b40e2e
LIBDIR = /usr/local/lib
Packit b40e2e
ifeq    ($(MCPP_LIB), 1)
Packit b40e2e
# compiler-independent-build and MCPP_LIB=1
Packit b40e2e
CFLAGS += -DMCPP_LIB
Packit b40e2e
Packit b40e2e
mcpplib :   mcpplib_a mcpplib_so
Packit b40e2e
Packit b40e2e
mcpplib_a:	$(OBJS)
Packit b40e2e
	ar -rv libmcpp.a $(OBJS)
Packit b40e2e
Packit b40e2e
# shared library
Packit b40e2e
# mcpp 2.6.*: 0, mcpp 2.7: 1, mcpp 2.7.1: 2, mcpp 2.7.2: 3
Packit b40e2e
CUR = 3
Packit b40e2e
# mcpp 2.6.3: 0, mcpp 2.6.4: 1, mcpp 2.7, 2.7.1, 2.7.2: 0
Packit b40e2e
REV = 0
Packit b40e2e
# mcpp 2.6.*: 0, mcpp 2.7: 1, mcpp 2.7.1: 2, mcpp 2.7.2: 3
Packit b40e2e
AGE = 3
Packit b40e2e
SHLIB_VER = 0.$(CUR).$(REV)
Packit b40e2e
SOBJS = main.so directive.so eval.so expand.so support.so system.so mbchar.so
Packit b40e2e
.SUFFIXES: .so
Packit b40e2e
.c.so	:
Packit b40e2e
	$(CC) $(CFLAGS) $(MEM_MACRO) -c -fpic -o $*.so $*.c
Packit b40e2e
mcpplib_so: $(SOBJS)
Packit b40e2e
	$(CC) -shared -o libmcpp.so.$(SHLIB_VER) $(SOBJS)
Packit b40e2e
	chmod a+x libmcpp.so.$(SHLIB_VER)
Packit b40e2e
Packit b40e2e
mcpplib_install:
Packit b40e2e
	cp libmcpp.a libmcpp.so.$(SHLIB_VER) $(LIBDIR)
Packit b40e2e
	ranlib $(LIBDIR)/libmcpp.a
Packit b40e2e
	ln -sf libmcpp.so.$(SHLIB_VER) $(LIBDIR)/libmcpp.so
Packit b40e2e
	ln -sf libmcpp.so.$(SHLIB_VER) $(LIBDIR)/libmcpp.so.$(CUR)
Packit b40e2e
# You should do 'ldconfig' as a root after install.
Packit b40e2e
	cp mcpp_lib.h mcpp_out.h $(INCDIR)
Packit b40e2e
	$(CC) -o $(NAME) main_libmcpp.c -l $(NAME)
Packit b40e2e
	install -s $(NAME) $(BINDIR)
Packit b40e2e
mcpplib_uninstall:
Packit b40e2e
	rm -f $(LIBDIR)/libmcpp.a $(LIBDIR)/libmcpp.so.$(SHLIB_VER) $(LIBDIR)/libmcpp.so.$(CUR) $(LIBDIR)/libmcpp.so 
Packit b40e2e
	rm -f $(BINDIR)/$(NAME)
Packit b40e2e
	rm -f $(INCDIR)/mcpp*
Packit b40e2e
endif
Packit b40e2e
Packit b40e2e
# use mcpp as a subroutine from testmain.c
Packit b40e2e
ifeq    ($(OUT2MEM), 1)
Packit b40e2e
# output to memory buffer
Packit b40e2e
CFLAGS += -DOUT2MEM
Packit b40e2e
endif
Packit b40e2e
TMAIN_LINKFLAGS = testmain.o -o testmain -L$(LIBDIR) -l$(NAME)
Packit b40e2e
ifeq	($(MALLOC), KMMALLOC)
Packit b40e2e
	TMAIN_LINKFLAGS += -lkmmalloc_debug
Packit b40e2e
endif
Packit b40e2e
testmain	:	testmain.o
Packit b40e2e
	$(CC) $(TMAIN_LINKFLAGS)
Packit b40e2e
testmain_install	:
Packit b40e2e
	install -s testmain $(BINDIR)/testmain
Packit b40e2e
testmain_uninstall	:
Packit b40e2e
	rm -f $(BINDIR)/testmain
Packit b40e2e
Packit b40e2e
endif
Packit b40e2e