Files
ortools-clone/makefiles/Makefile.unix
2014-10-15 21:31:03 +00:00

281 lines
12 KiB
Makefile

# ----- You should not need to modify the following, unless the -----
# ----- configuration is not standard. In that case, please tell us -----
# ----- about it. -----
# Unix specific definitions
PROTOBUF_DIR = $(UNIX_PROTOBUF_DIR)
SWIG_BINARY = $(UNIX_SWIG_BINARY)
MKDIR = mkdir
COPY = cp
TOUCH = touch
LIBPREFIX = lib
ifeq ($(PLATFORM),MACOSX)
# Keep the path in the lib as it is stored upon construction.
LIB_DIR = $(OR_ROOT_FULL)/lib
else # No need to keep the path in the lib, it is not stored there on linux.
LIB_DIR = $(OR_ROOT)lib
endif
BIN_DIR = $(OR_ROOT)bin
GEN_DIR = $(OR_ROOT)src/gen
OBJ_DIR = $(OR_ROOT)objs
SRC_DIR = $(OR_ROOT)src
EX_DIR = $(OR_ROOT)examples
INC_DIR = $(OR_ROOT)src
O = o
E =
LDOUT = -o # need the space.
OBJ_OUT = -o #
EXE_OUT = -o #
DEL = rm -f
DELREC = rm -rf
S = /
CPSEP = :
SED = sed
# This is needed to find python.h
PYTHON_INC = -I/usr/include/python$(UNIX_PYTHON_VER) -I/usr/lib/python$(UNIX_PYTHON_VER)
PYTHON_VERSION = $(UNIX_PYTHON_VER)
# This is needed to find gflags/gflags.h
GFLAGS_INC = -I$(UNIX_GFLAGS_DIR)/include
# This is needed to find protocol buffers.
PROTOBUF_INC = -I$(UNIX_PROTOBUF_DIR)/include
# This is needed to find sparse hash containers.
SPARSEHASH_INC = -I$(UNIX_SPARSEHASH_DIR)/include
# Define UNIX_CLP_DIR if unset and if UNIX_CBC_DIR is set.
ifdef UNIX_CBC_DIR
ifndef UNIX_CLP_DIR
UNIX_CLP_DIR = $(UNIX_CBC_DIR)
endif
endif
# This is needed to find Coin LP include files.
ifdef UNIX_CLP_DIR
CLP_INC = -I$(UNIX_CLP_DIR)/include -DUSE_CLP
CLP_SWIG = $(CLP_INC)
endif
# This is needed to find Coin Branch and Cut include files.
ifdef UNIX_CBC_DIR
CBC_INC = -I$(UNIX_CBC_DIR)/include -DUSE_CBC
CBC_SWIG = $(CBC_INC)
endif
# This is needed to find GLPK include files.
ifdef UNIX_GLPK_DIR
GLPK_INC = -I$(UNIX_GLPK_DIR)/include -DUSE_GLPK
GLPK_SWIG = $(GLPK_INC)
endif
# This is needed to find scip include files.
ifdef UNIX_SCIP_DIR
SCIP_INC = -I$(UNIX_SCIP_DIR)/src -DUSE_SCIP
SCIP_SWIG = $(SCIP_INC)
endif
# This is needed to find SULUM include files.
ifdef UNIX_SLM_DIR
SLM_INC = -I$(UNIX_SLM_DIR)/header -DUSE_SLM
SLM_SWIG = $(SLM_INC)
endif
ifdef UNIX_GUROBI_DIR
GUROBI_INC = -I$(UNIX_GUROBI_DIR)/$(GUROBI_PLATFORM)/include -DUSE_GUROBI
GUROBI_SWIG = $(GUROBI_INC)
endif
ifdef UNIX_CPLEX_DIR
CPLEX_INC = -I$(UNIX_CPLEX_DIR)/cplex/include -DUSE_CPLEX
CPLEX_SWIG = $(CPLEX_INC)
endif
ifeq ($(UNIX_SCIP_TAG),3.0.0)
SCIP_30 = TRUE
endif
ifeq ($(UNIX_SCIP_TAG),3.0.1)
SCIP_30 = TRUE
endif
ifeq ($(UNIX_SCIP_TAG),3.1.0)
SCIP_30 = TRUE
endif
SWIG_INC = $(GLPK_SWIG) $(CLP_SWIG) $(CBC_SWIG) $(SCIP_SWIG) $(SLM_SWIG) $(GUROBI_SWIG) $(CPLEX_SWIG) -DUSE_GLOP
# Compilation flags
DEBUG = -O4 -DNDEBUG
JNIDEBUG = -O1 -DNDEBUG
# Check wether CBC/CLP need a coin subdir in library.
ifdef UNIX_CBC_DIR
ifneq ($(wildcard $(UNIX_CBC_DIR)/lib/coin),)
UNIX_CBC_COIN = /coin
endif
endif
ifdef UNIX_CLP_DIR
ifneq ($(wildcard $(UNIX_CLP_DIR)/lib/coin),)
UNIX_CLP_COIN = /coin
endif
endif
ifeq ($(PLATFORM),LINUX)
CCC = g++ -fPIC -std=c++0x
DYNAMIC_LD = g++ -shared
STATIC_LD = ar rv
ifeq ($(PTRLENGTH),64)
ARCH = -DARCH_K8
else
ARCH =
endif
ifeq ($(UNIX_MONO_DIR),)
CSC = mono-csc
MONO = LD_LIBRARY_PATH=$(LIB_DIR):$(LD_LIBRARY_PATH) mono
else
CSC = $(UNIX_MONO_DIR)/bin/mcs
MONO = LD_LIBRARY_PATH=$(LIB_DIR):$(LD_LIBRARY_PATH) $(UNIX_MONO_DIR)/bin/mono
endif
# This is needed to find libgflags.a
DYNAMIC_GFLAGS_LNK = -Wl,-rpath $(UNIX_GFLAGS_DIR)/lib -L$(UNIX_GFLAGS_DIR)/lib -lgflags
STATIC_GFLAGS_LNK = $(UNIX_GFLAGS_DIR)/lib/libgflags.a
# This is needed to find libz.a
ZLIB_LNK = -lz
# This is needed to find libprotobuf.a
DYNAMIC_PROTOBUF_LNK = -Wl,-rpath $(UNIX_PROTOBUF_DIR)/lib -L$(UNIX_PROTOBUF_DIR)/lib -lprotobuf -lpthread
STATIC_PROTOBUF_LNK = $(UNIX_PROTOBUF_DIR)/lib/libprotobuf.a
ifdef UNIX_GLPK_DIR
DYNAMIC_GLPK_LNK = -Wl,-rpath $(UNIX_GLPK_DIR)/lib -L$(UNIX_GLPK_DIR)/lib -lglpk
STATIC_GLPK_LNK = $(UNIX_GLPK_DIR)/lib/libglpk.a
endif
ifdef UNIX_CLP_DIR
DYNAMIC_CLP_LNK = -Wl,-rpath $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN) -L$(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN) -lClp -lCoinUtils
STATIC_CLP_LNK = $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN)/libClp.a $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN)/libCoinUtils.a
endif
ifdef UNIX_CBC_DIR
DYNAMIC_CBC_LNK = -Wl,-rpath $(UNIX_CBC_DIR)/lib$(UNIX_CBC_COIN) -L$(UNIX_CBC_DIR)/lib$(UNIX_CBC_COIN) -lCbcSolver -lCbc -lCgl -lOsi -lOsiCbc -lOsiClp
STATIC_CBC_LNK = $(UNIX_CBC_DIR)/lib$(UNIX_CBC_COIN)/libCbcSolver.a $(UNIX_CBC_DIR)/lib$(UNIX_CBC_COIN)/libCbc.a $(UNIX_CBC_DIR)/lib$(UNIX_CBC_COIN)/libCgl.a $(UNIX_CBC_DIR)/lib$(UNIX_CBC_COIN)/libOsi.a $(UNIX_CBC_DIR)/lib$(UNIX_CBC_COIN)/libOsiCbc.a $(UNIX_CBC_DIR)/lib$(UNIX_CBC_COIN)/libOsiClp.a
endif
ifdef UNIX_SCIP_DIR
ifeq ($(PTRLENGTH),64)
SCIP_ARCH = linux.x86_64.gnu.opt
else
SCIP_ARCH = linux.x86.gnu.opt
endif
ifeq ($(SCIP_30),TRUE)
STATIC_SCIP_LNK = $(UNIX_SCIP_DIR)/lib/libscip.$(SCIP_ARCH).a $(UNIX_SCIP_DIR)/lib/libnlpi.cppad.$(SCIP_ARCH).a $(UNIX_SCIP_DIR)/lib/liblpispx.$(SCIP_ARCH).a $(UNIX_SCIP_DIR)/lib/libsoplex.$(SCIP_ARCH).a
else
STATIC_SCIP_LNK = $(UNIX_SCIP_DIR)/lib/libscip.$(SCIP_ARCH).a $(UNIX_SCIP_DIR)/lib/libnlpi.cppad.$(SCIP_ARCH).a $(UNIX_SCIP_DIR)/lib/liblpispx.$(SCIP_ARCH).a $(UNIX_SCIP_DIR)/lib/libsoplex.$(SCIP_ARCH).a
endif
endif
ifdef UNIX_SLM_DIR
ifeq ($(PTRLENGTH),64)
DYNAMIC_SLM_LNK = -Wl,-rpath $(UNIX_SLM_DIR)/linux64/bin/ -L$(UNIX_SLM_DIR)/linux64/bin/ -m64 -lc -ldl -lm -lpthread -lsulum10
STATIC_SLM_LNK = -Wl,-rpath $(UNIX_SLM_DIR)/linux64/bin/ -L$(UNIX_SLM_DIR)/linux64/bin/ -m64 -lc -ldl -lm -lpthread -lsulum10
else
DYNAMIC_SLM_LNK = -Wl,-rpath $(UNIX_SLM_DIR)/linux32/bin/ -L$(UNIX_SLM_DIR)/linux32/bin/ -m32 -lc -ldl -lm -lpthread -lsulum10
STATIC_SLM_LNK = -Wl,-rpath $(UNIX_SLM_DIR)/linux32/bin/ -L$(UNIX_SLM_DIR)/linux32/bin/ -m32 -lc -ldl -lm -lpthread -lsulum10
endif
endif
ifdef UNIX_GUROBI_DIR
ifeq ($(PTRLENGTH),64)
DYNAMIC_GUROBI_LNK = -Wl,-rpath $(UNIX_GUROBI_DIR)/linux64/lib/ -L$(UNIX_GUROBI_DIR)/linux64/lib/ -m64 -lc -ldl -lm -lpthread -lgurobi$(GUROBI_LIB_VERSION)
STATIC_GUROBI_LNK = -Wl,-rpath $(UNIX_GUROBI_DIR)/linux64/lib/ -L$(UNIX_GUROBI_DIR)/linux64/lib/ -m64 -lc -ldl -lm -lpthread -lgurobi$(GUROBI_LIB_VERSION)
else
DYNAMIC_GUROBI_LNK = -Wl,-rpath $(UNIX_GUROBI_DIR)/linux32/lib/ -L$(UNIX_GUROBI_DIR)/linux32/lib/ -m32 -lc -ldl -lm -lpthread -lgurobi$(GUROBI_LIB_VERSION)
STATIC_GUROBI_LNK = -Wl,-rpath $(UNIX_GUROBI_DIR)/linux32/lib/ -L$(UNIX_GUROBI_DIR)/linux32/lib/ -m32 -lc -ldl -lm -lpthread -lgurobi$(GUROBI_LIB_VERSION)
endif
endif
SYS_LNK = -lrt -lpthread
JAVA_INC = -I$(LINUX_JDK_ROOT)/include -I$(LINUX_JDK_ROOT)/include/linux
JAVAC_BIN = $(LINUX_JDK_ROOT)/bin/javac
JAVA_BIN = $(LINUX_JDK_ROOT)/bin/java
JAR_BIN = $(LINUX_JDK_ROOT)/bin/jar
JNI_LIB_EXT = so
DYNAMIC_LIB_SUFFIX = so
DYNAMIC_SWIG_LIB_SUFFIX = so
DYNAMIC_LINK_CMD = g++ -shared
DYNAMIC_LINK_PREFIX = -o # Need the space.
LINKPREFIX = -o # Need the space.
STATIC_LIB_SUFFIX = a
STATIC_LINK_CMD = ar rv
STATIC_LINK_PREFIX =
DYNAMIC_PRE_LIB = -Wl,-rpath $(OR_ROOT_FULL)/lib -L$(OR_ROOT_FULL)/lib -l
DYNAMIC_POST_LIB =
STATIC_PRE_LIB = $(OR_ROOT_FULL)/lib/lib
STATIC_POST_LIB = .a
BISON = dependencies/install/bin/bison
FLEX = dependencies/install/bin/flex
endif # LINUX
ifeq ($(PLATFORM),MACOSX)
CCC = clang++ -fPIC -std=c++11
DYNAMIC_LD = ld -arch x86_64 -bundle -flat_namespace -undefined suppress -macosx_version_min 10.6 -lSystem -compatibility_version 1.0 -current_version $(OR_TOOLS_VERSION)
JNI_LIB_EXT = jnilib
ifeq ($(UNIX_MONO_DIR),)
CSC = gmcs
MONO = DYLD_FALLBACK_LIBRARY_PATH=$(LIB_DIR):$(DYLD_LIBRARY_PATH) mono
else
CSC = $(UNIX_MONO_DIR)/bin/mcs
MONO = DYLD_FALLBACK_LIBRARY_PATH=$(LIB_DIR):$(DYLD_LIBRARY_PATH) $(UNIX_MONO_DIR)/bin/mono
endif
DYNAMIC_GFLAGS_LNK = -L$(UNIX_GFLAGS_DIR)/lib -lgflags
STATIC_GFLAGS_LNK = $(UNIX_GFLAGS_DIR)/lib/libgflags.a
ZLIB_LNK = -lz
DYNAMIC_PROTOBUF_LNK = -L$(UNIX_PROTOBUF_DIR)/lib -lprotobuf
STATIC_PROTOBUF_LNK = $(UNIX_PROTOBUF_DIR)/lib/libprotobuf.a
ARCH = -DARCH_K8
SYS_LNK =
JAVA_INC = -I$(MAC_JDK_HEADERS) -I$(MAC_JDK_HEADERS)/darwin
JAVAC_BIN = javac
JAVA_BIN = java
JAR_BIN = jar
DYNAMIC_PRE_LIB = -L$(OR_ROOT)lib -l
DYNAMIC_POST_LIB =
STATIC_PRE_LIB = $(OR_ROOT)lib/lib
STATIC_POST_LIB = .a
DYNAMIC_LIB_SUFFIX = dylib
DYNAMIC_SWIG_LIB_SUFFIX = so# To overcome a bug in Mac OS X loader.
DYNAMIC_LINK_CMD = ld -arch x86_64 -dylib -flat_namespace -undefined suppress -macosx_version_min 10.6 -lSystem -compatibility_version 1.0 -current_version $(OR_TOOLS_VERSION)
DYNAMIC_LINK_PREFIX = -o # Space needed.
STATIC_LIB_SUFFIX = a
STATIC_LINK_CMD = ar -r -v
STATIC_LINK_PREFIX =
ifdef UNIX_GLPK_DIR
DYNAMIC_GLPK_LNK = -L$(UNIX_GLPK_DIR)/lib -lglpk
STATIC_GLPK_LNK = $(UNIX_GLPK_DIR)/lib/libglpk.a
endif
ifdef UNIX_CLP_DIR
DYNAMIC_CLP_LNK = -L$(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN) -lClp -lCoinUtils
STATIC_CLP_LNK = $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN)/libClp.a $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN)/libCoinUtils.a
endif
ifdef UNIX_CBC_DIR
DYNAMIC_CBC_LNK = -L$(UNIX_CBC_DIR)/lib$(UNIX_CBC_COIN) -lCbcSolver -lCbc -lCgl -lOsi -lOsiCbc -lOsiClp
STATIC_CBC_LNK = $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN)/libCbcSolver.a $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN)/libCbc.a $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN)/libCgl.a $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN)/libOsi.a $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN)/libOsiCbc.a $(UNIX_CLP_DIR)/lib$(UNIX_CLP_COIN)/libOsiClp.a
endif
ifdef UNIX_SCIP_DIR
SCIP_ARCH = darwin.x86_64.gnu.opt
ifeq ($(SCIP_30),TRUE)
STATIC_SCIP_LNK = -force_load $(UNIX_SCIP_DIR)/lib/libscip.$(SCIP_ARCH).a $(UNIX_SCIP_DIR)/lib/libnlpi.cppad.$(SCIP_ARCH).a -force_load $(UNIX_SCIP_DIR)/lib/liblpispx.$(SCIP_ARCH).a -force_load $(UNIX_SCIP_DIR)/lib/libsoplex.$(SCIP_ARCH).a
else
STATIC_SCIP_LNK = -force_load $(UNIX_SCIP_DIR)/lib/libscip.$(SCIP_ARCH).a $(UNIX_SCIP_DIR)/lib/libnlpi.$(SCIP_ARCH).a -force_load $(UNIX_SCIP_DIR)/lib/liblpispx.$(SCIP_ARCH).a -force_load $(UNIX_SCIP_DIR)/lib/libsoplex.$(SCIP_ARCH).a
endif
SCIP_LNK = -lreadline
endif
ifdef UNIX_GUROBI_DIR
DYNAMIC_GUROBI_LNK = -L$(UNIX_GUROBI_DIR)/mac64/lib/ -m64 -lc -ldl -lm -lpthread -lgurobi$(GUROBI_LIB_VERSION)
STATIC_GUROBI_LNK = -L$(UNIX_GUROBI_DIR)/mac64/bin/ -m64 -lc -ldl -lm -lpthread -lgurobi$(GUROBI_LIB_VERSION)
endif
ifdef UNIX_CPLEX_DIR
STATIC_CPLEX_LNK = -force_load $(UNIX_CPLEX_DIR)/cplex/lib/x86-64_osx/static_pic/libcplex.a -m64 -lm -lpthread -framework CoreFoundation -framework IOKit
DYNAMIC_CPLEX_LNK = $(STATIC_CPLEX_LNK)
endif
BISON = dependencies/install/bin/bison
FLEX = dependencies/install/bin/flex
endif # MAC OS X
CFLAGS = $(DEBUG) -I$(INC_DIR) -I$(EX_DIR) -I$(GEN_DIR) $(GFLAGS_INC) $(ARCH) \
-Wno-deprecated $(PROTOBUF_INC) $(CBC_INC) $(CLP_INC) $(GLPK_INC) \
$(SCIP_INC) $(SLM_INC) $(GUROBI_INC) $(CPLEX_INC) -DUSE_GLOP $(SPARSEHASH_INC)
JNIFLAGS = $(JNIDEBUG) -I$(INC_DIR) -I$(EX_DIR) -I$(GEN_DIR) $(GFLAGS_INC) $(ARCH) \
-Wno-deprecated $(PROTOBUF_INC) $(CBC_INC) $(CLP_INC) $(GLPK_INC) $(SCIP_INC) $(SLM_INC) $(GUROBI_INC) $(CPLEX_INC) -DUSE_GLOP
DYNAMIC_LD_FLAGS = $(DYNAMIC_GFLAGS_LNK) $(ZLIB_LNK) $(DYNAMIC_PROTOBUF_LNK) $(SYS_LNK)
DYNAMIC_LD_LP_DEPS = $(DYNAMIC_GLPK_LNK) $(DYNAMIC_CBC_LNK) $(DYNAMIC_CLP_LNK) $(DYNAMIC_SLM_LNK) $(DYNAMIC_GUROBI_LNK) $(DYNAMIC_CPLEX_LNK)
STATIC_LD_FLAGS = $(STATIC_GFLAGS_LNK) $(ZLIB_LNK) $(STATIC_PROTOBUF_LNK) $(SYS_LNK)
STATIC_LD_LP_DEPS = $(STATIC_GLPK_LNK) $(STATIC_CBC_LNK) $(STATIC_CLP_LNK) $(STATIC_SCIP_LNK) $(STATIC_SLM_LNK) $(STATIC_GUROBI_LNK) $(STATIC_CPLEX_LNK)