258 lines
7.9 KiB
Makefile
258 lines
7.9 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
|
|
LIB_PREFIX = lib
|
|
DEP_BIN_DIR = $(OR_ROOT)dependencies/install/bin
|
|
# C++ relevant directory
|
|
INC_DIR = $(OR_ROOT).
|
|
SRC_DIR = $(OR_ROOT).
|
|
GEN_DIR = $(OR_ROOT)ortools/gen
|
|
GEN_PATH = $(subst /,$S,$(GEN_DIR))
|
|
OBJ_DIR = $(OR_ROOT)objs
|
|
LIB_DIR = $(OR_ROOT)lib
|
|
BIN_DIR = $(OR_ROOT)bin
|
|
TEST_DIR = $(OR_ROOT)examples/tests
|
|
TEST_PATH = $(subst /,$S,$(TEST_DIR))
|
|
CC_EX_DIR = $(OR_ROOT)examples/cpp
|
|
CC_EX_PATH = $(subst /,$S,$(CC_EX_DIR))
|
|
FZ_EX_DIR = $(OR_ROOT)examples/flatzinc
|
|
FZ_EX_PATH = $(subst /,$S,$(FZ_EX_DIR))
|
|
# Python relevant directory
|
|
PYTHON_EX_DIR = $(OR_ROOT)examples/python
|
|
PYTHON_EX_PATH = $(subst /,$S,$(PYTHON_EX_DIR))
|
|
# Java relevant directory
|
|
CLASS_DIR = $(OR_ROOT)classes
|
|
JAVA_EX_DIR = $(OR_ROOT)examples/java
|
|
JAVA_EX_PATH = $(subst /,$S,$(JAVA_EX_DIR))
|
|
# .Net relevant directory
|
|
PACKAGE_DIR = $(OR_ROOT)packages
|
|
DOTNET_EX_DIR = $(OR_ROOT)examples/dotnet
|
|
DOTNET_EX_PATH = $(subst /,$S,$(DOTNET_EX_DIR))
|
|
|
|
O = o
|
|
ifeq ($(PLATFORM),LINUX)
|
|
L = so
|
|
else # MACOS
|
|
L = dylib
|
|
endif
|
|
E =
|
|
J = .jar
|
|
D = .dll
|
|
PDB = .pdb
|
|
EXP = .exp
|
|
ARCHIVE_EXT = .tar.gz
|
|
FZ_EXE = fzn-or-tools$E
|
|
LD_OUT = -o # need the space.
|
|
OBJ_OUT = -o # need the space
|
|
EXE_OUT = -o # need the space
|
|
S = /
|
|
CMDSEP = ;
|
|
CPSEP = :
|
|
|
|
COPY = cp
|
|
COPYREC = cp -R
|
|
DEL = rm -f
|
|
DELREC = rm -rf
|
|
GREP = grep
|
|
MKDIR = mkdir
|
|
MKDIR_P = mkdir -p
|
|
RENAME = mv
|
|
SED = sed
|
|
TAR = tar
|
|
TOUCH = touch
|
|
WHICH = which
|
|
|
|
CMAKE := $(shell $(WHICH) cmake)
|
|
ifeq ($(CMAKE),)
|
|
$(error Please add "cmake" to your PATH)
|
|
endif
|
|
|
|
# This is needed to find python.h
|
|
PYTHON_VERSION = $(UNIX_PYTHON_VER)
|
|
MAJOR_PYTHON_VERSION = $(shell python$(UNIX_PYTHON_VER) -c "from sys import version_info as v; print (str(v[0]))")
|
|
MINOR_PYTHON_VERSION = $(shell python$(UNIX_PYTHON_VER) -c "from sys import version_info as v; print (str(v[1]))")
|
|
|
|
PATH_TO_PYTHON_LIB = $(shell python$(UNIX_PYTHON_VER) -c 'import sysconfig; print (sysconfig.get_paths()["stdlib"])')
|
|
PATH_TO_PYTHON_INCLUDE = $(shell python$(UNIX_PYTHON_VER) -c 'import sysconfig; print (sysconfig.get_paths()["platinclude"])')
|
|
PYTHON_INC = -I$(PATH_TO_PYTHON_INCLUDE) -I$(PATH_TO_PYTHON_LIB) $(ADD_PYTHON_INC)
|
|
|
|
PYTHON_INC += $(shell pkg-config --cflags python$(MAJOR_PYTHON_VERSION) 2> /dev/null)
|
|
#PYTHON_LNK += $(shell pkg-config --libs python$(MAJOR_PYTHON_VERSION) 2> /dev/null)
|
|
|
|
#ifeq ("${PYTHON_LNK}","")
|
|
#PYTHON_LNK = "-lpython${UNIX_PYTHON_VERSION}"
|
|
#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)/include -DUSE_SCIP
|
|
SCIP_SWIG = $(SCIP_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
|
|
|
|
SWIG_INC = \
|
|
$(GFLAGS_SWIG) $(GLOG_SWIG) $(PROTOBUF_SWIG) $(COIN_SWIG) \
|
|
-DUSE_GLOP -DUSE_BOP -DMUST_USE_RESULT \
|
|
$(GLPK_SWIG) $(SCIP_SWIG) $(GUROBI_SWIG) $(CPLEX_SWIG)
|
|
|
|
# Compilation flags
|
|
DEBUG = -O4 -DNDEBUG
|
|
JNIDEBUG = -O1 -DNDEBUG
|
|
|
|
ifeq ($(PLATFORM),LINUX)
|
|
CCC = g++ -fPIC -std=c++11 -fwrapv
|
|
DYNAMIC_LD = g++ -shared
|
|
DYNAMIC_LDFLAGS = -Wl,-rpath,\"\\\$$\$$ORIGIN\"
|
|
|
|
# This is needed to find libz.a
|
|
ZLIB_LNK = -lz
|
|
ifdef UNIX_GLPK_DIR
|
|
GLPK_LNK = $(UNIX_GLPK_DIR)/lib/libglpk.a
|
|
endif
|
|
ifdef UNIX_SCIP_DIR
|
|
SCIP_ARCH = linux.x86_64.gnu.opt
|
|
SCIP_LNK = \
|
|
$(UNIX_SCIP_DIR)/lib/libscip.a \
|
|
$(UNIX_SCIP_DIR)/lib/libscipopt.a \
|
|
$(UNIX_SCIP_DIR)/lib/libsoplex.a \
|
|
$(UNIX_SCIP_DIR)/lib/libsoplex.$(SCIP_ARCH).a
|
|
endif
|
|
ifdef UNIX_GUROBI_DIR
|
|
ifeq ($(PTRLENGTH),64)
|
|
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
|
|
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
|
|
ifdef UNIX_CPLEX_DIR
|
|
ifeq ($(PTRLENGTH),64)
|
|
CPLEX_LNK = \
|
|
-L$(UNIX_CPLEX_DIR)/cplex/lib/x86-64_linux/static_pic -lcplex \
|
|
-lm -lpthread -ldl
|
|
else
|
|
CPLEX_LNK = \
|
|
-L$(UNIX_CPLEX_DIR)/cplex/lib/x86_linux/static_pic -lcplex \
|
|
-lm -lpthread -ldl
|
|
endif
|
|
endif
|
|
SYS_LNK = -lrt -lpthread
|
|
JAVA_INC = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
|
|
JAVAC_BIN = $(shell $(WHICH) $(JAVA_HOME)/bin/javac)
|
|
JAVA_BIN = $(shell $(WHICH) $(JAVA_HOME)/bin/java)
|
|
JAR_BIN = $(shell $(WHICH) $(JAVA_HOME)/bin/jar)
|
|
JNI_LIB_EXT = so
|
|
|
|
SWIG_PYTHON_LIB_SUFFIX = so
|
|
SWIG_DOTNET_LIB_SUFFIX = so
|
|
LINK_CMD = $(DYNAMIC_LD)
|
|
PRE_LIB = -L$(OR_ROOT_FULL)/lib -l
|
|
POST_LIB =
|
|
LINK_FLAGS = \
|
|
-Wl,-rpath,'$$ORIGIN' \
|
|
-Wl,-rpath,'$$ORIGIN/../lib' \
|
|
-Wl,-rpath,'$$ORIGIN/../dependencies/install/lib64' \
|
|
-Wl,-rpath,'$$ORIGIN/../dependencies/install/lib'
|
|
PYTHON_LDFLAGS = \
|
|
-Wl,-rpath,'$$ORIGIN' \
|
|
-Wl,-rpath,'$$ORIGIN/../../ortools' \
|
|
-Wl,-rpath,'$$ORIGIN/../../ortools/.libs' \
|
|
-Wl,-rpath,'$$ORIGIN/../../../../lib' \
|
|
-Wl,-rpath,'$$ORIGIN/../../../../dependencies/install/lib64' \
|
|
-Wl,-rpath,'$$ORIGIN/../../../../dependencies/install/lib'
|
|
endif # ifeq ($(PLATFORM),LINUX)
|
|
ifeq ($(PLATFORM),MACOSX)
|
|
MAC_VERSION = -mmacosx-version-min=$(MAC_MIN_VERSION)
|
|
CCC = clang++ -fPIC -std=c++11 $(MAC_VERSION) -stdlib=libc++
|
|
DYNAMIC_LD = clang++ -dynamiclib -undefined dynamic_lookup \
|
|
-Wl,-search_paths_first \
|
|
-Wl,-headerpad_max_install_names \
|
|
-current_version $(OR_TOOLS_SHORT_VERSION) \
|
|
-compatibility_version $(OR_TOOLS_SHORT_VERSION)
|
|
DYNAMIC_LDFLAGS = -Wl,-rpath,\"@loader_path\"
|
|
|
|
ZLIB_LNK = -lz
|
|
ifdef UNIX_GLPK_DIR
|
|
GLPK_LNK = $(UNIX_GLPK_DIR)/lib/libglpk.a
|
|
endif
|
|
ifdef UNIX_SCIP_DIR
|
|
SCIP_ARCH = darwin.x86_64.gnu.opt
|
|
SCIP_LNK = \
|
|
-force_load $(UNIX_SCIP_DIR)/lib/libscip.a \
|
|
$(UNIX_SCIP_DIR)/lib/libscipopt.a \
|
|
$(UNIX_SCIP_DIR)/lib/libsoplex.a \
|
|
$(UNIX_SCIP_DIR)/lib/libsoplex.$(SCIP_ARCH).a
|
|
endif
|
|
ifdef UNIX_GUROBI_DIR
|
|
GUROBI_LNK = \
|
|
-L$(UNIX_GUROBI_DIR)/mac64/bin/ -lc -ldl -lm -lpthread \
|
|
-lgurobi$(GUROBI_LIB_VERSION)
|
|
endif
|
|
ifdef UNIX_CPLEX_DIR
|
|
CPLEX_LNK = \
|
|
-force_load $(UNIX_CPLEX_DIR)/cplex/lib/x86-64_osx/static_pic/libcplex.a \
|
|
-lm -lpthread -framework CoreFoundation -framework IOKit
|
|
endif
|
|
SYS_LNK =
|
|
SET_COMPILER = CXX="$(CCC)"
|
|
JAVA_INC = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin
|
|
JAVAC_BIN = $(shell $(WHICH) $(JAVA_HOME)/bin/javac)
|
|
JAVA_BIN = $(shell $(WHICH) $(JAVA_HOME)/bin/java)
|
|
JAR_BIN = $(shell $(WHICH) $(JAVA_HOME)/bin/jar)
|
|
JNI_LIB_EXT = jnilib
|
|
|
|
SWIG_PYTHON_LIB_SUFFIX = so# To overcome a bug in Mac OS X loader.
|
|
SWIG_DOTNET_LIB_SUFFIX = dylib
|
|
LINK_CMD = clang++ -dynamiclib \
|
|
-Wl,-search_paths_first \
|
|
-Wl,-headerpad_max_install_names \
|
|
-current_version $(OR_TOOLS_SHORT_VERSION) \
|
|
-compatibility_version $(OR_TOOLS_SHORT_VERSION)
|
|
PRE_LIB = -L$(OR_ROOT)lib -l
|
|
POST_LIB =
|
|
LINK_FLAGS = \
|
|
-Wl,-rpath,@loader_path \
|
|
-Wl,-rpath,@loader_path/../lib \
|
|
-Wl,-rpath,@loader_path/../dependencies/install/lib
|
|
LDFLAGS = -install_name @rpath/$(LIB_PREFIX)ortools.$L #
|
|
PYTHON_LDFLAGS = \
|
|
-Wl,-rpath,@loader_path \
|
|
-Wl,-rpath,@loader_path/../../ortools \
|
|
-Wl,-rpath,@loader_path/../../ortools/.libs \
|
|
-Wl,-rpath,@loader_path/../../../../lib \
|
|
-Wl,-rpath,@loader_path/../../../../dependencies/install/lib
|
|
endif # ifeq ($(PLATFORM),MACOSX)
|
|
|
|
DEPENDENCIES_INC = -I$(INC_DIR) -I$(GEN_DIR) \
|
|
$(GFLAGS_INC) $(GLOG_INC) $(PROTOBUF_INC) \
|
|
$(COIN_INC) \
|
|
-Wno-deprecated -DUSE_GLOP -DUSE_BOP \
|
|
$(GLPK_INC) $(SCIP_INC) $(GUROBI_INC) $(CPLEX_INC)
|
|
|
|
CFLAGS = $(DEBUG) $(DEPENDENCIES_INC)
|
|
JNIFLAGS = $(JNIDEBUG) $(DEPENDENCIES_INC)
|
|
LDFLAGS += $(ZLIB_LNK) $(SYS_LNK) $(LINK_FLAGS)
|
|
DEPENDENCIES_LNK = $(GLPK_LNK) $(SCIP_LNK) $(GUROBI_LNK) $(CPLEX_LNK)
|
|
|
|
OR_TOOLS_LNK =
|
|
OR_TOOLS_LDFLAGS = $(ZLIB_LNK) $(SYS_LNK) $(LINK_FLAGS)
|