689 lines
25 KiB
Makefile
689 lines
25 KiB
Makefile
VERSION := @PROJECT_VERSION@
|
|
# Let's discover something about where we run
|
|
ifeq ($(OS),Windows_NT)
|
|
OS = Windows
|
|
endif
|
|
ifeq ($(OS),Windows)
|
|
SYSTEM = win
|
|
else
|
|
SYSTEM = unix
|
|
endif
|
|
|
|
.SECONDARY:
|
|
|
|
# Useful directories.
|
|
INC_DIR = include
|
|
EX_DIR = examples
|
|
CPP_EX_DIR = examples/cpp
|
|
CPP_EX_PATH = $(subst /,$S,$(CPP_EX_DIR))
|
|
JAVA_EX_DIR = examples/java
|
|
JAVA_EX_PATH = $(subst /,$S,$(JAVA_EX_DIR))
|
|
DOTNET_EX_DIR = examples/dotnet
|
|
DOTNET_EX_PATH = $(subst /,$S,$(DOTNET_EX_DIR))
|
|
OBJ_DIR = objs
|
|
CLASS_DIR = classes
|
|
LIB_DIR = lib
|
|
BIN_DIR = bin
|
|
|
|
# Unix specific part.
|
|
ifeq ($(SYSTEM),unix)
|
|
OS = $(shell uname -s)
|
|
TOUCH = touch
|
|
# C++
|
|
ifeq ($(OS),Linux)
|
|
CXX = g++
|
|
LDFLAGS = \
|
|
-Wl,-rpath,"\$$ORIGIN" \
|
|
-Wl,-rpath,"\$$ORIGIN/../lib64" \
|
|
-Wl,-rpath,"\$$ORIGIN/../lib" \
|
|
-lz -lrt -lpthread
|
|
LBITS = $(shell getconf LONG_BIT)
|
|
ifeq ($(LBITS),64)
|
|
PORT = Linux64
|
|
ARCH = -DARCH_K8
|
|
NETPLATFORM = anycpu
|
|
else
|
|
PORT = Linux32
|
|
ARCH =
|
|
NETPLATFORM = x86
|
|
endif
|
|
MONO = LD_LIBRARY_PATH=$(LIB_DIR):$(LD_LIBRARY_PATH) mono
|
|
L = .so
|
|
endif # ifeq($(OS),Linux)
|
|
ifeq ($(OS),Darwin) # Assume Mac Os X
|
|
CXX = clang++
|
|
LDFLAGS = \
|
|
-Wl,-rpath,@loader_path \
|
|
-Wl,-rpath,@loader_path/../lib \
|
|
-lz -framework CoreFoundation
|
|
PORT = MacOsX64
|
|
ARCH = -DARCH_K8
|
|
NETPLATFORM = x64
|
|
MONO = DYLD_FALLBACK_LIBRARY_PATH=$(LIB_DIR):$(DYLD_LIBRARY_PATH) mono
|
|
L = .dylib
|
|
endif # ifeq($(OS),Darwin)
|
|
CXX_BIN := $(shell command -v $(CXX) 2> /dev/null)
|
|
DEBUG = -O4 -DNDEBUG
|
|
CXXFLAGS = -fPIC -std=c++17 $(DEBUG) \
|
|
-I$(INC_DIR) -I. $(ARCH) -Wno-deprecated \
|
|
-DUSE_BOP -DUSE_GLOP \
|
|
-DUSE_CBC -DUSE_CLP \
|
|
-DUSE_SCIP
|
|
LIB_PREFIX = lib
|
|
PRE_LIB = -Llib -Llib64
|
|
OR_TOOLS_LNK = $(PRE_LIB) -lortools
|
|
OBJ_OUT = -o #
|
|
EXE_OUT = -o #
|
|
O = .o
|
|
J = .jar
|
|
D = .dll
|
|
E =
|
|
# Java
|
|
ifneq ($(JAVA_HOME),)
|
|
JAVAC_BIN := $(shell command -v $(JAVA_HOME)/bin/javac 2> /dev/null)
|
|
JAR_BIN := $(shell command -v $(JAVA_HOME)/bin/jar 2> /dev/null)
|
|
JAVA_BIN := $(shell command -v $(JAVA_HOME)/bin/java 2> /dev/null)
|
|
else
|
|
JAVAC_BIN := $(shell command -v javac 2> /dev/null)
|
|
JAR_BIN := $(shell command -v jar 2> /dev/null)
|
|
JAVA_BIN := $(shell command -v java 2> /dev/null)
|
|
endif
|
|
MVN_BIN := $(shell command -v mvn 2> /dev/null)
|
|
JAVAFLAGS = -Djava.library.path=$(LIB_DIR)
|
|
CPSEP = :
|
|
# .Net
|
|
DOTNET = dotnet
|
|
DOTNET_BIN := $(shell command -v $(DOTNET) 2> /dev/null)
|
|
# Makefile
|
|
S = /
|
|
DEL = rm -f
|
|
DEL_REC = rm -rf
|
|
MKDIR = mkdir
|
|
endif # SYSTEM == unix
|
|
|
|
# Windows specific part.
|
|
ifeq ($(SYSTEM),win)
|
|
WHICH = tools\\win\\which.exe
|
|
TOUCH = tools\\win\\touch.exe
|
|
ifeq ("$(Platform)","X64")
|
|
PLATFORM = Win64
|
|
endif
|
|
ifeq ("$(Platform)","x64")
|
|
PLATFORM = Win64
|
|
endif
|
|
ifeq ("$(PLATFORM)","Win64")
|
|
PORT = VisualStudio$(VISUAL_STUDIO)-64b
|
|
NETPLATFORM = x64
|
|
else
|
|
PORT = VisualStudio$(VISUAL_STUDIO)-32b
|
|
NETPLATFORM = x86
|
|
endif
|
|
CXX = cl
|
|
# We can't use `where` since it's return all matching pathnames
|
|
# so we ship which.exe and use it
|
|
CXX_BIN := $(shell $(WHICH) $(CXX) 2> NUL)
|
|
DEBUG = /O2 -DNDEBUG
|
|
CXXFLAGS = /std:c++17 /EHsc /MD /nologo /D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS -nologo $(DEBUG) \
|
|
/DPSAPI_VERSION=1 /D__WIN32__ /DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS \
|
|
/DGOOGLE_GLOG_DLL_DECL= \
|
|
/I$(INC_DIR)\\src\\windows /I$(INC_DIR) /I. \
|
|
/DUSE_BOP /DUSE_GLOP \
|
|
/DUSE_CBC /DUSE_CLP \
|
|
/DUSE_SCIP
|
|
LDFLAGS = psapi.lib ws2_32.lib
|
|
LIB_PREFIX =
|
|
OR_TOOLS_LNK = lib\\ortools.lib
|
|
OBJ_OUT = /Fo
|
|
EXE_OUT = /Fe
|
|
O = .obj
|
|
L = .lib
|
|
J = .jar
|
|
D = .dll
|
|
E = .exe
|
|
# Java
|
|
JAVAC_BIN := $(shell $(WHICH) javac 2> NUL)
|
|
JAR_BIN := $(shell $(WHICH) jar 2> NUL)
|
|
JAVA_BIN := $(shell $(WHICH) java 2> NUL)
|
|
MVN_BIN := $(shell $(WHICH) mvn.cmd 2> NUL)
|
|
JAVAFLAGS = -Djava.library.path=$(LIB_DIR)
|
|
CPSEP = ;
|
|
# .Net
|
|
DOTNET = dotnet
|
|
DOTNET_BIN := $(shell $(WHICH) $(DOTNET) 2> NUL)
|
|
# Makefile
|
|
S = \\
|
|
DEL = del
|
|
DEL_REC = rd /S /Q
|
|
MKDIR = md
|
|
endif # SYSTEM == win
|
|
|
|
OR_TOOLS_LIBS = $(LIB_DIR)/$(LIB_PREFIX)ortools$L
|
|
|
|
.PHONY: all
|
|
all: detect cc java dotnet test
|
|
|
|
.PHONY: detect
|
|
detect: detect_port detect_cc detect_java detect_dotnet
|
|
@echo SOURCE = $(SOURCE)
|
|
@echo SOURCE_PATH = $(SOURCE_PATH)
|
|
@echo SOURCE_NAME = $(SOURCE_NAME)
|
|
@echo SOURCE_SUFFIX = $(SOURCE_SUFFIX)
|
|
ifeq ($(SYSTEM),win)
|
|
@echo off & echo(
|
|
else
|
|
@echo
|
|
endif
|
|
|
|
.PHONY: test
|
|
test: test_cc test_java test_dotnet
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
-$(DEL) $(EXE)
|
|
-$(DEL_REC) $(OBJ_DIR)
|
|
-$(DEL_REC) $(CLASS_DIR)
|
|
|
|
.PHONY: detect_port
|
|
detect_port:
|
|
@echo VERSION = $(VERSION)
|
|
@echo SHELL = $(SHELL)
|
|
@echo SYSTEM = $(SYSTEM)
|
|
@echo PORT = $(PORT)
|
|
@echo OS = $(OS)
|
|
ifeq ($(SYSTEM),win)
|
|
@echo off & echo(
|
|
else
|
|
@echo
|
|
endif
|
|
|
|
##############
|
|
## SOURCE ##
|
|
##############
|
|
# Check SOURCE argument
|
|
SOURCE_SUFFIX = $(suffix $(SOURCE))
|
|
# will contain “/any/path/foo.cc” on unix and “\\any\\path\\foo.cc” on windows
|
|
SOURCE_PATH = $(subst /,$S,$(SOURCE))
|
|
SOURCE_NAME = $(basename $(notdir $(SOURCE)))
|
|
ifeq ($(SOURCE),) # Those rules will be used if SOURCE is empty
|
|
.PHONY: build run
|
|
build run:
|
|
$(error no source file provided, the "$@" target must be used like so: \
|
|
make $@ SOURCE=relative/path/to/filename.extension)
|
|
else
|
|
ifeq (,$(wildcard $(SOURCE)))
|
|
$(error File "$(SOURCE)" does not exist !)
|
|
endif
|
|
endif
|
|
|
|
###########
|
|
## C++ ##
|
|
###########
|
|
EXE = \
|
|
$(BIN_DIR)/simple_ls_program$E \
|
|
$(BIN_DIR)/rabbits_and_pheasants_cp$E \
|
|
$(BIN_DIR)/nurses_cp$E \
|
|
$(BIN_DIR)/minimal_jobshop_cp$E \
|
|
\
|
|
$(BIN_DIR)/constraint_programming_cp$E \
|
|
$(BIN_DIR)/costas_array_sat$E \
|
|
$(BIN_DIR)/cvrp_disjoint_tw$E \
|
|
$(BIN_DIR)/cvrptw$E \
|
|
$(BIN_DIR)/cvrptw_with_breaks$E \
|
|
$(BIN_DIR)/cvrptw_with_refueling$E \
|
|
$(BIN_DIR)/cvrptw_with_resources$E \
|
|
$(BIN_DIR)/cvrptw_with_stop_times_and_resources$E \
|
|
$(BIN_DIR)/dimacs_assignment$E \
|
|
$(BIN_DIR)/dobble_ls$E \
|
|
$(BIN_DIR)/flow_api$E \
|
|
$(BIN_DIR)/frequency_assignment_problem$E \
|
|
$(BIN_DIR)/golomb_sat$E \
|
|
$(BIN_DIR)/integer_programming$E \
|
|
$(BIN_DIR)/jobshop_sat$E \
|
|
$(BIN_DIR)/knapsack$E \
|
|
$(BIN_DIR)/linear_assignment_api$E \
|
|
$(BIN_DIR)/linear_programming$E \
|
|
$(BIN_DIR)/linear_solver_protocol_buffers$E \
|
|
$(BIN_DIR)/magic_square_sat$E \
|
|
$(BIN_DIR)/max_flow$E \
|
|
$(BIN_DIR)/min_cost_flow$E \
|
|
$(BIN_DIR)/mps_driver$E \
|
|
$(BIN_DIR)/network_routing_sat$E \
|
|
$(BIN_DIR)/nqueens$E \
|
|
$(BIN_DIR)/random_tsp$E \
|
|
$(BIN_DIR)/pdptw$E \
|
|
$(BIN_DIR)/shift_minimization_sat$E \
|
|
$(BIN_DIR)/solve$E \
|
|
$(BIN_DIR)/sports_scheduling_sat$E \
|
|
$(BIN_DIR)/strawberry_fields_with_column_generation$E \
|
|
$(BIN_DIR)/tsp$E \
|
|
$(BIN_DIR)/vrp$E \
|
|
$(BIN_DIR)/weighted_tardiness_sat$E
|
|
|
|
.PHONY: cc test_cc
|
|
ifndef CXX_BIN
|
|
cc test_cc:
|
|
@echo the $(CXX) command was not found in your PATH
|
|
exit 127
|
|
else
|
|
cc: $(EXE)
|
|
test_cc: detect_cc
|
|
$(MAKE) run SOURCE=examples/cpp/simple_knapsack_program.cc
|
|
$(MAKE) run SOURCE=examples/cpp/simple_max_flow_program.cc
|
|
$(MAKE) run SOURCE=examples/cpp/simple_min_cost_flow_program.cc
|
|
$(MAKE) run SOURCE=examples/cpp/simple_lp_program.cc
|
|
$(MAKE) run SOURCE=examples/cpp/simple_mip_program.cc
|
|
$(MAKE) run SOURCE=examples/cpp/simple_sat_program.cc
|
|
$(MAKE) run SOURCE=examples/cpp/simple_ls_program.cc
|
|
$(MAKE) run SOURCE=examples/cpp/tsp.cc
|
|
$(MAKE) run SOURCE=examples/cpp/vrp.cc
|
|
$(MAKE) run SOURCE=examples/cpp/nurses_cp.cc
|
|
$(MAKE) run SOURCE=examples/cpp/minimal_jobshop_cp.cc
|
|
$(MAKE) run SOURCE=examples/cpp/linear_programming.cc
|
|
$(MAKE) run SOURCE=examples/cpp/integer_programming.cc
|
|
|
|
##################
|
|
## C++ SOURCE ##
|
|
##################
|
|
IS_CPP =
|
|
ifeq ($(SOURCE_SUFFIX),.cc)
|
|
IS_CPP = true
|
|
endif
|
|
ifeq ($(SOURCE_SUFFIX),.cpp)
|
|
IS_CPP = true
|
|
endif
|
|
ifdef IS_CPP # Those rules will be used if SOURCE contain a .cc or .cpp file
|
|
$(OBJ_DIR)/$(SOURCE_NAME).$O: $(SOURCE) | $(OBJ_DIR)
|
|
$(CXX) $(CXXFLAGS) \
|
|
-c $(SOURCE_PATH) \
|
|
$(OBJ_OUT)$(OBJ_DIR)$S$(SOURCE_NAME).$O
|
|
|
|
$(BIN_DIR)/$(SOURCE_NAME)$E: $(OBJ_DIR)/$(SOURCE_NAME).$O | $(BIN_DIR)
|
|
$(CXX) $(CXXFLAGS) \
|
|
$(OBJ_DIR)$S$(SOURCE_NAME).$O \
|
|
$(OR_TOOLS_LNK) $(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 # ifeq IS_CPP
|
|
endif # ifndef CXX_BIN
|
|
|
|
$(OBJ_DIR):
|
|
-$(MKDIR) $(OBJ_DIR)
|
|
|
|
$(OBJ_DIR)/%$O: $(CPP_EX_DIR)/%.cc | $(OBJ_DIR)
|
|
$(CXX) $(CXXFLAGS) -c $(CPP_EX_PATH)$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*$O
|
|
|
|
$(BIN_DIR)/%$E: $(OBJ_DIR)/%$O
|
|
$(CXX) $(CXXFLAGS) $(OBJ_DIR)$S$*$O $(OR_TOOLS_LNK) $(LDFLAGS) $(EXE_OUT)$(BIN_DIR)$S$*$E
|
|
|
|
.PHONY: detect_cc
|
|
detect_cc:
|
|
@echo CXX = $(CXX)
|
|
@echo CXX_BIN = $(CXX_BIN)
|
|
@echo CXXFLAGS = $(CXXFLAGS)
|
|
@echo LDFLAGS = $(LDFLAGS)
|
|
@echo OR_TOOLS_LNK = $(OR_TOOLS_LNK)
|
|
ifeq ($(SYSTEM),win)
|
|
@echo off & echo(
|
|
else
|
|
@echo
|
|
endif
|
|
|
|
############
|
|
## JAVA ##
|
|
############
|
|
HAS_JAVA = true
|
|
ifndef JAVAC_BIN
|
|
HAS_JAVA =
|
|
endif
|
|
ifndef JAR_BIN
|
|
HAS_JAVA =
|
|
endif
|
|
ifndef JAVA_BIN
|
|
HAS_JAVA =
|
|
endif
|
|
ifndef MVN_BIN
|
|
HAS_JAVA =
|
|
endif
|
|
|
|
.PHONY: java test_java
|
|
ifndef HAS_JAVA
|
|
java test_java:
|
|
@echo the command 'java', 'javac', 'jar' or 'mvn' was not found in your PATH
|
|
exit 127
|
|
else
|
|
java:
|
|
$(MAKE) run SOURCE=examples/java/LinearProgramming/src/main/java/com/google/ortools/LinearProgramming.java
|
|
$(MAKE) run SOURCE=examples/java/IntegerProgramming/src/main/java/com/google/ortools/IntegerProgramming.java
|
|
$(MAKE) run SOURCE=examples/java/RabbitsPheasants/src/main/java/com/google/ortools/RabbitsPheasants.java
|
|
$(MAKE) run SOURCE=examples/java/Tsp/src/main/java/com/google/ortools/Tsp.java
|
|
$(MAKE) run SOURCE=examples/java/Vrp/src/main/java/com/google/ortools/Vrp.java
|
|
$(MAKE) run SOURCE=examples/java/Knapsack/src/main/java/com/google/ortools/Knapsack.java
|
|
$(MAKE) run SOURCE=examples/java/AllDifferentExcept0/src/main/java/com/google/ortools/AllDifferentExcept0.java
|
|
$(MAKE) run SOURCE=examples/java/AllInterval/src/main/java/com/google/ortools/AllInterval.java
|
|
$(MAKE) run SOURCE=examples/java/CapacitatedVehicleRoutingProblemWithTimeWindows/src/main/java/com/google/ortools/CapacitatedVehicleRoutingProblemWithTimeWindows.java
|
|
$(MAKE) run SOURCE=examples/java/Circuit/src/main/java/com/google/ortools/Circuit.java
|
|
$(MAKE) run SOURCE=examples/java/CoinsGrid/src/main/java/com/google/ortools/CoinsGrid.java
|
|
$(MAKE) run SOURCE=examples/java/CoinsGridMIP/src/main/java/com/google/ortools/CoinsGridMIP.java
|
|
$(MAKE) run SOURCE=examples/java/ColoringMIP/src/main/java/com/google/ortools/ColoringMIP.java
|
|
$(MAKE) run SOURCE=examples/java/CoveringOpl/src/main/java/com/google/ortools/CoveringOpl.java
|
|
$(MAKE) run SOURCE=examples/java/Crossword/src/main/java/com/google/ortools/Crossword.java
|
|
$(MAKE) run SOURCE=examples/java/DeBruijn/src/main/java/com/google/ortools/DeBruijn.java
|
|
$(MAKE) run SOURCE=examples/java/Diet/src/main/java/com/google/ortools/Diet.java
|
|
$(MAKE) run SOURCE=examples/java/DietMIP/src/main/java/com/google/ortools/DietMIP.java
|
|
$(MAKE) run SOURCE=examples/java/DivisibleBy9Through1/src/main/java/com/google/ortools/DivisibleBy9Through1.java
|
|
$(MAKE) run SOURCE=examples/java/FlowExample/src/main/java/com/google/ortools/FlowExample.java
|
|
$(MAKE) run SOURCE=examples/java/GolombRuler/src/main/java/com/google/ortools/GolombRuler.java
|
|
$(MAKE) run SOURCE=examples/java/Issue173/src/main/java/com/google/ortools/Issue173.java
|
|
$(MAKE) run SOURCE=examples/java/KnapsackMIP/src/main/java/com/google/ortools/KnapsackMIP.java
|
|
$(MAKE) run SOURCE=examples/java/LeastDiff/src/main/java/com/google/ortools/LeastDiff.java
|
|
$(MAKE) run SOURCE=examples/java/LinearAssignmentAPI/src/main/java/com/google/ortools/LinearAssignmentAPI.java
|
|
$(MAKE) run SOURCE=examples/java/MagicSquare/src/main/java/com/google/ortools/MagicSquare.java
|
|
$(MAKE) run SOURCE=examples/java/Map2/src/main/java/com/google/ortools/Map2.java
|
|
$(MAKE) run SOURCE=examples/java/Map/src/main/java/com/google/ortools/Map.java
|
|
$(MAKE) run SOURCE=examples/java/Minesweeper/src/main/java/com/google/ortools/Minesweeper.java
|
|
$(MAKE) run SOURCE=examples/java/MultiThreadTest/src/main/java/com/google/ortools/MultiThreadTest.java
|
|
$(MAKE) run SOURCE=examples/java/NQueens2/src/main/java/com/google/ortools/NQueens2.java
|
|
$(MAKE) run SOURCE=examples/java/NQueens/src/main/java/com/google/ortools/NQueens.java
|
|
$(MAKE) run SOURCE=examples/java/Partition/src/main/java/com/google/ortools/Partition.java
|
|
$(MAKE) run SOURCE=examples/java/QuasigroupCompletion/src/main/java/com/google/ortools/QuasigroupCompletion.java
|
|
$(MAKE) run SOURCE=examples/java/SendMoreMoney2/src/main/java/com/google/ortools/SendMoreMoney2.java
|
|
$(MAKE) run SOURCE=examples/java/SendMoreMoney/src/main/java/com/google/ortools/SendMoreMoney.java
|
|
$(MAKE) run SOURCE=examples/java/SendMostMoney/src/main/java/com/google/ortools/SendMostMoney.java
|
|
$(MAKE) run SOURCE=examples/java/Seseman/src/main/java/com/google/ortools/Seseman.java
|
|
$(MAKE) run SOURCE=examples/java/SetCovering2/src/main/java/com/google/ortools/SetCovering2.java
|
|
$(MAKE) run SOURCE=examples/java/SetCovering3/src/main/java/com/google/ortools/SetCovering3.java
|
|
$(MAKE) run SOURCE=examples/java/SetCovering4/src/main/java/com/google/ortools/SetCovering4.java
|
|
$(MAKE) run SOURCE=examples/java/SetCoveringDeployment/src/main/java/com/google/ortools/SetCoveringDeployment.java
|
|
$(MAKE) run SOURCE=examples/java/SetCovering/src/main/java/com/google/ortools/SetCovering.java
|
|
$(MAKE) run SOURCE=examples/java/SimpleRoutingTest/src/main/java/com/google/ortools/SimpleRoutingTest.java
|
|
$(MAKE) run SOURCE=examples/java/StableMarriage/src/main/java/com/google/ortools/StableMarriage.java
|
|
$(MAKE) run SOURCE=examples/java/StiglerMIP/src/main/java/com/google/ortools/StiglerMIP.java
|
|
$(MAKE) run SOURCE=examples/java/Strimko2/src/main/java/com/google/ortools/Strimko2.java
|
|
$(MAKE) run SOURCE=examples/java/Sudoku/src/main/java/com/google/ortools/Sudoku.java
|
|
$(MAKE) run SOURCE=examples/java/SurvoPuzzle/src/main/java/com/google/ortools/SurvoPuzzle.java
|
|
$(MAKE) run SOURCE=examples/java/ToNum/src/main/java/com/google/ortools/ToNum.java
|
|
$(MAKE) run SOURCE=examples/java/WhoKilledAgatha/src/main/java/com/google/ortools/WhoKilledAgatha.java
|
|
$(MAKE) run SOURCE=examples/java/Xkcd/src/main/java/com/google/ortools/Xkcd.java
|
|
$(MAKE) run SOURCE=examples/java/YoungTableaux/src/main/java/com/google/ortools/YoungTableaux.java
|
|
|
|
test_java: detect_java
|
|
$(MAKE) run SOURCE=examples/java/SimpleLpProgram/src/main/java/com/google/ortools/SimpleLpProgram.java
|
|
$(MAKE) run SOURCE=examples/java/SimpleMipProgram/src/main/java/com/google/ortools/SimpleMipProgram.java
|
|
$(MAKE) run SOURCE=examples/java/SimpleSatProgram/src/main/java/com/google/ortools/SimpleSatProgram.java
|
|
$(MAKE) run SOURCE=examples/java/Tsp/src/main/java/com/google/ortools/Tsp.java
|
|
$(MAKE) run SOURCE=examples/java/Vrp/src/main/java/com/google/ortools/Vrp.java
|
|
$(MAKE) run SOURCE=examples/java/Knapsack/src/main/java/com/google/ortools/Knapsack.java
|
|
|
|
###################
|
|
## Java SOURCE ##
|
|
###################
|
|
ifeq ($(SOURCE_SUFFIX),.java) # Those rules will be used if SOURCE contain a .java file
|
|
.PHONY: build # Build a Java program.
|
|
build: $(SOURCE) examples/java/$(SOURCE_NAME)/pom.xml | java.log
|
|
cd examples$Sjava$S$(SOURCE_NAME) && "$(MVN_BIN)" compile
|
|
|
|
.PHONY: run # Run a Java program.
|
|
run: build
|
|
cd examples$Sjava$S$(SOURCE_NAME) && "$(MVN_BIN)" exec:java $(ARGS)
|
|
endif # ifeq ($(SOURCE_SUFFIX),.java)
|
|
|
|
endif # ifndef HAS_JAVA
|
|
|
|
ifeq ($(OS),Windows)
|
|
JAVA_NATIVE_IDENTIFIER=win32-x86-64
|
|
else
|
|
ifeq ($(OS),Linux)
|
|
JAVA_NATIVE_IDENTIFIER=linux-x86-64
|
|
else
|
|
ifeq ($(OS),Darwin)
|
|
JAVA_NATIVE_IDENTIFIER=darwin-x86-64
|
|
else
|
|
$(error OS unknown !)
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
JAVA_NATIVE_PROJECT := ortools-$(JAVA_NATIVE_IDENTIFIER)-@PROJECT_VERSION@.jar
|
|
JAVA_PROJECT := ortools-java-@PROJECT_VERSION@.jar
|
|
|
|
java.log: \
|
|
$(JAVA_NATIVE_PROJECT) pom-runtime.xml \
|
|
$(JAVA_PROJECT) pom-local.xml
|
|
"$(MVN_BIN)" org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \
|
|
-Dfile=$(JAVA_NATIVE_PROJECT) -DpomFile=pom-runtime.xml
|
|
"$(MVN_BIN)" org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \
|
|
-Dfile=$(JAVA_PROJECT) -DpomFile=pom-local.xml
|
|
@$(TOUCH) $@
|
|
|
|
.PHONY: detect_java
|
|
detect_java:
|
|
@echo JAVA_HOME = $(JAVA_HOME)
|
|
@echo JAVAC_BIN = $(JAVAC_BIN)
|
|
@echo CLASS_DIR = $(CLASS_DIR)
|
|
@echo JAR_BIN = $(JAR_BIN)
|
|
@echo JAVA_BIN = $(JAVA_BIN)
|
|
@echo JAVAFLAGS = $(JAVAFLAGS)
|
|
@echo MVN_BIN = $(MVN_BIN)
|
|
ifeq ($(SYSTEM),win)
|
|
@echo off & echo(
|
|
else
|
|
@echo
|
|
endif
|
|
|
|
##############
|
|
## DOTNET ##
|
|
##############
|
|
.PHONY: dotnet test_dotnet
|
|
ifndef DOTNET_BIN
|
|
dotnet test_dotnet:
|
|
@echo the command 'dotnet' was not found in your PATH
|
|
exit 127
|
|
else
|
|
dotnet:
|
|
$(MAKE) run SOURCE=examples/dotnet/3_jugs_regular.cs
|
|
# Linear Solver
|
|
$(MAKE) run SOURCE=examples/dotnet/SimpleLpProgram.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/SimpleMipProgram.cs
|
|
# Constraint Solver
|
|
$(MAKE) run SOURCE=examples/dotnet/Tsp.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/Vrp.cs
|
|
# Sat
|
|
$(MAKE) run SOURCE=examples/dotnet/NursesSat.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/JobshopSat.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/JobshopFt06Sat.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/GateSchedulingSat.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/TaskSchedulingSat.cs
|
|
# Misc
|
|
$(MAKE) run SOURCE=examples/dotnet/cslinearprogramming.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/csintegerprogramming.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/assignment.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/alldifferent_except_0.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/all_interval.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/a_puzzle.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/a_round_of_golf.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/broken_weights.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/bus_schedule.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/circuit2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/circuit.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/coins3.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/coins_grid.cs ARGS="5 2"
|
|
$(MAKE) run SOURCE=examples/dotnet/combinatorial_auction2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/contiguity_regular.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/contiguity_transition.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/costas_array.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/covering_opl.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/crew.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/crossword.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/crypta.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/crypto.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/cscvrptw.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/csflow.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/csknapsack.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/csls_api.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/csrabbitspheasants.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/cstsp.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/curious_set_of_integers.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/debruijn.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/csdiet.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/discrete_tomography.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/divisible_by_9_through_1.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/dudeney.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/einav_puzzle2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/eq10.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/eq20.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/fill_a_pix.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/furniture_moving.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/furniture_moving_intervals.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/futoshiki.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/golomb_ruler.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/grocery.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/hidato_table.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/just_forgotten.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/kakuro.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/kenken2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/killer_sudoku.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/labeled_dice.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/langford.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/least_diff.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/lectures.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/magic_sequence.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/magic_square_and_cards.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/magic_square.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/map2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/map.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/marathon2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/max_flow_taha.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/max_flow_winston1.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/minesweeper.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/mr_smith.cs
|
|
# $(MAKE) run SOURCE=examples/dotnet/nontransitive_dice.cs # too long
|
|
$(MAKE) run SOURCE=examples/dotnet/nqueens.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/nurse_rostering_regular.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/nurse_rostering_transition.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/olympic.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/organize_day.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/organize_day_intervals.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/pandigital_numbers.cs
|
|
# $(MAKE) run SOURCE=examples/dotnet/partition.cs # too long
|
|
$(MAKE) run SOURCE=examples/dotnet/perfect_square_sequence.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/photo_problem.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/place_number_puzzle.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/p_median.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/post_office_problem2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/quasigroup_completion.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/regex.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/rogo2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/scheduling_speakers.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/secret_santa2.cs
|
|
# $(MAKE) run SOURCE=examples/dotnet/secret_santa.cs # too long
|
|
$(MAKE) run SOURCE=examples/dotnet/send_more_money2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/send_more_money.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/send_most_money.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/seseman.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/set_covering2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/set_covering3.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/set_covering4.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/set_covering.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/set_covering_deployment.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/set_covering_skiena.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/set_partition.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/sicherman_dice.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/ski_assignment.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/stable_marriage.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/strimko2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/subset_sum.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/sudoku.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/survo_puzzle.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/to_num.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/traffic_lights.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/volsay.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/volsay2.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/volsay3.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/wedding_optimal_chart.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/who_killed_agatha.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/xkcd.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/young_tableaux.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/zebra.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsintegerprogramming.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fslinearprogramming.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsdiet.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsequality.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsequality-inequality.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsinteger-linear-program.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsknapsack.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsnetwork-max-flow.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsnetwork-max-flow-lpSolve.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsnetwork-min-cost-flow.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsProgram.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsrabbit-pheasant.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsvolsay3.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsvolsay3-lpSolve.fs
|
|
$(MAKE) run SOURCE=examples/dotnet/fsvolsay.fs
|
|
# $(MAKE) run SOURCE=examples/dotnet/word_square.cs # depends on /usr/share/dict/words
|
|
|
|
test_dotnet: detect_dotnet
|
|
$(MAKE) run SOURCE=examples/dotnet/SimpleLpProgram.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/SimpleMipProgram.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/Tsp.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/Vrp.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/JobshopSat.cs
|
|
$(MAKE) run SOURCE=examples/dotnet/NursesSat.cs
|
|
|
|
###################
|
|
## .NET SOURCE ##
|
|
###################
|
|
# .Net C#
|
|
ifeq ($(SOURCE_SUFFIX),.cs) # Those rules will be used if SOURCE contain a .cs file
|
|
ifeq (,$(wildcard $(SOURCE)proj))
|
|
$(error File "$(SOURCE)proj" does not exist !)
|
|
endif
|
|
|
|
.PHONY: build # Build a .Net C# program.
|
|
build: $(SOURCE) $(SOURCE)proj
|
|
"$(DOTNET_BIN)" build $(SOURCE_PATH)proj
|
|
|
|
.PHONY: run # Run a .Net C# program.
|
|
run: build
|
|
"$(DOTNET_BIN)" run --no-build --project $(SOURCE_PATH)proj -- $(ARGS)
|
|
endif # ifeq ($(SOURCE_SUFFIX),.cs)
|
|
|
|
# .Net F#
|
|
ifeq ($(SOURCE_SUFFIX),.fs) # Those rules will be used if SOURCE contain a .cs file
|
|
ifeq (,$(wildcard $(SOURCE)proj))
|
|
$(error File "$(SOURCE)proj" does not exist !)
|
|
endif
|
|
|
|
.PHONY: build # Build a .Net F# program.
|
|
build: $(SOURCE) $(SOURCE)proj
|
|
"$(DOTNET_BIN)" build $(SOURCE_PATH)proj
|
|
|
|
.PHONY: run # Run a .Net F# program.
|
|
run: build
|
|
"$(DOTNET_BIN)" run --no-build --project $(SOURCE_PATH)proj -- $(ARGS)
|
|
endif # ifeq ($(SOURCE_SUFFIX),.fs)
|
|
|
|
endif # ifndef DOTNET_BIN
|
|
|
|
.PHONY: detect_dotnet
|
|
detect_dotnet:
|
|
@echo DOTNET_BIN = $(DOTNET_BIN)
|
|
ifeq ($(SYSTEM),win)
|
|
@echo off & echo(
|
|
else
|
|
@echo
|
|
endif
|
|
|
|
############
|
|
## MISC ##
|
|
############
|
|
# Include user makefile
|
|
-include Makefile.user
|
|
|
|
print-% : ; @echo $* = $($*)
|