Files
ortools-clone/makefiles/Makefile.cpp.mk

738 lines
26 KiB
Makefile
Raw Normal View History

2018-02-28 10:02:06 +01:00
# ---------- C++ support ----------
2018-03-02 13:41:00 +01:00
.PHONY: help_cc # Generate list of C++ targets with descriptions.
2018-02-28 10:02:06 +01:00
help_cc:
2018-03-02 13:41:00 +01:00
@echo Use one of the following C++ targets:
2018-02-28 10:02:06 +01:00
ifeq ($(SYSTEM),win)
2018-07-05 16:08:54 +02:00
@$(GREP) "^.PHONY: .* #" $(CURDIR)/makefiles/Makefile.cpp.mk | $(SED) "s/\.PHONY: \(.*\) # \(.*\)/\1\t\2/"
2018-03-06 15:03:19 +01:00
@echo off & echo(
2018-02-28 10:02:06 +01:00
else
2018-07-05 16:08:54 +02:00
@$(GREP) "^.PHONY: .* #" $(CURDIR)/makefiles/Makefile.cpp.mk | $(SED) "s/\.PHONY: \(.*\) # \(.*\)/\1\t\2/" | expand -t20
@echo
2018-02-28 10:02:06 +01:00
endif
2018-04-25 16:52:01 +02:00
# Checks if the user has overwritten default install prefix.
# cf https://www.gnu.org/prep/standards/html_node/Directory-Variables.html#index-prefix
ifeq ($(SYSTEM),win)
prefix ?= C:\\Program Files\\or-tools
2018-04-25 16:52:01 +02:00
else
prefix ?= /usr/local
endif
# All libraries and dependecies
OR_TOOLS_LIBS = $(LIB_DIR)/$(LIB_PREFIX)ortools.$L
OR_TOOLS_LNK += $(PRE_LIB)ortools$(POST_LIB)
2018-08-31 18:14:17 +02:00
HAS_CCC = true
ifndef CCC
HAS_CCC =
endif
# Main target
2018-09-27 10:38:29 +02:00
.PHONY: cc # Build C++ OR-Tools library.
2018-10-12 11:48:03 +02:00
.PHONY: check_cc # Quick check only running few C++ OR-Tools examples.
2018-09-27 10:38:29 +02:00
.PHONY: test_cc # Run all C++ OR-Tools examples.
.PHONY: test_fz # Run all Flatzinc OR-Tools examples.
2018-08-31 18:14:17 +02:00
ifndef HAS_CCC
cc:
@echo CCC = $(CCC)
2018-09-27 10:38:29 +02:00
$(warning Cannot find '$@' command which is needed for build. Please make sure it is installed and in system PATH.)
check_cc: cc
2018-10-12 11:48:03 +02:00
test_cc: cc
2018-08-31 18:14:17 +02:00
test_fz: cc
else
cc: $(OR_TOOLS_LIBS)
2018-09-27 10:38:29 +02:00
check_cc: check_cc_examples
2018-08-31 18:14:17 +02:00
test_cc: \
2018-09-18 10:10:25 +02:00
test_cc_tests \
2018-08-31 18:14:17 +02:00
test_cc_samples \
test_cc_examples
test_fz: \
test_fz_examples
2017-01-10 21:05:56 +01:00
BUILT_LANGUAGES += C++
2018-08-31 18:14:17 +02:00
endif
$(GEN_DIR):
-$(MKDIR_P) $(GEN_PATH)
$(GEN_DIR)/ortools: | $(GEN_DIR)
-$(MKDIR_P) $(GEN_PATH)$Sortools
$(GEN_DIR)/ortools/algorithms: | $(GEN_DIR)/ortools
-$(MKDIR) $(GEN_PATH)$Sortools$Salgorithms
$(GEN_DIR)/ortools/bop: | $(GEN_DIR)/ortools
-$(MKDIR) $(GEN_PATH)$Sortools$Sbop
$(GEN_DIR)/ortools/constraint_solver: | $(GEN_DIR)/ortools
-$(MKDIR) $(GEN_PATH)$Sortools$Sconstraint_solver
$(GEN_DIR)/ortools/data: | $(GEN_DIR)/ortools
-$(MKDIR) $(GEN_PATH)$Sortools$Sdata
$(GEN_DIR)/ortools/flatzinc: | $(GEN_DIR)/ortools
-$(MKDIR) $(GEN_PATH)$Sortools$Sflatzinc
$(GEN_DIR)/ortools/glop: | $(GEN_DIR)/ortools
-$(MKDIR) $(GEN_PATH)$Sortools$Sglop
$(GEN_DIR)/ortools/graph: | $(GEN_DIR)/ortools
-$(MKDIR) $(GEN_PATH)$Sortools$Sgraph
$(GEN_DIR)/ortools/linear_solver: | $(GEN_DIR)/ortools
-$(MKDIR) $(GEN_PATH)$Sortools$Slinear_solver
$(GEN_DIR)/ortools/sat: | $(GEN_DIR)/ortools
-$(MKDIR) $(GEN_PATH)$Sortools$Ssat
$(GEN_DIR)/ortools/util: | $(GEN_DIR)/ortools
-$(MKDIR) $(GEN_PATH)$Sortools$Sutil
$(BIN_DIR):
-$(MKDIR) $(BIN_DIR)
$(LIB_DIR):
-$(MKDIR) $(LIB_DIR)
$(OBJ_DIR):
-$(MKDIR) $(OBJ_DIR)
$(OBJ_DIR)/algorithms: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Salgorithms
$(OBJ_DIR)/base: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Sbase
$(OBJ_DIR)/bop: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Sbop
$(OBJ_DIR)/constraint_solver: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Sconstraint_solver
$(OBJ_DIR)/data: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Sdata
$(OBJ_DIR)/flatzinc: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Sflatzinc
$(OBJ_DIR)/glop: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Sglop
$(OBJ_DIR)/graph: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Sgraph
$(OBJ_DIR)/linear_solver: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Slinear_solver
$(OBJ_DIR)/lp_data: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Slp_data
$(OBJ_DIR)/port: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Sport
$(OBJ_DIR)/sat: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Ssat
$(OBJ_DIR)/util: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Sutil
$(OBJ_DIR)/swig: | $(OBJ_DIR)
-$(MKDIR_P) $(OBJ_DIR)$Sswig
2018-08-31 18:14:17 +02:00
###############
## CPP LIB ##
###############
include $(OR_ROOT)makefiles/Makefile.gen.mk
# OR Tools unique library.
$(OR_TOOLS_LIBS): \
dependencies/check.log \
2018-08-31 18:14:17 +02:00
$(BASE_LIB_OBJS) \
$(PORT_LIB_OBJS) \
$(UTIL_LIB_OBJS) \
$(DATA_LIB_OBJS) \
$(LP_DATA_LIB_OBJS) \
$(GLOP_LIB_OBJS) \
$(BOP_LIB_OBJS) \
$(LP_LIB_OBJS) \
2018-08-31 18:14:17 +02:00
$(GRAPH_LIB_OBJS) \
$(ALGORITHMS_LIB_OBJS) \
$(SAT_LIB_OBJS) \
$(CP_LIB_OBJS) | $(LIB_DIR)
$(LINK_CMD) \
$(LD_OUT)$(LIB_DIR)$S$(LIB_PREFIX)ortools.$L \
$(BASE_LIB_OBJS) \
$(PORT_LIB_OBJS) \
$(UTIL_LIB_OBJS) \
$(DATA_LIB_OBJS) \
$(LP_DATA_LIB_OBJS) \
$(GLOP_LIB_OBJS) \
$(GRAPH_LIB_OBJS) \
$(ALGORITHMS_LIB_OBJS) \
$(SAT_LIB_OBJS) \
$(BOP_LIB_OBJS) \
$(LP_LIB_OBJS) \
$(CP_LIB_OBJS) \
$(DEPENDENCIES_LNK) \
$(LDFLAGS)
ifdef WINDOWS_SCIP_DIR
$(COPY) $(WINDOWS_SCIP_DIR)$Sbin$Sscip.dll $(BIN_DIR)
endif
#####################
## Flatzinc code ##
#####################
FLATZINC_LIBS = $(LIB_DIR)/$(LIB_PREFIX)fz.$L
FLATZINC_PATH = $(subst /,$S,$(FLATZINC_LIBS))
FLATZINC_DEPS = \
$(SRC_DIR)/ortools/flatzinc/checker.h \
$(SRC_DIR)/ortools/flatzinc/constraints.h \
$(SRC_DIR)/ortools/flatzinc/cp_model_fz_solver.h \
$(SRC_DIR)/ortools/flatzinc/flatzinc_constraints.h \
$(SRC_DIR)/ortools/flatzinc/logging.h \
$(SRC_DIR)/ortools/flatzinc/model.h \
$(SRC_DIR)/ortools/flatzinc/parser.h \
$(SRC_DIR)/ortools/flatzinc/parser.tab.hh \
$(SRC_DIR)/ortools/flatzinc/presolve.h \
$(SRC_DIR)/ortools/flatzinc/reporting.h \
$(SRC_DIR)/ortools/flatzinc/sat_constraint.h \
$(SRC_DIR)/ortools/flatzinc/solver_data.h \
$(SRC_DIR)/ortools/flatzinc/solver.h \
$(SRC_DIR)/ortools/flatzinc/solver_util.h \
$(CP_DEPS) \
$(SAT_DEPS)
FLATZINC_LNK = $(PRE_LIB)fz$(POST_LIB) $(OR_TOOLS_LNK)
ifeq ($(PLATFORM),MACOSX)
FLATZINK_LDFLAGS = -install_name @rpath/$(LIB_PREFIX)fz.$L #
endif
FLATZINC_OBJS=\
$(OBJ_DIR)/flatzinc/checker.$O \
2016-09-21 11:54:53 +02:00
$(OBJ_DIR)/flatzinc/constraints.$O \
2017-05-29 14:49:34 +02:00
$(OBJ_DIR)/flatzinc/cp_model_fz_solver.$O \
2016-09-21 11:54:53 +02:00
$(OBJ_DIR)/flatzinc/flatzinc_constraints.$O \
$(OBJ_DIR)/flatzinc/logging.$O \
$(OBJ_DIR)/flatzinc/model.$O \
$(OBJ_DIR)/flatzinc/parser.$O \
$(OBJ_DIR)/flatzinc/parser.tab.$O \
$(OBJ_DIR)/flatzinc/parser.yy.$O \
$(OBJ_DIR)/flatzinc/presolve.$O \
$(OBJ_DIR)/flatzinc/reporting.$O \
$(OBJ_DIR)/flatzinc/sat_constraint.$O \
$(OBJ_DIR)/flatzinc/solver.$O \
$(OBJ_DIR)/flatzinc/solver_data.$O \
$(OBJ_DIR)/flatzinc/solver_util.$O
FLATZINC_CC_TESTS = \
boolean_test
2017-09-08 13:20:30 +02:00
fz_parser: #$(SRC_DIR)/ortools/flatzinc/parser.lex $(SRC_DIR)/ortools/flatzinc/parser.yy
flex -o $(SRC_DIR)/ortools/flatzinc/parser.yy.cc $(SRC_DIR)/ortools/flatzinc/parser.lex
2017-09-08 13:20:30 +02:00
bison -t -o $(SRC_DIR)/ortools/flatzinc/parser.tab.cc -d $(SRC_DIR)/ortools/flatzinc/parser.yy
$(OBJ_DIR)/flatzinc/%.$O: $(SRC_DIR)/ortools/flatzinc/%.cc $(FLATZINC_DEPS) | $(OBJ_DIR)/flatzinc
$(CCC) $(CFLAGS) -c $(SRC_DIR)$Sortools$Sflatzinc$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$Sflatzinc$S$*.$O
2016-09-21 11:54:53 +02:00
$(FLATZINC_LIBS): $(OR_TOOLS_LIBS) $(FLATZINC_OBJS) | $(LIB_DIR)
$(LINK_CMD) \
$(FLATZINK_LDFLAGS) \
$(LD_OUT)$(LIB_DIR)$S$(LIB_PREFIX)fz.$L \
$(FLATZINC_OBJS) \
$(OR_TOOLS_LNK) \
$(OR_TOOLS_LDFLAGS)
2018-09-18 10:10:25 +02:00
$(OBJ_DIR)/boolean_test.$O: $(TEST_DIR)/boolean_test.cc $(FLATZINC_DEPS) | $(OBJ_DIR)
$(CCC) $(CFLAGS) -c $(TEST_PATH)$Sboolean_test.cc $(OBJ_OUT)$(OBJ_DIR)$Sboolean_test.$O
$(BIN_DIR)/boolean_test$E: $(OBJ_DIR)/boolean_test.$O $(FLATZINC_LIBS) | $(BIN_DIR)
$(CCC) $(CFLAGS) $(OBJ_DIR)$Sboolean_test.$O $(FLATZINC_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$Sboolean_test$E
2014-04-22 14:46:38 +00:00
.PHONY: fz # Build Flatzinc binaries.
fz: \
$(BIN_DIR)/fz$E \
$(BIN_DIR)/parser_main$E \
$(addsuffix $E, $(addprefix $(BIN_DIR)/, $(FLATZINC_CC_TESTS)))
$(BIN_DIR)/fz$E: $(OBJ_DIR)/flatzinc/fz.$O $(FLATZINC_LIBS) $(OR_TOOLS_LIBS) | $(BIN_DIR)
$(CCC) $(CFLAGS) $(OBJ_DIR)$Sflatzinc$Sfz.$O $(FLATZINC_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$Sfz$E
$(BIN_DIR)/parser_main$E: $(OBJ_DIR)/flatzinc/parser_main.$O $(FLATZINC_LIBS) $(OR_TOOLS_LIBS) | $(BIN_DIR)
$(CCC) $(CFLAGS) $(OBJ_DIR)$Sflatzinc$Sparser_main.$O $(FLATZINC_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$Sparser_main$E
2014-04-22 14:46:38 +00:00
##################
## Sat solver ##
##################
sat: $(BIN_DIR)/sat_runner$E
$(OBJ_DIR)/sat_runner.$O: \
2018-09-18 10:10:25 +02:00
$(CC_EX_DIR)/sat_runner.cc \
$(CC_EX_DIR)/opb_reader.h \
$(CC_EX_DIR)/sat_cnf_reader.h \
$(SAT_DEPS) | $(OBJ_DIR)
2018-09-18 10:10:25 +02:00
$(CCC) $(CFLAGS) -c $(CC_EX_PATH)$Ssat_runner.cc $(OBJ_OUT)$(OBJ_DIR)$Ssat_runner.$O
2016-06-27 15:30:24 +02:00
##################
## C++ SOURCE ##
##################
ifeq ($(SOURCE_SUFFIX),.cc) # Those rules will be used if SOURCE contain a .cc file
$(OBJ_DIR)/$(SOURCE_NAME).$O: $(SOURCE) $(OR_TOOLS_LIBS) | $(OBJ_DIR)
$(CCC) $(CFLAGS) \
-c $(SOURCE_PATH) \
$(OBJ_OUT)$(OBJ_DIR)$S$(SOURCE_NAME).$O
$(BIN_DIR)/$(SOURCE_NAME)$E: $(OBJ_DIR)/$(SOURCE_NAME).$O $(OR_TOOLS_LIBS) | $(BIN_DIR)
$(CCC) $(CFLAGS) \
$(OBJ_DIR)$S$(SOURCE_NAME).$O \
$(OR_TOOLS_LNK) $(OR_TOOLS_LDFLAGS) \
$(EXE_OUT)$(BIN_DIR)$S$(SOURCE_NAME)$E
.PHONY: build # Build a C++ program.
build: $(BIN_DIR)/$(SOURCE_NAME)$E
.PHONY: run # Run a C++ program.
run: build
$(BIN_DIR)$S$(SOURCE_NAME)$E $(ARGS)
endif
2018-10-12 11:48:03 +02:00
##################################
## CPP Tests/Examples/Samples ##
##################################
# Specific libraries for examples
# CVRP(TW) common library
CVRPTW_LIBS = $(LIB_DIR)/$(LIB_PREFIX)cvrptw_lib.$L
CVRPTW_PATH = $(subst /,$S,$(CVRPTW_LIBS))
CVRPTW_DEPS = \
$(CC_EX_DIR)/cvrptw_lib.h \
$(CP_DEPS)
CVRPTW_LNK = $(PRE_LIB)cvrptw_lib$(POST_LIB) $(OR_TOOLS_LNK)
ifeq ($(PLATFORM),MACOSX)
CVRPTW_LDFLAGS = -install_name @rpath/$(LIB_PREFIX)cvrptw_lib.$L #
endif
cvrptwlibs: $(CVRPTW_LIBS)
CVRPTW_OBJS = $(OBJ_DIR)/cvrptw_lib.$O
$(CVRPTW_OBJS): \
$(CC_EX_DIR)/cvrptw_lib.cc \
$(CC_EX_DIR)/cvrptw_lib.h \
$(CP_DEPS) \
| $(OBJ_DIR)
$(CCC) $(CFLAGS) -c $(CC_EX_PATH)$Scvrptw_lib.cc $(OBJ_OUT)$(OBJ_DIR)$Scvrptw_lib.$O
2018-10-29 17:46:20 +01:00
$(CVRPTW_LIBS): $(CVRPTW_OBJS) $(OR_TOOLS_LIBS) | $(LIB_DIR)
$(LINK_CMD) \
$(CVRPTW_LDFLAGS) \
$(LD_OUT)$(LIB_DIR)$S$(LIB_PREFIX)cvrptw_lib.$L \
$(CVRPTW_OBJS) \
$(OR_TOOLS_LNK) \
$(OR_TOOLS_LDFLAGS)
# CVRP(TW) examples
$(OBJ_DIR)/cvrp%.$O: $(CC_EX_DIR)/cvrp%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
$(CCC) $(CFLAGS) -c $(CC_EX_PATH)$Scvrp$*.cc $(OBJ_OUT)$(OBJ_DIR)$Scvrp$*.$O
$(BIN_DIR)/cvrp%$E: $(OBJ_DIR)/cvrp%.$O $(CVRPTW_LIBS) | $(BIN_DIR)
$(CCC) $(CFLAGS) $(OBJ_DIR)$Scvrp$*.$O $(CVRPTW_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$Scvrp$*$E
# DIMACS Assignment challenge problem format library
DIMACS_LIBS = $(LIB_DIR)/$(LIB_PREFIX)dimacs.$L
DIMACS_PATH = $(subst /,$S,$(DIMACS_LIBS))
DIMACS_DEPS = \
$(CC_EX_DIR)/parse_dimacs_assignment.h \
$(CC_EX_DIR)/print_dimacs_assignment.h \
$(GRAPH_DEPS)
DIMACS_LNK = $(PRE_LIB)dimacs$(POST_LIB) $(OR_TOOLS_LNK)
ifeq ($(PLATFORM),MACOSX)
DIMACS_LDFLAGS = -install_name @rpath/$(LIB_PREFIX)dimacs.$L #
endif
dimacslibs: $(DIMACS_LIBS)
DIMACS_OBJS = $(OBJ_DIR)/parse_dimacs_assignment.$O $(OBJ_DIR)/print_dimacs_assignment.$O
$(DIMACS_LIBS): $(OR_TOOLS_LIBS) $(DIMACS_OBJS) | $(LIB_DIR)
$(LINK_CMD) \
$(DIMACS_LDFLAGS) \
$(LD_OUT)$(LIB_DIR)$S$(LIB_PREFIX)dimacs.$L \
$(DIMACS_OBJS) \
$(OR_TOOLS_LNK) \
$(OR_TOOLS_LDFLAGS)
# DIMACS examples
2018-10-29 17:46:20 +01:00
$(OBJ_DIR)/dimacs_assignment.$O: $(CC_EX_DIR)/dimacs_assignment.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
$(CCC) $(CFLAGS) -c $(CC_EX_PATH)$Sdimacs_assignment.cc $(OBJ_OUT)$(OBJ_DIR)$Sdimacs_assignment.$O
2018-10-29 17:46:20 +01:00
$(BIN_DIR)/dimacs_assignment$E: $(OBJ_DIR)/dimacs_assignment.$O $(DIMACS_LIBS) | $(BIN_DIR)
$(CCC) $(CFLAGS) $(OBJ_DIR)$Sdimacs_assignment.$O $(DIMACS_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$Sdimacs_assignment$E
# Frequency Assignment Problem (FAP) challenge problem format library
FAP_LIBS = $(LIB_DIR)/$(LIB_PREFIX)fap.$L
FAP_PATH = $(subst /,$S,$(FAP_LIBS))
FAP_DEPS = \
$(CC_EX_DIR)/fap_model_printer.h \
$(CC_EX_DIR)/fap_parser.h \
$(CC_EX_DIR)/fap_utilities.h \
$(CP_DEPS) \
$(LP_DEPS)
FAP_LNK = $(PRE_LIB)fap$(POST_LIB) $(OR_TOOLS_LNK)
ifeq ($(PLATFORM),MACOSX)
FAP_LDFLAGS = -install_name @rpath/$(LIB_PREFIX)fap.$L #
endif
faplibs: $(FAP_LIBS)
FAP_OBJS = \
$(OBJ_DIR)/fap_model_printer.$O \
$(OBJ_DIR)/fap_parser.$O \
$(OBJ_DIR)/fap_utilities.$O
$(FAP_LIBS): $(OR_TOOLS_LIBS) $(FAP_OBJS) | $(LIB_DIR)
$(LINK_CMD) \
$(FAP_LDFLAGS) \
$(LD_OUT)$(LIB_DIR)$S$(LIB_PREFIX)fap.$L \
$(FAP_OBJS) \
$(OR_TOOLS_LNK) \
$(OR_TOOLS_LDFLAGS)
# FAP examples
2018-10-29 17:46:20 +01:00
$(OBJ_DIR)/frequency_assignment_problem.$O: $(CC_EX_DIR)/frequency_assignment_problem.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
$(CCC) $(CFLAGS) -c $(CC_EX_PATH)$Sfrequency_assignment_problem.cc $(OBJ_OUT)$(OBJ_DIR)$Sfrequency_assignment_problem.$O
2018-10-29 17:46:20 +01:00
$(BIN_DIR)/frequency_assignment_problem$E: $(OBJ_DIR)/frequency_assignment_problem.$O $(FAP_LIBS) | $(BIN_DIR)
$(CCC) $(CFLAGS) $(OBJ_DIR)/frequency_assignment_problem.$O $(FAP_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$Sfrequency_assignment_problem$E
2018-10-29 17:46:20 +01:00
# Generic Command
$(OBJ_DIR)/%.$O: $(TEST_DIR)/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
$(CCC) $(CFLAGS) -c $(TEST_PATH)$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O
$(OBJ_DIR)/%.$O: $(CC_EX_DIR)/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
$(CCC) $(CFLAGS) -c $(CC_EX_PATH)$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O
2018-11-07 21:31:58 +01:00
$(OBJ_DIR)/%.$O: $(CONTRIB_EX_DIR)/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
$(CCC) $(CFLAGS) -c $(CONTRIB_EX_PATH)$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O
2018-10-29 17:46:20 +01:00
$(OBJ_DIR)/%.$O: ortools/sat/samples/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR)
$(CCC) $(CFLAGS) -c ortools$Ssat$Ssamples$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O
$(BIN_DIR)/%$E: $(OBJ_DIR)/%.$O $(OR_TOOLS_LIBS) | $(BIN_DIR)
$(CCC) $(CFLAGS) $(OBJ_DIR)$S$*.$O $(OR_TOOLS_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$S$*$E
rcc_%: $(BIN_DIR)/%$E FORCE
2018-08-31 18:14:17 +02:00
$(BIN_DIR)$S$*$E $(ARGS)
.PHONY: test_cc_tests # Build and Run all C++ tests (located in examples/tests)
test_cc_tests: \
rcc_ac4r_table_test \
rcc_boolean_test \
rcc_bug_fz1 \
rcc_cpp11_test \
rcc_forbidden_intervals_test \
rcc_gcc_test \
rcc_issue57 \
rcc_min_max_test \
rcc_visitor_test
# $(MAKE) rcc_issue173 # error: too long
.PHONY: check_cc_examples # Build and Run few C++ Examples (located in examples/cpp)
check_cc_examples: \
rcc_simple_program \
rcc_linear_programming \
rcc_stigler_diet \
rcc_constraint_programming_cp \
rcc_rabbits_pheasants_cp \
rcc_integer_programming \
rcc_tsp \
rcc_vrp \
rcc_knapsack \
rcc_max_flow \
rcc_min_cost_flow \
rcc_nurses_cp \
rcc_job_shop_cp ;
.PHONY: test_cc_examples # Build and Run all C++ Examples (located in examples/cpp)
test_cc_examples: check_cc_examples \
rcc_costas_array \
rcc_cryptarithm \
rcc_cvrp_disjoint_tw \
rcc_cvrptw \
rcc_cvrptw_with_breaks \
rcc_cvrptw_with_refueling \
rcc_cvrptw_with_resources \
rcc_cvrptw_with_stop_times_and_resources \
rcc_dobble_ls \
rcc_flow_api \
rcc_linear_assignment_api \
rcc_linear_solver_protocol_buffers \
rcc_ls_api \
rcc_magic_square \
rcc_mps_driver \
rcc_nqueens \
rcc_random_tsp \
rcc_strawberry_fields_with_column_generation \
rcc_weighted_tardiness_sat
$(MAKE) run \
SOURCE=examples/cpp/dimacs_assignment.cc \
ARGS=examples/data/dimacs/assignment/small.asn
$(MAKE) run \
SOURCE=examples/cpp/flexible_jobshop.cc \
ARGS="--data_file examples/data/flexible_jobshop/hurink_data/edata/la01.fjs"
$(MAKE) run \
SOURCE=examples/cpp/golomb.cc \
ARGS="--size=5"
$(MAKE) run \
SOURCE=examples/cpp/jobshop_earlytardy.cc \
ARGS="--machine_count=6 --job_count=6"
$(MAKE) run \
SOURCE=examples/cpp/jobshop.cc \
ARGS="--data_file=examples/data/jobshop/ft06"
$(MAKE) run \
SOURCE=examples/cpp/jobshop_ls.cc \
ARGS="--data_file=examples/data/jobshop/ft06"
$(MAKE) run \
SOURCE=examples/cpp/jobshop_sat.cc \
ARGS="--input=examples/data/jobshop/ft06"
$(MAKE) run \
SOURCE=examples/cpp/multidim_knapsack.cc \
ARGS="--data_file examples/data/multidim_knapsack/PB1.DAT"
$(MAKE) run \
SOURCE=examples/cpp/network_routing.cc \
ARGS="--clients=10 --backbones=5 --demands=10 --traffic_min=5 --traffic_max=10 --min_client_degree=2 --max_client_degree=5 --min_backbone_degree=3 --max_backbone_degree=5 --max_capacity=20 --fixed_charge_cost=10"
$(MAKE) run \
SOURCE=examples/cpp/sports_scheduling.cc \
ARGS="--num_teams=8 --time_limit=10000"
# $(MAKE) run SOURCE=examples/cpp/frequency_assignment_problem.cc # Need data file
# $(MAKE) run SOURCE=examples/cpp/model_util.cc # Need data file
# $(MAKE) run SOURCE=examples/cpp/pdptw.cc ARGS="--pdp_file examples/data/pdptw/LC1_2_1.txt" # Fails on windows...
# $(MAKE) run SOURCE=examples/cpp/shift_minimization_sat.cc # Port to new API.
# $(MAKE) run SOURCE=examples/cpp/solve.cc # Need data file
.PHONY: test_cc_samples # Build and Run all C++ Samples (located in ortools/*/samples)
test_cc_samples: \
rcc_binpacking_problem \
rcc_bool_or_sample \
rcc_channeling_sample \
rcc_code_sample \
rcc_interval_sample \
rcc_literal_sample \
rcc_no_overlap_sample \
rcc_optional_interval_sample \
rcc_rabbits_and_pheasants \
rcc_ranking_sample \
rcc_reified_sample \
rcc_simple_solve \
rcc_solve_all_solutions \
rcc_solve_with_intermediate_solutions \
rcc_solve_with_time_limit \
rcc_stop_after_n_solutions
2018-08-31 18:14:17 +02:00
.PHONY: test_fz_examples # Build and Run few Flatzinc Samples (located in examples/flatzinc)
test_fz_examples: \
rfz_golomb \
rfz_alpha
2018-08-31 18:14:17 +02:00
2018-09-18 10:10:25 +02:00
rfz_%: fz $(FZ_EX_DIR)/%.fzn
$(BIN_DIR)$Sfz$E $(FZ_EX_PATH)$S$*.fzn
2018-08-31 18:14:17 +02:00
################
## Cleaning ##
################
CC_SAMPLES := $(wildcard ortools/sat/samples/*.cc)
CC_SAMPLES := $(notdir $(CC_SAMPLES))
CC_SAMPLES := $(addsuffix $E, $(addprefix $(BIN_DIR)$S, $(basename $(CC_SAMPLES))))
CC_EXAMPLES := $(wildcard $(CC_EX_DIR)/*.cc)
CC_EXAMPLES := $(notdir $(CC_EXAMPLES))
CC_EXAMPLES := $(addsuffix $E, $(addprefix $(BIN_DIR)$S, $(basename $(CC_EXAMPLES))))
CC_TESTS := $(wildcard $(TEST_DIR)/*.cc)
CC_TESTS := $(notdir $(CC_TESTS))
CC_TESTS := $(addsuffix $E, $(addprefix $(BIN_DIR)$S, $(basename $(CC_TESTS))))
2018-08-31 18:14:17 +02:00
.PHONY: clean_cc # Clean C++ output from previous build.
clean_cc:
-$(DEL) $(LIB_DIR)$S$(LIB_PREFIX)cvrptw_lib.$L
-$(DEL) $(LIB_DIR)$S$(LIB_PREFIX)dimacs.$L
-$(DEL) $(LIB_DIR)$S$(LIB_PREFIX)fap.$L
-$(DEL) $(LIB_DIR)$S$(LIB_PREFIX)fz.$L
-$(DEL) $(LIB_DIR)$S$(LIB_PREFIX)ortools.$L
-$(DEL) $(LIB_DIR)$S$(LIB_PREFIX)*.a
-$(DEL) $(OBJ_DIR)$S*.$O
-$(DEL) $(OBJ_DIR)$Salgorithms$S*.$O
-$(DEL) $(OBJ_DIR)$Sbase$S*.$O
-$(DEL) $(OBJ_DIR)$Sbop$S*.$O
-$(DEL) $(OBJ_DIR)$Sconstraint_solver$S*.$O
-$(DEL) $(OBJ_DIR)$Sdata$S*.$O
-$(DEL) $(OBJ_DIR)$Sflatzinc$S*.$O
-$(DEL) $(OBJ_DIR)$Sglop$S*.$O
-$(DEL) $(OBJ_DIR)$Sgraph$S*.$O
-$(DEL) $(OBJ_DIR)$Slinear_solver$S*.$O
-$(DEL) $(OBJ_DIR)$Slp_data$S*.$O
-$(DEL) $(OBJ_DIR)$Sport$S*.$O
-$(DEL) $(OBJ_DIR)$Ssat$S*.$O
-$(DEL) $(OBJ_DIR)$Sutil$S*.$O
-$(DEL) $(BIN_DIR)$Sfz$E
-$(DEL) $(BIN_DIR)$Sparser_main$E
-$(DEL) $(BIN_DIR)$Ssat_runner$E
-$(DEL) $(CC_SAMPLES)
-$(DEL) $(CC_EXAMPLES)
-$(DEL) $(CC_TESTS)
2018-08-31 18:14:17 +02:00
-$(DEL) $(GEN_PATH)$Sortools$Sbop$S*.pb.*
-$(DEL) $(GEN_PATH)$Sortools$Sconstraint_solver$S*.pb.*
-$(DEL) $(GEN_PATH)$Sortools$Sdata$S*.pb.*
-$(DEL) $(GEN_PATH)$Sortools$Sflatzinc$S*.tab.*
-$(DEL) $(GEN_PATH)$Sortools$Sflatzinc$S*.yy.*
-$(DEL) $(GEN_PATH)$Sortools$Sflatzinc$Sparser.*
-$(DEL) $(GEN_PATH)$Sortools$Sglop$S*.pb.*
-$(DEL) $(GEN_PATH)$Sortools$Sgraph$S*.pb.*
-$(DEL) $(GEN_PATH)$Sortools$Slinear_solver$S*.pb.*
-$(DEL) $(GEN_PATH)$Sortools$Ssat$S*.pb.*
-$(DEL) $(GEN_PATH)$Sortools$Sutil$S*.pb.*
-$(DEL) $(BIN_DIR)$S*.exp
-$(DEL) $(BIN_DIR)$S*.lib
-$(DELREC) $(GEN_PATH)$Sflatzinc$S*
-$(DELREC) $(OBJ_DIR)$Sflatzinc$S*
ifdef WINDOWS_SCIP_DIR
-$(DEL) $(BIN_DIR)$Sscip.dll
endif
2018-08-31 18:14:17 +02:00
.PHONY: clean_compat
clean_compat:
-$(DELREC) $(OR_ROOT)constraint_solver
-$(DELREC) $(OR_ROOT)linear_solver
-$(DELREC) $(OR_ROOT)algorithms
-$(DELREC) $(OR_ROOT)graph
-$(DELREC) $(OR_ROOT)gen
2013-09-23 19:54:00 +00:00
2018-04-25 16:52:01 +02:00
###############
## INSTALL ##
###############
# ref: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html#index-prefix
# ref: https://www.gnu.org/prep/standards/html_node/DESTDIR.html
2018-04-25 16:52:01 +02:00
install_dirs:
-$(MKDIR_P) "$(DESTDIR)$(prefix)"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude"
-$(MKDIR) "$(DESTDIR)$(prefix)$Slib"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sbin"
2018-07-13 15:22:41 +02:00
install_ortools_dirs: install_dirs
-$(DELREC) "$(DESTDIR)$(prefix)$Sinclude$Sortools"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Salgorithms"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sbase"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sbop"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sconstraint_solver"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sglop"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sgraph"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Slinear_solver"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Slp_data"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sport"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Ssat"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sutil"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sdata"
.PHONY: install_cc # Install C++ OR-Tools to $(DESTDIR)$(prefix)
install_cc: install_libortools install_third_party install_doc
.PHONY: install_libortools
install_libortools: $(OR_TOOLS_LIBS) install_ortools_dirs
$(COPY) LICENSE-2.0.txt "$(DESTDIR)$(prefix)"
$(COPY) ortools$Salgorithms$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Salgorithms"
$(COPY) ortools$Sbase$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sbase"
$(COPY) ortools$Sconstraint_solver$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sconstraint_solver"
$(COPY) $(GEN_PATH)$Sortools$Sconstraint_solver$S*.pb.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sconstraint_solver"
$(COPY) ortools$Sbop$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sbop"
$(COPY) $(GEN_PATH)$Sortools$Sbop$S*.pb.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sbop"
$(COPY) ortools$Sglop$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sglop"
$(COPY) $(GEN_PATH)$Sortools$Sglop$S*.pb.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sglop"
$(COPY) ortools$Sgraph$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sgraph"
$(COPY) $(GEN_PATH)$Sortools$Sgraph$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sgraph"
$(COPY) ortools$Slinear_solver$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Slinear_solver"
$(COPY) $(GEN_PATH)$Sortools$Slinear_solver$S*.pb.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Slinear_solver"
2018-07-06 19:53:05 +02:00
$(COPY) ortools$Slp_data$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Slp_data"
$(COPY) ortools$Sport$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sport"
$(COPY) ortools$Ssat$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Ssat"
$(COPY) $(GEN_PATH)$Sortools$Ssat$S*.pb.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Ssat"
$(COPY) ortools$Sutil$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sutil"
$(COPY) $(GEN_PATH)$Sortools$Sutil$S*.pb.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sutil"
$(COPY) ortools$Sdata$S*.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sdata"
$(COPY) $(GEN_PATH)$Sortools$Sdata$S*.pb.h "$(DESTDIR)$(prefix)$Sinclude$Sortools$Sdata"
$(COPY) $(LIB_DIR)$S$(LIB_PREFIX)ortools.$L "$(DESTDIR)$(prefix)$Slib"
2018-04-25 16:52:01 +02:00
.PHONY: install_third_party
install_third_party: install_dirs
ifeq ($(UNIX_GFLAGS_DIR),$(OR_TOOLS_TOP)/dependencies/install)
$(COPYREC) dependencies$Sinstall$Sinclude$Sgflags "$(DESTDIR)$(prefix)$Sinclude"
$(COPYREC) dependencies$Sinstall$Slib$Slibgflags* "$(DESTDIR)$(prefix)$Slib"
$(COPYREC) dependencies$Sinstall$Sbin$Sgflags_completions.sh "$(DESTDIR)$(prefix)$Sbin"
endif
ifeq ($(UNIX_GLOG_DIR),$(OR_TOOLS_TOP)/dependencies/install)
$(COPYREC) dependencies$Sinstall$Sinclude$Sglog "$(DESTDIR)$(prefix)$Sinclude"
$(COPYREC) dependencies$Sinstall$Slib$Slibglog* "$(DESTDIR)$(prefix)$Slib"
endif
ifeq ($(UNIX_PROTOBUF_DIR),$(OR_TOOLS_TOP)/dependencies/install)
$(COPYREC) dependencies$Sinstall$Sinclude$Sgoogle "$(DESTDIR)$(prefix)$Sinclude"
$(COPYREC) $(subst /,$S,$(_PROTOBUF_LIB_DIR))$Slibproto* "$(DESTDIR)$(prefix)$Slib"
$(COPYREC) dependencies$Sinstall$Sbin$Sprotoc "$(DESTDIR)$(prefix)$Sbin"
endif
ifeq ($(UNIX_CBC_DIR),$(OR_TOOLS_TOP)/dependencies/install)
$(COPYREC) dependencies$Sinstall$Sinclude$Scoin "$(DESTDIR)$(prefix)$Sinclude"
$(COPYREC) dependencies$Sinstall$Slib$SlibCbc* "$(DESTDIR)$(prefix)$Slib"
$(COPYREC) dependencies$Sinstall$Slib$SlibCgl* "$(DESTDIR)$(prefix)$Slib"
$(COPYREC) dependencies$Sinstall$Slib$SlibClp* "$(DESTDIR)$(prefix)$Slib"
$(COPYREC) dependencies$Sinstall$Slib$SlibOsi* "$(DESTDIR)$(prefix)$Slib"
$(COPYREC) dependencies$Sinstall$Slib$SlibCoinUtils* "$(DESTDIR)$(prefix)$Slib"
$(COPYREC) dependencies$Sinstall$Sbin$Scbc "$(DESTDIR)$(prefix)$Sbin"
$(COPYREC) dependencies$Sinstall$Sbin$Sclp "$(DESTDIR)$(prefix)$Sbin"
endif
ifeq ($(WINDOWS_ZLIB_DIR),$(OR_ROOT)dependencies/install)
$(COPY) dependencies$Sinstall$Sinclude$Szlib.h "$(DESTDIR)$(prefix)$Sinclude"
$(COPY) dependencies$Sinstall$Sinclude$Szconf.h "$(DESTDIR)$(prefix)$Sinclude"
endif
ifeq ($(WINDOWS_GFLAGS_DIR),$(OR_ROOT)dependencies/install)
2018-07-24 10:55:29 +02:00
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sgflags"
$(COPYREC) dependencies$Sinstall$Sinclude$Sgflags "$(DESTDIR)$(prefix)$Sinclude$Sgflags"
endif
ifeq ($(WINDOWS_GLOG_DIR),$(OR_ROOT)dependencies/install)
2018-07-24 10:55:29 +02:00
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sglog"
$(COPYREC) dependencies$Sinstall$Sinclude$Sglog "$(DESTDIR)$(prefix)$Sinclude$Sglog"
endif
ifeq ($(WINDOWS_PROTOBUF_DIR),$(OR_ROOT)dependencies/install)
2018-07-24 10:55:29 +02:00
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Sgoogle"
$(COPYREC) dependencies$Sinstall$Sinclude$Sgoogle "$(DESTDIR)$(prefix)$Sinclude$Sgoogle" /E
endif
ifeq ($(WINDOWS_CBC_DIR),$(OR_ROOT)dependencies/install)
2018-07-24 10:55:29 +02:00
-$(MKDIR) "$(DESTDIR)$(prefix)$Sinclude$Scoin"
$(COPYREC) dependencies$Sinstall$Sinclude$Scoin "$(DESTDIR)$(prefix)$Sinclude$Scoin"
endif
install_doc:
-$(MKDIR_P) "$(DESTDIR)$(prefix)$Sshare$Sdoc$Sortools"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sshare$Sdoc$Sortools$Ssat"
-$(MKDIR) "$(DESTDIR)$(prefix)$Sshare$Sdoc$Sortools$Ssat$Sdoc"
#$(COPY) ortools$Ssat$S*.md "$(DESTDIR)$(prefix)$Sshare$Sdoc$Sortools$Ssat"
$(COPY) ortools$Ssat$Sdoc$S*.md "$(DESTDIR)$(prefix)$Sshare$Sdoc$Sortools$Ssat$Sdoc"
2018-08-31 18:14:17 +02:00
#############
## DEBUG ##
#############
2018-03-02 09:56:34 +01:00
.PHONY: detect_cc # Show variables used to build C++ OR-Tools.
detect_cc:
2018-03-06 14:34:17 +01:00
@echo Relevant info for the C++ build:
@echo PROTOC = $(PROTOC)
2018-03-02 09:56:34 +01:00
@echo CCC = $(CCC)
@echo CFLAGS = $(CFLAGS)
@echo LDFLAGS = $(LDFLAGS)
@echo LINK_CMD = $(LINK_CMD)
2018-03-02 15:58:25 +01:00
@echo DEPENDENCIES_LNK = $(DEPENDENCIES_LNK)
@echo SRC_DIR = $(SRC_DIR)
@echo GEN_DIR = $(GEN_DIR)
2018-09-18 10:10:25 +02:00
@echo CC_EX_DIR = $(CC_EX_DIR)
@echo OBJ_DIR = $(OBJ_DIR)
2014-05-23 16:52:10 +00:00
@echo LIB_DIR = $(LIB_DIR)
@echo BIN_DIR = $(BIN_DIR)
@echo prefix = $(prefix)
@echo OR_TOOLS_LNK = $(OR_TOOLS_LNK)
@echo OR_TOOLS_LDFLAGS = $(OR_TOOLS_LDFLAGS)
@echo OR_TOOLS_LIBS = $(OR_TOOLS_LIBS)
2018-04-25 16:32:46 +02:00
ifeq ($(SYSTEM),win)
@echo off & echo(
else
@echo
endif