1#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2#*                                                                           *
3#*                  This file is part of the program and library             *
4#*         SCIP --- Solving Constraint Integer Programs                      *
5#*                                                                           *
6#*    Copyright (C) 2002-2021 Konrad-Zuse-Zentrum                            *
7#*                            fuer Informationstechnik Berlin                *
8#*                                                                           *
9#*  SCIP is distributed under the terms of the ZIB Academic License.         *
10#*                                                                           *
11#*  You should have received a copy of the ZIB Academic License              *
12#*  along with SCIP; see the file COPYING. If not email to scip@zib.de.      *
13#*                                                                           *
14#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
15
16#@file    Makefile
17#@brief   SCIP Makefile
18#@author  Thorsten Koch
19#@author  Tobias Achterberg
20#@author  Marc Pfetsch
21#@author  Timo Berthold
22
23#-----------------------------------------------------------------------------
24# paths variables
25#-----------------------------------------------------------------------------
26
27SCIPDIR		=	./
28
29INSTALLDIR	=
30
31#-----------------------------------------------------------------------------
32# include make.project file
33#-----------------------------------------------------------------------------
34
35# do not use other open source projects; needs to be set before including make.project
36ifeq ($(OPENSOURCE),false)
37	override EXPRINT	=	none
38	override GMP		=	false
39	override READLINE	=	false
40	override ZLIB		=	false
41	override ZIMPL		=	false
42	override IPOPT		=	false
43endif
44
45# mark that this is a SCIP internal makefile
46SCIPINTERNAL	=	true
47
48# use PARASCIP=true if compiled with TPI not equal to none
49ifeq ($(TPI),omp)
50	override PARASCIP        =       true
51endif
52ifeq ($(TPI),tny)
53        override PARASCIP        =       true
54endif
55
56
57# load default settings and detect host architecture
58include $(SCIPDIR)/make/make.project
59
60#-----------------------------------------------------------------------------
61# default settings
62#-----------------------------------------------------------------------------
63
64VERSION		=	$(SCIP_VERSION)
65SCIPGITHASH	=
66SOFTLINKS	=
67MAKESOFTLINKS	=	true
68TOUCHLINKS	=	false
69
70#-----------------------------------------------------------------------------
71# define build flags
72#-----------------------------------------------------------------------------
73BUILDFLAGS =	" ARCH=$(ARCH)\\n\
74		COMP=$(COMP)\\n\
75		DEBUGSOL=$(DEBUGSOL)\\n\
76		EXPRINT=$(EXPRINT)\\n\
77		GAMS=$(GAMS)\\n\
78		GMP=$(GMP)\\n\
79		IPOPT=$(IPOPT)\\n\
80		IPOPTOPT=$(IPOPTOPT)\\n\
81		LPS=$(LPS)\\n\
82		LPSCHECK=$(LPSCHECK)\\n\
83		LPSOPT=$(LPSOPT)\\n\
84		NOBLKBUFMEM=$(NOBLKBUFMEM)\\n\
85		NOBLKMEM=$(NOBLKMEM)\\n\
86		NOBUFMEM=$(NOBUFMEM)\\n\
87		OPT=$(OPT)\\n\
88		OSTYPE=$(OSTYPE)\\n\
89		PARASCIP=$(PARASCIP)\\n\
90		PAPILO=$(PAPILO)\\n\
91		READLINE=$(READLINE)\\n\
92		SANITIZE=$(SANITIZE)\\n\
93		SHARED=$(SHARED)\\n\
94		SYM=$(SYM)\\n\
95		USRARFLAGS=$(USRARFLAGS)\\n\
96		USRCFLAGS=$(USRCFLAGS)\\n\
97		USRCXXFLAGS=$(USRCXXFLAGS)\\n\
98		USRFLAGS=$(USRFLAGS)\\n\
99		USRLDFLAGS=$(USRLDFLAGS)\\n\
100		USROFLAGS=$(USROFLAGS)\\n\
101		VERSION=$(VERSION)\\n\
102		WORHP=$(WORHP)\\n\
103		WORHPOPT=$(WORHPOPT)\\n\
104		ZIMPL=$(ZIMPL)\\n\
105		ZIMPLOPT=$(ZIMPLOPT)\\n\
106		ZLIB=$(ZLIB)"
107
108#-----------------------------------------------------------------------------
109# LP Solver Interface
110#-----------------------------------------------------------------------------
111
112LPILIBSHORTNAME	=	lpi$(LPS)
113LPILIBNAME	=	$(LPILIBSHORTNAME)-$(VERSION)
114LPILIBOBJ	=
115LPSOPTIONS	=
116LPIINSTMSG	=
117
118LPSCHECKDEP	:=	$(SRCDIR)/depend.lpscheck
119LPSCHECKSRC	:=	$(shell cat $(LPSCHECKDEP))
120
121LPSOPTIONS	+=	cpx
122ifeq ($(LPS),cpx)
123FLAGS		+=	-I$(LIBDIR)/include/cpxinc
124LPILIBOBJ	=	lpi/lpi_cpx.o scip/bitencode.o blockmemshell/memory.o scip/rbtree.o scip/message.o
125LPILIBSRC  	=	$(addprefix $(SRCDIR)/,$(LPILIBOBJ:.o=.c))
126SOFTLINKS	+=	$(LIBDIR)/include/cpxinc
127ifeq ($(SHARED),true)
128SOFTLINKS	+=	$(LIBDIR)/shared/libcplex.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)
129else
130SOFTLINKS	+=	$(LIBDIR)/static/libcplex.$(OSTYPE).$(ARCH).$(COMP).$(STATICLIBEXT)
131endif
132LPIINSTMSG	=	"  -> \"cpxinc\" is the path to the CPLEX \"include\" directory, e.g., \"<CPLEX-path>/include/ilcplex\".\n"
133LPIINSTMSG	+=	" -> \"libcplex.*.a\" is the path to the CPLEX library, e.g., \"<CPLEX-path>/lib/x86-64_linux/static_pic/libcplex.a\"\n"
134LPIINSTMSG	+=	" -> \"libcplex.*.so\" is the path to the CPLEX library, e.g., \"<CPLEX-path>/bin/x86-64_linux/libcplex1263.so\""
135endif
136
137# XPRESS is only available as shared library
138LPSOPTIONS	+=	xprs
139ifeq ($(LPS),xprs)
140FLAGS		+=	-I$(LIBDIR)/include/xprsinc
141LPILIBOBJ	=	lpi/lpi_xprs.o scip/bitencode.o blockmemshell/memory.o scip/rbtree.o scip/message.o
142LPILIBSRC  	=	$(addprefix $(SRCDIR)/,$(LPILIBOBJ:.o=.c))
143SOFTLINKS	+=	$(LIBDIR)/include/xprsinc
144SOFTLINKS	+=	$(LIBDIR)/shared/libxprs.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)
145LPIINSTMSG	=	"  -> \"xprsinc\" is the path to the XPRESS \"include\" directory, e.g., \"<XPRESS-path>/include\".\n"
146LPIINSTMSG	+=	" -> \"libxprs.*\" is the path to the XPRESS library, e.g., \"<XPRESS-path>/lib/libxprs.so\""
147endif
148
149# mosek only supports shared libraries
150LPSOPTIONS	+=	msk
151ifeq ($(LPS),msk)
152FLAGS		+=	-I$(LIBDIR)/include/mskinc
153LPILIBOBJ	=	lpi/lpi_msk.o scip/bitencode.o blockmemshell/memory.o scip/rbtree.o scip/message.o
154LPILIBSRC  	=	$(addprefix $(SRCDIR)/,$(LPILIBOBJ:.o=.c))
155SOFTLINKS	+=	$(LIBDIR)/include/mskinc
156SOFTLINKS	+=	$(LIBDIR)/shared/libmosek.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)
157SOFTLINKS	+=	$(LIBDIR)/shared/libiomp5.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)    # for Mosek < 9
158SOFTLINKS	+=	$(LIBDIR)/shared/libcilkrts.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)
159LPIINSTMSG	=	"  -> \"mskinc\" is the path to the Mosek \"include\" directory, e.g., \"<Mosek-path>/tools/platform/linux64x86/h\".\n"
160LPIINSTMSG	+=	" -> \"libmosek.*\" is the path to the Mosek library, e.g., \"<Mosek-path>/tools/platform/linux64x86/bin/libmosek64.so\".\n"
161LPIINSTMSG	+=	" -> \"libiomp5.*\" is the path to the Intel OpenMP library, e.g., \"<Mosek-path>/tools/platform/linux64x86/bin/libiomp5.so\" (required for Mosek < 9.0 only).\n"
162LPIINSTMSG	+=	" -> \"libcilkrts.*\" is the path to the cilk library, e.g., \"<Mosek-path>/tools/platform/linux64x86/bin/libcilkrts.so.5\".\n"
163endif
164
165LPSOPTIONS	+=	spx1
166ifeq ($(LPS),spx1)
167LINKER		=	CPP
168FLAGS		+=	-I$(LIBDIR)/include/spxinc
169LPILIBOBJ	=	lpi/lpi_spx1.o scip/bitencode.o blockmemshell/memory.o scip/rbtree.o scip/message.o
170LPILIBSRC	=	$(SRCDIR)/lpi/lpi_spx1.cpp $(SRCDIR)/scip/bitencode.c $(SRCDIR)/blockmemshell/memory.c $(SRCDIR)/scip/rbtree.c $(SRCDIR)/scip/message.c
171SOFTLINKS	+=	$(LIBDIR)/include/spxinc
172ifeq ($(SHARED),true)
173SOFTLINKS	+=	$(LIBDIR)/shared/libsoplex.$(OSTYPE).$(ARCH).$(COMP).$(LPSOPT).$(SHAREDLIBEXT)
174else
175SOFTLINKS	+=	$(LIBDIR)/static/libsoplex.$(OSTYPE).$(ARCH).$(COMP).$(LPSOPT).$(STATICLIBEXT)
176endif
177LPIINSTMSG	=	"  -> \"spxinc\" is the path to the SoPlex \"src\" directory, e.g., \"<SoPlex-path>/src\".\n"
178LPIINSTMSG	+=	" -> \"libsoplex.*\" is the path to the SoPlex library, e.g., \"<SoPlex-path>/lib/libsoplex.$(OSTYPE).$(ARCH).$(COMP).$(LPSOPT).$(STATICLIBEXT)\""
179ifeq ($(LPSCHECK),true)
180FLAGS		+=	-DSCIP_WITH_LPSCHECK -I$(LIBDIR)/include/cpxinc
181SOFTLINKS	+=	$(LIBDIR)/include/cpxinc
182ifeq ($(SHARED),true)
183SOFTLINKS	+=	$(LIBDIR)/shared/libcplex.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)
184else
185SOFTLINKS	+=	$(LIBDIR)/static/libcplex.$(OSTYPE).$(ARCH).$(COMP).$(STATICLIBEXT)
186endif
187LPIINSTMSG	+=	"  -> \"cpxinc\" is the path to the CPLEX \"include\" directory, e.g., \"<CPLEX-path>/include/ilcplex\".\n"
188LPIINSTMSG	+=	" -> \"libcplex.*.a\" is the path to the CPLEX library, e.g., \"<CPLEX-path>/lib/x86-64_linux/static_pic/libcplex.a\"\n"
189LPIINSTMSG	+=	" -> \"libcplex.*.so\" is the path to the CPLEX library, e.g., \"<CPLEX-path>/bin/x86-64_linux/libcplex1263.so\""
190endif
191endif
192
193LPSOPTIONS	+=	spx ( = spx2)
194ifeq ($(LPS),spx2)
195LINKER		=	CPP
196FLAGS		+=	-I$(LIBDIR)/include/spxinc
197LPILIBOBJ	=	lpi/lpi_spx2.o scip/bitencode.o blockmemshell/memory.o scip/rbtree.o scip/message.o
198LPILIBSRC	=	$(SRCDIR)/lpi/lpi_spx2.cpp $(SRCDIR)/scip/bitencode.c $(SRCDIR)/blockmemshell/memory.c $(SRCDIR)/scip/rbtree.c $(SRCDIR)/scip/message.c
199SOFTLINKS	+=	$(LIBDIR)/include/spxinc
200ifeq ($(SHARED),true)
201SOFTLINKS	+=	$(LIBDIR)/shared/libsoplex.$(OSTYPE).$(ARCH).$(COMP).$(LPSOPT).$(SHAREDLIBEXT)
202else
203SOFTLINKS	+=	$(LIBDIR)/static/libsoplex.$(OSTYPE).$(ARCH).$(COMP).$(LPSOPT).$(STATICLIBEXT)
204endif
205LPIINSTMSG	=	"  -> \"spxinc\" is the path to the SoPlex \"src\" directory, e.g., \"<SoPlex-path>/src\".\n"
206LPIINSTMSG	+=	" -> \"libsoplex.*\" is the path to the SoPlex library, e.g., \"<SoPlex-path>/lib/libsoplex.linux.x86.gnu.opt.a\""
207ifeq ($(LPSCHECK),true)
208FLAGS		+=	-DSCIP_WITH_LPSCHECK -I$(LIBDIR)/include/cpxinc
209SOFTLINKS	+=	$(LIBDIR)/include/cpxinc
210ifeq ($(SHARED),true)
211SOFTLINKS	+=	$(LIBDIR)/shared/libcplex.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)
212else
213SOFTLINKS	+=	$(LIBDIR)/static/libcplex.$(OSTYPE).$(ARCH).$(COMP).$(STATICLIBEXT)
214endif
215LPIINSTMSG	+=	"  -> \"cpxinc\" is the path to the CPLEX \"include\" directory, e.g., \"<CPLEX-path>/include/ilcplex\".\n"
216LPIINSTMSG	+=	" -> \"libcplex.*.a\" is the path to the CPLEX library, e.g., \"<CPLEX-path>/lib/x86_rhel4.0_3.4/static_pic/libcplex.a\"\n"
217LPIINSTMSG	+=	" -> \"libcplex.*.so\" is the path to the CPLEX library, e.g., \"<CPLEX-path>/bin/x86-64_linux/libcplex1263.so\""
218endif
219endif
220
221ifeq ($(DEBUGSOL),true)
222FLAGS		+=	-DWITH_DEBUG_SOLUTION
223endif
224
225LPSOPTIONS	+=	clp
226ifeq ($(LPS),clp)
227LINKER		=	CPP
228FLAGS		+=	-I$(LIBDIR)/$(LIBTYPE)/clp.$(OSTYPE).$(ARCH).$(COMP).$(LPSOPT)/include/coin
229LPILIBOBJ	=	lpi/lpi_clp.o scip/bitencode.o blockmemshell/memory.o scip/rbtree.o scip/message.o
230LPILIBSRC	=	$(SRCDIR)/lpi/lpi_clp.cpp $(SRCDIR)/scip/bitencode.c $(SRCDIR)/blockmemshell/memory.c $(SRCDIR)/scip/rbtree.c $(SRCDIR)/scip/message.c
231SOFTLINKS	+=	$(LIBDIR)/$(LIBTYPE)/clp.$(OSTYPE).$(ARCH).$(COMP).$(LPSOPT)
232LPIINSTMSG	=	"  -> \"clp.$(OSTYPE).$(ARCH).$(COMP).$(LPSOPT)\" is the path to the Clp installation directory, i.e., \"<Clp-path>/include/coin/ClpModel.hpp\" should exist.\n"
233endif
234
235LPSOPTIONS	+=	qso
236ifeq ($(LPS),qso)
237FLAGS         	+=      -I$(LIBDIR)/include/qsinc
238LPILIBOBJ     	= 	lpi/lpi_qso.o scip/bitencode.o blockmemshell/memory.o scip/rbtree.o scip/message.o
239LPILIBSRC     	=       $(addprefix $(SRCDIR)/,$(LPILIBOBJ:.o=.c))
240SOFTLINKS     	+=      $(LIBDIR)/include/qsinc
241SOFTLINKS     	+=      $(LIBDIR)/static/libqsopt.$(OSTYPE).$(ARCH).$(COMP).$(STATICLIBEXT)
242LPIINSTMSG	=	"  -> \"qsinc\" is the path to the QSopt \"include\" directory, e.g., \"<QSopt-path>\".\n"
243LPIINSTMSG	+=	" -> \"libqsopt.*\" is the path to the QSopt library, e.g., \"<QSopt-path>/libqsopt.a\""
244endif
245
246# Gurobi only supports shared libraries
247LPSOPTIONS	+=	grb
248ifeq ($(LPS),grb)
249FLAGS		+=	-I$(LIBDIR)/include/grbinc
250LPILIBOBJ	=	lpi/lpi_grb.o blockmemshell/memory.o scip/rbtree.o scip/message.o
251LPILIBSRC  	=	$(addprefix $(SRCDIR)/,$(LPILIBOBJ:.o=.c))
252SOFTLINKS	+=	$(LIBDIR)/include/grbinc
253SOFTLINKS	+=	$(LIBDIR)/shared/libgurobi.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)
254LPIINSTMSG	=	"  -> \"grbinc\" is the path to the Gurobi \"include\" directory, e.g., \"<Gurobi-path>/include\".\n"
255LPIINSTMSG	+=	" -> \"libgurobi.*\" is the path to the Gurobi library, e.g., \"<Gurobi-path>/lib/libgurobi.so\""
256endif
257
258# glop only supports shared libraries
259LPSOPTIONS	+=	glop
260ifeq ($(LPS),glop)
261LPILIBOBJ	=	lpi/lpi_glop.o scip/bitencode.o scip/rbtree.o scip/message.o
262LPILIBSRC  	=	$(SRCDIR)/lpi/lpi_glop.cpp $(SRCDIR)/scip/bitencode.c $(SRCDIR)/scip/rbtree.c $(SRCDIR)/scip/message.c
263SOFTLINKS	+=	$(LIBDIR)/shared/ortools
264LPIINSTMSG	=	"  -> \"ortools\" is the path to the OR-Tools directory.\n"
265endif
266
267LPSOPTIONS	+=	none
268ifeq ($(LPS),none)
269LPILIBOBJ	=	lpi/lpi_none.o blockmemshell/memory.o scip/rbtree.o scip/message.o
270LPILIBSRC  	=	$(addprefix $(SRCDIR)/,$(LPILIBOBJ:.o=.c))
271endif
272
273LPILIB		=	$(LPILIBNAME).$(BASE)
274LPILIBFILE	=	$(LIBDIR)/$(LIBTYPE)/lib$(LPILIB).$(LIBEXT)
275LPILIBOBJFILES	=	$(addprefix $(LIBOBJDIR)/,$(LPILIBOBJ))
276LPILIBLINK	=	$(LIBDIR)/$(LIBTYPE)/lib$(LPILIBSHORTNAME).$(BASE).$(LIBEXT)
277LPILIBSHORTLINK = 	$(LIBDIR)/$(LIBTYPE)/lib$(LPILIBSHORTNAME).$(LIBEXT)
278ALLSRC		+=	$(LPILIBSRC)
279
280ifeq ($(SHARED),true)
281LPILIBEXTLIBS	=	$(LIBBUILD_L)$(LIBDIR)/$(LIBTYPE) $(LPSLDFLAGS) $(LINKRPATH)$(realpath $(LIBDIR)/$(LIBTYPE))
282endif
283
284#-----------------------------------------------------------------------------
285# Parallel Interface
286#-----------------------------------------------------------------------------
287
288TPILIBSHORTNAME	=	tpi$(TPI)
289TPILIBNAME	=	$(TPILIBSHORTNAME)-$(VERSION)
290TPILIBOBJ	=
291
292TPIOPTIONS	+=	none
293ifeq ($(TPI),none)
294TPILIBOBJ	=	tpi/tpi_none.o
295FLAGS		+=	-DTPI_NONE
296endif
297
298TPIOPTIONS	+=	omp
299ifeq ($(TPI),omp)
300TPILIBOBJ	=	tpi/tpi_openmp.o
301FLAGS		+=	-DTPI_OMP
302endif
303
304TPIOPTIONS	+=	tny
305ifeq ($(TPI),tny)
306TPILIBOBJ	=	tpi/tpi_tnycthrd.o \
307			tinycthread/tinycthread.o
308FLAGS		+=	-DTPI_TNYC
309endif
310
311TPILIBSRC  	=	$(addprefix $(SRCDIR)/,$(TPILIBOBJ:.o=.c))
312TPILIB		=	$(TPILIBNAME).$(BASE)
313TPILIBFILE	=	$(LIBDIR)/$(LIBTYPE)/lib$(TPILIB).$(LIBEXT)
314TPILIBOBJFILES	=	$(addprefix $(LIBOBJDIR)/,$(TPILIBOBJ))
315TPILIBLINK	=	$(LIBDIR)/$(LIBTYPE)/lib$(TPILIBSHORTNAME).$(BASE).$(LIBEXT)
316TPILIBSHORTLINK = 	$(LIBDIR)/$(LIBTYPE)/lib$(TPILIBSHORTNAME).$(LIBEXT)
317ALLSRC		+=	$(TPILIBSRC)
318
319#-----------------------------------------------------------------------------
320# Symmetry Interface
321#-----------------------------------------------------------------------------
322
323SYMOPTIONS	+=	none
324ifeq ($(SYM),none)
325SYMOBJ		=	symmetry/compute_symmetry_none.o
326SYMOBJFILES	=	$(addprefix $(LIBOBJDIR)/,$(SYMOBJ))
327SYMSRC  	=	$(addprefix $(SRCDIR)/,$(SYMOBJ:.o=.cpp))
328ALLSRC		+=	$(SYMSRC)
329endif
330
331SYMOPTIONS	+=	bliss
332ifeq ($(SYM),bliss)
333FLAGS		+=	-I$(LIBDIR)/include/
334SYMOBJ		=	symmetry/compute_symmetry_bliss.o
335SYMOBJFILES	=	$(addprefix $(LIBOBJDIR)/,$(SYMOBJ))
336SYMSRC  	=	$(addprefix $(SRCDIR)/,$(SYMOBJ:.o=.cpp))
337ALLSRC		+=	$(SYMSRC)
338SOFTLINKS	+=	$(LIBDIR)/include/bliss
339ifeq ($(SHARED),true)
340SOFTLINKS	+=	$(LIBDIR)/shared/libbliss.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)
341else
342SOFTLINKS	+=	$(LIBDIR)/static/libbliss.$(OSTYPE).$(ARCH).$(COMP).$(STATICLIBEXT)
343endif
344LPIINSTMSG	+=	"\n  -> \"blissinc\" is the path to the BLISS directory, e.g., \"<BLISS-path>\".\n"
345LPIINSTMSG	+=	" -> \"libbliss.*.a\" is the path to the BLISS library, e.g., \"<BLISS-path>/libbliss.a\"\n"
346LPIINSTMSG	+=	" -> \"libbliss.*.so\" is the path to the BLISS library, e.g., \"<BLISS-path>/libbliss.so\""
347endif
348
349#-----------------------------------------------------------------------------
350# PaPILO Library
351#-----------------------------------------------------------------------------
352
353ifeq ($(PAPILO),true)
354FLAGS		+=	-DSCIP_WITH_PAPILO -DPAPILO_NO_CMAKE_CONFIG -isystem $(LIBDIR)/include/papilo/external/tbb/include -isystem $(LIBDIR)/include/papilo/external -isystem $(LIBDIR)/include/papilo/src
355SOFTLINKS	+=	$(LIBDIR)/include/papilo
356LPIINSTMSG	+=	"\n  -> \"papilo\" is the path to the PaPILO directory\n"
357endif
358
359#-----------------------------------------------------------------------------
360# NLP Solver Interfaces and expression interpreter
361#-----------------------------------------------------------------------------
362
363NLPILIBCOBJ	= 	nlpi/nlpi.o \
364			nlpi/nlpi_all.o \
365			nlpi/nlpioracle.o \
366			nlpi/expr.o
367
368NLPILIBCXXOBJ	= 	nlpi/intervalarithext.o
369
370NLPILIBSCIPOBJ	= 	blockmemshell/memory.o \
371			scip/misc.o \
372			scip/intervalarith.o \
373			scip/interrupt.o \
374			scip/message.o \
375			scip/rbtree.o
376
377ifeq ($(EXPRINT),none)
378NLPILIBCOBJ 	+=	nlpi/exprinterpret_none.o
379endif
380ifeq ($(EXPRINT),cppad)
381NLPILIBCXXOBJ 	+= 	nlpi/exprinterpret_cppad.o
382endif
383
384ifeq ($(IPOPT),true)
385NLPILIBCXXOBJ	+= 	nlpi/nlpi_ipopt.o
386else
387NLPILIBCOBJ	+= 	nlpi/nlpi_ipopt_dummy.o
388endif
389
390ifeq ($(FILTERSQP),true)
391NLPILIBCOBJ	+= nlpi/nlpi_filtersqp.o
392else
393NLPILIBCOBJ	+= nlpi/nlpi_filtersqp_dummy.o
394endif
395
396ifeq ($(WORHP),true)
397NLPILIBCOBJ	+= 	nlpi/nlpi_worhp.o
398else
399NLPILIBCOBJ	+= 	nlpi/nlpi_worhp_dummy.o
400endif
401
402NLPILIBSHORTNAME = nlpi$(NLPILIBSHORTNAMECPPAD)$(NLPILIBSHORTNAMEIPOPT)$(NLPILIBSHORTNAMEFILTERSQP)
403
404NLPILIBNAME	=	$(NLPILIBSHORTNAME)-$(VERSION)
405NLPILIB		=	$(NLPILIBNAME).$(BASE)
406NLPILIBFILE	=	$(LIBDIR)/$(LIBTYPE)/lib$(NLPILIB).$(LIBEXT)
407NLPILIBOBJFILES =	$(addprefix $(LIBOBJDIR)/,$(NLPILIBCOBJ)) $(addprefix $(LIBOBJDIR)/,$(NLPILIBCXXOBJ))
408NLPILIBSCIPOBJFILES =	$(addprefix $(LIBOBJDIR)/,$(NLPILIBSCIPOBJ))
409NLPILIBSRC	=	$(addprefix $(SRCDIR)/,$(NLPILIBCOBJ:.o=.c)) $(addprefix $(SRCDIR)/,$(NLPILIBCXXOBJ:.o=.cpp))
410NLPILIBLINK	=	$(LIBDIR)/$(LIBTYPE)/lib$(NLPILIBSHORTNAME).$(BASE).$(LIBEXT)
411NLPILIBSHORTLINK	=	$(LIBDIR)/$(LIBTYPE)/lib$(NLPILIBSHORTNAME).$(LIBEXT)
412ALLSRC		+=	$(NLPILIBSRC)
413
414ifeq ($(SHARED),true)
415NLPILIBEXTLIBS	=	$(LIBBUILD_L)$(LIBDIR)/$(LIBTYPE) $(IPOPTLIBS) $(FILTERSQPLIBS)
416ifeq ($(IPOPT),true)
417NLPILIBEXTLIBS	+=	 $(LINKRPATH)$(realpath $(LIBDIR)/$(LIBTYPE)/ipopt.$(OSTYPE).$(ARCH).$(COMP).$(IPOPTOPT)/lib)
418endif
419ifeq ($(WORHP),true)
420NLPILIBEXTLIBS	+=	$(LINKRPATH)$(realpath $(LIBDIR)/$(LIBTYPE)/worhp.$(OSTYPE).$(ARCH).$(COMP).$(WORHPOPT)/lib)
421endif
422endif
423
424
425#-----------------------------------------------------------------------------
426# External Libraries
427#-----------------------------------------------------------------------------
428
429ZLIBDEP		:=	$(SRCDIR)/depend.zlib
430ZLIBSRC		:=	$(shell cat $(ZLIBDEP))
431
432GMPDEP		:=	$(SRCDIR)/depend.gmp
433GMPSRC		:=	$(shell cat $(GMPDEP))
434
435READLINEDEP	:=	$(SRCDIR)/depend.readline
436READLINESRC	:=	$(shell cat $(READLINEDEP))
437
438ZIMPLDEP	:=	$(SRCDIR)/depend.zimpl
439ZIMPLSRC	:=	$(shell cat $(ZIMPLDEP))
440
441GAMSDEP		:=	$(SRCDIR)/depend.gams
442GAMSSRC		:=	$(shell cat $(GAMSDEP))
443
444PARASCIPDEP	:=	$(SRCDIR)/depend.parascip
445PARASCIPSRC	:=	$(shell cat $(PARASCIPDEP))
446
447ifeq ($(ZIMPL),true)
448ifeq ($(GMP),false)
449$(error ZIMPL requires the GMP to be linked. Use either ZIMPL=false or GMP=true.)
450endif
451FLAGS		+=	-DSCIP_WITH_ZIMPL -I$(LIBDIR)/include/zimplinc $(ZIMPL_FLAGS)
452DIRECTORIES	+=	$(LIBDIR)/include/zimplinc
453SOFTLINKS	+=	$(LIBDIR)/include/zimplinc/zimpl
454SOFTLINKS	+=	$(LIBDIR)/$(LIBTYPE)/libzimpl.$(OSTYPE).$(ARCH).$(COMP).$(ZIMPLOPT).$(STATICLIBEXT)
455LPIINSTMSG	+=	"\n  -> \"zimplinc\" is a directory containing the path to the ZIMPL \"src\" directory, e.g., \"<ZIMPL-path>/src\".\n"
456LPIINSTMSG	+=	" -> \"libzimpl.*\" is the path to the ZIMPL library, e.g., \"<ZIMPL-path>/lib/libzimpl.$(OSTYPE).$(ARCH).$(COMP).$(ZIMPLOPT).$(STATICLIBEXT)\""
457endif
458
459ifeq ($(GMP),true)
460ifeq ($(COMP),msvc)
461SOFTLINKS	+=	$(LIBDIR)/mpir.$(ARCH)
462SOFTLINKS	+=	$(LIBDIR)/$(LIBTYPE)/libmpir.$(ARCH).$(OPT).lib
463SOFTLINKS	+=	$(LIBDIR)/$(LIBTYPE)/libpcre.$(ARCH).$(OPT).lib
464LPIINSTMSG	+=	"\n  -> \"mpir.$(ARCH)\" is a directory containing the mpir installation, i.e., \"mpir.$(ARCH)/gmp.h\" should exist.\n"
465LPIINSTMSG	+=	" -> \"libmpir.*\" is the path to the MPIR library\n"
466LPIINSTMSG	+=	" -> \"libpcre.*\" is the path to the PCRE library"
467endif
468endif
469
470ifeq ($(IPOPT),true)
471SOFTLINKS	+=	$(LIBDIR)/$(LIBTYPE)/ipopt.$(OSTYPE).$(ARCH).$(COMP).$(IPOPTOPT)
472LPIINSTMSG	+=	"\n  -> \"ipopt.$(OSTYPE).$(ARCH).$(COMP).$(IPOPTOPT)\" is a directory containing the ipopt installation, i.e., \"ipopt.$(OSTYPE).$(ARCH).$(COMP).$(IPOPTOPT)/include/coin/IpIpoptApplication.hpp\", \"ipopt.$(OSTYPE).$(ARCH).$(COMP).$(IPOPTOPT)/lib/libipopt*\", ... should exist.\n"
473endif
474
475ifeq ($(FILTERSQP),true)
476SOFTLINKS	+=	$(LIBDIR)/$(LIBTYPE)/libfiltersqp.$(OSTYPE).$(ARCH).$(COMP).$(STATICLIBEXT)
477#SOFTLINKS	+=	$(LIBDIR)/$(LIBTYPE)/libfiltersqp.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)
478SOFTLINKS	+=	$(LIBDIR)/$(LIBTYPE)/libbqpd.$(OSTYPE).$(ARCH).$(COMP).$(STATICLIBEXT)
479#SOFTLINKS	+=	$(LIBDIR)/$(LIBTYPE)/libbqpd.$(OSTYPE).$(ARCH).$(COMP).$(SHAREDLIBEXT)
480LPIINSTMSG	+=	" -> \"libfiltersqp.$(OSTYPE).$(ARCH).$(COMP).*\" is the path to the filterSQP library.\n"
481LPIINSTMSG	+=	" -> \"libbqpd.$(OSTYPE).$(ARCH).$(COMP).*\" is the path to the BQPD library.\n"
482endif
483
484# WORHP provides only shared libraries
485ifeq ($(WORHP),true)
486SOFTLINKS	+=	$(LIBDIR)/$(LIBTYPE)/worhp.$(OSTYPE).$(ARCH).$(COMP).$(WORHPOPT)
487LPIINSTMSG	+=	"\n  -> \"worhp.$(OSTYPE).$(ARCH).$(COMP).$(WORHPOPT)\" is a directory containing the WORHP installation, i.e., \"worhp.$(OSTYPE).$(ARCH).$(COMP).$(WORHPOPT)/include/worhp/worhp.h\" should exist.\n"
488endif
489
490ifeq ($(GAMS),true)
491GAMSDIR		=	$(LIBDIR)/gams.$(OSTYPE).$(ARCH).$(COMP)
492FLAGS		+=	-DWITH_GAMS=\"$(abspath $(GAMSDIR))\"
493FLAGS		+=	-I$(SCIPDIR)/interfaces/gams/src -I$(GAMSDIR)/apifiles/C/api
494SOFTLINKS	+=	$(GAMSDIR)
495LPIINSTMSG	+=	"\n  -> \"$(GAMSDIR)\" is the path to the GAMS system directory"
496endif
497
498ifeq ($(SHARED),true)
499SCIPLIBEXTLIBS	=	$(LIBBUILD_L)$(LIBDIR)/$(LIBTYPE)
500ifeq ($(ZLIB),true)
501SCIPLIBEXTLIBS	+=	$(ZLIB_LDFLAGS)
502endif
503ifeq ($(GMP),true)
504SCIPLIBEXTLIBS	+=	$(GMP_LDFLAGS)
505endif
506ifeq ($(READLINE_LDFLAGS),true)
507SCIPLIBEXTLIBS	+=	$(READLINE_LDFLAGS)
508endif
509SCIPLIBEXTLIBS	+=	$(ZIMPLLIB) $(LINKRPATH)$(realpath $(LIBDIR)/$(LIBTYPE))
510endif
511
512
513#-----------------------------------------------------------------------------
514# SCIP Library
515#-----------------------------------------------------------------------------
516
517SCIPLIBSHORTNAME=	scip
518SCIPLIBNAME	=	$(SCIPLIBSHORTNAME)-$(VERSION)
519SCIPPLUGINLIBOBJ=	scip/benders_default.o \
520			scip/benderscut_feas.o \
521			scip/benderscut_feasalt.o \
522			scip/benderscut_int.o \
523			scip/benderscut_nogood.o \
524			scip/benderscut_opt.o \
525			scip/branch_allfullstrong.o \
526			scip/branch_cloud.o \
527			scip/branch_distribution.o \
528			scip/branch_fullstrong.o \
529			scip/branch_inference.o \
530			scip/branch_leastinf.o \
531			scip/branch_lookahead.o \
532			scip/branch_mostinf.o \
533			scip/branch_multaggr.o \
534			scip/branch_nodereopt.o \
535			scip/branch_pscost.o \
536			scip/branch_random.o \
537			scip/branch_relpscost.o \
538			scip/branch_vanillafullstrong.o \
539			scip/cons_abspower.o \
540			scip/compr_largestrepr.o \
541			scip/compr_weakcompr.o \
542			scip/concsolver_scip.o \
543			scip/cons_and.o \
544			scip/cons_benders.o \
545			scip/cons_benderslp.o \
546			scip/cons_bivariate.o \
547			scip/cons_bounddisjunction.o \
548			scip/cons_cardinality.o \
549			scip/cons_conjunction.o \
550			scip/cons_countsols.o \
551			scip/cons_cumulative.o \
552			scip/cons_disjunction.o \
553			scip/cons_indicator.o \
554			scip/cons_integral.o \
555			scip/cons_knapsack.o \
556			scip/cons_linear.o \
557			scip/cons_linking.o \
558			scip/cons_logicor.o \
559			scip/cons_nonlinear.o \
560			scip/cons_or.o \
561			scip/cons_orbisack.o \
562			scip/cons_orbitope.o \
563			scip/cons_pseudoboolean.o \
564			scip/cons_quadratic.o \
565			scip/cons_setppc.o \
566			scip/cons_soc.o \
567			scip/cons_sos1.o \
568			scip/cons_sos2.o \
569			scip/cons_superindicator.o \
570			scip/cons_symresack.o \
571			scip/cons_varbound.o \
572			scip/cons_xor.o \
573			scip/cons_components.o \
574			scip/dialog_default.o \
575			scip/event_softtimelimit.o \
576			scip/disp_default.o \
577			scip/event_solvingphase.o \
578			scip/prop_sync.o \
579			scip/event_globalbnd.o \
580			scip/event_estim.o \
581			scip/heur_sync.o \
582			scip/heur_actconsdiving.o \
583			scip/heur_adaptivediving.o \
584			scip/heur_bound.o \
585			scip/heur_clique.o \
586			scip/heur_coefdiving.o \
587			scip/heur_completesol.o \
588			scip/heur_conflictdiving.o \
589			scip/heur_crossover.o \
590			scip/heur_dins.o \
591			scip/heur_distributiondiving.o \
592			scip/heur_dualval.o \
593			scip/heur_farkasdiving.o \
594			scip/heur_feaspump.o \
595			scip/heur_fixandinfer.o \
596			scip/heur_fracdiving.o \
597			scip/heur_gins.o \
598			scip/heur_guideddiving.o \
599			scip/heur_indicator.o \
600			scip/heur_intdiving.o \
601			scip/heur_intshifting.o \
602			scip/heur_linesearchdiving.o \
603			scip/heur_localbranching.o \
604			scip/heur_lpface.o \
605			scip/heur_alns.o \
606			scip/heur_locks.o \
607			scip/heur_mutation.o \
608			scip/heur_multistart.o \
609			scip/heur_mpec.o \
610			scip/heur_nlpdiving.o \
611			scip/heur_objpscostdiving.o \
612			scip/heur_octane.o \
613			scip/heur_ofins.o \
614			scip/heur_oneopt.o \
615			scip/heur_padm.o \
616			scip/heur_proximity.o \
617			scip/heur_pscostdiving.o \
618			scip/heur_reoptsols.o \
619			scip/heur_repair.o \
620			scip/heur_randrounding.o \
621			scip/heur_rens.o \
622			scip/heur_rins.o \
623			scip/heur_rootsoldiving.o \
624			scip/heur_rounding.o \
625			scip/heur_shiftandpropagate.o \
626			scip/heur_shifting.o \
627			scip/heur_simplerounding.o \
628			scip/heur_subnlp.o \
629			scip/heur_trivial.o \
630			scip/heur_trivialnegation.o \
631			scip/heur_trustregion.o \
632			scip/heur_trysol.o \
633			scip/heur_twoopt.o \
634			scip/heur_undercover.o \
635			scip/heur_vbounds.o \
636			scip/heur_veclendiving.o \
637			scip/heur_zeroobj.o \
638			scip/heur_zirounding.o \
639			scip/message_default.o \
640			scip/nodesel_bfs.o \
641			scip/nodesel_breadthfirst.o \
642			scip/nodesel_dfs.o \
643			scip/nodesel_estimate.o \
644			scip/nodesel_hybridestim.o \
645			scip/nodesel_restartdfs.o \
646			scip/nodesel_uct.o \
647			scip/presol_boundshift.o \
648			scip/presol_convertinttobin.o \
649			scip/presol_domcol.o\
650			scip/presol_dualagg.o\
651			scip/presol_dualcomp.o\
652			scip/presol_dualinfer.o\
653			scip/presol_gateextraction.o \
654			scip/presol_implics.o \
655			scip/presol_inttobinary.o \
656			scip/presol_qpkktref.o \
657			scip/presol_redvub.o \
658			scip/presol_trivial.o \
659			scip/presol_tworowbnd.o \
660			scip/presol_sparsify.o \
661			scip/presol_dualsparsify.o \
662			scip/presol_stuffing.o \
663			scip/prop_dualfix.o \
664			scip/prop_genvbounds.o \
665			scip/prop_nlobbt.o \
666			scip/prop_obbt.o \
667			scip/prop_probing.o \
668			scip/prop_pseudoobj.o \
669			scip/prop_redcost.o \
670			scip/prop_rootredcost.o \
671			scip/prop_symmetry.o \
672			scip/prop_vbounds.o \
673			scip/reader_bnd.o \
674			scip/reader_ccg.o \
675			scip/reader_cip.o \
676			scip/reader_cnf.o \
677			scip/reader_cor.o \
678			scip/reader_dec.o \
679			scip/reader_diff.o \
680			scip/reader_fix.o \
681			scip/reader_fzn.o \
682			scip/reader_gms.o \
683			scip/reader_lp.o \
684			scip/reader_mps.o \
685			scip/reader_mst.o \
686			scip/reader_opb.o \
687			scip/reader_osil.o \
688			scip/reader_pip.o \
689			scip/reader_pbm.o \
690			scip/reader_ppm.o \
691			scip/reader_rlp.o \
692			scip/reader_smps.o \
693			scip/reader_sol.o \
694			scip/reader_sto.o \
695			scip/reader_tim.o \
696			scip/reader_wbo.o \
697			scip/reader_zpl.o \
698			scip/sepa_cgmip.o \
699			scip/sepa_clique.o \
700			scip/sepa_closecuts.o \
701			scip/sepa_aggregation.o \
702			scip/sepa_convexproj.o \
703			scip/sepa_disjunctive.o \
704			scip/sepa_eccuts.o \
705			scip/sepa_gauge.o \
706			scip/sepa_gomory.o \
707			scip/sepa_impliedbounds.o \
708			scip/sepa_intobj.o \
709			scip/sepa_mcf.o \
710			scip/sepa_oddcycle.o \
711			scip/sepa_rapidlearning.o \
712			scip/sepa_strongcg.o \
713			scip/sepa_zerohalf.o \
714			scip/table_default.o
715
716SCIPPLUGINLIBCPPOBJ =	scip/presol_milp.o
717
718SCIPLIBOBJ	=	scip/boundstore.o \
719			scip/branch.o \
720			scip/bandit.o \
721			scip/bandit_epsgreedy.o \
722			scip/bandit_exp3.o \
723			scip/bandit_ucb.o \
724			scip/benders.o \
725			scip/benderscut.o \
726			scip/bendersdefcuts.o \
727			scip/clock.o \
728			scip/concsolver.o \
729			scip/concurrent.o \
730			scip/conflict.o \
731			scip/conflictstore.o \
732			scip/cons.o \
733			scip/cutpool.o \
734			scip/cuts.o \
735			scip/debug.o \
736			scip/dcmp.o \
737			scip/dialog.o \
738			scip/disp.o \
739			scip/event.o \
740			scip/fileio.o \
741			scip/heur.o \
742			scip/heuristics.o \
743			scip/compr.o \
744			scip/history.o \
745			scip/implics.o \
746			scip/interrupt.o \
747			scip/intervalarith.o \
748			scip/lp.o \
749			scip/matrix.o \
750			scip/mem.o \
751			scip/misc.o \
752			scip/misc_linear.o \
753			scip/misc_nonlinear.o \
754			scip/nlp.o \
755			scip/nodesel.o \
756			scip/paramset.o \
757			scip/presol.o \
758			scip/presolve.o \
759			scip/pricestore.o \
760			scip/pricer.o \
761			scip/primal.o \
762			scip/prob.o \
763			scip/prop.o \
764			scip/reader.o \
765			scip/relax.o \
766			scip/reopt.o \
767			scip/retcode.o \
768			scip/scip_benders.o \
769			scip/scip_branch.o \
770			scip/scip_compr.o \
771			scip/scip_concurrent.o \
772			scip/scip_conflict.o \
773			scip/scip_cons.o \
774			scip/scip_copy.o \
775			scip/scip_cut.o \
776			scip/scip_datastructures.o\
777			scip/scip_debug.o \
778			scip/scip_dcmp.o \
779			scip/scip_dialog.o \
780			scip/scip_disp.o \
781			scip/scip_event.o \
782			scip/scip_expr.o \
783			scip/scip_general.o \
784			scip/scip_heur.o \
785			scip/scip_lp.o \
786			scip/scip_mem.o \
787			scip/scip_message.o \
788			scip/scip_nlp.o \
789			scip/scip_nodesel.o \
790			scip/scip_nonlinear.o \
791			scip/scip_numerics.o \
792			scip/scip_param.o \
793			scip/scip_presol.o \
794			scip/scip_pricer.o \
795			scip/scip_prob.o \
796			scip/scip_probing.o \
797			scip/scip_prop.o \
798			scip/scip_randnumgen.o \
799			scip/scip_reader.o \
800			scip/scip_relax.o \
801			scip/scip_reopt.o \
802			scip/scip_sepa.o \
803			scip/scip_sol.o \
804			scip/scip_solve.o \
805			scip/scip_solvingstats.o \
806			scip/scip_table.o \
807			scip/scip_timing.o \
808			scip/scip_tree.o \
809			scip/scip_validation.o \
810			scip/scip_var.o \
811			scip/scip_bandit.o \
812			scip/scipbuildflags.o \
813			scip/scipcoreplugins.o \
814			scip/scipdefplugins.o \
815			scip/scipgithash.o \
816			scip/scipshell.o \
817			scip/sepa.o \
818			scip/sepastore.o \
819			scip/set.o \
820			scip/sol.o \
821			scip/solve.o \
822			scip/stat.o \
823			scip/symmetry.o \
824			scip/syncstore.o \
825			scip/table.o \
826			scip/tree.o \
827			scip/treemodel.o \
828			scip/var.o \
829			scip/visual.o \
830			tclique/tclique_branch.o \
831			tclique/tclique_coloring.o \
832			tclique/tclique_graph.o \
833			dijkstra/dijkstra.o \
834			xml/xmlparse.o
835
836SCIPLIB		=	$(SCIPLIBNAME).$(BASE)
837SCIPLIBFILE	=	$(LIBDIR)/$(LIBTYPE)/lib$(SCIPLIB).$(LIBEXT)
838SCIPLIBOBJFILES	=	$(addprefix $(LIBOBJDIR)/,$(SCIPPLUGINLIBOBJ))
839SCIPLIBOBJFILES	+=	$(addprefix $(LIBOBJDIR)/,$(SCIPPLUGINLIBCPPOBJ))
840SCIPLIBOBJFILES	+=	$(addprefix $(LIBOBJDIR)/,$(SCIPLIBOBJ))
841SCIPLIBSRC	=	$(addprefix $(SRCDIR)/,$(SCIPPLUGINLIBOBJ:.o=.c))
842SCIPLIBSRC	+=	$(addprefix $(SRCDIR)/,$(SCIPPLUGINLIBCPPOBJ:.o=.cpp))
843SCIPLIBSRC	+=	$(addprefix $(SRCDIR)/,$(SCIPLIBOBJ:.o=.c))
844SCIPPLUGININCSRC=	$(addprefix $(SRCDIR)/,$(SCIPPLUGINLIBOBJ:.o=.h))
845SCIPPLUGININCSRC +=	$(addprefix $(SRCDIR)/,$(SCIPPLUGINLIBCPPOBJ:.o=.h))
846SCIPLIBLINK	 =	$(LIBDIR)/$(LIBTYPE)/lib$(SCIPLIBSHORTNAME).$(BASE).$(LIBEXT)
847SCIPLIBSHORTLINK = 	$(LIBDIR)/$(LIBTYPE)/lib$(SCIPLIBSHORTNAME).$(LIBEXT)
848
849# define library that contains everything
850SCIPLIBSOLVERSHORTNAME=	scipsolver
851SCIPLIBSOLVERNAME =	$(SCIPLIBSOLVERSHORTNAME)-$(VERSION)
852SCIPLIBSOLVER	=	$(SCIPLIBSOLVERNAME).$(BASE).$(LPS)
853SCIPLIBSOLVERFILE =	$(LIBDIR)/$(LIBTYPE)/lib$(SCIPLIBSOLVER).$(LIBEXT)
854SCIPLIBSOLVERLINK =	$(LIBDIR)/$(LIBTYPE)/lib$(SCIPLIBSOLVERSHORTNAME).$(BASE).$(LPS).$(LIBEXT)
855SCIPLIBSOLVERSHORTLINK =$(LIBDIR)/$(LIBTYPE)/lib$(SCIPLIBSOLVERSHORTNAME).$(LIBEXT)
856
857ifeq ($(GAMS),true)
858SCIPLIBOBJFILES += 	$(addprefix $(LIBOBJDIR)/scip/,gmomcc.o gevmcc.o reader_gmo.o)
859endif
860
861ALLSRC		+=	$(SCIPLIBSRC)
862
863SCIPGITHASHFILE	= 	$(SRCDIR)/scip/githash.c
864SCIPBUILDFLAGSFILE = 	$(SRCDIR)/scip/buildflags.c
865
866#-----------------------------------------------------------------------------
867# Objective SCIP Library
868#-----------------------------------------------------------------------------
869
870OBJSCIPLIBSHORTNAME=	objscip
871OBJSCIPLIBNAME	=	$(OBJSCIPLIBSHORTNAME)-$(VERSION)
872OBJSCIPLIBOBJ	=	objscip/objbenders.o \
873			objscip/objbenderscut.o \
874			objscip/objbranchrule.o \
875			objscip/objconshdlr.o \
876			objscip/objdialog.o \
877			objscip/objdisp.o \
878			objscip/objeventhdlr.o \
879			objscip/objheur.o \
880			objscip/objmessagehdlr.o \
881			objscip/objnodesel.o \
882			objscip/objpresol.o \
883			objscip/objpricer.o \
884			objscip/objprobdata.o \
885			objscip/objprop.o \
886			objscip/objreader.o \
887			objscip/objrelax.o \
888			objscip/objsepa.o \
889			objscip/objtable.o \
890			objscip/objvardata.o
891
892OBJSCIPLIB	=	$(OBJSCIPLIBNAME).$(BASE)
893OBJSCIPLIBFILE	=	$(LIBDIR)/$(LIBTYPE)/lib$(OBJSCIPLIB).$(LIBEXT)
894OBJSCIPLIBOBJFILES=	$(addprefix $(LIBOBJDIR)/,$(OBJSCIPLIBOBJ))
895OBJSCIPLIBSRC	=	$(addprefix $(SRCDIR)/,$(OBJSCIPLIBOBJ:.o=.cpp))
896OBJSCIPINCSRC	=	$(addprefix $(SRCDIR)/,$(OBJSCIPLIBOBJ:.o=.h))
897OBJSCIPLIBLINK	=	$(LIBDIR)/$(LIBTYPE)/lib$(OBJSCIPLIBSHORTNAME).$(BASE).$(LIBEXT)
898OBJSCIPLIBSHORTLINK=	$(LIBDIR)/$(LIBTYPE)/lib$(OBJSCIPLIBSHORTNAME).$(LIBEXT)
899ALLSRC		+=	$(OBJSCIPLIBSRC)
900
901
902#-----------------------------------------------------------------------------
903# Main Program
904#-----------------------------------------------------------------------------
905
906MAINSHORTNAME	=	scip
907MAINNAME	=	$(MAINSHORTNAME)-$(VERSION)
908
909MAINOBJ		=	main.o
910MAINSRC		=	$(addprefix $(SRCDIR)/,$(MAINOBJ:.o=.c))
911
912MAINFILE	=	$(BINDIR)/$(MAINNAME).$(BASE).$(LPS).$(TPI)$(EXEEXTENSION)
913MAINOBJFILES	=	$(addprefix $(BINOBJDIR)/,$(MAINOBJ))
914MAINLINK	=	$(BINDIR)/$(MAINSHORTNAME).$(BASE).$(LPS).$(TPI)$(EXEEXTENSION)
915MAINSHORTLINK	=	$(BINDIR)/$(MAINSHORTNAME)$(EXEEXTENSION)
916ALLSRC		+=	$(MAINSRC)
917
918ifeq ($(SHARED),true)
919WINLIBFILENAME	=	lib$(MAINNAME).$(BASE).$(LPS).dll
920else
921WINLIBFILENAME	=	lib$(MAINNAME).$(BASE).$(LPS).lib
922endif
923
924LINKSMARKERFILE	=	$(LIBDIR)/$(LIBTYPE)/linkscreated.$(LPS)-$(LPSOPT).$(OSTYPE).$(ARCH).$(COMP)$(LINKLIBSUFFIX).$(ZIMPL)-$(ZIMPLOPT).$(IPOPT)-$(IPOPTOPT).$(FILTERSQP).$(GAMS).$(SYM).$(PAPILO)
925LASTSETTINGS	=	$(OBJDIR)/make.lastsettings
926
927#-----------------------------------------------------------------------------
928# Rules
929#-----------------------------------------------------------------------------
930
931ifeq ($(VERBOSE),false)
932.SILENT:	$(MAINFILE) $(SCIPLIBFILE) $(OBJSCIPLIBFILE) $(LPILIBFILE) $(TPILIBFILE) $(NLPILIBFILE) \
933		$(LPILIBLINK) $(LPILIBSHORTLINK) $(TPILIBLINK) $(TPILIBSHORTLINK) $(SCIPLIBLINK) $(SCIPLIBSHORTLINK) \
934		$(OBJSCIPLIBLINK) $(OBJSCIPLIBSHORTLINK) $(NLPILIBLINK) $(NLPILIBSHORTLINK) \
935		$(MAINLINK) $(MAINSHORTLINK) \
936		$(LPILIBOBJFILES) $(TPILIBOBJFILES) $(NLPILIBOBJFILES) $(SCIPLIBOBJFILES) $(OBJSCIPLIBOBJFILES) $(MAINOBJFILES) $(SYMOBJFILES) \
937		$(SCIPLIBSOLVERFILE) $(SCIPLIBSOLVERLINK) $(SCIPLIBSOLVERSHORTLINK)
938MAKE		+= -s
939endif
940
941.PHONY: all
942all:		libs
943		@$(MAKE) $(MAINFILE) $(MAINLINK) $(MAINSHORTLINK)
944
945.PHONY: libs
946libs:		libscip libobjscip liblpi libtpi libnlpi
947ifeq ($(SHARED),true)
948		@$(MAKE) libscipsolver
949endif
950
951.PHONY: preprocess
952preprocess:     checkdefines
953		@$(SHELL) -ec 'if test ! -e $(LINKSMARKERFILE) ; \
954			then \
955				echo "-> generating necessary links" ; \
956				$(MAKE) -j1 $(LINKSMARKERFILE) ; \
957			fi'
958		@$(MAKE) touchexternal
959
960.PHONY: lint
961lint:		$(SCIPLIBSRC) $(OBJSCIPLIBSRC) $(LPILIBSRC) $(TPILIBSRC) $(NLPILIBSRC) $(MAINSRC) $(SYMSRC) githash
962		-rm -f lint.out
963
964		@$(SHELL) -ec 'if test -e lint/co-gcc.mak ; \
965			then \
966				echo "-> generating gcc-include-path lint-file" ; \
967				cd lint; $(MAKE) -f co-gcc.mak ; \
968			else \
969				echo "-> lint Makefile not found"; \
970			fi'
971ifeq ($(FILES),)
972		$(SHELL) -ec 'for i in $^; \
973			do \
974				echo $$i; \
975				$(LINT) lint/main-gcc.lnt +os\(lint.out\) -u -zero \
976				$(USRFLAGS) $(FLAGS) -I/usr/include -UNDEBUG -USCIP_WITH_READLINE -USCIP_ROUNDING_FE -D_BSD_SOURCE $$i; \
977			done'
978else
979		$(SHELL) -ec  'for i in $(FILES); \
980			do \
981				echo $$i; \
982				$(LINT) lint/main-gcc.lnt +os\(lint.out\) -u -zero \
983				$(USRFLAGS) $(FLAGS) -I/usr/include -UNDEBUG -USCIP_WITH_READLINE -USCIP_ROUNDING_FE -D_BSD_SOURCE $$i; \
984			done'
985endif
986
987.PHONY: pclint
988pclint:		$(SCIPLIBSRC) $(OBJSCIPLIBSRC) $(LPILIBSRC) $(TPILIBSRC) $(NLPILIBSRC) $(MAINSRC) $(SYMSRC)
989		-rm -f pclint.out
990
991		@$(SHELL) -ec 'if ! test -e pclint/co-gcc.h ; \
992			then \
993				echo "-> running pclint configuration"; \
994				CCPATH=`which $(CC)`; \
995				echo "-> path to compiler: "$${CCPATH}; \
996				cd pclint; \
997				echo "-> running $(PCLINTCONFIG)"; \
998				python $(PCLINTCONFIG) --compiler=$(CC) --compiler-bin=$${CCPATH} --config-output-lnt-file=co-gcc.lnt --config-output-header-file=co-gcc.h --generate-compiler-config ; \
999			fi'
1000ifeq ($(FILES),)
1001		@$(SHELL) -ec 'echo "-> running pclint on $^..."; \
1002			$(PCLINT) pclint/main-gcc.lnt +os\(pclint.out\) -u -zero -max_threads=$(MAXJOBS) \
1003			$(USRFLAGS) $(FLAGS) -Ipclint -uNDEBUG -uSCIP_WITH_READLINE -uSCIP_ROUNDING_FE -D_BSD_SOURCE $^;'
1004else
1005		@$(SHELL) -ec  'echo "-> running pclint on files $(FILES) ..."; \
1006			$(PCLINT) pclint/main-gcc.lnt +os\(pclint.out\) -u -zero -max_threads=$(MAXJOBS) \
1007			$(USRFLAGS) $(FLAGS) -Ipclint -uNDEBUG -uSCIP_WITH_READLINE -uSCIP_ROUNDING_FE -D_BSD_SOURCE $(FILES);'
1008endif
1009
1010.PHONY: splint
1011splint:		$(SCIPLIBSRC) $(OBJSCIPLIBSRC) $(LPILIBSRC) $(TPILIBSRC) $(NLPILIBSRC) $(MAINSRC) $(SYMSRC)
1012		-rm -f splint.out
1013ifeq ($(FILES),)
1014		$(SHELL) -c '$(SPLINT) -I$(SRCDIR) -I/usr/include/linux $(FLAGS) $(SPLINTFLAGS) $(filter %.c %.h,$^) >> splint.out;'
1015else
1016		$(SHELL) -c '$(SPLINT) -I$(SRCDIR) -I/usr/include/linux $(FLAGS) $(SPLINTFLAGS) $(filter %.c %.h,$(FILES)) >> splint.out;'
1017endif
1018
1019.PHONY: doc
1020doc:
1021		cd doc; $(SHELL) builddoc.sh;
1022
1023.PHONY: docpreview
1024docpreview:
1025# generates preview for a list of files
1026ifneq ($(FILES),)
1027		echo "generating doxygen preview for $(FILES)"
1028		cd doc; ( cat $(MAINSHORTNAME).dxy && echo 'FILE_PATTERNS = $(FILES)' ) | $(DOXY) -
1029else
1030		echo "please specify file(s) for which preview should be created"
1031endif
1032.PHONY: check
1033check:		test
1034
1035.PHONY: test
1036test:
1037		cd check; \
1038		$(SHELL) ./check.sh $(TEST) $(EXECUTABLE) $(SETTINGS) $(BINID) $(OUTPUTDIR) $(TIME) $(NODES) $(MEM) $(THREADS) $(FEASTOL) $(DISPFREQ) \
1039		$(CONTINUE) $(LOCK) $(VERSION) $(LPS) $(DEBUGTOOL) $(CLIENTTMPDIR) $(REOPT) $(OPTCOMMAND) $(SETCUTOFF) $(MAXJOBS) $(VISUALIZE) $(PERMUTE) \
1040                $(SEEDS) $(GLBSEEDSHIFT) $(STARTPERM);
1041
1042.PHONY: testcount
1043testcount:
1044		cd check; \
1045		$(SHELL) ./check_count.sh $(TEST) $(MAINFILE) $(SETTINGS) $(notdir $(MAINFILE)).$(HOSTNAME) $(TIME) $(NODES) $(MEM) $(FEASTOL) \
1046		$(DISPFREQ) $(CONTINUE) $(LOCK) $(VERSION) $(LPS) $(OUTPUTDIR);
1047
1048.PHONY: tags
1049tags:
1050		rm -f TAGS; ctags -e -R -h ".c.cpp.h" --exclude=".*" src/; sed -i 's!\#undef .*!!g' TAGS
1051
1052# include target to detect the current git hash
1053-include make/local/make.detectgithash
1054
1055# this empty target is needed for the SCIP release versions
1056githash::      # do not remove the double-colon
1057
1058# include local targets
1059-include make/local/make.targets
1060
1061# include install/uninstall targets
1062-include make/make.install
1063
1064# the testgams target need to come after make/local/make.targets has been included (if any), because the latter may assign a value to CLIENTTMPDIR
1065# if calling with GAMS=true, assume user wants the GAMS system that is linked in lib/gams.*
1066# if calling with GAMS=false (default), assume user has a GAMS system in the path (keeping original default behavior)
1067ifeq ($(GAMS),true)
1068	TESTGAMS = $(abspath $(GAMSDIR))/gams
1069else
1070ifeq ($(GAMS),false)
1071	TESTGAMS = gams
1072else
1073	TESTGAMS = $(GAMS)
1074endif
1075endif
1076.PHONY: testgams
1077testgams:
1078		cd check; \
1079		$(SHELL) ./check_gamscluster.sh $(TEST) $(TESTGAMS) "$(GAMSSOLVER)" $(SETTINGS) $(OSTYPE).$(ARCH) $(TIME) $(NODES) $(MEM) "$(GAP)" \
1080		$(THREADS) $(CONTINUE) "$(CONVERTSCIP)" local dummy dummy "$(CLIENTTMPDIR)" 1 true $(SETCUTOFF);
1081
1082$(LPILIBLINK):	$(LPILIBFILE)
1083		@rm -f $@
1084		cd $(dir $@) && $(LN_s) $(notdir $(LPILIBFILE)) $(notdir $@)
1085
1086# the short link targets should be phony such that they are always updated and point to the files with last make options, even if nothing needed to be rebuilt
1087.PHONY: $(LPILIBSHORTLINK)
1088$(LPILIBSHORTLINK):	$(LPILIBFILE)
1089		@rm -f $@
1090		cd $(dir $@) && $(LN_s) $(notdir $(LPILIBFILE)) $(notdir $@)
1091
1092$(TPILIBLINK):	$(TPILIBFILE)
1093		@rm -f $@
1094		cd $(dir $@) && $(LN_s) $(notdir $(TPILIBFILE)) $(notdir $@)
1095
1096# the short link targets should be phony such that they are always updated and point to the files with last make options, even if nothing needed to be rebuilt
1097.PHONY: $(TPILIBSHORTLINK)
1098$(TPILIBSHORTLINK):	$(TPILIBFILE)
1099		@rm -f $@
1100		cd $(dir $@) && $(LN_s) $(notdir $(TPILIBFILE)) $(notdir $@)
1101
1102$(NLPILIBLINK):	$(NLPILIBFILE)
1103		@rm -f $@
1104		cd $(dir $@) && $(LN_s) $(notdir $(NLPILIBFILE)) $(notdir $@)
1105
1106# the short link targets should be phony such that they are always updated and point to the files with last make options, even if nothing needed to be rebuilt
1107.PHONY: $(NLPILIBSHORTLINK)
1108$(NLPILIBSHORTLINK):	$(NLPILIBFILE)
1109		@rm -f $@
1110		cd $(dir $@) && $(LN_s) $(notdir $(NLPILIBFILE)) $(notdir $@)
1111
1112$(SCIPLIBLINK):	$(SCIPLIBFILE)
1113		@rm -f $@
1114		cd $(dir $@) && $(LN_s) $(notdir $(SCIPLIBFILE)) $(notdir $@)
1115
1116# the short link targets should be phony such that they are always updated and point to the files with last make options, even if nothing needed to be rebuilt
1117.PHONY: $(SCIPLIBSHORTLINK)
1118$(SCIPLIBSHORTLINK):	$(SCIPLIBFILE)
1119		@rm -f $@
1120		cd $(dir $@) && $(LN_s) $(notdir $(SCIPLIBFILE)) $(notdir $@)
1121
1122$(OBJSCIPLIBLINK):	$(OBJSCIPLIBFILE)
1123		@rm -f $@
1124		cd $(dir $@) && $(LN_s) $(notdir $(OBJSCIPLIBFILE)) $(notdir $@)
1125
1126# the short link targets should be phony such that they are always updated and point to the files with last make options, even if nothing needed to be rebuilt
1127.PHONY: $(OBJSCIPLIBSHORTLINK)
1128$(OBJSCIPLIBSHORTLINK):	$(OBJSCIPLIBFILE)
1129		@rm -f $@
1130		cd $(dir $@) && $(LN_s) $(notdir $(OBJSCIPLIBFILE)) $(notdir $@)
1131
1132$(SCIPLIBSOLVERLINK): $(SCIPLIBSOLVERFILE)
1133		@rm -f $@
1134		cd $(dir $@) && $(LN_s) $(notdir $(SCIPLIBSOLVERFILE)) $(notdir $@)
1135
1136# the short link targets should be phony such that they are always updated and point to the files with last make options, even if nothing needed to be rebuilt
1137.PHONY: $(SCIPLIBSOLVERSHORTLINK)
1138$(SCIPLIBSOLVERSHORTLINK): $(SCIPLIBSOLVERFILE)
1139		@rm -f $@
1140		cd $(dir $@) && $(LN_s) $(notdir $(SCIPLIBSOLVERFILE)) $(notdir $@)
1141
1142# the short link targets should be phony such that they are always updated and point to the files with last make options, even if nothing needed to be rebuilt
1143.PHONY: $(MAINSHORTLINK)
1144$(MAINLINK) $(MAINSHORTLINK):	$(MAINFILE)
1145		@rm -f $@
1146		cd $(dir $@) && $(LN_s) $(notdir $(MAINFILE)) $(notdir $@)
1147
1148$(OBJDIR):
1149		@-mkdir -p $(OBJDIR)
1150
1151$(BINOBJDIR):	| $(OBJDIR)
1152		@-mkdir -p $(BINOBJDIR)
1153
1154$(LIBOBJDIR):	| $(OBJDIR)
1155		@-mkdir -p $(LIBOBJDIR)
1156
1157$(LIBOBJSUBDIRS):	| $(LIBOBJDIR)
1158		@-mkdir -p $(LIBOBJSUBDIRS)
1159
1160$(LIBDIR):
1161		@-mkdir -p $(LIBDIR)
1162
1163$(LIBDIR)/static: $(LIBDIR)
1164		@-mkdir -p $(LIBDIR)/static
1165
1166$(LIBDIR)/shared: $(LIBDIR)
1167		@-mkdir -p $(LIBDIR)/shared
1168
1169$(LIBDIR)/include: $(LIBDIR)
1170		@-mkdir -p $(LIBDIR)/include
1171
1172$(LIBDIR)/src: $(LIBDIR)
1173		@-mkdir -p $(LIBDIR)/src
1174
1175$(BINDIR):
1176		@-mkdir -p $(BINDIR)
1177
1178.PHONY: clean
1179clean:          cleanlibs cleanbin | $(LIBOBJSUBDIRS) $(LIBOBJDIR) $(BINOBJDIR) $(OBJDIR)
1180ifneq ($(LIBOBJDIR),)
1181		@-(cd $(LIBOBJDIR) && rm -f */*.o */*.d)
1182		@-rmdir $(LIBOBJSUBDIRS)
1183		@-rmdir $(LIBOBJDIR)
1184endif
1185ifneq ($(BINOBJDIR),)
1186		@-rm -f $(BINOBJDIR)/*.o $(BINOBJDIR)/*.d && rmdir $(BINOBJDIR)
1187endif
1188ifneq ($(OBJDIR),)
1189		@-rm -f $(LASTSETTINGS)
1190		@-rmdir $(OBJDIR)
1191endif
1192
1193.PHONY: cleanlibs
1194cleanlibs:      | $(LIBDIR)/$(LIBTYPE)
1195		@echo "-> remove library $(SCIPLIBFILE)"
1196		@-rm -f $(SCIPLIBFILE) $(SCIPLIBLINK) $(SCIPLIBSHORTLINK)
1197		@echo "-> remove library $(OBJSCIPLIBFILE)"
1198		@-rm -f $(OBJSCIPLIBFILE) $(OBJSCIPLIBLINK) $(OBJSCIPLIBSHORTLINK)
1199		@echo "-> remove library $(LPILIBFILE)"
1200		@-rm -f $(LPILIBFILE) $(LPILIBLINK) $(LPILIBSHORTLINK)
1201		@echo "-> remove library $(TPILIBFILE)"
1202		@-rm -f $(TPILIBFILE) $(TPILIBLINK) $(TPILIBSHORTLINK)
1203		@echo "-> remove library $(NLPILIBFILE)"
1204		@-rm -f $(NLPILIBFILE) $(NLPILIBLINK) $(NLPILIBSHORTLINK)
1205		@echo "-> remove library $(SCIPLIBSOLVERFILE)"
1206		@-rm -f $(SCIPLIBSOLVERFILE) $(SCIPLIBSOLVERLINK) $(SCIPLIBSOLVERSHORTLINK)
1207
1208.PHONY: cleanbin
1209cleanbin:       | $(BINDIR)
1210		@echo "-> remove binary $(MAINFILE)"
1211		@-rm -f $(MAINFILE) $(MAINLINK) $(MAINSHORTLINK)
1212
1213depend:
1214# We explicitely add all lpi's here, since the content of depend.lpscheck should be independent of the currently selected LPI,
1215# but contain all LPI's that use the SCIP_WITH_LPSCHECK define.
1216		@echo `grep -l "SCIP_WITH_LPSCHECK" $(SCIPLIBSRC) $(OBJSCIPLIBSRC) $(MAINSRC) $(NLPILIBSRC) src/lpi/lpi*.{c,cpp}` >$(LPSCHECKDEP)
1217		@echo `grep -l "SCIP_WITH_ZLIB" $(ALLSRC)` >$(ZLIBDEP)
1218		@echo `grep -l "SCIP_WITH_GMP" $(ALLSRC)` >$(GMPDEP)
1219		@echo `grep -l "SCIP_WITH_READLINE" $(ALLSRC)` >$(READLINEDEP)
1220		@echo `grep -l "SCIP_WITH_ZIMPL" $(ALLSRC)` >$(ZIMPLDEP)
1221		@echo `grep -l "WITH_GAMS" $(ALLSRC)` >$(GAMSDEP)
1222		@echo `grep -l "NPARASCIP" $(ALLSRC)` >$(PARASCIPDEP)
1223
1224# do not attempt to include .d files if there will definitely be any (empty DFLAGS), because it slows down the build on Windows considerably
1225ifneq ($(DFLAGS),)
1226-include $(MAINOBJFILES:.o=.d)
1227-include $(SCIPLIBOBJFILES:.o=.d)
1228-include $(OBJSCIPOBJFILES:.o=.d)
1229-include $(LPILIBOBJFILES:.o=.d)
1230-include $(TPILIBOBJFILES:.o=.d)
1231-include $(NLPILIBOBJFILES:.o=.d)
1232else
1233ifeq ($(VERBOSE),true)
1234$(info No compilation dependencies. If changing header files, do a make clean before building.)
1235endif
1236endif
1237
1238# make binary
1239$(MAINFILE):	$(MAINOBJFILES) $(SCIPLIBFILE) $(OBJSCIPLIBFILE) $(LPILIBFILE) $(TPILIBFILE) $(NLPILIBFILE) | $(BINDIR) $(BINOBJDIR) $(LIBOBJSUBDIRS)
1240		@echo "-> linking $@"
1241ifeq ($(LINKER),C)
1242		$(LINKCC) $(MAINOBJFILES) $(LINKCCSCIPALL) $(LINKCC_o)$@ \
1243		|| ($(MAKE) errorhints && false)
1244endif
1245ifeq ($(LINKER),CPP)
1246		$(LINKCXX) $(MAINOBJFILES) $(LINKCCSCIPALL) $(LINKCXX_o)$@ \
1247		|| ($(MAKE) errorhints && false)
1248endif
1249
1250.PHONY: libscip
1251libscip:	preprocess
1252		@$(MAKE) $(SCIPLIBFILE) $(SCIPLIBLINK) $(SCIPLIBSHORTLINK)
1253
1254$(SCIPLIBFILE):	$(SCIPLIBOBJFILES) $(SYMOBJFILES) | $(LIBDIR)/$(LIBTYPE) $(LIBOBJSUBDIRS)
1255		@echo "-> generating library $@"
1256		-rm -f $@
1257		$(LIBBUILD) $(LIBBUILDFLAGS) $(LIBBUILD_o)$@ $(SCIPLIBOBJFILES) $(SYMOBJFILES) $(SCIPLIBEXTLIBS)
1258ifneq ($(RANLIB),)
1259		$(RANLIB) $@
1260endif
1261
1262.PHONY: libobjscip
1263libobjscip:	preprocess
1264		@$(MAKE) $(OBJSCIPLIBFILE) $(OBJSCIPLIBLINK) $(OBJSCIPLIBSHORTLINK)
1265
1266$(OBJSCIPLIBFILE):	$(OBJSCIPLIBOBJFILES) | $(LIBOBJSUBDIRS) $(LIBDIR)/$(LIBTYPE)
1267		@echo "-> generating library $@"
1268		-rm -f $@
1269		$(LIBBUILD) $(LIBBUILDFLAGS) $(LIBBUILD_o)$@ $(OBJSCIPLIBOBJFILES)
1270ifneq ($(RANLIB),)
1271		$(RANLIB) $@
1272endif
1273
1274.PHONY: liblpi
1275liblpi:		preprocess
1276		@$(MAKE) $(LPILIBFILE) $(LPILIBLINK) $(LPILIBSHORTLINK)
1277
1278$(LPILIBFILE):	$(LPILIBOBJFILES) | $(LIBOBJSUBDIRS) $(LIBDIR)/$(LIBTYPE)
1279		@echo "-> generating library $@"
1280		-rm -f $@
1281		$(LIBBUILD) $(LIBBUILDFLAGS) $(LIBBUILD_o)$@ $(LPILIBOBJFILES) $(LPILIBEXTLIBS)
1282ifneq ($(RANLIB),)
1283		$(RANLIB) $@
1284endif
1285
1286.PHONY: libnlpi
1287libnlpi:	preprocess
1288		@$(MAKE) $(NLPILIBFILE) $(NLPILIBLINK) $(NLPILIBSHORTLINK)
1289
1290$(NLPILIBFILE):	$(NLPILIBOBJFILES) $(NLPILIBSCIPOBJFILES) | $(LIBOBJSUBDIRS) $(LIBDIR)/$(LIBTYPE)
1291		@echo "-> generating library $@"
1292		-rm -f $@
1293		$(LIBBUILD) $(LIBBUILDFLAGS) $(LIBBUILD_o)$@ $(NLPILIBOBJFILES) $(NLPILIBSCIPOBJFILES) $(NLPILIBEXTLIBS)
1294ifneq ($(RANLIB),)
1295		$(RANLIB) $@
1296endif
1297
1298.PHONY: libtpi
1299libtpi:		preprocess
1300		@$(MAKE) $(TPILIBFILE) $(TPILIBLINK) $(TPILIBSHORTLINK)
1301
1302$(TPILIBFILE):	$(TPILIBOBJFILES) | $(LIBOBJSUBDIRS) $(LIBDIR)/$(LIBTYPE)
1303		@echo "-> generating library $@"
1304		-rm -f $@
1305		$(LIBBUILD) $(LIBBUILDFLAGS) $(LIBBUILD_o)$@ $(TPILIBOBJFILES)
1306ifneq ($(RANLIB),)
1307		$(RANLIB) $@
1308endif
1309
1310.PHONY: libscipsolver
1311libscipsolver:	preprocess
1312		@$(MAKE) $(SCIPLIBSOLVERFILE) $(SCIPLIBSOLVERLINK) $(SCIPLIBSOLVERSHORTLINK)
1313
1314$(SCIPLIBSOLVERFILE): $(SCIPLIBOBJFILES) $(NLPILIBOBJFILES) $(LPILIBOBJFILES) $(TPILIBOBJFILES) $(SYMOBJFILES) $(OBJSCIPLIBOBJFILES) | $(LIBDIR)/$(LIBTYPE) $(LIBOBJSUBDIRS)
1315		@echo "-> generating library $@"
1316		-rm -f $@
1317ifeq ($(SHARED),false)
1318		$(LIBBUILD) $(LIBBUILDFLAGS) $(LIBBUILD_o)$@ $(SCIPLIBOBJFILES) $(NLPILIBOBJFILES) $(LPILIBOBJFILES) $(TPILIBOBJFILES) $(SYMOBJFILES) $(OBJSCIPLIBOBJFILES)
1319ifneq ($(RANLIB),)
1320		$(RANLIB) $@
1321endif
1322else
1323		$(LIBBUILD) $(LIBBUILDFLAGS) $(LIBBUILD_o)$@ $(SCIPLIBOBJFILES) $(NLPILIBOBJFILES) $(LPILIBOBJFILES) $(LPILIBEXTLIBS) $(NLPILIBEXTLIBS) $(TPILIBOBJFILES) $(SYMOBJFILES) $(OBJSCIPLIBOBJFILES) $(SCIPLIBEXTLIBS) \
1324		$(LPSLDFLAGS) $(LDFLAGS) $(LINKRPATH)$(SCIPREALPATH)/$(LIBDIR)/shared
1325endif
1326
1327$(BINOBJDIR)/%.o:	$(SRCDIR)/%.c | $(BINOBJDIR)
1328		@echo "-> compiling $@"
1329		$(CC) $(FLAGS) $(OFLAGS) $(BINOFLAGS) $(CFLAGS) $(DFLAGS) $(TPICFLAGS) $(CC_c)$< $(CC_o)$@
1330
1331$(BINOBJDIR)/%.o:	$(SRCDIR)/%.cpp | $(BINOBJDIR)
1332		@echo "-> compiling $@"
1333		$(CXX) $(FLAGS) $(OFLAGS) $(BINOFLAGS) $(CXXFLAGS) $(DFLAGS) $(TPICFLAGS) $(CXX_c)$< $(CXX_o)$@
1334
1335$(LIBOBJDIR)/%.o:	$(SRCDIR)/%.c | $(LIBOBJDIR) $(LIBOBJSUBDIRS)
1336		@echo "-> compiling $@"
1337		$(CC) $(FLAGS) $(OFLAGS) $(LIBOFLAGS) $(CFLAGS) $(DFLAGS) $(TPICFLAGS) $(CC_c)$< $(CC_o)$@
1338
1339# add special target for papilo to avoid sanitizers (leading to false positives in TBB)
1340ifeq ($(SANITIZE),true)
1341$(LIBOBJDIR)/scip/presol_milp.o: $(SRCDIR)/scip/presol_milp.cpp | $(LIBOBJDIR) $(LIBOBJSUBDIRS)
1342		@echo "-> compiling $@"
1343		$(CXX) $(FLAGS) $(OFLAGS) $(LIBOFLAGS) $(CXXFLAGS) $(DFLAGS) $(TPICFLAGS) $(CXX_c)$< $(CXX_o)$@ -fno-sanitize=all
1344endif
1345
1346$(LIBOBJDIR)/%.o:	$(SRCDIR)/%.cpp | $(LIBOBJDIR) $(LIBOBJSUBDIRS)
1347		@echo "-> compiling $@"
1348		$(CXX) $(FLAGS) $(OFLAGS) $(LIBOFLAGS) $(CXXFLAGS) $(DFLAGS) $(TPICFLAGS) $(CXX_c)$< $(CXX_o)$@
1349
1350ifeq ($(GAMS),true)
1351$(LIBOBJDIR)/scip/%.o:	$(GAMSDIR)/apifiles/C/api/%.c | $(LIBOBJDIR)
1352		@echo "-> compiling $@"
1353		$(CC) $(FLAGS) $(OFLAGS) $(LIBOFLAGS) $(CFLAGS) $(CC_c)$< $(CC_o)$@
1354$(LIBOBJDIR)/scip/%.o:	$(SRCDIR)/../interfaces/gams/src/%.c | $(LIBOBJDIR)
1355		@echo "-> compiling $@"
1356		$(CC) $(FLAGS) $(OFLAGS) $(LIBOFLAGS) $(CFLAGS) $(CC_c)$< $(CC_o)$@
1357endif
1358
1359-include $(LASTSETTINGS)
1360
1361.PHONY: windowslib
1362windowslib: $(SCIPLIBOBJFILES) $(MAINOBJFILES) $(LPILIBOBJFILES) $(NLPILIBOBJFILES) $(OBJSCIPLIBOBJFILES) $(TPILIBOBJFILES) | $(LIBOBJSUBDIRS) $(LIBDIR)/$(LIBTYPE)
1363		@echo "-> generating Windows library $@"
1364ifeq ($(SHARED),true)
1365		$(LINKCC) $(LIBBUILDFLAGS) $(LINKCC_L)$(LIBDIR)/$(LIBTYPE) $(LIBBUILD_o)$(LIBDIR)/$(LIBTYPE)/$(WINLIBFILENAME) \
1366			$(SCIPLIBOBJFILES) $(OBJSCIPLIBOBJFILES) $(NLPILIBOBJFILES) $(LPILIBOBJFILES) $(TPILIBOBJFILES) \
1367			$(LPSLDFLAGS) $(LDFLAGS)
1368else
1369		$(LIBBUILD) $(LIBBUILDFLAGS) $(LINKCC_L)$(LIBDIR)/$(LIBTYPE) $(LIBBUILD_o)$(LIBDIR)/$(LIBTYPE)/$(WINLIBFILENAME) \
1370			$(SCIPLIBOBJFILES) $(OBJSCIPLIBOBJFILES) $(NLPILIBOBJFILES) $(LPILIBOBJFILES) $(TPILIBOBJFILES) \
1371			$(LPSLDFLAGS) $(LDFLAGS)
1372endif
1373
1374.PHONY: touchexternal
1375touchexternal:	$(ZLIBDEP) $(GMPDEP) $(READLINEDEP) $(ZIMPLDEP) $(GAMSDEP) $(LPSCHECKDEP) $(PARASCIPDEP) | $(LIBOBJDIR)
1376ifeq ($(TOUCHLINKS),true)
1377		@-touch $(ZLIBSRC)
1378		@-touch $(GMPSRC)
1379		@-touch $(READLINESRC)
1380		@-touch $(ZIMPLSRC)
1381		@-touch $(GAMSSRC)
1382		@-touch $(LPSCHECKSRC)
1383		@-touch $(LPILIBSRC)
1384		@-touch $(NLPILIBSRC)
1385endif
1386ifneq ($(SCIPGITHASH),$(LAST_SCIPGITHASH))
1387		@$(MAKE) githash
1388endif
1389		@$(SHELL) -ec 'if test ! -e $(SCIPGITHASHFILE) ; \
1390			then \
1391				echo "-> generating $(SCIPGITHASHFILE)" ; \
1392				$(MAKE) githash ; \
1393			fi'
1394ifneq ($(subst \\n,\n,$(BUILDFLAGS)),$(LAST_BUILDFLAGS))
1395		@echo "#define SCIP_BUILDFLAGS \"$(BUILDFLAGS)\"" > $(SCIPBUILDFLAGSFILE)
1396endif
1397ifneq ($(ZLIB),$(LAST_ZLIB))
1398		@-touch $(ZLIBSRC)
1399endif
1400ifneq ($(GMP),$(LAST_GMP))
1401		@-touch $(GMPSRC)
1402endif
1403ifneq ($(READLINE),$(LAST_READLINE))
1404		@-touch $(READLINESRC)
1405endif
1406ifneq ($(ZIMPL),$(LAST_ZIMPL))
1407		@-touch $(ZIMPLSRC)
1408endif
1409ifneq ($(IPOPT),$(LAST_IPOPT))
1410		@-touch $(NLPILIBSRC)
1411endif
1412ifneq ($(WORHP),$(LAST_WORHP))
1413		@-touch $(NLPILIBSRC)
1414endif
1415ifneq ($(GAMS),$(LAST_GAMS))
1416		@-touch $(GAMSSRC)
1417endif
1418ifneq ($(SYM),$(LAST_SYM))
1419		@-touch $(SYMSRC)
1420endif
1421ifneq ($(LPSCHECK),$(LAST_LPSCHECK))
1422		@-touch $(LPSCHECKSRC)
1423endif
1424ifneq ($(PARASCIP),$(LAST_PARASCIP))
1425		@-touch $(PARASCIPSRC)
1426endif
1427ifneq ($(USRFLAGS),$(LAST_USRFLAGS))
1428		@-touch $(ALLSRC)
1429endif
1430ifneq ($(USROFLAGS),$(LAST_USROFLAGS))
1431		@-touch $(ALLSRC)
1432endif
1433ifneq ($(USRCFLAGS),$(LAST_USRCFLAGS))
1434		@-touch $(ALLSRC)
1435endif
1436ifneq ($(USRCXXFLAGS),$(LAST_USRCXXFLAGS))
1437		@-touch $(ALLSRC)
1438endif
1439ifneq ($(USRLDFLAGS),$(LAST_USRLDFLAGS))
1440		@-touch -c $(SCIPLIBOBJFILES) $(LPILIBOBJFILES) $(TPILIBOBJFILES) $(NLPILIBOBJFILES) $(TPILIBOBJFILES) $(MAINOBJFILES)
1441endif
1442ifneq ($(USRARFLAGS),$(LAST_USRARFLAGS))
1443		@-touch -c $(SCIPLIBOBJFILES) $(OBJSCIPLIBOBJFILES) $(LPILIBOBJFILES) $(NLPILIBOBJFILES) $(TPILIBOBJFILES) $(NLPILIBSCIPOBJFILES)
1444endif
1445ifneq ($(NOBLKMEM),$(LAST_NOBLKMEM))
1446		@-touch -c $(ALLSRC)
1447endif
1448ifneq ($(NOBUFMEM),$(LAST_NOBUFMEM))
1449		@-touch -c $(ALLSRC)
1450endif
1451ifneq ($(NOBLKBUFMEM),$(LAST_NOBLKBUFMEM))
1452		@-touch -c $(ALLSRC)
1453endif
1454ifneq ($(SANITIZE),$(LAST_SANITIZE))
1455		@-touch -c $(ALLSRC)
1456endif
1457ifneq ($(TPI),$(LAST_TPI))
1458		@-touch -c $(ALLSRC)
1459endif
1460ifneq ($(DEBUGSOL),$(LAST_DEBUGSOL))
1461		@-touch -c $(ALLSRC)
1462endif
1463ifneq ($(PAPILO),$(LAST_PAPILO))
1464		@-touch -c $(ALLSRC)
1465endif
1466		@-rm -f $(LASTSETTINGS)
1467		@echo "LAST_BUILDFLAGS=\"$(BUILDFLAGS)\"" >> $(LASTSETTINGS)
1468		@echo "LAST_SCIPGITHASH=$(SCIPGITHASH)" >> $(LASTSETTINGS)
1469		@echo "LAST_ZLIB=$(ZLIB)" >> $(LASTSETTINGS)
1470		@echo "LAST_GMP=$(GMP)" >> $(LASTSETTINGS)
1471		@echo "LAST_READLINE=$(READLINE)" >> $(LASTSETTINGS)
1472		@echo "LAST_ZIMPL=$(ZIMPL)" >> $(LASTSETTINGS)
1473		@echo "LAST_IPOPT=$(IPOPT)" >> $(LASTSETTINGS)
1474		@echo "LAST_WORHP=$(WORHP)" >> $(LASTSETTINGS)
1475		@echo "LAST_GAMS=$(GAMS)" >> $(LASTSETTINGS)
1476		@echo "LAST_SYM=$(SYM)" >> $(LASTSETTINGS)
1477		@echo "LAST_PARASCIP=$(PARASCIP)" >> $(LASTSETTINGS)
1478		@echo "LAST_LPSCHECK=$(LPSCHECK)" >> $(LASTSETTINGS)
1479		@echo "LAST_USRFLAGS=$(USRFLAGS)" >> $(LASTSETTINGS)
1480		@echo "LAST_USROFLAGS=$(USROFLAGS)" >> $(LASTSETTINGS)
1481		@echo "LAST_USRCFLAGS=$(USRCFLAGS)" >> $(LASTSETTINGS)
1482		@echo "LAST_USRCXXFLAGS=$(USRCXXFLAGS)" >> $(LASTSETTINGS)
1483		@echo "LAST_USRLDFLAGS=$(USRLDFLAGS)" >> $(LASTSETTINGS)
1484		@echo "LAST_USRARFLAGS=$(USRARFLAGS)" >> $(LASTSETTINGS)
1485		@echo "LAST_NOBLKMEM=$(NOBLKMEM)" >> $(LASTSETTINGS)
1486		@echo "LAST_NOBUFMEM=$(NOBUFMEM)" >> $(LASTSETTINGS)
1487		@echo "LAST_NOBLKBUFMEM=$(NOBLKBUFMEM)" >> $(LASTSETTINGS)
1488		@echo "LAST_SANITIZE=$(SANITIZE)" >> $(LASTSETTINGS)
1489		@echo "LAST_TPI=$(TPI)" >> $(LASTSETTINGS)
1490		@echo "LAST_DEBUGSOL=$(DEBUGSOL)" >> $(LASTSETTINGS)
1491		@echo "LAST_PAPILO=$(PAPILO)" >> $(LASTSETTINGS)
1492
1493$(LINKSMARKERFILE):
1494		@$(MAKE) links
1495
1496.PHONY: links
1497links:		| $(LIBDIR)/static $(LIBDIR)/shared $(LIBDIR)/include $(DIRECTORIES) echosoftlinks $(SOFTLINKS)
1498		@rm -f $(LINKSMARKERFILE)
1499		@echo "this is only a marker" > $(LINKSMARKERFILE)
1500
1501.PHONY: echosoftlinks
1502echosoftlinks:
1503		@echo
1504		@echo "- Current settings: LPS=$(LPS) OSTYPE=$(OSTYPE) ARCH=$(ARCH) COMP=$(COMP) SHARED=$(SHARED) SUFFIX=$(LINKLIBSUFFIX) ZIMPL=$(ZIMPL) ZIMPLOPT=$(ZIMPLOPT) IPOPT=$(IPOPT) IPOPTOPT=$(IPOPTOPT) WORHP=$(WORHP) WORHPOPT=$(WORHPOPT) FILTERSQP=$(FILTERSQP) EXPRINT=$(EXPRINT) GAMS=$(GAMS) SYM=$(SYM)"
1505		@echo
1506		@echo "* SCIP needs some softlinks to external programs, in particular, LP-solvers."
1507		@echo "* Please insert the paths to the corresponding directories/libraries below."
1508		@echo "* The links will be installed in the 'lib/include' and 'lib/$(LIBTYPE)' directories."
1509		@echo "* For more information and if you experience problems see the INSTALL file."
1510		@echo
1511		@echo -e $(LPIINSTMSG)
1512
1513$(DIRECTORIES):
1514		@echo
1515		@echo "- creating directory \"$@\""
1516		@-mkdir -p $@
1517
1518
1519# Create softlinks for external libraries. The user can enter the
1520# filename and the link is created in the corresponding directories
1521# (lib/include, lib/shared, lib/static).
1522#
1523# We also test whether older links in lib/ still exist. In later
1524# releases this feature can be removed.
1525.PHONY: $(SOFTLINKS)
1526$(SOFTLINKS):
1527ifeq ($(MAKESOFTLINKS), true)
1528		@$(SHELL) -ec 'if test ! -e $@ ; \
1529			then \
1530				DIRNAME=`dirname $@` ; \
1531				echo ; \
1532				echo "> Enter soft-link target file or directory for \"$@\" (return if not needed): " ; \
1533				echo -n "> " ; \
1534				cd $$DIRNAME ; \
1535				eval $(READ) TARGET ; \
1536				cd $(SCIPREALPATH) ; \
1537				if test "$$TARGET" != "" ; \
1538				then \
1539					echo "-> creating softlink \"$@\" -> \"$$TARGET\"" ; \
1540					rm -f $@ ; \
1541					$(LN_s) $$TARGET $@ ; \
1542				else \
1543					echo "* skipped creation of softlink \"$@\". Call \"make links\" if needed later." ; \
1544				fi ; \
1545				FILENAME=$@ ; \
1546				FNAME=$${FILENAME#lib/static} ; \
1547				FNAME=$${FNAME#lib/include} ; \
1548				FNAME="lib"$$FNAME ; \
1549				if test -e $$FNAME ; \
1550				then \
1551					echo ; \
1552					echo "The link "$$FNAME" still exists. Consider removing it." ; \
1553				fi ; \
1554				echo ; \
1555			fi'
1556endif
1557
1558.PHONY: checkdefines
1559checkdefines:
1560ifeq ($(LPILIBOBJ),)
1561		$(error invalid LP solver selected: LPS=$(LPS). Possible options are: $(LPSOPTIONS))
1562endif
1563ifneq ($(TPI),none)
1564ifneq ($(TPI),omp)
1565ifneq ($(TPI),tny)
1566		$(error invalid TPI flag selected: TPI=$(TPI). Possible options are: $(TPIOPTIONS))
1567endif
1568endif
1569endif
1570ifneq ($(GMP),true)
1571ifneq ($(GMP),false)
1572		$(error invalid GMP flag selected: GMP=$(GMP). Possible options are: true false)
1573endif
1574endif
1575ifneq ($(ZIMPL),true)
1576ifneq ($(ZIMPL),false)
1577		$(error invalid ZIMPL flag selected: ZIMPL=$(ZIMPL). Possible options are: true false auto)
1578endif
1579endif
1580ifneq ($(GAMS),true)
1581ifneq ($(GAMS),false)
1582		$(error invalid GAMS flag selected: GAMS=$(GAMS). Possible options are: true false)
1583endif
1584endif
1585ifneq ($(IPOPT),true)
1586ifneq ($(IPOPT),false)
1587		$(error invalid IPOPT flag selected: IPOPT=$(IPOPT). Possible options are: true false)
1588endif
1589endif
1590ifneq ($(FILTERSQP),true)
1591ifneq ($(FILTERSQP),false)
1592		$(error invalid FILTERSQP flag selected: FILTERSQP=$(FILTERSQP). Possible options are: true false)
1593endif
1594endif
1595ifneq ($(WORHP),true)
1596ifneq ($(WORHP),false)
1597		$(error invalid WORHP flag selected: WORHP=$(WORHP). Possible options are: true false)
1598endif
1599endif
1600ifneq ($(READLINE),true)
1601ifneq ($(READLINE),false)
1602		$(error invalid READLINE flag selected: READLINE=$(READLINE). Possible options are: true false)
1603endif
1604endif
1605ifneq ($(ZLIB),true)
1606ifneq ($(ZLIB),false)
1607		$(error invalid ZLIB flag selected: ZLIB=$(ZLIB). Possible options are: true false)
1608endif
1609endif
1610ifneq ($(PARASCIP),true)
1611ifneq ($(PARASCIP),false)
1612		$(error invalid PARASCIP flag selected: PARASCIP=$(PARASCIP). Possible options are: true false)
1613endif
1614endif
1615ifeq ($(SHARED),true)
1616ifeq ($(COMP),msvc)
1617		$(error invalid flags selected: SHARED=$(SHARED) and COMP=$(COMP). Please use 'make dll' to generate a dynamic library with MSVC)
1618endif
1619endif
1620ifneq ($(SYM),bliss)
1621ifneq ($(SYM),none)
1622		$(error invalid SYM flag selected: SYM=$(SYM). Possible options are: $(SYMOPTIONS))
1623endif
1624endif
1625ifneq ($(PAPILO),true)
1626ifneq ($(PAPILO),false)
1627		$(error invalid PAPILO flag selected: PAPILO=$(PAPILO). Possible options are: true false)
1628endif
1629endif
1630
1631.PHONY: errorhints
1632errorhints:
1633ifeq ($(READLINE),true)
1634		@echo "build failed with READLINE=true: if readline is not available, try building with READLINE=false"
1635endif
1636ifeq ($(ZLIB),true)
1637		@echo "build failed with ZLIB=true: if ZLIB is not available, try building with ZLIB=false"
1638endif
1639ifeq ($(GMP),true)
1640		@echo "build failed with GMP=true: if GMP is not available, try building with GMP=false (note that this will deactivate Zimpl support)"
1641endif
1642ifeq ($(GMP),false)
1643ifeq ($(LPS),spx1)
1644		@echo "build failed with GMP=false and LPS=spx1: use GMP=true or make sure that SoPlex is also built without GMP support (make GMP=false)"
1645endif
1646ifeq ($(LPS),spx2)
1647		@echo "build failed with GMP=false and LPS=spx2: use GMP=true or make sure that SoPlex is also built without GMP support (make GMP=false)"
1648endif
1649endif
1650
1651.PHONY: help
1652help:
1653		@echo "Use the SCIP makefile system."
1654		@echo
1655		@echo "  The main options for the SCIP makefile system are as follows:"
1656		@echo
1657		@echo "  General options:"
1658		@echo "  - OPT={dbg|opt}: Use debug or optimized (default) mode, respectively."
1659		@echo "  - LPS={clp|cpx|grb|glop|msk|qso|spx|xprs|none}: Determine LP-solver."
1660		@echo "      clp: COIN-OR Clp LP-solver"
1661		@echo "      cpx: CPLEX LP-solver"
1662		@echo "      glop: Glop LP-solver"
1663		@echo "      grb: Gurobi LP-solver"
1664		@echo "      msk: Mosek LP-solver"
1665		@echo "      qso: QSopt LP-solver"
1666		@echo "      spx: old SoPlex LP-solver (for versions < 2)"
1667		@echo "      spx2: new SoPlex LP-solver (default) (from version 2)"
1668		@echo "      xprs: XPress LP-solver"
1669		@echo "      none: no LP-solver"
1670		@echo "  - COMP={clang|gnu|intel}: Determine compiler."
1671		@echo "  - TPI={none|omp|tny}: Determine parallel interface for concurrent solve (default: none)."
1672		@echo "  - SHARED={true|false}: Build shared libraries or not (default)."
1673		@echo
1674		@echo "  More detailed options:"
1675		@echo "  - ZIMPL=<true|false>: Turn ZIMPL support on (default) or off."
1676		@echo "  - ZIMPLOPT=<dbg|opt>: Use debug or optimized (default) mode for ZIMPL."
1677		@echo "  - LPSOPT=<dbg|opt>: Use debug or optimized (default) mode for LP-solver (SoPlex and Clp only)."
1678		@echo "  - READLINE=<true|false>: Turns support via the readline library on (default) or off."
1679		@echo "  - IPOPT=<true|false>: Turns support of IPOPT on or off (default)."
1680		@echo "  - EXPRINT=<cppad|none>: Use CppAD as expressions interpreter (default) or no expressions interpreter."
1681		@echo "  - GAMS=<true|false>: To enable or disable (default) reading functionality in GAMS reader (needs GAMS)."
1682		@echo "  - SYM=<none|bliss>: To choose type of symmetry handling."
1683		@echo "  - NOBLKMEM=<true|false>: Turn off block memory or on (default)."
1684		@echo "  - NOBUFMEM=<true|false>>: Turn off buffer memory or on (default)."
1685		@echo "  - NOBLKBUFMEM=<true|false>: Turn usage of internal memory functions off or on (default)."
1686		@echo "  - VERBOSE=<true|false>: Turn on verbose messages of makefile or off (default)."
1687		@echo
1688		@echo "  Main targets:"
1689		@echo "  - all (default): Build SCIP libraries and binary."
1690		@echo "  - libscipsolver: Build standalone SCIP library."
1691		@echo "  - libscip: Build library for the main part of SCIP."
1692		@echo "  - libobjscip: Build library for the C++-interface of SCIP."
1693		@echo "  - liblpi: Build library for the LP interface in SCIP."
1694		@echo "  - libnlpi: Build library for the NLP interface in SCIP."
1695		@echo "  - libtpi: Build library for the parallel task interface in SCIP."
1696		@echo "  - links: Reconfigures the links in the \"lib\" directory."
1697		@echo "  - doc: Creates documentation in the \"doc\" directory."
1698		@echo "  - libs: Create all SCIP libraries."
1699		@echo "  - lint: Run lint on all SCIP files. (Needs flexelint.)"
1700		@echo "  - pclint: Run pclint on all SCIP files. (Needs pclint.)"
1701		@echo "  - splint: Run splint on all C SCIP files. (Needs splint.)"
1702		@echo "  - clean: Removes all object files."
1703		@echo "  - cleanlibs: Remove all SCIP libraries."
1704		@echo "  - depend: Updates dependencies files. This is only needed if you modify SCIP source."
1705		@echo "  - tags: Creates TAGS file that can be used in (x)emacs."
1706		@echo "  - check or test: Runs the check/test script, see the online documentation."
1707
1708# --- EOF ---------------------------------------------------------------------
1709# DO NOT DELETE
1710