2020-09-21 18:15:13 +02:00
VERSION := @PROJECT_VERSION@
2018-07-05 14:56:31 +02:00
# Let's discover something about where we run
2018-07-13 17:44:47 +02:00
i f e q ( $( OS ) , W i n d o w s _ N T )
2018-07-24 08:31:34 +02:00
OS = Windows
e n d i f
i f e q ( $( OS ) , W i n d o w s )
2018-07-05 14:56:31 +02:00
SYSTEM = win
e l s e
SYSTEM = unix
e n d i f
.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.
i f e q ( $( SYSTEM ) , u n i x )
OS = $( shell uname -s)
2020-09-21 18:15:13 +02:00
TOUCH = touch
2018-07-05 14:56:31 +02:00
# C++
ifeq ( $( OS) ,Linux)
2022-03-04 13:28:14 +01:00
CC ?= gcc
CXX ?= g++
2018-07-05 14:56:31 +02:00
LDFLAGS = \
- W l , - r p a t h , "\$$ORIGIN" \
- W l , - r p a t h , "\$$ORIGIN/../lib64" \
- W l , - r p a t h , "\$$ORIGIN/../lib" \
- l z - l r t - l p t h r e a d
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
2022-03-04 13:28:14 +01:00
CC ?= clang
CXX ?= clang++
2018-07-05 14:56:31 +02:00
LDFLAGS = \
- W l , - r p a t h , @ l o a d e r _ p a t h \
- W l , - r p a t h , @ l o a d e r _ p a t h / . . / l i b \
2019-03-25 10:55:26 +01:00
- l z - f r a m e w o r k C o r e F o u n d a t i o n
2018-07-05 14:56:31 +02:00
PORT = MacOsX64
ARCH = -DARCH_K8
NETPLATFORM = x64
MONO = DYLD_FALLBACK_LIBRARY_PATH = $( LIB_DIR) :$( DYLD_LIBRARY_PATH) mono
L = .dylib
endif # ifeq($(OS),Darwin)
2022-03-04 13:28:14 +01:00
CC_BIN := $( shell command -v $( CC) 2> /dev/null)
2018-07-05 14:56:31 +02:00
CXX_BIN := $( shell command -v $( CXX) 2> /dev/null)
DEBUG = -O4 -DNDEBUG
2022-02-18 16:27:42 +01:00
CXXFLAGS = -fPIC -std= c++20 $( DEBUG) \
2018-07-05 14:56:31 +02:00
-I$( INC_DIR) -I. $( ARCH) -Wno-deprecated \
2022-02-28 11:17:02 +01:00
-DUSE_BOP -DUSE_GLOP -DUSE_PDLP \
2020-09-07 18:52:36 +02:00
-DUSE_CBC -DUSE_CLP \
-DUSE_SCIP
2018-07-05 14:56:31 +02:00
LIB_PREFIX = lib
2019-03-25 10:55:26 +01:00
PRE_LIB = -Llib -Llib64
2020-09-07 18:52:36 +02:00
OR_TOOLS_LNK = $( PRE_LIB) -lortools
2018-07-05 14:56:31 +02:00
OBJ_OUT = -o #
EXE_OUT = -o #
O = .o
2018-07-17 15:02:26 +02:00
J = .jar
2018-07-16 17:39:21 +02:00
D = .dll
2018-07-05 14:56:31 +02:00
E =
# Java
i f n e q ( $( 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)
e l s e
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)
e n d i f
2020-09-07 18:52:36 +02:00
MVN_BIN := $( shell command -v mvn 2> /dev/null)
2018-07-05 14:56:31 +02:00
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
e n d i f # SYSTEM == unix
# Windows specific part.
i f e q ( $( SYSTEM ) , w i n )
2018-07-24 08:31:34 +02:00
WHICH = tools\\ win\\ which.exe
2020-09-21 18:15:13 +02:00
TOUCH = tools\\ win\\ touch.exe
2018-07-13 17:44:47 +02:00
ifeq ( " $( Platform) " ,"X64" )
2018-07-05 14:56:31 +02:00
PLATFORM = Win64
endif
2018-07-13 17:44:47 +02:00
ifeq ( " $( Platform) " ,"x64" )
2018-07-05 14:56:31 +02:00
PLATFORM = Win64
endif
2018-07-13 17:44:47 +02:00
ifeq ( " $( PLATFORM) " ,"Win64" )
2018-07-05 14:56:31 +02:00
PORT = VisualStudio$( VISUAL_STUDIO) -64b
NETPLATFORM = x64
else
PORT = VisualStudio$( VISUAL_STUDIO) -32b
NETPLATFORM = x86
endif
2022-03-04 13:28:14 +01:00
CC ?= cl
CXX ?= cl
2018-07-05 14:56:31 +02:00
# We can't use `where` since it's return all matching pathnames
# so we ship which.exe and use it
2022-03-04 13:28:14 +01:00
CC_BIN := $( shell $( WHICH) $( CC) 2> NUL)
2018-07-05 14:56:31 +02:00
CXX_BIN := $( shell $( WHICH) $( CXX) 2> NUL)
DEBUG = /O2 -DNDEBUG
2022-02-18 16:27:42 +01:00
CXXFLAGS = /std:c++20 /EHsc /MD /nologo /D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS -nologo $( DEBUG) \
2020-09-29 01:51:33 +02:00
/DPSAPI_VERSION= 1 /D__WIN32__ /DNOMINMAX /DWIN32_LEAN_AND_MEAN= 1 /D_CRT_SECURE_NO_WARNINGS \
2020-12-23 11:48:18 +01:00
/DGOOGLE_GLOG_DLL_DECL= \
2018-07-05 14:56:31 +02:00
/I$( INC_DIR) \\ src\\ windows /I$( INC_DIR) /I. \
2022-02-28 11:17:02 +01:00
/DUSE_BOP /DUSE_GLOP /DUSE_PDLP \
2020-09-28 22:48:39 +02:00
/DUSE_CBC /DUSE_CLP \
/DUSE_SCIP
2018-07-05 14:56:31 +02:00
LDFLAGS = psapi.lib ws2_32.lib
LIB_PREFIX =
OR_TOOLS_LNK = lib\\ ortools.lib
OBJ_OUT = /Fo
EXE_OUT = /Fe
O = .obj
L = .lib
2018-07-17 15:02:26 +02:00
J = .jar
2018-07-16 17:39:21 +02:00
D = .dll
2018-07-05 14:56:31 +02:00
E = .exe
# Java
JAVAC_BIN := $( shell $( WHICH) javac 2> NUL)
JAR_BIN := $( shell $( WHICH) jar 2> NUL)
JAVA_BIN := $( shell $( WHICH) java 2> NUL)
2020-09-07 18:52:36 +02:00
MVN_BIN := $( shell $( WHICH) mvn.cmd 2> NUL)
2018-07-05 14:56:31 +02:00
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
e n d i f # 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
2018-10-29 14:17:53 +01:00
@echo SOURCE = $( SOURCE)
@echo SOURCE_PATH = $( SOURCE_PATH)
@echo SOURCE_NAME = $( SOURCE_NAME)
@echo SOURCE_SUFFIX = $( SOURCE_SUFFIX)
i f e q ( $( SYSTEM ) , w i n )
@echo off & echo(
e l s e
@echo
e n d i f
2018-07-05 14:56:31 +02:00
.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 :
2020-09-21 18:15:13 +02:00
@echo VERSION = $( VERSION)
2018-07-05 14:56:31 +02:00
@echo SHELL = $( SHELL)
@echo SYSTEM = $( SYSTEM)
@echo PORT = $( PORT)
@echo OS = $( OS)
i f e q ( $( SYSTEM ) , w i n )
@echo off & echo(
e l s e
@echo
e n d i f
2018-10-29 14:17:53 +01:00
##############
## 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) )
2018-10-29 17:46:20 +01:00
SOURCE_NAME = $( basename $( notdir $( SOURCE) ) )
2018-10-29 14:17:53 +01:00
i f e q ( $( 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)
e l s e
i f e q ( , $( wildcard $ ( SOURCE ) ) )
$( error File "$ ( SOURCE ) " does not exist !)
e n d i f
e n d i f
2018-07-05 14:56:31 +02:00
###########
## C++ ##
###########
EXE = \
2018-11-23 10:49:46 +01:00
$( BIN_DIR ) / s i m p l e _ l s _ p r o g r a m $ E \
$( BIN_DIR ) / r a b b i t s _ a n d _ p h e a s a n t s _ c p $ E \
2018-10-09 11:39:49 +02:00
$( BIN_DIR ) / n u r s e s _ c p $ E \
2018-11-23 10:49:46 +01:00
$( BIN_DIR ) / m i n i m a l _ j o b s h o p _ c p $ E \
2018-10-09 11:39:49 +02:00
\
2018-11-23 10:29:53 +01:00
$( BIN_DIR ) / c o n s t r a i n t _ p r o g r a m m i n g _ c p $ E \
2018-11-26 09:51:07 +01:00
$( BIN_DIR ) / c o s t a s _ a r r a y _ s a t $ E \
2018-07-05 14:56:31 +02:00
$( BIN_DIR ) / c v r p _ d i s j o i n t _ t w $ E \
$( BIN_DIR ) / c v r p t w $ E \
$( BIN_DIR ) / c v r p t w _ w i t h _ b r e a k s $ E \
$( BIN_DIR ) / c v r p t w _ w i t h _ r e f u e l i n g $ E \
$( BIN_DIR ) / c v r p t w _ w i t h _ r e s o u r c e s $ E \
$( BIN_DIR ) / c v r p t w _ w i t h _ s t o p _ t i m e s _ a n d _ r e s o u r c e s $ E \
$( BIN_DIR ) / d i m a c s _ a s s i g n m e n t $ E \
$( BIN_DIR ) / d o b b l e _ l s $ E \
2018-07-10 17:34:35 +02:00
$( BIN_DIR ) / f l o w _ a p i $ E \
$( BIN_DIR ) / f r e q u e n c y _ a s s i g n m e n t _ p r o b l e m $ E \
2018-11-26 09:51:07 +01:00
$( BIN_DIR ) / g o l o m b _ s a t $ E \
2018-11-23 10:29:53 +01:00
$( BIN_DIR ) / i n t e g e r _ p r o g r a m m i n g $ E \
2018-07-10 17:34:35 +02:00
$( BIN_DIR ) / j o b s h o p _ s a t $ E \
2018-11-23 10:29:53 +01:00
$( BIN_DIR ) / k n a p s a c k $ E \
2018-07-10 17:34:35 +02:00
$( BIN_DIR ) / l i n e a r _ a s s i g n m e n t _ a p i $ E \
2018-11-23 10:29:53 +01:00
$( BIN_DIR ) / l i n e a r _ p r o g r a m m i n g $ E \
2018-07-10 17:34:35 +02:00
$( BIN_DIR ) / l i n e a r _ s o l v e r _ p r o t o c o l _ b u f f e r s $ E \
2018-11-23 10:29:53 +01:00
$( BIN_DIR ) / m a g i c _ s q u a r e _ s a t $ E \
$( BIN_DIR ) / m a x _ f l o w $ E \
$( BIN_DIR ) / m i n _ c o s t _ f l o w $ E \
2018-07-10 17:34:35 +02:00
$( BIN_DIR ) / m p s _ d r i v e r $ E \
2018-12-10 17:18:17 +01:00
$( BIN_DIR ) / n e t w o r k _ r o u t i n g _ s a t $ E \
2018-07-05 14:56:31 +02:00
$( BIN_DIR ) / n q u e e n s $ E \
2018-10-09 11:39:49 +02:00
$( BIN_DIR ) / r a n d o m _ t s p $ E \
2018-07-05 14:56:31 +02:00
$( BIN_DIR ) / p d p t w $ E \
2018-07-10 17:34:35 +02:00
$( BIN_DIR ) / s h i f t _ m i n i m i z a t i o n _ s a t $ E \
2018-09-14 15:13:16 +02:00
$( BIN_DIR ) / s o l v e $ E \
2018-11-23 10:29:53 +01:00
$( BIN_DIR ) / s p o r t s _ s c h e d u l i n g _ s a t $ E \
2018-07-05 14:56:31 +02:00
$( BIN_DIR ) / s t r a w b e r r y _ f i e l d s _ w i t h _ c o l u m n _ g e n e r a t i o n $ E \
2018-11-23 10:29:53 +01:00
$( BIN_DIR ) / t s p $ E \
$( BIN_DIR ) / v r p $ E \
2018-07-10 17:34:35 +02:00
$( BIN_DIR ) / w e i g h t e d _ t a r d i n e s s _ s a t $ E
2018-07-05 14:56:31 +02:00
2018-10-29 14:17:53 +01:00
.PHONY : cc test_cc
2018-07-05 14:56:31 +02:00
i f n d e f C X X _ B I N
2018-10-29 14:17:53 +01:00
cc test_cc :
2018-07-05 14:56:31 +02:00
@echo the $( CXX) command was not found in your PATH
2018-07-20 13:52:34 +02:00
exit 127
2018-07-05 14:56:31 +02:00
e l s e
cc : $( EXE )
2018-09-10 13:23:29 +02:00
test_cc : detect_cc
2018-11-27 10:51:15 +01:00
$( 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
2018-11-23 10:29:53 +01:00
$( 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
2018-11-23 10:49:46 +01:00
$( MAKE) run SOURCE = examples/cpp/simple_ls_program.cc
2018-10-29 14:17:53 +01:00
$( MAKE) run SOURCE = examples/cpp/tsp.cc
$( MAKE) run SOURCE = examples/cpp/vrp.cc
$( MAKE) run SOURCE = examples/cpp/nurses_cp.cc
2018-11-23 10:49:46 +01:00
$( MAKE) run SOURCE = examples/cpp/minimal_jobshop_cp.cc
2020-08-01 14:33:36 +02:00
$( MAKE) run SOURCE = examples/cpp/linear_programming.cc
$( MAKE) run SOURCE = examples/cpp/integer_programming.cc
2018-10-29 14:17:53 +01:00
##################
## C++ SOURCE ##
##################
2021-02-22 17:59:36 +01:00
IS_CPP =
i f e q ( $( SOURCE_SUFFIX ) , . c c )
IS_CPP = true
e n d i f
i f e q ( $( SOURCE_SUFFIX ) , . c p p )
IS_CPP = true
e n d i f
i f d e f I S _ C P P # Those rules will be used if SOURCE contain a .cc or .cpp file
2018-10-29 14:17:53 +01:00
$(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)
2021-02-22 17:59:36 +01:00
e n d i f # ifeq IS_CPP
2018-07-05 14:56:31 +02:00
e n d i f # ifndef CXX_BIN
$(OBJ_DIR) :
2018-10-29 14:17:53 +01:00
-$( MKDIR) $( OBJ_DIR)
2018-07-05 14:56:31 +02:00
$(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 :
2022-03-04 13:28:14 +01:00
@echo CC = $( CC)
@echo CC_BIN = $( CC_BIN)
2018-07-05 14:56:31 +02:00
@echo CXX = $( CXX)
@echo CXX_BIN = $( CXX_BIN)
@echo CXXFLAGS = $( CXXFLAGS)
@echo LDFLAGS = $( LDFLAGS)
@echo OR_TOOLS_LNK = $( OR_TOOLS_LNK)
i f e q ( $( SYSTEM ) , w i n )
@echo off & echo(
e l s e
@echo
e n d i f
############
## JAVA ##
############
HAS_JAVA = true
i f n d e f J A V A C _ B I N
HAS_JAVA =
e n d i f
i f n d e f J A R _ B I N
HAS_JAVA =
e n d i f
i f n d e f J A V A _ B I N
HAS_JAVA =
e n d i f
2020-09-07 18:52:36 +02:00
i f n d e f M V N _ B I N
HAS_JAVA =
e n d i f
2018-07-05 14:56:31 +02:00
2018-10-29 14:17:53 +01:00
.PHONY : java test_java
2018-07-05 14:56:31 +02:00
i f n d e f H A S _ J A V A
2018-10-29 14:17:53 +01:00
java test_java :
2020-09-07 18:52:36 +02:00
@echo the command 'java' , 'javac' , 'jar' or 'mvn' was not found in your PATH
2018-07-20 13:52:34 +02:00
exit 127
2018-07-05 14:56:31 +02:00
e l s e
2020-09-21 18:15:13 +02:00
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
2018-09-10 13:23:29 +02:00
test_java : detect_java
2020-09-21 18:15:13 +02:00
$( 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
2018-10-29 14:17:53 +01:00
###################
## Java SOURCE ##
###################
i f e q ( $( SOURCE_SUFFIX ) , . j a v a ) # Those rules will be used if SOURCE contain a .java file
.PHONY : build # Build a Java program.
2020-09-21 18:15:13 +02:00
build : $( SOURCE ) examples /java /$( SOURCE_NAME ) /pom .xml | java .log
cd examples$Sjava $S $( SOURCE_NAME) && " $( MVN_BIN) " compile
2018-10-29 14:17:53 +01:00
.PHONY : run # Run a Java program.
run : build
2020-09-21 18:15:13 +02:00
cd examples$Sjava $S $( SOURCE_NAME) && " $( MVN_BIN) " exec:java $( ARGS)
2018-10-29 14:17:53 +01:00
e n d i f # ifeq ($(SOURCE_SUFFIX),.java)
2018-07-05 14:56:31 +02:00
e n d i f # ifndef HAS_JAVA
2020-09-21 18:15:13 +02:00
i f e q ( $( OS ) , W i n d o w s )
JAVA_NATIVE_IDENTIFIER = win32-x86-64
e l s e
ifeq ( $( OS) ,Linux)
JAVA_NATIVE_IDENTIFIER = linux-x86-64
else
ifeq ( $( OS) ,Darwin)
2021-04-23 15:52:11 +02:00
JAVA_NATIVE_IDENTIFIER = darwin-x86-64
2020-09-21 18:15:13 +02:00
else
$( error OS unknown !)
endif
endif
e n d i f
2018-07-05 14:56:31 +02:00
2020-09-21 18:15:13 +02:00
JAVA_NATIVE_PROJECT := ortools-$( JAVA_NATIVE_IDENTIFIER) -@PROJECT_VERSION@.jar
JAVA_PROJECT := ortools-java-@PROJECT_VERSION@.jar
2018-07-05 14:56:31 +02:00
2020-09-28 22:48:39 +02:00
java.log : \
$( JAVA_NATIVE_PROJECT) pom-runtime.xml \
$( JAVA_PROJECT) pom-local.xml
2021-12-09 17:32:57 +01:00
" $( MVN_BIN) " org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install-file \
-Dfile = $( JAVA_NATIVE_PROJECT)
" $( MVN_BIN) " org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install-file \
-Dfile = $( JAVA_PROJECT)
2020-09-21 18:15:13 +02:00
@$( TOUCH) $@
2018-07-05 14:56:31 +02:00
.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)
2020-09-21 18:15:13 +02:00
@echo MVN_BIN = $( MVN_BIN)
2018-07-05 14:56:31 +02:00
i f e q ( $( SYSTEM ) , w i n )
@echo off & echo(
e l s e
@echo
e n d i f
##############
## DOTNET ##
##############
2018-10-29 14:17:53 +01:00
.PHONY : dotnet test_dotnet
2018-07-05 14:56:31 +02:00
i f n d e f D O T N E T _ B I N
2018-10-29 14:17:53 +01:00
dotnet test_dotnet :
2018-09-10 13:23:29 +02:00
@echo the command 'dotnet' was not found in your PATH
2018-07-20 13:52:34 +02:00
exit 127
2018-07-05 14:56:31 +02:00
e l s e
2018-09-14 16:40:24 +02:00
dotnet :
2021-12-09 17:32:57 +01:00
$( MAKE) run SOURCE = examples/dotnet/3_jugs_regular/3_jugs_regular.cs
2018-11-23 14:23:59 +01:00
# Linear Solver
2021-12-09 17:32:57 +01:00
$( MAKE) run SOURCE = examples/dotnet/SimpleLpProgram/SimpleLpProgram.cs
$( MAKE) run SOURCE = examples/dotnet/SimpleMipProgram/SimpleMipProgram.cs
2018-12-27 10:56:05 +01:00
# Constraint Solver
2021-12-09 17:32:57 +01:00
$( MAKE) run SOURCE = examples/dotnet/Tsp/Tsp.cs
$( MAKE) run SOURCE = examples/dotnet/Vrp/Vrp.cs
2018-11-23 14:23:59 +01:00
# Sat
2021-12-09 17:32:57 +01:00
$( MAKE) run SOURCE = examples/dotnet/NursesSat/NursesSat.cs
$( MAKE) run SOURCE = examples/dotnet/JobshopSat/JobshopSat.cs
$( MAKE) run SOURCE = examples/dotnet/JobshopFt06Sat/JobshopFt06Sat.cs
$( MAKE) run SOURCE = examples/dotnet/GateSchedulingSat/GateSchedulingSat.cs
$( MAKE) run SOURCE = examples/dotnet/TaskSchedulingSat/TaskSchedulingSat.cs
2018-11-23 14:23:59 +01:00
# Misc
2021-12-09 17:32:57 +01:00
$( MAKE) run SOURCE = examples/dotnet/cslinearprogramming/cslinearprogramming.cs
$( MAKE) run SOURCE = examples/dotnet/csintegerprogramming/csintegerprogramming.cs
$( MAKE) run SOURCE = examples/dotnet/assignment/assignment.cs
$( MAKE) run SOURCE = examples/dotnet/alldifferent_except_0/alldifferent_except_0.cs
$( MAKE) run SOURCE = examples/dotnet/all_interval/all_interval.cs
$( MAKE) run SOURCE = examples/dotnet/a_puzzle/a_puzzle.cs
$( MAKE) run SOURCE = examples/dotnet/a_round_of_golf/a_round_of_golf.cs
$( MAKE) run SOURCE = examples/dotnet/broken_weights/broken_weights.cs
$( MAKE) run SOURCE = examples/dotnet/bus_schedule/bus_schedule.cs
$( MAKE) run SOURCE = examples/dotnet/circuit2/circuit2.cs
$( MAKE) run SOURCE = examples/dotnet/circuit/circuit.cs
$( MAKE) run SOURCE = examples/dotnet/coins3/coins3.cs
$( MAKE) run SOURCE = examples/dotnet/coins_grid/coins_grid.cs ARGS = "5 2"
$( MAKE) run SOURCE = examples/dotnet/combinatorial_auction2/combinatorial_auction2.cs
$( MAKE) run SOURCE = examples/dotnet/contiguity_regular/contiguity_regular.cs
$( MAKE) run SOURCE = examples/dotnet/contiguity_transition/contiguity_transition.cs
$( MAKE) run SOURCE = examples/dotnet/costas_array/costas_array.cs
$( MAKE) run SOURCE = examples/dotnet/covering_opl/covering_opl.cs
$( MAKE) run SOURCE = examples/dotnet/crew/crew.cs
$( MAKE) run SOURCE = examples/dotnet/crossword/crossword.cs
$( MAKE) run SOURCE = examples/dotnet/crypta/crypta.cs
$( MAKE) run SOURCE = examples/dotnet/crypto/crypto.cs
$( MAKE) run SOURCE = examples/dotnet/cscvrptw/cscvrptw.cs
$( MAKE) run SOURCE = examples/dotnet/csflow/csflow.cs
$( MAKE) run SOURCE = examples/dotnet/csknapsack/csknapsack.cs
$( MAKE) run SOURCE = examples/dotnet/csls_api/csls_api.cs
$( MAKE) run SOURCE = examples/dotnet/csrabbitspheasants/csrabbitspheasants.cs
$( MAKE) run SOURCE = examples/dotnet/cstsp/cstsp.cs
$( MAKE) run SOURCE = examples/dotnet/curious_set_of_integers/curious_set_of_integers.cs
$( MAKE) run SOURCE = examples/dotnet/debruijn/debruijn.cs
$( MAKE) run SOURCE = examples/dotnet/csdiet/csdiet.cs
$( MAKE) run SOURCE = examples/dotnet/discrete_tomography/discrete_tomography.cs
$( MAKE) run SOURCE = examples/dotnet/divisible_by_9_through_1/divisible_by_9_through_1.cs
$( MAKE) run SOURCE = examples/dotnet/dudeney/dudeney.cs
$( MAKE) run SOURCE = examples/dotnet/einav_puzzle2/einav_puzzle2.cs
$( MAKE) run SOURCE = examples/dotnet/eq10/eq10.cs
$( MAKE) run SOURCE = examples/dotnet/eq20/eq20.cs
$( MAKE) run SOURCE = examples/dotnet/fill_a_pix/fill_a_pix.cs
$( MAKE) run SOURCE = examples/dotnet/furniture_moving/furniture_moving.cs
$( MAKE) run SOURCE = examples/dotnet/furniture_moving_intervals/furniture_moving_intervals.cs
$( MAKE) run SOURCE = examples/dotnet/futoshiki/futoshiki.cs
$( MAKE) run SOURCE = examples/dotnet/golomb_ruler/golomb_ruler.cs
$( MAKE) run SOURCE = examples/dotnet/grocery/grocery.cs
$( MAKE) run SOURCE = examples/dotnet/hidato_table/hidato_table.cs
$( MAKE) run SOURCE = examples/dotnet/just_forgotten/just_forgotten.cs
$( MAKE) run SOURCE = examples/dotnet/kakuro/kakuro.cs
$( MAKE) run SOURCE = examples/dotnet/kenken2/kenken2.cs
$( MAKE) run SOURCE = examples/dotnet/killer_sudoku/killer_sudoku.cs
$( MAKE) run SOURCE = examples/dotnet/labeled_dice/labeled_dice.cs
$( MAKE) run SOURCE = examples/dotnet/langford/langford.cs
$( MAKE) run SOURCE = examples/dotnet/least_diff/least_diff.cs
$( MAKE) run SOURCE = examples/dotnet/lectures/lectures.cs
$( MAKE) run SOURCE = examples/dotnet/magic_sequence/magic_sequence.cs
$( MAKE) run SOURCE = examples/dotnet/magic_square_and_cards/magic_square_and_cards.cs
$( MAKE) run SOURCE = examples/dotnet/magic_square/magic_square.cs
$( MAKE) run SOURCE = examples/dotnet/map2/map2.cs
$( MAKE) run SOURCE = examples/dotnet/map/map.cs
$( MAKE) run SOURCE = examples/dotnet/marathon2/marathon2.cs
$( MAKE) run SOURCE = examples/dotnet/max_flow_taha/max_flow_taha.cs
$( MAKE) run SOURCE = examples/dotnet/max_flow_winston1/max_flow_winston1.cs
$( MAKE) run SOURCE = examples/dotnet/minesweeper/minesweeper.cs
$( MAKE) run SOURCE = examples/dotnet/mr_smith/mr_smith.cs
# $(MAKE) run SOURCE=examples/dotnet/nontransitive_dice/nontransitive_dice.cs # too long
$( MAKE) run SOURCE = examples/dotnet/nqueens/nqueens.cs
$( MAKE) run SOURCE = examples/dotnet/nurse_rostering_regular/nurse_rostering_regular.cs
$( MAKE) run SOURCE = examples/dotnet/nurse_rostering_transition/nurse_rostering_transition.cs
$( MAKE) run SOURCE = examples/dotnet/olympic/olympic.cs
$( MAKE) run SOURCE = examples/dotnet/organize_day/organize_day.cs
$( MAKE) run SOURCE = examples/dotnet/organize_day_intervals/organize_day_intervals.cs
$( MAKE) run SOURCE = examples/dotnet/pandigital_numbers/pandigital_numbers.cs
# $(MAKE) run SOURCE=examples/dotnet/partition/partition.cs # too long
$( MAKE) run SOURCE = examples/dotnet/perfect_square_sequence/perfect_square_sequence.cs
$( MAKE) run SOURCE = examples/dotnet/photo_problem/photo_problem.cs
$( MAKE) run SOURCE = examples/dotnet/place_number_puzzle/place_number_puzzle.cs
$( MAKE) run SOURCE = examples/dotnet/p_median/p_median.cs
$( MAKE) run SOURCE = examples/dotnet/post_office_problem2/post_office_problem2.cs
$( MAKE) run SOURCE = examples/dotnet/quasigroup_completion/quasigroup_completion.cs
$( MAKE) run SOURCE = examples/dotnet/regex/regex.cs
$( MAKE) run SOURCE = examples/dotnet/rogo2/rogo2.cs
$( MAKE) run SOURCE = examples/dotnet/scheduling_speakers/scheduling_speakers.cs
$( MAKE) run SOURCE = examples/dotnet/secret_santa2/secret_santa2.cs
# $(MAKE) run SOURCE=examples/dotnet/secret_santa/secret_santa.cs # too long
$( MAKE) run SOURCE = examples/dotnet/send_more_money2/send_more_money2.cs
$( MAKE) run SOURCE = examples/dotnet/send_more_money/send_more_money.cs
$( MAKE) run SOURCE = examples/dotnet/send_most_money/send_most_money.cs
$( MAKE) run SOURCE = examples/dotnet/seseman/seseman.cs
$( MAKE) run SOURCE = examples/dotnet/set_covering2/set_covering2.cs
$( MAKE) run SOURCE = examples/dotnet/set_covering3/set_covering3.cs
$( MAKE) run SOURCE = examples/dotnet/set_covering4/set_covering4.cs
$( MAKE) run SOURCE = examples/dotnet/set_covering/set_covering.cs
$( MAKE) run SOURCE = examples/dotnet/set_covering_deployment/set_covering_deployment.cs
$( MAKE) run SOURCE = examples/dotnet/set_covering_skiena/set_covering_skiena.cs
$( MAKE) run SOURCE = examples/dotnet/set_partition/set_partition.cs
$( MAKE) run SOURCE = examples/dotnet/sicherman_dice/sicherman_dice.cs
$( MAKE) run SOURCE = examples/dotnet/ski_assignment/ski_assignment.cs
$( MAKE) run SOURCE = examples/dotnet/stable_marriage/stable_marriage.cs
$( MAKE) run SOURCE = examples/dotnet/strimko2/strimko2.cs
$( MAKE) run SOURCE = examples/dotnet/subset_sum/subset_sum.cs
$( MAKE) run SOURCE = examples/dotnet/sudoku/sudoku.cs
$( MAKE) run SOURCE = examples/dotnet/survo_puzzle/survo_puzzle.cs
$( MAKE) run SOURCE = examples/dotnet/to_num/to_num.cs
$( MAKE) run SOURCE = examples/dotnet/traffic_lights/traffic_lights.cs
$( MAKE) run SOURCE = examples/dotnet/volsay/volsay.cs
$( MAKE) run SOURCE = examples/dotnet/volsay2/volsay2.cs
$( MAKE) run SOURCE = examples/dotnet/volsay3/volsay3.cs
$( MAKE) run SOURCE = examples/dotnet/wedding_optimal_chart/wedding_optimal_chart.cs
$( MAKE) run SOURCE = examples/dotnet/who_killed_agatha/who_killed_agatha.cs
$( MAKE) run SOURCE = examples/dotnet/xkcd/xkcd.cs
$( MAKE) run SOURCE = examples/dotnet/young_tableaux/young_tableaux.cs
$( MAKE) run SOURCE = examples/dotnet/zebra/zebra.cs
# $(MAKE) run SOURCE=examples/dotnet/word_square/word_square.cs # depends on /usr/share/dict/words
2018-07-05 14:56:31 +02:00
2018-09-14 18:35:57 +02:00
test_dotnet : detect_dotnet
2021-12-09 17:32:57 +01:00
$( MAKE) run SOURCE = examples/dotnet/SimpleLpProgram/SimpleLpProgram.cs
$( MAKE) run SOURCE = examples/dotnet/SimpleMipProgram/SimpleMipProgram.cs
$( MAKE) run SOURCE = examples/dotnet/Tsp/Tsp.cs
$( MAKE) run SOURCE = examples/dotnet/Vrp/Vrp.cs
$( MAKE) run SOURCE = examples/dotnet/JobshopSat/JobshopSat.cs
$( MAKE) run SOURCE = examples/dotnet/NursesSat/NursesSat.cs
2018-10-29 14:17:53 +01:00
###################
## .NET SOURCE ##
###################
# .Net C#
i f e q ( $( SOURCE_SUFFIX ) , . c s ) # Those rules will be used if SOURCE contain a .cs file
i f e q ( , $( wildcard $ ( SOURCE ) proj ) )
$( error File "$ ( SOURCE ) proj " does not exist !)
e n d i f
.PHONY : build # Build a .Net C# program.
build : $( SOURCE ) $( SOURCE ) proj
" $( DOTNET_BIN) " build $( SOURCE_PATH) proj
2018-07-05 14:56:31 +02:00
2018-10-29 14:17:53 +01:00
.PHONY : run # Run a .Net C# program.
run : build
2021-12-09 11:34:01 +01:00
" $( DOTNET_BIN) " run --no-build --framework net6.0 --project $( SOURCE_PATH) proj -- $( ARGS)
2018-10-29 14:17:53 +01:00
e n d i f # ifeq ($(SOURCE_SUFFIX),.cs)
e n d i f # ifndef DOTNET_BIN
2018-07-05 14:56:31 +02:00
.PHONY : detect_dotnet
detect_dotnet :
@echo DOTNET_BIN = $( DOTNET_BIN)
i f e q ( $( SYSTEM ) , w i n )
@echo off & echo(
e l s e
@echo
e n d i f
############
## MISC ##
############
# Include user makefile
- i n c l u d e M a k e f i l e . u s e r
print-% : ; @echo $* = $( $ *)