1#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 2#* * 3#* File....: Makefile * 4#* Name....: Zimpl Makefile * 5#* Author..: Thorsten Koch * 6#* Copyright by Author, All rights reserved * 7#* * 8#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 9#* 10#* Copyright (C) 2005-2018 by Thorsten Koch <koch@zib.de> 11#* 12#* This program is free software; you can redistribute it and/or 13#* modify it under the terms of the GNU General Public License 14#* as published by the Free Software Foundation; either version 2 15#* of the License, or (at your option) any later version. 16#* 17#* This program is distributed in the hope that it will be useful, 18#* but WITHOUT ANY WARRANTY; without even the implied warranty of 19#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20#* GNU General Public License for more details. 21#* 22#* You should have received a copy of the GNU General Public License 23#* along with this program; if not, write to the Free Software 24#* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 25#* 26# 27.PHONY: all depend clean lint doc doxygen check valgrind libdbl coverage 28 29ARCH := $(shell uname -m | \ 30 sed \ 31 -e s/sun../sparc/ \ 32 -e s/i.86/x86/ \ 33 -e s/i86pc/x86/ \ 34 -e s/amd64/x86_64/ \ 35 -e s/IP../mips/ \ 36 -e s/9000..../hppa/ \ 37 -e s/Power\ Macintosh/ppc/ \ 38 -e s/00........../pwr4/) 39OSTYPE := $(shell uname -s | \ 40 tr '[:upper:]' '[:lower:]' | \ 41 tr '/' '_' | \ 42 sed \ 43 -e s/cygwin.*/cygwin/ \ 44 -e s/irix../irix/ \ 45 -e s/windows.*/windows/ \ 46 -e s/mingw.*/mingw/) 47 48HOSTNAME := $(shell uname -n | tr '[:upper:]' '[:lower:]') 49 50VERSION = 3.3.6 51VERBOSE = false 52SHARED = false 53STATIC = false 54ZLIB = true 55LINK = static 56OPT = opt 57COMP = gnu 58CC = gcc 59CC_o = -o # 60LINKCC = gcc 61LINKCC_o = -o #the white space is important 62LIBEXT = .a 63YACC = bison 64LEX = flex 65DCC = gcc 66LINT = pclp64_linux # _debug 67CPPCHECK = cppcheck 68AR = ar cr 69AR_o = 70RANLIB = ranlib 71DOXY = doxygen 72VALGRIND = valgrind --tool=memcheck --leak-check=full \ 73 --leak-resolution=high --show-reachable=yes 74 75SRCDIR = src/zimpl 76BINDIR = bin 77LIBDIR = lib 78LINTCONF = /opt/pclint/config 79 80CPPFLAGS = -I$(SRCDIR)/.. -DVERSION='"$(VERSION)"' 81CFLAGS = -O 82LDFLAGS = -lgmp -lm 83YFLAGS = -d -t -v 84LFLAGS = -d 85ARFLAGS = 86DFLAGS = -MM 87 88GCCWARN = -Wall -W -Wpointer-arith -Wcast-align -Wwrite-strings \ 89 -Wstrict-prototypes -Wmissing-prototypes -Winline \ 90 -Wmissing-declarations -Wshadow -Waggregate-return \ 91 -Wno-unused -Wno-unknown-pragmas 92 93ifeq ($(ZLIB),true) 94LDFLAGS += -lz 95else 96CPPFLAGS += -DWITHOUT_ZLIB 97endif 98 99ifeq ($(SHARED),true) 100LINK = shared 101endif 102ifeq ($(STATIC),true) 103LINK = static 104endif 105 106BASE = $(OSTYPE).$(ARCH).$(COMP).$(OPT) 107OBJDIR = obj/O.$(OSTYPE).$(ARCH).$(COMP).$(LINK).$(OPT) 108NAME = zimpl 109BINNAME = $(NAME)-$(VERSION).$(OSTYPE).$(ARCH).$(COMP).$(LINK).$(OPT) 110LIBNAME = $(NAME)-$(VERSION).$(BASE) 111 112LIBRARY = $(LIBDIR)/lib$(LIBNAME)$(LIBEXT) 113LIBRARYDBL = $(LIBDIR)/lib$(LIBNAME).dbl$(LIBEXT) 114LIBLINK = $(LIBDIR)/lib$(NAME).$(BASE)$(LIBEXT) 115LIBDBLLINK = $(LIBDIR)/lib$(NAME).$(BASE).dbl$(LIBEXT) 116 117BINARY = $(BINDIR)/$(BINNAME) 118BINARYDBL = $(BINDIR)/$(BINNAME).dbl 119BINLINK = $(BINDIR)/$(NAME).$(BASE) 120BINSHORTLINK = $(BINDIR)/$(NAME) 121DEPEND = $(SRCDIR)/depend 122 123#----------------------------------------------------------------------------- 124 125OBJECT = zimpl.o xlpglue.o zlpglue.o \ 126 ratlpstore.o ratlpfwrite.o ratmpswrite.o ratmstwrite.o \ 127 ratordwrite.o ratpresolve.o 128LIBBASE = blkmem.o bound.o code.o conname.o define.o elem.o entry.o \ 129 hash.o heap.o idxset.o inst.o iread.o list.o \ 130 load.o local.o metaio.o mmlparse2.o mmlscan.o mono.o \ 131 mshell.o prog.o random.o rdefpar.o source.o \ 132 setempty.o setpseudo.o setlist.o setrange.o setprod.o \ 133 setmulti.o set4.o stmt.o stkchk.o strstore2.o symbol.o \ 134 term2.o tuple.o vinst.o zimpllib.o 135LIBOBJ = $(LIBBASE) gmpmisc.o numbgmp.o 136LIBDBLOBJ = $(LIBBASE) numbdbl.o 137OBJXXX = $(addprefix $(OBJDIR)/,$(OBJECT)) 138LIBXXX = $(addprefix $(OBJDIR)/,$(LIBOBJ)) 139LIBDBLXXX = $(addprefix $(OBJDIR)/,$(LIBDBLOBJ)) 140OBJSRC = $(addprefix $(SRCDIR)/,$(OBJECT:.o=.c)) 141LIBSRC = $(addprefix $(SRCDIR)/,$(LIBOBJ:.o=.c)) #(SRCDIR)/numbdbl.c 142 143#----------------------------------------------------------------------------- 144include make/make.$(OSTYPE).$(ARCH).$(COMP).$(OPT) 145-include make/local/make.$(HOSTNAME) 146-include make/local/make.$(HOSTNAME).$(COMP) 147-include make/local/make.$(HOSTNAME).$(COMP).$(OPT) 148#----------------------------------------------------------------------------- 149 150FLAGS += $(USRFLAGS) 151OFLAGS += $(USROFLAGS) 152CFLAGS += $(USRCFLAGS) $(USROFLAGS) 153LDFLAGS += $(USRLDFLAGS) 154ARFLAGS += $(USRARFLAGS) 155DFLAGS += $(USRDFLAGS) 156 157 158ifeq ($(VERBOSE),false) 159.SILENT: $(LIBRARY) $(LIBLINK) $(BINARY) $(BINLINK) $(BINSHORTLINK) \ 160 $(SRCDIR)/mmlparse2.c $(SRCDIR)/mmlscan.c $(OBJXXX) $(LIBXXX) $(LIBDBLXXX) 161endif 162 163all: $(LIBRARY) $(LIBLINK) $(BINARY) $(BINLINK) $(BINSHORTLINK) 164 165double: $(LIBRARYDBL) $(LIBDBLLINK) $(BINARYDBL) # $(BINLINK) $(BINSHORTLINK) 166 167$(LIBLINK): $(LIBRARY) 168 @rm -f $@ 169 cd $(dir $@) && ln -s $(notdir $(LIBRARY)) $(notdir $@) 170 171$(LIBDBLLINK): $(LIBRARYDBL) 172 @rm -f $@ 173 cd $(dir $@) && ln -s $(notdir $(LIBRARYDBL)) $(notdir $@) 174 175$(BINLINK) $(BINSHORTLINK): $(BINARY) 176 @rm -f $@ 177 cd $(dir $@) && ln -s $(notdir $(BINARY)) $(notdir $@) 178 179$(BINARY): $(OBJDIR) $(BINDIR) $(OBJXXX) $(LIBRARY) 180 @echo "-> linking $@" 181ifeq ($(COMP), msvc) 182 $(LINKCC) $(CFLAGS) $(OBJXXX) $(LIBRARY) $(LDFLAGS) $(LINKCC_o)$@ 183else 184 $(LINKCC) $(CFLAGS) $(OBJXXX) -L$(LIBDIR) -l$(LIBNAME) $(LDFLAGS) $(LINKCC_o)$@ 185endif 186 187$(BINARYDBL): $(OBJDIR) $(BINDIR) $(OBJXXX) $(LIBRARYDBL) 188 @echo "-> linking $@" 189 $(LINKCC) $(CFLAGS) $(OBJXXX) -L$(LIBDIR) -l$(LIBNAME).dbl $(LDFLAGS) $(CC_o)$@ 190 191$(LIBRARY): $(OBJDIR) $(LIBDIR) $(LIBXXX) 192 @echo "-> generating library $@" 193 -rm -f $(LIBRARY) 194 $(AR) $(AR_o)$@ $(LIBXXX) $(ARFLAGS) 195ifneq ($(RANLIB),) 196 $(RANLIB) $@ 197endif 198 199libdbl: $(LIBRARYDBL) $(LIBDBLLINK) 200 201$(LIBRARYDBL): $(OBJDIR) $(LIBDIR) $(LIBDBLXXX) 202 @echo "-> generating library $@" 203 -rm -f $(LIBRARYDBL) 204 $(AR) $@ $(LIBDBLXXX) $(ARFLAGS) 205 $(RANLIB) $@ 206 207$(SRCDIR)/mmlparse2.c: $(SRCDIR)/mmlparse2.y $(SRCDIR)/mme.h 208 @echo "-> generating yacc parser $@" 209 $(YACC) $(YFLAGS) -o $@ $< 210 211$(SRCDIR)/mmlscan.c: $(SRCDIR)/mmlscan.l $(SRCDIR)/mme.h 212 @echo "-> generating lex scanner $@" 213 $(LEX) $(LFLAGS) -o$@ $< 214 215lint: $(OBJSRC) $(LIBSRC) 216 $(LINT) $(LINTCONF)/co-gcc.lnt $(SRCDIR)/project2.lnt \ 217 -I$(LINTCONF) -I$(SRCDIR) -dNO_MSHELL -dVERSION='"$(VERSION)"' $^ 218 219cppcheck: $(OBJSRC) $(LIBSRC) 220 $(CPPCHECK) $(CPPFLAGS) -I/usr/include -I/usr/include/x86_64-linux-gnu -I/usr/include/x86_64-linux-gnu/bits -I/usr/include/x86_64-linux-gnu/sys -I/usr/include/linux -I/usr/lib/gcc/x86_64-linux-gnu/5/include --inline-suppr --suppressions-list=src/cppcheck.txt --enable=warning,style,performance,portability,information $^ 221 222doc: 223 cd doc; make -f Makefile 224 225doxygen: 226 cd doc; $(DOXY) $(NAME).dxy 227 228check: 229 cd check; \ 230 /bin/sh ./check.sh ../$(BINARY) 231 232valgrind: 233 cd check; \ 234 /bin/sh ./check.sh "$(VALGRIND) ../$(BINARY)" 235 236coverage: 237 -ln -s ../../src $(OBJDIR) 238 -mkdir -p gcov 239 lcov -d $(OBJDIR) -z 240 make OPT=gcov check 241 lcov -d $(OBJDIR) -c >gcov/z.capture 242 lcov -d $(OBJDIR) -r gcov/z.capture "*mmlscan.c" "*mmlparse2.c" >gcov/zimpl.capture 243 genhtml -o gcov gcov/zimpl.capture 244 -rm gcov/z.capture 245 246$(OBJDIR): 247 @echo "** creating directory \"$@\"" 248 @-mkdir -p $(OBJDIR) 249 250$(LIBDIR): 251 @echo "** creating directory \"$@\"" 252 @-mkdir -p $(LIBDIR) 253 254$(BINDIR): 255 @echo "** creating directory \"$@\"" 256 @-mkdir -p $(BINDIR) 257 258clean: 259 -rm -rf $(OBJDIR)/* $(BINARY) $(LIBRARY) $(LIBRARYDBL) $(LIBLINK) $(BINLINK) $(BINSHORTLINK) 260 261depend: 262 $(SHELL) -ec '$(DCC) $(DFLAGS) $(CPPFLAGS) $(OBJSRC) $(LIBSRC) \ 263 | sed '\''s|^\([0-9A-Za-z\_]\{1,\}\)\.o|$$\(OBJDIR\)/\1.o|g'\'' \ 264 >$(DEPEND)' 265 266-include $(DEPEND) 267 268$(OBJDIR)/%.o: $(SRCDIR)/%.c 269 @echo "-> compiling $@" 270 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< $(CC_o)$@ 271 272# --- EOF --------------------------------------------------------------------- 273