1VERSION := @PROJECT_VERSION@ 2# Let's discover something about where we run 3ifeq ($(OS),Windows_NT) 4OS = Windows 5endif 6ifeq ($(OS),Windows) 7SYSTEM = win 8else 9SYSTEM = unix 10endif 11 12.SECONDARY: 13 14# Useful directories. 15INC_DIR = include 16EX_DIR = examples 17CPP_EX_DIR = examples/cpp 18CPP_EX_PATH = $(subst /,$S,$(CPP_EX_DIR)) 19JAVA_EX_DIR = examples/java 20JAVA_EX_PATH = $(subst /,$S,$(JAVA_EX_DIR)) 21DOTNET_EX_DIR = examples/dotnet 22DOTNET_EX_PATH = $(subst /,$S,$(DOTNET_EX_DIR)) 23OBJ_DIR = objs 24CLASS_DIR = classes 25LIB_DIR = lib 26BIN_DIR = bin 27 28# Unix specific part. 29ifeq ($(SYSTEM),unix) 30 OS = $(shell uname -s) 31 TOUCH = touch 32# C++ 33 ifeq ($(OS),Linux) 34 CXX = g++ 35 LDFLAGS = \ 36-Wl,-rpath,"\$$ORIGIN" \ 37-Wl,-rpath,"\$$ORIGIN/../lib64" \ 38-Wl,-rpath,"\$$ORIGIN/../lib" \ 39-lz -lrt -lpthread 40 LBITS = $(shell getconf LONG_BIT) 41 ifeq ($(LBITS),64) 42 PORT = Linux64 43 ARCH = -DARCH_K8 44 NETPLATFORM = anycpu 45 else 46 PORT = Linux32 47 ARCH = 48 NETPLATFORM = x86 49 endif 50 MONO = LD_LIBRARY_PATH=$(LIB_DIR):$(LD_LIBRARY_PATH) mono 51 L = .so 52 endif # ifeq($(OS),Linux) 53 ifeq ($(OS),Darwin) # Assume Mac Os X 54 CXX = clang++ 55 LDFLAGS = \ 56-Wl,-rpath,@loader_path \ 57-Wl,-rpath,@loader_path/../lib \ 58-lz -framework CoreFoundation 59 PORT = MacOsX64 60 ARCH = -DARCH_K8 61 NETPLATFORM = x64 62 MONO = DYLD_FALLBACK_LIBRARY_PATH=$(LIB_DIR):$(DYLD_LIBRARY_PATH) mono 63 L = .dylib 64 endif # ifeq($(OS),Darwin) 65 CXX_BIN := $(shell command -v $(CXX) 2> /dev/null) 66 DEBUG = -O4 -DNDEBUG 67 CXXFLAGS = -fPIC -std=c++17 $(DEBUG) \ 68 -I$(INC_DIR) -I. $(ARCH) -Wno-deprecated \ 69 -DUSE_BOP -DUSE_GLOP \ 70 -DUSE_CBC -DUSE_CLP \ 71 -DUSE_SCIP 72 LIB_PREFIX = lib 73 PRE_LIB = -Llib -Llib64 74 OR_TOOLS_LNK = $(PRE_LIB) -lortools 75 OBJ_OUT = -o # 76 EXE_OUT = -o # 77 O = .o 78 J = .jar 79 D = .dll 80 E = 81# Java 82ifneq ($(JAVA_HOME),) 83 JAVAC_BIN := $(shell command -v $(JAVA_HOME)/bin/javac 2> /dev/null) 84 JAR_BIN := $(shell command -v $(JAVA_HOME)/bin/jar 2> /dev/null) 85 JAVA_BIN := $(shell command -v $(JAVA_HOME)/bin/java 2> /dev/null) 86else 87 JAVAC_BIN := $(shell command -v javac 2> /dev/null) 88 JAR_BIN := $(shell command -v jar 2> /dev/null) 89 JAVA_BIN := $(shell command -v java 2> /dev/null) 90endif 91 MVN_BIN := $(shell command -v mvn 2> /dev/null) 92 JAVAFLAGS = -Djava.library.path=$(LIB_DIR) 93 CPSEP = : 94# .Net 95 DOTNET = dotnet 96 DOTNET_BIN := $(shell command -v $(DOTNET) 2> /dev/null) 97# Makefile 98 S = / 99 DEL = rm -f 100 DEL_REC = rm -rf 101 MKDIR = mkdir 102endif # SYSTEM == unix 103 104# Windows specific part. 105ifeq ($(SYSTEM),win) 106 WHICH = tools\\win\\which.exe 107 TOUCH = tools\\win\\touch.exe 108 ifeq ("$(Platform)","X64") 109 PLATFORM = Win64 110 endif 111 ifeq ("$(Platform)","x64") 112 PLATFORM = Win64 113 endif 114 ifeq ("$(PLATFORM)","Win64") 115 PORT = VisualStudio$(VISUAL_STUDIO)-64b 116 NETPLATFORM = x64 117 else 118 PORT = VisualStudio$(VISUAL_STUDIO)-32b 119 NETPLATFORM = x86 120 endif 121 CXX = cl 122 # We can't use `where` since it's return all matching pathnames 123 # so we ship which.exe and use it 124 CXX_BIN := $(shell $(WHICH) $(CXX) 2> NUL) 125 DEBUG = /O2 -DNDEBUG 126 CXXFLAGS = /std:c++17 /EHsc /MD /nologo /D_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS -nologo $(DEBUG) \ 127 /DPSAPI_VERSION=1 /D__WIN32__ /DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS \ 128 /DGOOGLE_GLOG_DLL_DECL= \ 129 /I$(INC_DIR)\\src\\windows /I$(INC_DIR) /I. \ 130 /DUSE_BOP /DUSE_GLOP \ 131 /DUSE_CBC /DUSE_CLP \ 132 /DUSE_SCIP 133 LDFLAGS = psapi.lib ws2_32.lib 134 LIB_PREFIX = 135 OR_TOOLS_LNK = lib\\ortools.lib 136 OBJ_OUT = /Fo 137 EXE_OUT = /Fe 138 O = .obj 139 L = .lib 140 J = .jar 141 D = .dll 142 E = .exe 143# Java 144 JAVAC_BIN := $(shell $(WHICH) javac 2> NUL) 145 JAR_BIN := $(shell $(WHICH) jar 2> NUL) 146 JAVA_BIN := $(shell $(WHICH) java 2> NUL) 147 MVN_BIN := $(shell $(WHICH) mvn.cmd 2> NUL) 148 JAVAFLAGS = -Djava.library.path=$(LIB_DIR) 149 CPSEP = ; 150# .Net 151 DOTNET = dotnet 152 DOTNET_BIN := $(shell $(WHICH) $(DOTNET) 2> NUL) 153# Makefile 154 S = \\ 155 DEL = del 156 DEL_REC = rd /S /Q 157 MKDIR = md 158endif # SYSTEM == win 159 160OR_TOOLS_LIBS = $(LIB_DIR)/$(LIB_PREFIX)ortools$L 161 162.PHONY: all 163all: detect cc java dotnet test 164 165.PHONY: detect 166detect: detect_port detect_cc detect_java detect_dotnet 167 @echo SOURCE = $(SOURCE) 168 @echo SOURCE_PATH = $(SOURCE_PATH) 169 @echo SOURCE_NAME = $(SOURCE_NAME) 170 @echo SOURCE_SUFFIX = $(SOURCE_SUFFIX) 171ifeq ($(SYSTEM),win) 172 @echo off & echo( 173else 174 @echo 175endif 176 177.PHONY: test 178test: test_cc test_java test_dotnet 179 180.PHONY: clean 181clean: 182 -$(DEL) $(EXE) 183 -$(DEL_REC) $(OBJ_DIR) 184 -$(DEL_REC) $(CLASS_DIR) 185 186.PHONY: detect_port 187detect_port: 188 @echo VERSION = $(VERSION) 189 @echo SHELL = $(SHELL) 190 @echo SYSTEM = $(SYSTEM) 191 @echo PORT = $(PORT) 192 @echo OS = $(OS) 193ifeq ($(SYSTEM),win) 194 @echo off & echo( 195else 196 @echo 197endif 198 199############## 200## SOURCE ## 201############## 202# Check SOURCE argument 203SOURCE_SUFFIX = $(suffix $(SOURCE)) 204# will contain “/any/path/foo.cc” on unix and “\\any\\path\\foo.cc” on windows 205SOURCE_PATH = $(subst /,$S,$(SOURCE)) 206SOURCE_NAME = $(basename $(notdir $(SOURCE))) 207ifeq ($(SOURCE),) # Those rules will be used if SOURCE is empty 208.PHONY: build run 209build run: 210 $(error no source file provided, the "$@" target must be used like so: \ 211 make $@ SOURCE=relative/path/to/filename.extension) 212else 213ifeq (,$(wildcard $(SOURCE))) 214$(error File "$(SOURCE)" does not exist !) 215endif 216endif 217 218########### 219## C++ ## 220########### 221EXE = \ 222$(BIN_DIR)/simple_ls_program$E \ 223$(BIN_DIR)/rabbits_and_pheasants_cp$E \ 224$(BIN_DIR)/nurses_cp$E \ 225$(BIN_DIR)/minimal_jobshop_cp$E \ 226\ 227$(BIN_DIR)/constraint_programming_cp$E \ 228$(BIN_DIR)/costas_array_sat$E \ 229$(BIN_DIR)/cvrp_disjoint_tw$E \ 230$(BIN_DIR)/cvrptw$E \ 231$(BIN_DIR)/cvrptw_with_breaks$E \ 232$(BIN_DIR)/cvrptw_with_refueling$E \ 233$(BIN_DIR)/cvrptw_with_resources$E \ 234$(BIN_DIR)/cvrptw_with_stop_times_and_resources$E \ 235$(BIN_DIR)/dimacs_assignment$E \ 236$(BIN_DIR)/dobble_ls$E \ 237$(BIN_DIR)/flow_api$E \ 238$(BIN_DIR)/frequency_assignment_problem$E \ 239$(BIN_DIR)/golomb_sat$E \ 240$(BIN_DIR)/integer_programming$E \ 241$(BIN_DIR)/jobshop_sat$E \ 242$(BIN_DIR)/knapsack$E \ 243$(BIN_DIR)/linear_assignment_api$E \ 244$(BIN_DIR)/linear_programming$E \ 245$(BIN_DIR)/linear_solver_protocol_buffers$E \ 246$(BIN_DIR)/magic_square_sat$E \ 247$(BIN_DIR)/max_flow$E \ 248$(BIN_DIR)/min_cost_flow$E \ 249$(BIN_DIR)/mps_driver$E \ 250$(BIN_DIR)/network_routing_sat$E \ 251$(BIN_DIR)/nqueens$E \ 252$(BIN_DIR)/random_tsp$E \ 253$(BIN_DIR)/pdptw$E \ 254$(BIN_DIR)/shift_minimization_sat$E \ 255$(BIN_DIR)/solve$E \ 256$(BIN_DIR)/sports_scheduling_sat$E \ 257$(BIN_DIR)/strawberry_fields_with_column_generation$E \ 258$(BIN_DIR)/tsp$E \ 259$(BIN_DIR)/vrp$E \ 260$(BIN_DIR)/weighted_tardiness_sat$E 261 262.PHONY: cc test_cc 263ifndef CXX_BIN 264cc test_cc: 265 @echo the $(CXX) command was not found in your PATH 266 exit 127 267else 268cc: $(EXE) 269test_cc: detect_cc 270 $(MAKE) run SOURCE=examples/cpp/simple_knapsack_program.cc 271 $(MAKE) run SOURCE=examples/cpp/simple_max_flow_program.cc 272 $(MAKE) run SOURCE=examples/cpp/simple_min_cost_flow_program.cc 273 $(MAKE) run SOURCE=examples/cpp/simple_lp_program.cc 274 $(MAKE) run SOURCE=examples/cpp/simple_mip_program.cc 275 $(MAKE) run SOURCE=examples/cpp/simple_sat_program.cc 276 $(MAKE) run SOURCE=examples/cpp/simple_ls_program.cc 277 $(MAKE) run SOURCE=examples/cpp/tsp.cc 278 $(MAKE) run SOURCE=examples/cpp/vrp.cc 279 $(MAKE) run SOURCE=examples/cpp/nurses_cp.cc 280 $(MAKE) run SOURCE=examples/cpp/minimal_jobshop_cp.cc 281 $(MAKE) run SOURCE=examples/cpp/linear_programming.cc 282 $(MAKE) run SOURCE=examples/cpp/integer_programming.cc 283 284################## 285## C++ SOURCE ## 286################## 287IS_CPP = 288ifeq ($(SOURCE_SUFFIX),.cc) 289 IS_CPP = true 290endif 291ifeq ($(SOURCE_SUFFIX),.cpp) 292 IS_CPP = true 293endif 294ifdef IS_CPP # Those rules will be used if SOURCE contain a .cc or .cpp file 295$(OBJ_DIR)/$(SOURCE_NAME).$O: $(SOURCE) | $(OBJ_DIR) 296 $(CXX) $(CXXFLAGS) \ 297 -c $(SOURCE_PATH) \ 298 $(OBJ_OUT)$(OBJ_DIR)$S$(SOURCE_NAME).$O 299 300$(BIN_DIR)/$(SOURCE_NAME)$E: $(OBJ_DIR)/$(SOURCE_NAME).$O | $(BIN_DIR) 301 $(CXX) $(CXXFLAGS) \ 302 $(OBJ_DIR)$S$(SOURCE_NAME).$O \ 303 $(OR_TOOLS_LNK) $(LDFLAGS) \ 304 $(EXE_OUT)$(BIN_DIR)$S$(SOURCE_NAME)$E 305 306.PHONY: build # Build a C++ program. 307build: $(BIN_DIR)/$(SOURCE_NAME)$E 308 309.PHONY: run # Run a C++ program. 310run: build 311 $(BIN_DIR)$S$(SOURCE_NAME)$E $(ARGS) 312endif # ifeq IS_CPP 313endif # ifndef CXX_BIN 314 315$(OBJ_DIR): 316 -$(MKDIR) $(OBJ_DIR) 317 318$(OBJ_DIR)/%$O: $(CPP_EX_DIR)/%.cc | $(OBJ_DIR) 319 $(CXX) $(CXXFLAGS) -c $(CPP_EX_PATH)$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*$O 320 321$(BIN_DIR)/%$E: $(OBJ_DIR)/%$O 322 $(CXX) $(CXXFLAGS) $(OBJ_DIR)$S$*$O $(OR_TOOLS_LNK) $(LDFLAGS) $(EXE_OUT)$(BIN_DIR)$S$*$E 323 324.PHONY: detect_cc 325detect_cc: 326 @echo CXX = $(CXX) 327 @echo CXX_BIN = $(CXX_BIN) 328 @echo CXXFLAGS = $(CXXFLAGS) 329 @echo LDFLAGS = $(LDFLAGS) 330 @echo OR_TOOLS_LNK = $(OR_TOOLS_LNK) 331ifeq ($(SYSTEM),win) 332 @echo off & echo( 333else 334 @echo 335endif 336 337############ 338## JAVA ## 339############ 340HAS_JAVA = true 341ifndef JAVAC_BIN 342HAS_JAVA = 343endif 344ifndef JAR_BIN 345HAS_JAVA = 346endif 347ifndef JAVA_BIN 348HAS_JAVA = 349endif 350ifndef MVN_BIN 351HAS_JAVA = 352endif 353 354.PHONY: java test_java 355ifndef HAS_JAVA 356java test_java: 357 @echo the command 'java', 'javac', 'jar' or 'mvn' was not found in your PATH 358 exit 127 359else 360java: 361 $(MAKE) run SOURCE=examples/java/LinearProgramming/src/main/java/com/google/ortools/LinearProgramming.java 362 $(MAKE) run SOURCE=examples/java/IntegerProgramming/src/main/java/com/google/ortools/IntegerProgramming.java 363 $(MAKE) run SOURCE=examples/java/RabbitsPheasants/src/main/java/com/google/ortools/RabbitsPheasants.java 364 $(MAKE) run SOURCE=examples/java/Tsp/src/main/java/com/google/ortools/Tsp.java 365 $(MAKE) run SOURCE=examples/java/Vrp/src/main/java/com/google/ortools/Vrp.java 366 $(MAKE) run SOURCE=examples/java/Knapsack/src/main/java/com/google/ortools/Knapsack.java 367 $(MAKE) run SOURCE=examples/java/AllDifferentExcept0/src/main/java/com/google/ortools/AllDifferentExcept0.java 368 $(MAKE) run SOURCE=examples/java/AllInterval/src/main/java/com/google/ortools/AllInterval.java 369 $(MAKE) run SOURCE=examples/java/CapacitatedVehicleRoutingProblemWithTimeWindows/src/main/java/com/google/ortools/CapacitatedVehicleRoutingProblemWithTimeWindows.java 370 $(MAKE) run SOURCE=examples/java/Circuit/src/main/java/com/google/ortools/Circuit.java 371 $(MAKE) run SOURCE=examples/java/CoinsGrid/src/main/java/com/google/ortools/CoinsGrid.java 372 $(MAKE) run SOURCE=examples/java/CoinsGridMIP/src/main/java/com/google/ortools/CoinsGridMIP.java 373 $(MAKE) run SOURCE=examples/java/ColoringMIP/src/main/java/com/google/ortools/ColoringMIP.java 374 $(MAKE) run SOURCE=examples/java/CoveringOpl/src/main/java/com/google/ortools/CoveringOpl.java 375 $(MAKE) run SOURCE=examples/java/Crossword/src/main/java/com/google/ortools/Crossword.java 376 $(MAKE) run SOURCE=examples/java/DeBruijn/src/main/java/com/google/ortools/DeBruijn.java 377 $(MAKE) run SOURCE=examples/java/Diet/src/main/java/com/google/ortools/Diet.java 378 $(MAKE) run SOURCE=examples/java/DietMIP/src/main/java/com/google/ortools/DietMIP.java 379 $(MAKE) run SOURCE=examples/java/DivisibleBy9Through1/src/main/java/com/google/ortools/DivisibleBy9Through1.java 380 $(MAKE) run SOURCE=examples/java/FlowExample/src/main/java/com/google/ortools/FlowExample.java 381 $(MAKE) run SOURCE=examples/java/GolombRuler/src/main/java/com/google/ortools/GolombRuler.java 382 $(MAKE) run SOURCE=examples/java/Issue173/src/main/java/com/google/ortools/Issue173.java 383 $(MAKE) run SOURCE=examples/java/KnapsackMIP/src/main/java/com/google/ortools/KnapsackMIP.java 384 $(MAKE) run SOURCE=examples/java/LeastDiff/src/main/java/com/google/ortools/LeastDiff.java 385 $(MAKE) run SOURCE=examples/java/LinearAssignmentAPI/src/main/java/com/google/ortools/LinearAssignmentAPI.java 386 $(MAKE) run SOURCE=examples/java/MagicSquare/src/main/java/com/google/ortools/MagicSquare.java 387 $(MAKE) run SOURCE=examples/java/Map2/src/main/java/com/google/ortools/Map2.java 388 $(MAKE) run SOURCE=examples/java/Map/src/main/java/com/google/ortools/Map.java 389 $(MAKE) run SOURCE=examples/java/Minesweeper/src/main/java/com/google/ortools/Minesweeper.java 390 $(MAKE) run SOURCE=examples/java/MultiThreadTest/src/main/java/com/google/ortools/MultiThreadTest.java 391 $(MAKE) run SOURCE=examples/java/NQueens2/src/main/java/com/google/ortools/NQueens2.java 392 $(MAKE) run SOURCE=examples/java/NQueens/src/main/java/com/google/ortools/NQueens.java 393 $(MAKE) run SOURCE=examples/java/Partition/src/main/java/com/google/ortools/Partition.java 394 $(MAKE) run SOURCE=examples/java/QuasigroupCompletion/src/main/java/com/google/ortools/QuasigroupCompletion.java 395 $(MAKE) run SOURCE=examples/java/SendMoreMoney2/src/main/java/com/google/ortools/SendMoreMoney2.java 396 $(MAKE) run SOURCE=examples/java/SendMoreMoney/src/main/java/com/google/ortools/SendMoreMoney.java 397 $(MAKE) run SOURCE=examples/java/SendMostMoney/src/main/java/com/google/ortools/SendMostMoney.java 398 $(MAKE) run SOURCE=examples/java/Seseman/src/main/java/com/google/ortools/Seseman.java 399 $(MAKE) run SOURCE=examples/java/SetCovering2/src/main/java/com/google/ortools/SetCovering2.java 400 $(MAKE) run SOURCE=examples/java/SetCovering3/src/main/java/com/google/ortools/SetCovering3.java 401 $(MAKE) run SOURCE=examples/java/SetCovering4/src/main/java/com/google/ortools/SetCovering4.java 402 $(MAKE) run SOURCE=examples/java/SetCoveringDeployment/src/main/java/com/google/ortools/SetCoveringDeployment.java 403 $(MAKE) run SOURCE=examples/java/SetCovering/src/main/java/com/google/ortools/SetCovering.java 404 $(MAKE) run SOURCE=examples/java/SimpleRoutingTest/src/main/java/com/google/ortools/SimpleRoutingTest.java 405 $(MAKE) run SOURCE=examples/java/StableMarriage/src/main/java/com/google/ortools/StableMarriage.java 406 $(MAKE) run SOURCE=examples/java/StiglerMIP/src/main/java/com/google/ortools/StiglerMIP.java 407 $(MAKE) run SOURCE=examples/java/Strimko2/src/main/java/com/google/ortools/Strimko2.java 408 $(MAKE) run SOURCE=examples/java/Sudoku/src/main/java/com/google/ortools/Sudoku.java 409 $(MAKE) run SOURCE=examples/java/SurvoPuzzle/src/main/java/com/google/ortools/SurvoPuzzle.java 410 $(MAKE) run SOURCE=examples/java/ToNum/src/main/java/com/google/ortools/ToNum.java 411 $(MAKE) run SOURCE=examples/java/WhoKilledAgatha/src/main/java/com/google/ortools/WhoKilledAgatha.java 412 $(MAKE) run SOURCE=examples/java/Xkcd/src/main/java/com/google/ortools/Xkcd.java 413 $(MAKE) run SOURCE=examples/java/YoungTableaux/src/main/java/com/google/ortools/YoungTableaux.java 414 415test_java: detect_java 416 $(MAKE) run SOURCE=examples/java/SimpleLpProgram/src/main/java/com/google/ortools/SimpleLpProgram.java 417 $(MAKE) run SOURCE=examples/java/SimpleMipProgram/src/main/java/com/google/ortools/SimpleMipProgram.java 418 $(MAKE) run SOURCE=examples/java/SimpleSatProgram/src/main/java/com/google/ortools/SimpleSatProgram.java 419 $(MAKE) run SOURCE=examples/java/Tsp/src/main/java/com/google/ortools/Tsp.java 420 $(MAKE) run SOURCE=examples/java/Vrp/src/main/java/com/google/ortools/Vrp.java 421 $(MAKE) run SOURCE=examples/java/Knapsack/src/main/java/com/google/ortools/Knapsack.java 422 423################### 424## Java SOURCE ## 425################### 426ifeq ($(SOURCE_SUFFIX),.java) # Those rules will be used if SOURCE contain a .java file 427.PHONY: build # Build a Java program. 428build: $(SOURCE) examples/java/$(SOURCE_NAME)/pom.xml | java.log 429 cd examples$Sjava$S$(SOURCE_NAME) && "$(MVN_BIN)" compile 430 431.PHONY: run # Run a Java program. 432run: build 433 cd examples$Sjava$S$(SOURCE_NAME) && "$(MVN_BIN)" exec:java $(ARGS) 434endif # ifeq ($(SOURCE_SUFFIX),.java) 435 436endif # ifndef HAS_JAVA 437 438ifeq ($(OS),Windows) 439JAVA_NATIVE_IDENTIFIER=win32-x86-64 440else 441 ifeq ($(OS),Linux) 442 JAVA_NATIVE_IDENTIFIER=linux-x86-64 443 else 444 ifeq ($(OS),Darwin) 445 JAVA_NATIVE_IDENTIFIER=darwin-x86-64 446 else 447 $(error OS unknown !) 448 endif 449 endif 450endif 451 452JAVA_NATIVE_PROJECT := ortools-$(JAVA_NATIVE_IDENTIFIER)-@PROJECT_VERSION@.jar 453JAVA_PROJECT := ortools-java-@PROJECT_VERSION@.jar 454 455java.log: \ 456 $(JAVA_NATIVE_PROJECT) pom-runtime.xml \ 457 $(JAVA_PROJECT) pom-local.xml 458 "$(MVN_BIN)" org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install-file \ 459-Dfile=$(JAVA_NATIVE_PROJECT) 460 "$(MVN_BIN)" org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install-file \ 461-Dfile=$(JAVA_PROJECT) 462 @$(TOUCH) $@ 463 464.PHONY: detect_java 465detect_java: 466 @echo JAVA_HOME = $(JAVA_HOME) 467 @echo JAVAC_BIN = $(JAVAC_BIN) 468 @echo CLASS_DIR = $(CLASS_DIR) 469 @echo JAR_BIN = $(JAR_BIN) 470 @echo JAVA_BIN = $(JAVA_BIN) 471 @echo JAVAFLAGS = $(JAVAFLAGS) 472 @echo MVN_BIN = $(MVN_BIN) 473ifeq ($(SYSTEM),win) 474 @echo off & echo( 475else 476 @echo 477endif 478 479############## 480## DOTNET ## 481############## 482.PHONY: dotnet test_dotnet 483ifndef DOTNET_BIN 484dotnet test_dotnet: 485 @echo the command 'dotnet' was not found in your PATH 486 exit 127 487else 488dotnet: 489 $(MAKE) run SOURCE=examples/dotnet/3_jugs_regular/3_jugs_regular.cs 490# Linear Solver 491 $(MAKE) run SOURCE=examples/dotnet/SimpleLpProgram/SimpleLpProgram.cs 492 $(MAKE) run SOURCE=examples/dotnet/SimpleMipProgram/SimpleMipProgram.cs 493# Constraint Solver 494 $(MAKE) run SOURCE=examples/dotnet/Tsp/Tsp.cs 495 $(MAKE) run SOURCE=examples/dotnet/Vrp/Vrp.cs 496# Sat 497 $(MAKE) run SOURCE=examples/dotnet/NursesSat/NursesSat.cs 498 $(MAKE) run SOURCE=examples/dotnet/JobshopSat/JobshopSat.cs 499 $(MAKE) run SOURCE=examples/dotnet/JobshopFt06Sat/JobshopFt06Sat.cs 500 $(MAKE) run SOURCE=examples/dotnet/GateSchedulingSat/GateSchedulingSat.cs 501 $(MAKE) run SOURCE=examples/dotnet/TaskSchedulingSat/TaskSchedulingSat.cs 502# Misc 503 $(MAKE) run SOURCE=examples/dotnet/cslinearprogramming/cslinearprogramming.cs 504 $(MAKE) run SOURCE=examples/dotnet/csintegerprogramming/csintegerprogramming.cs 505 $(MAKE) run SOURCE=examples/dotnet/assignment/assignment.cs 506 $(MAKE) run SOURCE=examples/dotnet/alldifferent_except_0/alldifferent_except_0.cs 507 $(MAKE) run SOURCE=examples/dotnet/all_interval/all_interval.cs 508 $(MAKE) run SOURCE=examples/dotnet/a_puzzle/a_puzzle.cs 509 $(MAKE) run SOURCE=examples/dotnet/a_round_of_golf/a_round_of_golf.cs 510 $(MAKE) run SOURCE=examples/dotnet/broken_weights/broken_weights.cs 511 $(MAKE) run SOURCE=examples/dotnet/bus_schedule/bus_schedule.cs 512 $(MAKE) run SOURCE=examples/dotnet/circuit2/circuit2.cs 513 $(MAKE) run SOURCE=examples/dotnet/circuit/circuit.cs 514 $(MAKE) run SOURCE=examples/dotnet/coins3/coins3.cs 515 $(MAKE) run SOURCE=examples/dotnet/coins_grid/coins_grid.cs ARGS="5 2" 516 $(MAKE) run SOURCE=examples/dotnet/combinatorial_auction2/combinatorial_auction2.cs 517 $(MAKE) run SOURCE=examples/dotnet/contiguity_regular/contiguity_regular.cs 518 $(MAKE) run SOURCE=examples/dotnet/contiguity_transition/contiguity_transition.cs 519 $(MAKE) run SOURCE=examples/dotnet/costas_array/costas_array.cs 520 $(MAKE) run SOURCE=examples/dotnet/covering_opl/covering_opl.cs 521 $(MAKE) run SOURCE=examples/dotnet/crew/crew.cs 522 $(MAKE) run SOURCE=examples/dotnet/crossword/crossword.cs 523 $(MAKE) run SOURCE=examples/dotnet/crypta/crypta.cs 524 $(MAKE) run SOURCE=examples/dotnet/crypto/crypto.cs 525 $(MAKE) run SOURCE=examples/dotnet/cscvrptw/cscvrptw.cs 526 $(MAKE) run SOURCE=examples/dotnet/csflow/csflow.cs 527 $(MAKE) run SOURCE=examples/dotnet/csknapsack/csknapsack.cs 528 $(MAKE) run SOURCE=examples/dotnet/csls_api/csls_api.cs 529 $(MAKE) run SOURCE=examples/dotnet/csrabbitspheasants/csrabbitspheasants.cs 530 $(MAKE) run SOURCE=examples/dotnet/cstsp/cstsp.cs 531 $(MAKE) run SOURCE=examples/dotnet/curious_set_of_integers/curious_set_of_integers.cs 532 $(MAKE) run SOURCE=examples/dotnet/debruijn/debruijn.cs 533 $(MAKE) run SOURCE=examples/dotnet/csdiet/csdiet.cs 534 $(MAKE) run SOURCE=examples/dotnet/discrete_tomography/discrete_tomography.cs 535 $(MAKE) run SOURCE=examples/dotnet/divisible_by_9_through_1/divisible_by_9_through_1.cs 536 $(MAKE) run SOURCE=examples/dotnet/dudeney/dudeney.cs 537 $(MAKE) run SOURCE=examples/dotnet/einav_puzzle2/einav_puzzle2.cs 538 $(MAKE) run SOURCE=examples/dotnet/eq10/eq10.cs 539 $(MAKE) run SOURCE=examples/dotnet/eq20/eq20.cs 540 $(MAKE) run SOURCE=examples/dotnet/fill_a_pix/fill_a_pix.cs 541 $(MAKE) run SOURCE=examples/dotnet/furniture_moving/furniture_moving.cs 542 $(MAKE) run SOURCE=examples/dotnet/furniture_moving_intervals/furniture_moving_intervals.cs 543 $(MAKE) run SOURCE=examples/dotnet/futoshiki/futoshiki.cs 544 $(MAKE) run SOURCE=examples/dotnet/golomb_ruler/golomb_ruler.cs 545 $(MAKE) run SOURCE=examples/dotnet/grocery/grocery.cs 546 $(MAKE) run SOURCE=examples/dotnet/hidato_table/hidato_table.cs 547 $(MAKE) run SOURCE=examples/dotnet/just_forgotten/just_forgotten.cs 548 $(MAKE) run SOURCE=examples/dotnet/kakuro/kakuro.cs 549 $(MAKE) run SOURCE=examples/dotnet/kenken2/kenken2.cs 550 $(MAKE) run SOURCE=examples/dotnet/killer_sudoku/killer_sudoku.cs 551 $(MAKE) run SOURCE=examples/dotnet/labeled_dice/labeled_dice.cs 552 $(MAKE) run SOURCE=examples/dotnet/langford/langford.cs 553 $(MAKE) run SOURCE=examples/dotnet/least_diff/least_diff.cs 554 $(MAKE) run SOURCE=examples/dotnet/lectures/lectures.cs 555 $(MAKE) run SOURCE=examples/dotnet/magic_sequence/magic_sequence.cs 556 $(MAKE) run SOURCE=examples/dotnet/magic_square_and_cards/magic_square_and_cards.cs 557 $(MAKE) run SOURCE=examples/dotnet/magic_square/magic_square.cs 558 $(MAKE) run SOURCE=examples/dotnet/map2/map2.cs 559 $(MAKE) run SOURCE=examples/dotnet/map/map.cs 560 $(MAKE) run SOURCE=examples/dotnet/marathon2/marathon2.cs 561 $(MAKE) run SOURCE=examples/dotnet/max_flow_taha/max_flow_taha.cs 562 $(MAKE) run SOURCE=examples/dotnet/max_flow_winston1/max_flow_winston1.cs 563 $(MAKE) run SOURCE=examples/dotnet/minesweeper/minesweeper.cs 564 $(MAKE) run SOURCE=examples/dotnet/mr_smith/mr_smith.cs 565# $(MAKE) run SOURCE=examples/dotnet/nontransitive_dice/nontransitive_dice.cs # too long 566 $(MAKE) run SOURCE=examples/dotnet/nqueens/nqueens.cs 567 $(MAKE) run SOURCE=examples/dotnet/nurse_rostering_regular/nurse_rostering_regular.cs 568 $(MAKE) run SOURCE=examples/dotnet/nurse_rostering_transition/nurse_rostering_transition.cs 569 $(MAKE) run SOURCE=examples/dotnet/olympic/olympic.cs 570 $(MAKE) run SOURCE=examples/dotnet/organize_day/organize_day.cs 571 $(MAKE) run SOURCE=examples/dotnet/organize_day_intervals/organize_day_intervals.cs 572 $(MAKE) run SOURCE=examples/dotnet/pandigital_numbers/pandigital_numbers.cs 573# $(MAKE) run SOURCE=examples/dotnet/partition/partition.cs # too long 574 $(MAKE) run SOURCE=examples/dotnet/perfect_square_sequence/perfect_square_sequence.cs 575 $(MAKE) run SOURCE=examples/dotnet/photo_problem/photo_problem.cs 576 $(MAKE) run SOURCE=examples/dotnet/place_number_puzzle/place_number_puzzle.cs 577 $(MAKE) run SOURCE=examples/dotnet/p_median/p_median.cs 578 $(MAKE) run SOURCE=examples/dotnet/post_office_problem2/post_office_problem2.cs 579 $(MAKE) run SOURCE=examples/dotnet/quasigroup_completion/quasigroup_completion.cs 580 $(MAKE) run SOURCE=examples/dotnet/regex/regex.cs 581 $(MAKE) run SOURCE=examples/dotnet/rogo2/rogo2.cs 582 $(MAKE) run SOURCE=examples/dotnet/scheduling_speakers/scheduling_speakers.cs 583 $(MAKE) run SOURCE=examples/dotnet/secret_santa2/secret_santa2.cs 584# $(MAKE) run SOURCE=examples/dotnet/secret_santa/secret_santa.cs # too long 585 $(MAKE) run SOURCE=examples/dotnet/send_more_money2/send_more_money2.cs 586 $(MAKE) run SOURCE=examples/dotnet/send_more_money/send_more_money.cs 587 $(MAKE) run SOURCE=examples/dotnet/send_most_money/send_most_money.cs 588 $(MAKE) run SOURCE=examples/dotnet/seseman/seseman.cs 589 $(MAKE) run SOURCE=examples/dotnet/set_covering2/set_covering2.cs 590 $(MAKE) run SOURCE=examples/dotnet/set_covering3/set_covering3.cs 591 $(MAKE) run SOURCE=examples/dotnet/set_covering4/set_covering4.cs 592 $(MAKE) run SOURCE=examples/dotnet/set_covering/set_covering.cs 593 $(MAKE) run SOURCE=examples/dotnet/set_covering_deployment/set_covering_deployment.cs 594 $(MAKE) run SOURCE=examples/dotnet/set_covering_skiena/set_covering_skiena.cs 595 $(MAKE) run SOURCE=examples/dotnet/set_partition/set_partition.cs 596 $(MAKE) run SOURCE=examples/dotnet/sicherman_dice/sicherman_dice.cs 597 $(MAKE) run SOURCE=examples/dotnet/ski_assignment/ski_assignment.cs 598 $(MAKE) run SOURCE=examples/dotnet/stable_marriage/stable_marriage.cs 599 $(MAKE) run SOURCE=examples/dotnet/strimko2/strimko2.cs 600 $(MAKE) run SOURCE=examples/dotnet/subset_sum/subset_sum.cs 601 $(MAKE) run SOURCE=examples/dotnet/sudoku/sudoku.cs 602 $(MAKE) run SOURCE=examples/dotnet/survo_puzzle/survo_puzzle.cs 603 $(MAKE) run SOURCE=examples/dotnet/to_num/to_num.cs 604 $(MAKE) run SOURCE=examples/dotnet/traffic_lights/traffic_lights.cs 605 $(MAKE) run SOURCE=examples/dotnet/volsay/volsay.cs 606 $(MAKE) run SOURCE=examples/dotnet/volsay2/volsay2.cs 607 $(MAKE) run SOURCE=examples/dotnet/volsay3/volsay3.cs 608 $(MAKE) run SOURCE=examples/dotnet/wedding_optimal_chart/wedding_optimal_chart.cs 609 $(MAKE) run SOURCE=examples/dotnet/who_killed_agatha/who_killed_agatha.cs 610 $(MAKE) run SOURCE=examples/dotnet/xkcd/xkcd.cs 611 $(MAKE) run SOURCE=examples/dotnet/young_tableaux/young_tableaux.cs 612 $(MAKE) run SOURCE=examples/dotnet/zebra/zebra.cs 613 $(MAKE) run SOURCE=examples/dotnet/fsintegerprogramming/fsintegerprogramming.fs 614 $(MAKE) run SOURCE=examples/dotnet/fslinearprogramming/fslinearprogramming.fs 615 $(MAKE) run SOURCE=examples/dotnet/fsdiet/fsdiet.fs 616 $(MAKE) run SOURCE=examples/dotnet/fsequality/fsequality.fs 617 $(MAKE) run SOURCE=examples/dotnet/fsequality-inequality/fsequality-inequality.fs 618 $(MAKE) run SOURCE=examples/dotnet/fsinteger-linear-program/fsinteger-linear-program.fs 619 $(MAKE) run SOURCE=examples/dotnet/fsknapsack/fsknapsack.fs 620 $(MAKE) run SOURCE=examples/dotnet/fsnetwork-max-flow/fsnetwork-max-flow.fs 621 $(MAKE) run SOURCE=examples/dotnet/fsnetwork-max-flow-lpSolve/fsnetwork-max-flow-lpSolve.fs 622 $(MAKE) run SOURCE=examples/dotnet/fsnetwork-min-cost-flow/fsnetwork-min-cost-flow.fs 623 $(MAKE) run SOURCE=examples/dotnet/fsProgram/fsProgram.fs 624 $(MAKE) run SOURCE=examples/dotnet/fsrabbit-pheasant/fsrabbit-pheasant.fs 625 $(MAKE) run SOURCE=examples/dotnet/fsvolsay3/fsvolsay3.fs 626 $(MAKE) run SOURCE=examples/dotnet/fsvolsay3-lpSolve/fsvolsay3-lpSolve.fs 627 $(MAKE) run SOURCE=examples/dotnet/fsvolsay/fsvolsay.fs 628# $(MAKE) run SOURCE=examples/dotnet/word_square/word_square.cs # depends on /usr/share/dict/words 629 630test_dotnet: detect_dotnet 631 $(MAKE) run SOURCE=examples/dotnet/SimpleLpProgram/SimpleLpProgram.cs 632 $(MAKE) run SOURCE=examples/dotnet/SimpleMipProgram/SimpleMipProgram.cs 633 $(MAKE) run SOURCE=examples/dotnet/Tsp/Tsp.cs 634 $(MAKE) run SOURCE=examples/dotnet/Vrp/Vrp.cs 635 $(MAKE) run SOURCE=examples/dotnet/JobshopSat/JobshopSat.cs 636 $(MAKE) run SOURCE=examples/dotnet/NursesSat/NursesSat.cs 637 $(MAKE) run SOURCE=examples/dotnet/fsProgram/fsProgram.fs 638 639################### 640## .NET SOURCE ## 641################### 642# .Net C# 643ifeq ($(SOURCE_SUFFIX),.cs) # Those rules will be used if SOURCE contain a .cs file 644ifeq (,$(wildcard $(SOURCE)proj)) 645$(error File "$(SOURCE)proj" does not exist !) 646endif 647 648.PHONY: build # Build a .Net C# program. 649build: $(SOURCE) $(SOURCE)proj 650 "$(DOTNET_BIN)" build $(SOURCE_PATH)proj 651 652.PHONY: run # Run a .Net C# program. 653run: build 654 "$(DOTNET_BIN)" run --no-build --framework net6.0 --project $(SOURCE_PATH)proj -- $(ARGS) 655endif # ifeq ($(SOURCE_SUFFIX),.cs) 656 657# .Net F# 658ifeq ($(SOURCE_SUFFIX),.fs) # Those rules will be used if SOURCE contain a .cs file 659ifeq (,$(wildcard $(SOURCE)proj)) 660$(error File "$(SOURCE)proj" does not exist !) 661endif 662 663.PHONY: build # Build a .Net F# program. 664build: $(SOURCE) $(SOURCE)proj 665 "$(DOTNET_BIN)" build $(SOURCE_PATH)proj 666 667.PHONY: run # Run a .Net F# program. 668run: build 669 "$(DOTNET_BIN)" run --no-build --framework net6.0 --project $(SOURCE_PATH)proj -- $(ARGS) 670endif # ifeq ($(SOURCE_SUFFIX),.fs) 671 672endif # ifndef DOTNET_BIN 673 674.PHONY: detect_dotnet 675detect_dotnet: 676 @echo DOTNET_BIN = $(DOTNET_BIN) 677ifeq ($(SYSTEM),win) 678 @echo off & echo( 679else 680 @echo 681endif 682 683############ 684## MISC ## 685############ 686# Include user makefile 687-include Makefile.user 688 689print-% : ; @echo $* = $($*) 690