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) CC ?= gcc 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 CC ?= clang 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) CC_BIN := $(shell command -v $(CC) 2> /dev/null) CXX_BIN := $(shell command -v $(CXX) 2> /dev/null) DEBUG = -O4 -DNDEBUG CXXFLAGS = -fPIC -std=c++20 $(DEBUG) \ -I$(INC_DIR) -I. $(ARCH) -Wno-deprecated \ -DUSE_BOP -DUSE_GLOP -DUSE_PDLP \ -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 CC ?= cl CXX ?= cl # We can't use `where` since it's return all matching pathnames # so we ship which.exe and use it CC_BIN := $(shell $(WHICH) $(CC) 2> NUL) CXX_BIN := $(shell $(WHICH) $(CXX) 2> NUL) DEBUG = /O2 -DNDEBUG CXXFLAGS = /std:c++20 /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_PDLP \ /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 CC = $(CC) @echo CC_BIN = $(CC_BIN) @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: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) @$(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/3_jugs_regular.cs # Linear Solver $(MAKE) run SOURCE=examples/dotnet/SimpleLpProgram/SimpleLpProgram.cs $(MAKE) run SOURCE=examples/dotnet/SimpleMipProgram/SimpleMipProgram.cs # Constraint Solver $(MAKE) run SOURCE=examples/dotnet/Tsp/Tsp.cs $(MAKE) run SOURCE=examples/dotnet/Vrp/Vrp.cs # Sat $(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 # Misc $(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 test_dotnet: detect_dotnet $(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 ################### ## .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 --framework net6.0 --project $(SOURCE_PATH)proj -- $(ARGS) endif # ifeq ($(SOURCE_SUFFIX),.cs) 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 $* = $($*)