1# ---------- dotnet support using SWIG ---------- 2.PHONY: help_dotnet # Generate list of dotnet targets with descriptions. 3help_dotnet: 4 @echo Use one of the following dotnet targets: 5ifeq ($(SYSTEM),win) 6 @$(GREP) "^.PHONY: .* #" $(CURDIR)/makefiles/Makefile.dotnet.mk | $(SED) "s/\.PHONY: \(.*\) # \(.*\)/\1\t\2/" 7 @echo off & echo( 8else 9 @$(GREP) "^.PHONY: .* #" $(CURDIR)/makefiles/Makefile.dotnet.mk | $(SED) "s/\.PHONY: \(.*\) # \(.*\)/\1\t\2/" | expand -t20 10 @echo 11endif 12 13# Check for required build tools 14DOTNET = dotnet 15ifeq ($(SYSTEM),win) 16DOTNET_BIN := $(shell $(WHICH) $(DOTNET) 2> NUL) 17else # UNIX 18DOTNET_BIN := $(shell command -v $(DOTNET) 2> /dev/null) 19endif 20NUGET_BIN = "$(DOTNET_BIN)" nuget 21 22HAS_DOTNET = true 23ifndef DOTNET_BIN 24HAS_DOTNET = 25endif 26 27# Main target 28.PHONY: dotnet # Build all .NET OrTools packages 29.PHONY: test_dotnet # Run all test_dotnet_* targets 30.PHONY: package_dotnet # Build all .NET OrTools packages 31ifndef HAS_DOTNET 32dotnet: 33 @echo DOTNET_BIN = $(DOTNET_BIN) 34 $(warning Cannot find '$@' command which is needed for build. Please make sure it is installed and in system path.) 35check_dotnet: dotnet 36test_dotnet: dotnet 37package_dotnet: dotnet 38else 39dotnet: dotnet_csharp dotnet_fsharp 40check_dotnet: check_dotnet_pimpl 41test_dotnet: test_dotnet_pimpl 42package_dotnet: dotnet 43BUILT_LANGUAGES +=, dotnet \(net6.0\) 44endif 45 46# Detect RuntimeIDentifier 47ifeq ($(OS),Windows) 48DOTNET_RUNTIME_IDENTIFIER=win-x64 49else 50 ifeq ($(OS),Linux) 51 DOTNET_RUNTIME_IDENTIFIER=linux-x64 52 else 53 ifeq ($(OS),Darwin) 54 DOTNET_RUNTIME_IDENTIFIER=osx-x64 55 else 56 $(error OS unknown !) 57 endif 58 endif 59endif 60 61# All libraries and dependencies 62TEMP_DOTNET_DIR = temp_dotnet 63DOTNET_PACKAGE_DIR = temp_dotnet/packages 64DOTNET_PACKAGE_PATH = $(subst /,$S,$(DOTNET_PACKAGE_DIR)) 65DOTNET_ORTOOLS_SNK := $(TEMP_DOTNET_DIR)/or-tools.snk 66DOTNET_ORTOOLS_SNK_PATH := $(subst /,$S,$(DOTNET_ORTOOLS_SNK)) 67DOTNET_ORTOOLS_ASSEMBLY_NAME := Google.OrTools 68DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME := $(DOTNET_ORTOOLS_ASSEMBLY_NAME).runtime.$(DOTNET_RUNTIME_IDENTIFIER) 69DOTNET_ORTOOLS_NATIVE := google-ortools-native 70DOTNET_ORTOOLS_NUPKG := $(DOTNET_PACKAGE_DIR)/$(DOTNET_ORTOOLS_ASSEMBLY_NAME).$(OR_TOOLS_VERSION).nupkg 71DOTNET_ORTOOLS_RUNTIME_NUPKG := $(DOTNET_PACKAGE_DIR)/$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).$(OR_TOOLS_VERSION).nupkg 72FSHARP_ORTOOLS_ASSEMBLY_NAME := $(DOTNET_ORTOOLS_ASSEMBLY_NAME).FSharp 73FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME := $(DOTNET_ORTOOLS_ASSEMBLY_NAME).FSharp.Tests 74FSHARP_ORTOOLS_NUPKG := $(DOTNET_PACKAGE_DIR)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME).$(OR_TOOLS_VERSION).nupkg 75NUGET_PACK_ARGS := -c Release 76DOTNET_BUILD_ARGS := -c Release /p:Platform=x64 77 78$(DOTNET_PACKAGE_DIR): | $(TEMP_DOTNET_DIR) 79 $(MKDIR_P) $(DOTNET_PACKAGE_PATH) 80 81###################### 82## RUNTIME CSHARP ## 83###################### 84.PHONY: dotnet_runtime # Build C# runtime OR-Tools 85dotnet_runtime: $(DOTNET_ORTOOLS_RUNTIME_NUPKG) 86 87################################################################### 88# Protobuf: generate C# cs files from proto specification files. ## 89################################################################### 90$(GEN_DIR)/ortools/constraint_solver/SearchLimit.pb.cs: \ 91 $(SRC_DIR)/ortools/constraint_solver/search_limit.proto \ 92 | $(GEN_DIR)/ortools/constraint_solver 93 $(PROTOC) --proto_path=$(SRC_DIR) \ 94 --csharp_out=$(GEN_PATH)$Sortools$Sconstraint_solver \ 95 --csharp_opt=file_extension=.pb.cs \ 96 $(SRC_DIR)$Sortools$Sconstraint_solver$Ssearch_limit.proto 97 98$(GEN_DIR)/ortools/constraint_solver/SolverParameters.pb.cs: \ 99 $(SRC_DIR)/ortools/constraint_solver/solver_parameters.proto \ 100 | $(GEN_DIR)/ortools/constraint_solver 101 $(PROTOC) --proto_path=$(SRC_DIR) \ 102 --csharp_out=$(GEN_PATH)$Sortools$Sconstraint_solver \ 103 --csharp_opt=file_extension=.pb.cs \ 104 $(SRC_DIR)$Sortools$Sconstraint_solver$Ssolver_parameters.proto 105 106$(GEN_DIR)/ortools/constraint_solver/RoutingParameters.pb.cs: \ 107 $(SRC_DIR)/ortools/constraint_solver/routing_parameters.proto \ 108 | $(GEN_DIR)/ortools/constraint_solver 109 $(PROTOC) --proto_path=$(SRC_DIR) \ 110 --csharp_out=$(GEN_PATH)$Sortools$Sconstraint_solver \ 111 --csharp_opt=file_extension=.pb.cs \ 112 $(SRC_DIR)$Sortools$Sconstraint_solver$Srouting_parameters.proto 113 114$(GEN_DIR)/ortools/constraint_solver/RoutingEnums.pb.cs: \ 115 $(SRC_DIR)/ortools/constraint_solver/routing_enums.proto \ 116 | $(GEN_DIR)/ortools/constraint_solver 117 $(PROTOC) --proto_path=$(SRC_DIR) \ 118 --csharp_out=$(GEN_PATH)$Sortools$Sconstraint_solver \ 119 --csharp_opt=file_extension=.pb.cs \ 120 $(SRC_DIR)$Sortools$Sconstraint_solver$Srouting_enums.proto 121 122$(GEN_DIR)/ortools/sat/CpModel.pb.cs: \ 123 $(SRC_DIR)/ortools/sat/cp_model.proto \ 124 | $(GEN_DIR)/ortools/sat 125 $(PROTOC) --proto_path=$(SRC_DIR) \ 126 --csharp_out=$(GEN_PATH)$Sortools$Ssat \ 127 --csharp_opt=file_extension=.pb.cs \ 128 $(SRC_DIR)$Sortools$Ssat$Scp_model.proto 129 130$(GEN_DIR)/ortools/sat/SatParameters.pb.cs: \ 131 $(SRC_DIR)/ortools/sat/sat_parameters.proto \ 132 | $(GEN_DIR)/ortools/sat 133 $(PROTOC) --proto_path=$(SRC_DIR) \ 134 --csharp_out=$(GEN_PATH)$Sortools$Ssat \ 135 --csharp_opt=file_extension=.pb.cs \ 136 $(SRC_DIR)$Sortools$Ssat$Ssat_parameters.proto 137 138$(GEN_DIR)/ortools/util/OptionalBoolean.pb.cs: \ 139 $(SRC_DIR)/ortools/util/optional_boolean.proto \ 140 | $(GEN_DIR)/ortools/util 141 $(PROTOC) --proto_path=$(SRC_DIR) \ 142 --csharp_out=$(GEN_PATH)$Sortools$Sutil \ 143 --csharp_opt=file_extension=.pb.cs \ 144 $(SRC_DIR)$Sortools$Sutil$Soptional_boolean.proto 145 146############################################################################################# 147# Swig: Generate C# wrapper cs files from swig specification files and C wrapper .c files. ## 148############################################################################################# 149$(GEN_DIR)/ortools/linear_solver/linear_solver_csharp_wrap.cc: \ 150 $(SRC_DIR)/ortools/linear_solver/csharp/linear_solver.i \ 151 $(SRC_DIR)/ortools/base/base.i \ 152 $(SRC_DIR)/ortools/util/csharp/proto.i \ 153 $(GLOP_DEPS) \ 154 $(LP_DEPS) \ 155 | $(GEN_DIR)/ortools/linear_solver 156 $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ 157 -o $(GEN_PATH)$Sortools$Slinear_solver$Slinear_solver_csharp_wrap.cc \ 158 -module operations_research_linear_solver \ 159 -namespace $(DOTNET_ORTOOLS_ASSEMBLY_NAME).LinearSolver \ 160 -dllimport "$(DOTNET_ORTOOLS_NATIVE)" \ 161 -outdir $(GEN_PATH)$Sortools$Slinear_solver \ 162 $(SRC_DIR)$Sortools$Slinear_solver$Scsharp$Slinear_solver.i 163 164$(OBJ_DIR)/swig/linear_solver_csharp_wrap.$O: \ 165 $(GEN_DIR)/ortools/linear_solver/linear_solver_csharp_wrap.cc \ 166 | $(OBJ_DIR)/swig 167 $(CCC) $(CFLAGS) \ 168 -c $(GEN_PATH)$Sortools$Slinear_solver$Slinear_solver_csharp_wrap.cc \ 169 $(OBJ_OUT)$(OBJ_DIR)$Sswig$Slinear_solver_csharp_wrap.$O 170 171$(GEN_DIR)/ortools/constraint_solver/constraint_solver_csharp_wrap.cc: \ 172 $(SRC_DIR)/ortools/constraint_solver/csharp/routing.i \ 173 $(SRC_DIR)/ortools/constraint_solver/csharp/constraint_solver.i \ 174 $(SRC_DIR)/ortools/base/base.i \ 175 $(SRC_DIR)/ortools/util/csharp/proto.i \ 176 $(CP_DEPS) \ 177 | $(GEN_DIR)/ortools/constraint_solver 178 $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ 179 -o $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.cc \ 180 -module operations_research_constraint_solver \ 181 -namespace $(DOTNET_ORTOOLS_ASSEMBLY_NAME).ConstraintSolver \ 182 -dllimport "$(DOTNET_ORTOOLS_NATIVE)" \ 183 -outdir $(GEN_PATH)$Sortools$Sconstraint_solver \ 184 $(SRC_DIR)$Sortools$Sconstraint_solver$Scsharp$Srouting.i 185 $(SED) -i -e 's/CSharp_new_Solver/CSharp_new_CpSolver/g' \ 186 $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ 187 $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* 188 $(SED) -i -e 's/CSharp_delete_Solver/CSharp_delete_CpSolver/g' \ 189 $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ 190 $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* 191 $(SED) -i -e 's/CSharp_Solver/CSharp_CpSolver/g' \ 192 $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ 193 $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* 194 $(SED) -i -e 's/CSharp_new_Constraint/CSharp_new_CpConstraint/g' \ 195 $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ 196 $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* 197 $(SED) -i -e 's/CSharp_delete_Constraint/CSharp_delete_CpConstraint/g' \ 198 $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ 199 $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* 200 $(SED) -i -e 's/CSharp_Constraint/CSharp_CpConstraint/g' \ 201 $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ 202 $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* 203 204 205$(OBJ_DIR)/swig/constraint_solver_csharp_wrap.$O: \ 206 $(GEN_DIR)/ortools/constraint_solver/constraint_solver_csharp_wrap.cc \ 207 | $(OBJ_DIR)/swig 208 $(CCC) $(CFLAGS) \ 209 -c $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.cc \ 210 $(OBJ_OUT)$(OBJ_DIR)$Sswig$Sconstraint_solver_csharp_wrap.$O 211 212$(GEN_DIR)/ortools/algorithms/knapsack_solver_csharp_wrap.cc: \ 213 $(SRC_DIR)/ortools/algorithms/csharp/knapsack_solver.i \ 214 $(SRC_DIR)/ortools/base/base.i \ 215 $(SRC_DIR)/ortools/util/csharp/proto.i \ 216 $(SRC_DIR)/ortools/algorithms/knapsack_solver.h \ 217 | $(GEN_DIR)/ortools/algorithms 218 $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ 219 -o $(GEN_PATH)$Sortools$Salgorithms$Sknapsack_solver_csharp_wrap.cc \ 220 -module operations_research_algorithms \ 221 -namespace $(DOTNET_ORTOOLS_ASSEMBLY_NAME).Algorithms \ 222 -dllimport "$(DOTNET_ORTOOLS_NATIVE)" \ 223 -outdir $(GEN_PATH)$Sortools$Salgorithms \ 224 $(SRC_DIR)$Sortools$Salgorithms$Scsharp$Sknapsack_solver.i 225 226 227$(OBJ_DIR)/swig/knapsack_solver_csharp_wrap.$O: \ 228 $(GEN_DIR)/ortools/algorithms/knapsack_solver_csharp_wrap.cc \ 229 | $(OBJ_DIR)/swig 230 $(CCC) $(CFLAGS) \ 231 -c $(GEN_PATH)$Sortools$Salgorithms$Sknapsack_solver_csharp_wrap.cc \ 232 $(OBJ_OUT)$(OBJ_DIR)$Sswig$Sknapsack_solver_csharp_wrap.$O 233 234$(GEN_DIR)/ortools/graph/graph_csharp_wrap.cc: \ 235 $(SRC_DIR)/ortools/graph/csharp/graph.i \ 236 $(SRC_DIR)/ortools/base/base.i \ 237 $(SRC_DIR)/ortools/util/csharp/proto.i \ 238 $(GRAPH_DEPS) \ 239 | $(GEN_DIR)/ortools/graph $(GEN_DIR)/ortools/graph 240 $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ 241 -o $(GEN_PATH)$Sortools$Sgraph$Sgraph_csharp_wrap.cc \ 242 -module operations_research_graph \ 243 -namespace $(DOTNET_ORTOOLS_ASSEMBLY_NAME).Graph \ 244 -dllimport "$(DOTNET_ORTOOLS_NATIVE)" \ 245 -outdir $(GEN_PATH)$Sortools$Sgraph \ 246 $(SRC_DIR)$Sortools$Sgraph$Scsharp$Sgraph.i 247 248$(OBJ_DIR)/swig/graph_csharp_wrap.$O: \ 249 $(GEN_DIR)/ortools/graph/graph_csharp_wrap.cc \ 250 | $(OBJ_DIR)/swig 251 $(CCC) $(CFLAGS) \ 252 -c $(GEN_PATH)$Sortools$Sgraph$Sgraph_csharp_wrap.cc \ 253 $(OBJ_OUT)$(OBJ_DIR)$Sswig$Sgraph_csharp_wrap.$O 254 255$(GEN_DIR)/ortools/sat/sat_csharp_wrap.cc: \ 256 $(SRC_DIR)/ortools/base/base.i \ 257 $(SRC_DIR)/ortools/sat/csharp/sat.i \ 258 $(SRC_DIR)/ortools/sat/swig_helper.h \ 259 $(SAT_DEPS) \ 260 | $(GEN_DIR)/ortools/sat $(GEN_DIR)/ortools/sat 261 $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ 262 -o $(GEN_PATH)$Sortools$Ssat$Ssat_csharp_wrap.cc \ 263 -module operations_research_sat \ 264 -namespace $(DOTNET_ORTOOLS_ASSEMBLY_NAME).Sat \ 265 -dllimport "$(DOTNET_ORTOOLS_NATIVE)" \ 266 -outdir $(GEN_PATH)$Sortools$Ssat \ 267 $(SRC_DIR)$Sortools$Ssat$Scsharp$Ssat.i 268 269$(OBJ_DIR)/swig/sat_csharp_wrap.$O: \ 270 $(GEN_DIR)/ortools/sat/sat_csharp_wrap.cc \ 271 | $(OBJ_DIR)/swig 272 $(CCC) $(CFLAGS) \ 273 -c $(GEN_PATH)$Sortools$Ssat$Ssat_csharp_wrap.cc \ 274 $(OBJ_OUT)$(OBJ_DIR)$Sswig$Ssat_csharp_wrap.$O 275 276$(GEN_DIR)/ortools/init/init_csharp_wrap.cc: \ 277 $(SRC_DIR)/ortools/base/base.i \ 278 $(SRC_DIR)/ortools/init/csharp/init.i \ 279 $(INIT_DEPS) \ 280 | $(GEN_DIR)/ortools/init 281 $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ 282 -o $(GEN_PATH)$Sortools$Sinit$Sinit_csharp_wrap.cc \ 283 -module operations_research_init \ 284 -namespace $(DOTNET_ORTOOLS_ASSEMBLY_NAME).Init \ 285 -dllimport "$(DOTNET_ORTOOLS_NATIVE)" \ 286 -outdir $(GEN_PATH)$Sortools$Sinit \ 287 $(SRC_DIR)$Sortools$Sinit$Scsharp$Sinit.i 288 289$(OBJ_DIR)/swig/init_csharp_wrap.$O: \ 290 $(GEN_DIR)/ortools/init/init_csharp_wrap.cc \ 291 | $(OBJ_DIR)/swig 292 $(CCC) $(CFLAGS) \ 293 -c $(GEN_PATH)$Sortools$Sinit$Sinit_csharp_wrap.cc \ 294 $(OBJ_OUT)$(OBJ_DIR)$Sswig$Sinit_csharp_wrap.$O 295 296$(GEN_DIR)/ortools/util/sorted_interval_list_csharp_wrap.cc: \ 297 $(SRC_DIR)/ortools/base/base.i \ 298 $(SRC_DIR)/ortools/util/csharp/sorted_interval_list.i \ 299 $(SRC_DIR)/ortools/util/csharp/proto.i \ 300 $(UTIL_DEPS) \ 301 | $(GEN_DIR)/ortools/util 302 $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ 303 -o $(GEN_PATH)$Sortools$Sutil$Ssorted_interval_list_csharp_wrap.cc \ 304 -module operations_research_util \ 305 -namespace $(DOTNET_ORTOOLS_ASSEMBLY_NAME).Util \ 306 -dllimport "$(DOTNET_ORTOOLS_NATIVE)" \ 307 -outdir $(GEN_PATH)$Sortools$Sutil \ 308 $(SRC_DIR)$Sortools$Sutil$Scsharp$Ssorted_interval_list.i 309 310$(OBJ_DIR)/swig/sorted_interval_list_csharp_wrap.$O: \ 311 $(GEN_DIR)/ortools/util/sorted_interval_list_csharp_wrap.cc \ 312 | $(OBJ_DIR)/swig 313 $(CCC) $(CFLAGS) \ 314 -c $(GEN_PATH)$Sortools$Sutil$Ssorted_interval_list_csharp_wrap.cc \ 315 $(OBJ_OUT)$(OBJ_DIR)$Sswig$Ssorted_interval_list_csharp_wrap.$O 316 317################### 318## .NET SOURCE ## 319################### 320# .Net C# 321ifeq ($(SOURCE_SUFFIX),.cs) # Those rules will be used if SOURCE contain a .cs file 322 323SOURCE_PROJECT_DIR := $(SOURCE) 324SOURCE_PROJECT_DIR := $(subst /$(SOURCE_NAME).cs,, $(SOURCE_PROJECT_DIR)) 325SOURCE_PROJECT_PATH = $(subst /,$S,$(SOURCE_PROJECT_DIR)) 326 327.PHONY: build # Build a .Net C# program. 328build: $(SOURCE) $(SOURCE)proj $(DOTNET_ORTOOLS_NUPKG) 329 cd $(SOURCE_PROJECT_PATH) && "$(DOTNET_BIN)" build -c Release $(ARGS) 330 cd $(SOURCE_PROJECT_PATH) && "$(DOTNET_BIN)" pack -c Release 331 332.PHONY: run # Run a .Net C# program (using 'dotnet run'). 333run: build 334 cd $(SOURCE_PROJECT_PATH) && "$(DOTNET_BIN)" run --no-build -c Release $(ARGS) 335 336.PHONY: run_test # Run a .Net C# program (using 'dotnet test'). 337run_test: build 338 cd $(SOURCE_PROJECT_PATH) && "$(DOTNET_BIN)" test --no-build -c Release $(ARGS) 339endif 340 341# .Net F# 342ifeq ($(SOURCE_SUFFIX),.fs) # Those rules will be used if SOURCE contain a .cs file 343 344SOURCE_PROJECT_DIR := $(SOURCE) 345SOURCE_PROJECT_DIR := $(subst /$(SOURCE_NAME).fs,, $(SOURCE_PROJECT_DIR)) 346SOURCE_PROJECT_PATH = $(subst /,$S,$(SOURCE_PROJECT_DIR)) 347 348.PHONY: build # Build a .Net F# program (using 'dotnet test'). 349build: $(SOURCE) $(SOURCE)proj $(FSHARP_ORTOOLS_NUPKG) 350 cd $(SOURCE_PROJECT_PATH) && "$(DOTNET_BIN)" build -c Release 351 cd $(SOURCE_PROJECT_PATH) && "$(DOTNET_BIN)" pack -c Release 352 353.PHONY: run # Run a .Net F# program (using 'dotnet test'). 354run: build 355 cd $(SOURCE_PROJECT_PATH) && "$(DOTNET_BIN)" run --no-build -c Release $(ARGS) 356endif 357 358################### 359## Nuget package ## 360################### 361$(TEMP_DOTNET_DIR): 362 $(MKDIR) $(TEMP_DOTNET_DIR) 363 364############ 365# Signing ## 366############ 367ifneq ($(DOTNET_SNK),) 368$(DOTNET_ORTOOLS_SNK): 369 $(COPY) $(DOTNET_SNK) $(DOTNET_ORTOOLS_SNK_PATH) 370else 371$(DOTNET_ORTOOLS_SNK): ortools/dotnet/CreateSigningKey/CreateSigningKey.csproj 372 "$(DOTNET_BIN)" run --project ortools$Sdotnet$SCreateSigningKey$SCreateSigningKey.csproj $S$(DOTNET_ORTOOLS_SNK_PATH) 373endif 374 375######################### 376# .Net Runtime Package ## 377######################### 378$(LIB_DIR)/$(DOTNET_ORTOOLS_NATIVE).$(SWIG_DOTNET_LIB_SUFFIX): \ 379 $(OR_TOOLS_LIBS) \ 380 $(OBJ_DIR)/swig/init_csharp_wrap.$O \ 381 $(OBJ_DIR)/swig/linear_solver_csharp_wrap.$O \ 382 $(OBJ_DIR)/swig/sat_csharp_wrap.$O \ 383 $(OBJ_DIR)/swig/constraint_solver_csharp_wrap.$O \ 384 $(OBJ_DIR)/swig/knapsack_solver_csharp_wrap.$O \ 385 $(OBJ_DIR)/swig/graph_csharp_wrap.$O \ 386 $(OBJ_DIR)/swig/sorted_interval_list_csharp_wrap.$O \ 387 | $(LIB_DIR) 388 $(DYNAMIC_LD) \ 389 $(LD_OUT)$(LIB_DIR)$S$(DOTNET_ORTOOLS_NATIVE).$(SWIG_DOTNET_LIB_SUFFIX) \ 390 $(OBJ_DIR)$Sswig$Sinit_csharp_wrap.$O \ 391 $(OBJ_DIR)$Sswig$Sknapsack_solver_csharp_wrap.$O \ 392 $(OBJ_DIR)$Sswig$Sgraph_csharp_wrap.$O \ 393 $(OBJ_DIR)$Sswig$Slinear_solver_csharp_wrap.$O \ 394 $(OBJ_DIR)$Sswig$Ssat_csharp_wrap.$O \ 395 $(OBJ_DIR)$Sswig$Sconstraint_solver_csharp_wrap.$O \ 396 $(OBJ_DIR)$Sswig$Ssorted_interval_list_csharp_wrap.$O \ 397 $(OR_TOOLS_LNK) \ 398 $(OR_TOOLS_LDFLAGS) 399 400$(TEMP_DOTNET_DIR)/orLogo.png: $(SRC_DIR)/tools/doc/orLogo.png | $(TEMP_DOTNET_DIR) 401 $(COPY) $(SRC_DIR)$Stools$Sdoc$SorLogo.png $(TEMP_DOTNET_DIR)$SorLogo.png 402 403$(TEMP_DOTNET_DIR)/Directory.Build.props: \ 404 $(SRC_DIR)/ortools/dotnet/Directory.Build.props.in | $(TEMP_DOTNET_DIR) 405 $(COPY) $(SRC_DIR)$Sortools$Sdotnet$SDirectory.Build.props.in $(TEMP_DOTNET_DIR)$SDirectory.Build.props 406 $(SED) -i -e 's/@DOTNET_PACKAGES_DIR@/..\/packages/g' $(TEMP_DOTNET_DIR)$SDirectory.Build.props 407 $(SED) -i -e 's/@DOTNET_LOGO_DIR@/..\//g' $(TEMP_DOTNET_DIR)$SDirectory.Build.props 408 409$(TEMP_DOTNET_DIR)/$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME): | $(TEMP_DOTNET_DIR) 410 $(MKDIR_P) $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME) 411 412$(TEMP_DOTNET_DIR)/$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)/$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).csproj: \ 413 $(SRC_DIR)/ortools/dotnet/$(DOTNET_ORTOOLS_ASSEMBLY_NAME).runtime.csproj.in | $(TEMP_DOTNET_DIR)/$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME) 414 $(SED) -e "s/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/" ortools$Sdotnet$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).runtime.csproj.in > \ 415 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).csproj 416 $(SED) -i -e 's/@RUNTIME_IDENTIFIER@/$(DOTNET_RUNTIME_IDENTIFIER)/' \ 417 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).csproj 418 $(SED) -i -e 's/@DOTNET_NATIVE_PROJECT@/$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)/' \ 419 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).csproj 420 $(SED) -i -e 's/$$<TARGET_FILE:google-ortools-native>/..\/..\/lib\/$(DOTNET_ORTOOLS_NATIVE).$(SWIG_DOTNET_LIB_SUFFIX)/' \ 421 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).csproj 422ifeq ($(SYSTEM),win) 423 $(SED) -i -e 's/$$<$$<STREQUAL.*@PROJECT_NAME@>>//' \ 424 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).csproj 425else 426 $(SED) -i -e 's/$$<$$<STREQUAL.*@PROJECT_NAME@>>/;..\/..\/lib\/$(LIB_PREFIX)ortools.$L/' \ 427 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).csproj 428endif 429 430 431$(DOTNET_ORTOOLS_RUNTIME_NUPKG): \ 432 $(LIB_DIR)/$(DOTNET_ORTOOLS_NATIVE).$(SWIG_DOTNET_LIB_SUFFIX) \ 433 $(TEMP_DOTNET_DIR)/Directory.Build.props \ 434 $(TEMP_DOTNET_DIR)/orLogo.png \ 435 $(TEMP_DOTNET_DIR)/$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)/$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).csproj \ 436 $(SRC_DIR)/ortools/constraint_solver/csharp/IntVarArrayHelper.cs \ 437 $(SRC_DIR)/ortools/constraint_solver/csharp/IntervalVarArrayHelper.cs \ 438 $(SRC_DIR)/ortools/constraint_solver/csharp/IntArrayHelper.cs \ 439 $(SRC_DIR)/ortools/constraint_solver/csharp/NetDecisionBuilder.cs \ 440 $(SRC_DIR)/ortools/constraint_solver/csharp/SolverHelper.cs \ 441 $(SRC_DIR)/ortools/constraint_solver/csharp/ValCstPair.cs \ 442 $(SRC_DIR)/ortools/linear_solver/csharp/LinearExpr.cs \ 443 $(SRC_DIR)/ortools/linear_solver/csharp/LinearConstraint.cs \ 444 $(SRC_DIR)/ortools/linear_solver/csharp/SolverHelper.cs \ 445 $(SRC_DIR)/ortools/linear_solver/csharp/VariableHelper.cs \ 446 $(SRC_DIR)/ortools/sat/csharp/Constraints.cs \ 447 $(SRC_DIR)/ortools/sat/csharp/CpModel.cs \ 448 $(SRC_DIR)/ortools/sat/csharp/CpSolver.cs \ 449 $(SRC_DIR)/ortools/sat/csharp/IntegerExpressions.cs \ 450 $(SRC_DIR)/ortools/sat/csharp/IntervalVariables.cs \ 451 $(SRC_DIR)/ortools/sat/csharp/SearchHelpers.cs \ 452 $(SRC_DIR)/ortools/util/csharp/NestedArrayHelper.cs \ 453 $(SRC_DIR)/ortools/util/csharp/ProtoHelper.cs \ 454 $(GEN_DIR)/ortools/constraint_solver/SearchLimit.pb.cs \ 455 $(GEN_DIR)/ortools/constraint_solver/SolverParameters.pb.cs \ 456 $(GEN_DIR)/ortools/constraint_solver/RoutingParameters.pb.cs \ 457 $(GEN_DIR)/ortools/constraint_solver/RoutingEnums.pb.cs \ 458 $(GEN_DIR)/ortools/sat/CpModel.pb.cs \ 459 $(GEN_DIR)/ortools/sat/SatParameters.pb.cs \ 460 $(GEN_DIR)/ortools/util/OptionalBoolean.pb.cs \ 461 | $(DOTNET_ORTOOLS_SNK) $(DOTNET_PACKAGE_DIR) 462 "$(DOTNET_BIN)" build $(DOTNET_BUILD_ARGS) $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).csproj 463 "$(DOTNET_BIN)" pack $(NUGET_PACK_ARGS) $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME).csproj 464 465#################### 466## .Net Package ## 467#################### 468.PHONY: dotnet_csharp # Build C# OR-Tools 469dotnet_csharp: $(DOTNET_ORTOOLS_NUPKG) 470 471$(TEMP_DOTNET_DIR)/$(DOTNET_ORTOOLS_ASSEMBLY_NAME): | $(TEMP_DOTNET_DIR) 472 $(MKDIR_P) $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME) 473 474# create csproj for managed project 475$(TEMP_DOTNET_DIR)/$(DOTNET_ORTOOLS_ASSEMBLY_NAME)/$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj: \ 476 $(SRC_DIR)/ortools/dotnet/$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj.in | $(TEMP_DOTNET_DIR)/$(DOTNET_ORTOOLS_ASSEMBLY_NAME) 477 $(SED) -e "s/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/" \ 478 ortools$Sdotnet$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj.in > \ 479 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj 480 $(SED) -i -e 's/@DOTNET_PROJECT@/$(DOTNET_ORTOOLS_ASSEMBLY_NAME)/' \ 481 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj 482 $(SED) -i -e 's/@DOTNET_PACKAGES_DIR@/..\/packages/' \ 483 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj 484 $(SED) -i -e 's/@DOTNET_PROJECT_DIR@/..\/..\/ortools\/gen/' \ 485 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj 486 $(SED) -i -e 's/@PROJECT_SOURCE_DIR@/..\/../' \ 487 $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj 488 489# Pack managed project nuget 490$(DOTNET_ORTOOLS_NUPKG): \ 491 $(DOTNET_ORTOOLS_RUNTIME_NUPKG) \ 492 $(TEMP_DOTNET_DIR)/$(DOTNET_ORTOOLS_ASSEMBLY_NAME)/$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj \ 493 | $(DOTNET_ORTOOLS_SNK) $(DOTNET_PACKAGE_DIR) 494 "$(DOTNET_BIN)" build $(DOTNET_BUILD_ARGS) $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj 495 "$(DOTNET_BIN)" pack $(NUGET_PACK_ARGS) $(TEMP_DOTNET_DIR)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj 496 497############## 498## FSHARP ## 499############## 500.PHONY: dotnet_fsharp # Build F# OR-Tools 501dotnet_fsharp: $(FSHARP_ORTOOLS_NUPKG) 502 503$(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME): | $(TEMP_DOTNET_DIR) 504 $(MKDIR_P) $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME) 505 506$(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME)/OrTools.fs: \ 507 $(SRC_DIR)/ortools/dotnet/$(FSHARP_ORTOOLS_ASSEMBLY_NAME)/OrTools.fs | $(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME) 508 $(COPY) $(SRC_DIR)$Sortools$Sdotnet$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME)$SOrTools.fs $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME)$SOrTools.fs 509 510# create fsproj 511$(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME).fsproj: \ 512 $(SRC_DIR)/ortools/dotnet/$(FSHARP_ORTOOLS_ASSEMBLY_NAME)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME).fsproj.in | $(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME) 513 $(SED) -e "s/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/" \ 514 ortools$Sdotnet$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME).fsproj.in > \ 515 $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME).fsproj 516 $(SED) -i -e 's/@DOTNET_PACKAGES_DIR@/..\/packages/' \ 517 $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME).fsproj 518 519# build and pack nuget 520$(FSHARP_ORTOOLS_NUPKG): \ 521 $(DOTNET_ORTOOLS_NUPKG) \ 522 $(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME).fsproj \ 523 $(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_ASSEMBLY_NAME)/OrTools.fs \ 524 | $(DOTNET_ORTOOLS_SNK) $(DOTNET_PACKAGE_DIR) 525 "$(DOTNET_BIN)" build $(DOTNET_BUILD_ARGS) $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME).fsproj 526 "$(DOTNET_BIN)" pack $(NUGET_PACK_ARGS) $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME).fsproj 527 528# create test fsproj 529$(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME): | $(TEMP_DOTNET_DIR) 530 $(MKDIR_P) $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME) 531 532$(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)/%.fs: \ 533 $(SRC_DIR)/ortools/dotnet/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)/%.fs | $(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME) 534 $(COPY) $(SRC_DIR)$Sortools$Sdotnet$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)$S$*.fs $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)$S$*.fs 535 536$(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME).fsproj: \ 537 ortools/dotnet/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME).fsproj.in | $(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME) 538 $(SED) -e "s/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/" \ 539 ortools$Sdotnet$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME).fsproj.in > \ 540 $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME).fsproj 541 $(SED) -i -e 's/@DOTNET_PACKAGES_DIR@/..\/packages/' \ 542 $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME).fsproj 543 544.PHONY: test_dotnet_fsharp # Run F# OrTools Tests 545test_dotnet_fsharp: $(FSHARP_ORTOOLS_NUPKG) \ 546 $(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME).fsproj \ 547 $(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)/Program.fs \ 548 $(TEMP_DOTNET_DIR)/$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)/Tests.fs 549 "$(DOTNET_BIN)" build $(DOTNET_BUILD_ARGS) $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME)$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME).fsproj 550 "$(DOTNET_BIN)" test $(DOTNET_BUILD_ARGS) $(TEMP_DOTNET_DIR)$S$(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME) 551 552############################# 553## .NET Examples/Samples ## 554############################# 555DOTNET_SAMPLES := algorithms graph constraint_solver linear_solver sat 556 557define dotnet-sample-target = 558$$(TEMP_DOTNET_DIR)/$1: | $$(TEMP_DOTNET_DIR) 559 -$$(MKDIR) $$(TEMP_DOTNET_DIR)$$S$1 560 561$$(TEMP_DOTNET_DIR)/$1/%: \ 562 $$(SRC_DIR)/ortools/$1/samples/%.cs \ 563 | $$(TEMP_DOTNET_DIR)/$1 564 -$$(MKDIR) $$(TEMP_DOTNET_DIR)$$S$1$$S$$* 565 566$$(TEMP_DOTNET_DIR)/$1/%/%.csproj: \ 567 $${SRC_DIR}/ortools/dotnet/Sample.csproj.in \ 568 | $$(TEMP_DOTNET_DIR)/$1/% 569 $$(SED) -e "s/@DOTNET_PACKAGES_DIR@/..\/..\/packages/" \ 570 ortools$$Sdotnet$$SSample.csproj.in \ 571 > $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 572 $$(SED) -i -e 's/@DOTNET_PROJECT@/$$(DOTNET_ORTOOLS_ASSEMBLY_NAME)/' \ 573 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 574 $$(SED) -i -e 's/@SAMPLE_NAME@/$$*/' \ 575 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 576 $$(SED) -i -e 's/@PROJECT_VERSION@/$$(OR_TOOLS_VERSION)/' \ 577 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 578 $$(SED) -i -e 's/@PROJECT_VERSION_MAJOR@/$$(OR_TOOLS_MAJOR)/' \ 579 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 580 $$(SED) -i -e 's/@PROJECT_VERSION_MINOR@/$$(OR_TOOLS_MINOR)/' \ 581 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 582 $$(SED) -i -e 's/@PROJECT_VERSION_PATCH@/$$(GIT_REVISION)/' \ 583 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 584 $$(SED) -i -e 's/@FILE_NAME@/$$*.cs/' \ 585 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 586 587$$(TEMP_DOTNET_DIR)/$1/%/%.cs: \ 588 $$(SRC_DIR)/ortools/$1/samples/%.cs \ 589 | $$(TEMP_DOTNET_DIR)/$1/% 590 $$(COPY) $$(SRC_DIR)$$Sortools$$S$1$$Ssamples$$S$$*.cs \ 591 $$(TEMP_DOTNET_DIR)$$S$1$$S$$* 592 593rdotnet_%: \ 594 $(DOTNET_ORTOOLS_NUPKG) \ 595 $$(TEMP_DOTNET_DIR)/$1/%/%.csproj \ 596 $$(TEMP_DOTNET_DIR)/$1/%/%.cs \ 597 FORCE 598 cd $$(TEMP_DOTNET_DIR)$$S$1$$S$$* && "$$(DOTNET_BIN)" build -c Release 599 cd $$(TEMP_DOTNET_DIR)$$S$1$$S$$* && "$$(DOTNET_BIN)" run --no-build --framework net6.0 -c Release $$(ARGS) 600endef 601 602$(foreach sample,$(DOTNET_SAMPLES),$(eval $(call dotnet-sample-target,$(sample)))) 603 604DOTNET_EXAMPLES := contrib dotnet 605 606define dotnet-example-target = 607$$(TEMP_DOTNET_DIR)/$1: | $$(TEMP_DOTNET_DIR) 608 -$$(MKDIR) $$(TEMP_DOTNET_DIR)$$S$1 609 610$$(TEMP_DOTNET_DIR)/$1/%: \ 611 $$(SRC_DIR)/examples/$1/%.cs \ 612 | $$(TEMP_DOTNET_DIR)/$1 613 -$$(MKDIR) $$(TEMP_DOTNET_DIR)$$S$1$$S$$* 614 615$$(TEMP_DOTNET_DIR)/$1/%/%.csproj: \ 616 $${SRC_DIR}/ortools/dotnet/Sample.csproj.in \ 617 | $$(TEMP_DOTNET_DIR)/$1/% 618 $$(SED) -e "s/@DOTNET_PACKAGES_DIR@/..\/..\/packages/" \ 619 ortools$$Sdotnet$$SSample.csproj.in \ 620 > $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 621 $$(SED) -i -e 's/@DOTNET_PROJECT@/$$(DOTNET_ORTOOLS_ASSEMBLY_NAME)/' \ 622 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 623 $$(SED) -i -e 's/@SAMPLE_NAME@/$$*/' \ 624 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 625 $$(SED) -i -e 's/@PROJECT_VERSION@/$$(OR_TOOLS_VERSION)/' \ 626 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 627 $$(SED) -i -e 's/@PROJECT_VERSION_MAJOR@/$$(OR_TOOLS_MAJOR)/' \ 628 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 629 $$(SED) -i -e 's/@PROJECT_VERSION_MINOR@/$$(OR_TOOLS_MINOR)/' \ 630 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 631 $$(SED) -i -e 's/@PROJECT_VERSION_PATCH@/$$(GIT_REVISION)/' \ 632 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 633 $$(SED) -i -e 's/@FILE_NAME@/$$*.cs/' \ 634 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.csproj 635 636$$(TEMP_DOTNET_DIR)/$1/%/%.cs: \ 637 $$(SRC_DIR)/examples/$1/%.cs \ 638 | $$(TEMP_DOTNET_DIR)/$1/% 639 $$(COPY) $$(SRC_DIR)$$Sexamples$$S$1$$S$$*.cs \ 640 $$(TEMP_DOTNET_DIR)$$S$1$$S$$* 641 642rdotnet_%: \ 643 $(DOTNET_ORTOOLS_NUPKG) \ 644 $$(TEMP_DOTNET_DIR)/$1/%/%.csproj \ 645 $$(TEMP_DOTNET_DIR)/$1/%/%.cs \ 646 FORCE 647 cd $$(TEMP_DOTNET_DIR)$$S$1$$S$$* && "$$(DOTNET_BIN)" build -c Release 648 cd $$(TEMP_DOTNET_DIR)$$S$1$$S$$* && "$$(DOTNET_BIN)" run --no-build --framework net6.0 -c Release $$(ARGS) 649endef 650 651$(foreach example,$(DOTNET_EXAMPLES),$(eval $(call dotnet-example-target,$(example)))) 652 653DOTNET_TESTS := tests 654 655$(TEMP_DOTNET_DIR)/tests: | $(TEMP_DOTNET_DIR) 656 -$(MKDIR) $(TEMP_DOTNET_DIR)$Stests 657 658$(TEMP_DOTNET_DIR)/tests/%: \ 659 $(SRC_DIR)/examples/tests/%.cs \ 660 | $(TEMP_DOTNET_DIR)/tests 661 -$(MKDIR) $(TEMP_DOTNET_DIR)$Stests$S$* 662 663$(TEMP_DOTNET_DIR)/tests/%/%.csproj: \ 664 ${SRC_DIR}/ortools/dotnet/Test.csproj.in \ 665 | $(TEMP_DOTNET_DIR)/tests/% 666 $(SED) -e "s/@DOTNET_PACKAGES_DIR@/..\/..\/packages/" \ 667 ortools$Sdotnet$STest.csproj.in \ 668 > $(TEMP_DOTNET_DIR)$Stests$S$*$S$*.csproj 669 $(SED) -i -e 's/@DOTNET_PROJECT@/$(DOTNET_ORTOOLS_ASSEMBLY_NAME)/' \ 670 $(TEMP_DOTNET_DIR)$Stests$S$*$S$*.csproj 671 $(SED) -i -e 's/@TEST_NAME@/$*/' \ 672 $(TEMP_DOTNET_DIR)$Stests$S$*$S$*.csproj 673 $(SED) -i -e 's/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/' \ 674 $(TEMP_DOTNET_DIR)$Stests$S$*$S$*.csproj 675 $(SED) -i -e 's/@PROJECT_VERSION_MAJOR@/$(OR_TOOLS_MAJOR)/' \ 676 $(TEMP_DOTNET_DIR)$Stests$S$*$S$*.csproj 677 $(SED) -i -e 's/@PROJECT_VERSION_MINOR@/$(OR_TOOLS_MINOR)/' \ 678 $(TEMP_DOTNET_DIR)$Stests$S$*$S$*.csproj 679 $(SED) -i -e 's/@PROJECT_VERSION_PATCH@/$(GIT_REVISION)/' \ 680 $(TEMP_DOTNET_DIR)$Stests$S$*$S$*.csproj 681 $(SED) -i -e 's/@DOTNET_PROJECT@/$(DOTNET_ORTOOLS_PROJECT)/' \ 682 $(TEMP_DOTNET_DIR)$Stests$S$*$S$*.csproj 683 $(SED) -i -e 's/@FILE_NAME@/$*.cs/' \ 684 $(TEMP_DOTNET_DIR)$Stests$S$*$S$*.csproj 685 686$(TEMP_DOTNET_DIR)/tests/%/%.cs: \ 687 $(SRC_DIR)/examples/tests/%.cs \ 688 | $(TEMP_DOTNET_DIR)/tests/% 689 $(COPY) $(SRC_DIR)$Sexamples$Stests$S$*.cs \ 690 $(TEMP_DOTNET_DIR)$Stests$S$* 691 692rdotnet_%: \ 693 $(DOTNET_ORTOOLS_NUPKG) \ 694 $(TEMP_DOTNET_DIR)/tests/%/%.cs \ 695 $(TEMP_DOTNET_DIR)/tests/%/%.csproj \ 696 FORCE 697 cd $(TEMP_DOTNET_DIR)$Stests$S$* && "$(DOTNET_BIN)" build -c Release 698 cd $(TEMP_DOTNET_DIR)$Stests$S$* && "$(DOTNET_BIN)" test --no-build -c Release $(ARGS) 699 700DOTNET_FS_EXAMPLES := contrib dotnet 701 702define dotnet-fs-example-target = 703$$(TEMP_DOTNET_DIR)/$1/%: \ 704 $$(SRC_DIR)/examples/$1/%.fs \ 705 | $$(TEMP_DOTNET_DIR)/$1 706 -$$(MKDIR) $$(TEMP_DOTNET_DIR)$$S$1$$S$$* 707 708$$(TEMP_DOTNET_DIR)/$1/%/%.fsproj: \ 709 $${SRC_DIR}/ortools/dotnet/Sample.fsproj.in \ 710 | $$(TEMP_DOTNET_DIR)/$1/% 711 $$(SED) -e "s/@DOTNET_PACKAGES_DIR@/..\/..\/packages/" \ 712 ortools$$Sdotnet$$SSample.fsproj.in \ 713 > $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.fsproj 714 $$(SED) -i -e 's/@DOTNET_PROJECT@/$$(DOTNET_ORTOOLS_ASSEMBLY_NAME)/' \ 715 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.fsproj 716 $$(SED) -i -e 's/@SAMPLE_NAME@/$$*/' \ 717 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.fsproj 718 $$(SED) -i -e 's/@PROJECT_VERSION@/$$(OR_TOOLS_VERSION)/' \ 719 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.fsproj 720 $$(SED) -i -e 's/@PROJECT_VERSION_MAJOR@/$$(OR_TOOLS_MAJOR)/' \ 721 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.fsproj 722 $$(SED) -i -e 's/@PROJECT_VERSION_MINOR@/$$(OR_TOOLS_MINOR)/' \ 723 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.fsproj 724 $$(SED) -i -e 's/@PROJECT_VERSION_PATCH@/$$(GIT_REVISION)/' \ 725 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.fsproj 726 $$(SED) -i -e 's/@FILE_NAME@/$$*.fs/' \ 727 $$(TEMP_DOTNET_DIR)$$S$1$$S$$*$$S$$*.fsproj 728 729$$(TEMP_DOTNET_DIR)/$1/%/%.fs: \ 730 $$(SRC_DIR)/examples/$1/%.fs \ 731 | $$(TEMP_DOTNET_DIR)/$1/% 732 $$(COPY) $$(SRC_DIR)$$Sexamples$$S$1$$S$$*.fs \ 733 $$(TEMP_DOTNET_DIR)$$S$1$$S$$* 734 735rdotnet_%: \ 736 $(FSHARP_ORTOOLS_NUPKG) \ 737 $$(TEMP_DOTNET_DIR)/$1/%/%.fsproj \ 738 $$(TEMP_DOTNET_DIR)/$1/%/%.fs \ 739 FORCE 740 cd $$(TEMP_DOTNET_DIR)$$S$1$$S$$* && "$$(DOTNET_BIN)" build -c Release 741 cd $$(TEMP_DOTNET_DIR)$$S$1$$S$$* && "$$(DOTNET_BIN)" run --no-build --framework net6.0 -c Release $$(ARGS) 742endef 743 744$(foreach example,$(DOTNET_FS_EXAMPLES),$(eval $(call dotnet-fs-example-target,$(example)))) 745 746############################# 747## .NET Examples/Samples ## 748############################# 749.PHONY: test_dotnet_algorithms_samples # Build and Run all .Net LP Samples (located in ortools/algorithms/samples) 750test_dotnet_algorithms_samples: \ 751 rdotnet_Knapsack 752 753.PHONY: test_dotnet_constraint_solver_samples # Build and Run all .Net CP Samples (located in ortools/constraint_solver/samples) 754test_dotnet_constraint_solver_samples: \ 755 rdotnet_SimpleCpProgram \ 756 rdotnet_SimpleRoutingProgram \ 757 rdotnet_Tsp \ 758 rdotnet_TspCities \ 759 rdotnet_TspCircuitBoard \ 760 rdotnet_TspDistanceMatrix \ 761 rdotnet_Vrp \ 762 rdotnet_VrpBreaks \ 763 rdotnet_VrpCapacity \ 764 rdotnet_VrpDropNodes \ 765 rdotnet_VrpGlobalSpan \ 766 rdotnet_VrpInitialRoutes \ 767 rdotnet_VrpPickupDelivery \ 768 rdotnet_VrpPickupDeliveryFifo \ 769 rdotnet_VrpPickupDeliveryLifo \ 770 rdotnet_VrpResources \ 771 rdotnet_VrpStartsEnds \ 772 rdotnet_VrpTimeWindows \ 773 rdotnet_VrpWithTimeLimit 774 775.PHONY: test_dotnet_graph_samples # Build and Run all .Net LP Samples (located in ortools/graph/samples) 776test_dotnet_graph_samples: \ 777 rdotnet_SimpleMaxFlowProgram \ 778 rdotnet_SimpleMinCostFlowProgram \ 779 780.PHONY: test_dotnet_linear_solver_samples # Build and Run all .Net LP Samples (located in ortools/linear_solver/samples) 781test_dotnet_linear_solver_samples: \ 782 rdotnet_AssignmentMip \ 783 rdotnet_BasicExample \ 784 rdotnet_BinPackingMip \ 785 rdotnet_LinearProgrammingExample \ 786 rdotnet_MipVarArray \ 787 rdotnet_MultipleKnapsackMip \ 788 rdotnet_SimpleLpProgram \ 789 rdotnet_SimpleMipProgram \ 790 rdotnet_StiglerDiet 791 792.PHONY: test_dotnet_sat_samples # Build and Run all .Net SAT Samples (located in ortools/sat/samples) 793test_dotnet_sat_samples: \ 794 rdotnet_AssignmentSat \ 795 rdotnet_AssumptionsSampleSat \ 796 rdotnet_BinPackingProblemSat \ 797 rdotnet_BoolOrSampleSat \ 798 rdotnet_ChannelingSampleSat \ 799 rdotnet_CpIsFunSat \ 800 rdotnet_EarlinessTardinessCostSampleSat \ 801 rdotnet_IntervalSampleSat \ 802 rdotnet_LiteralSampleSat \ 803 rdotnet_NoOverlapSampleSat \ 804 rdotnet_OptionalIntervalSampleSat \ 805 rdotnet_RabbitsAndPheasantsSat \ 806 rdotnet_RankingSampleSat \ 807 rdotnet_ReifiedSampleSat \ 808 rdotnet_SearchForAllSolutionsSampleSat \ 809 rdotnet_SimpleSatProgram \ 810 rdotnet_SolutionHintingSampleSat \ 811 rdotnet_SolveAndPrintIntermediateSolutionsSampleSat \ 812 rdotnet_SolveWithTimeLimitSampleSat \ 813 rdotnet_StepFunctionSampleSat \ 814 rdotnet_StopAfterNSolutionsSampleSat 815 816.PHONY: check_dotnet_pimpl 817check_dotnet_pimpl: \ 818 test_dotnet_algorithms_samples \ 819 test_dotnet_constraint_solver_samples \ 820 test_dotnet_graph_samples \ 821 test_dotnet_linear_solver_samples \ 822 test_dotnet_sat_samples \ 823 824.PHONY: test_dotnet_tests # Build and Run all .Net Tests (located in examples/test) 825test_dotnet_tests: \ 826 rdotnet_LinearSolverTests \ 827 rdotnet_ConstraintSolverTests \ 828 rdotnet_RoutingSolverTests \ 829 rdotnet_SatSolverTests \ 830 rdotnet_issue18 \ 831 rdotnet_issue22 \ 832 rdotnet_issue33 833 834.PHONY: test_dotnet_contrib # Build and Run all .Net Examples (located in examples/contrib) 835test_dotnet_contrib: \ 836 rdotnet_3_jugs_regular \ 837 rdotnet_a_puzzle \ 838 rdotnet_a_round_of_golf \ 839 rdotnet_all_interval \ 840 rdotnet_alldifferent_except_0 \ 841 rdotnet_assignment \ 842 rdotnet_broken_weights \ 843 rdotnet_bus_schedule \ 844 rdotnet_circuit \ 845 rdotnet_circuit2 \ 846 rdotnet_coins3 \ 847 rdotnet_combinatorial_auction2 \ 848 rdotnet_contiguity_regular \ 849 rdotnet_contiguity_transition \ 850 rdotnet_costas_array \ 851 rdotnet_covering_opl \ 852 rdotnet_crew \ 853 rdotnet_crossword \ 854 rdotnet_crypta \ 855 rdotnet_crypto \ 856 rdotnet_csdiet \ 857 rdotnet_curious_set_of_integers \ 858 rdotnet_debruijn \ 859 rdotnet_discrete_tomography \ 860 rdotnet_divisible_by_9_through_1 \ 861 rdotnet_dudeney \ 862 rdotnet_einav_puzzle2 \ 863 rdotnet_eq10 \ 864 rdotnet_eq20 \ 865 rdotnet_fill_a_pix \ 866 rdotnet_furniture_moving \ 867 rdotnet_futoshiki \ 868 rdotnet_golomb_ruler \ 869 rdotnet_grocery \ 870 rdotnet_hidato_table \ 871 rdotnet_just_forgotten \ 872 rdotnet_kakuro \ 873 rdotnet_kenken2 \ 874 rdotnet_killer_sudoku \ 875 rdotnet_labeled_dice \ 876 rdotnet_langford \ 877 rdotnet_least_diff \ 878 rdotnet_lectures \ 879 rdotnet_magic_sequence \ 880 rdotnet_magic_square \ 881 rdotnet_magic_square_and_cards \ 882 rdotnet_map \ 883 rdotnet_map2 \ 884 rdotnet_marathon2 \ 885 rdotnet_max_flow_taha \ 886 rdotnet_max_flow_winston1 \ 887 rdotnet_minesweeper \ 888 rdotnet_mr_smith \ 889 rdotnet_nqueens \ 890 rdotnet_nurse_rostering_regular \ 891 rdotnet_nurse_rostering_transition \ 892 rdotnet_olympic \ 893 rdotnet_organize_day \ 894 rdotnet_p_median \ 895 rdotnet_pandigital_numbers \ 896 rdotnet_perfect_square_sequence \ 897 rdotnet_photo_problem \ 898 rdotnet_place_number_puzzle \ 899 rdotnet_post_office_problem2 \ 900 rdotnet_quasigroup_completion \ 901 rdotnet_regex \ 902 rdotnet_rogo2 \ 903 rdotnet_scheduling_speakers \ 904 rdotnet_secret_santa2 \ 905 rdotnet_send_more_money \ 906 rdotnet_send_more_money2 \ 907 rdotnet_send_most_money \ 908 rdotnet_seseman \ 909 rdotnet_set_covering \ 910 rdotnet_set_covering2 \ 911 rdotnet_set_covering3 \ 912 rdotnet_set_covering4 \ 913 rdotnet_set_covering_deployment \ 914 rdotnet_set_covering_skiena \ 915 rdotnet_set_partition \ 916 rdotnet_sicherman_dice \ 917 rdotnet_ski_assignment \ 918 rdotnet_stable_marriage \ 919 rdotnet_strimko2 \ 920 rdotnet_subset_sum \ 921 rdotnet_sudoku \ 922 rdotnet_survo_puzzle \ 923 rdotnet_to_num \ 924 rdotnet_traffic_lights \ 925 rdotnet_volsay \ 926 rdotnet_volsay2 \ 927 rdotnet_volsay3 \ 928 rdotnet_wedding_optimal_chart \ 929 rdotnet_who_killed_agatha \ 930 rdotnet_xkcd \ 931 rdotnet_young_tableaux \ 932 rdotnet_zebra \ 933 rdotnet_fsdiet \ 934 rdotnet_fsequality-inequality \ 935 rdotnet_fsequality \ 936 rdotnet_fsinteger-linear-program \ 937 rdotnet_fsintegerprogramming \ 938 rdotnet_fsknapsack \ 939 rdotnet_fslinearprogramming \ 940 rdotnet_fsnetwork-max-flow-lpSolve \ 941 rdotnet_fsnetwork-max-flow \ 942 rdotnet_fsnetwork-min-cost-flow \ 943 rdotnet_fsProgram \ 944 rdotnet_fsrabbit-pheasant \ 945 rdotnet_fsvolsay \ 946 rdotnet_fsvolsay3-lpSolve \ 947 rdotnet_fsvolsay3 \ 948 rdotnet_SimpleProgramFSharp 949# rdotnet_coins_grid ARGS="5 2" \ 950# rdotnet_nontransitive_dice \ # too long 951# rdotnet_partition \ # too long 952# rdotnet_secret_santa \ # too long 953# rdotnet_word_square \ # depends on /usr/share/dict/words 954 955.PHONY: test_dotnet_dotnet # Build and Run all .Net Examples (located in examples/dotnet) 956test_dotnet_dotnet: \ 957 rdotnet_BalanceGroupSat \ 958 rdotnet_cscvrptw \ 959 rdotnet_csflow \ 960 rdotnet_csintegerprogramming \ 961 rdotnet_csknapsack \ 962 rdotnet_cslinearprogramming \ 963 rdotnet_csls_api \ 964 rdotnet_csrabbitspheasants \ 965 rdotnet_cstsp \ 966 rdotnet_furniture_moving_intervals \ 967 rdotnet_organize_day_intervals \ 968 rdotnet_techtalk_scheduling \ 969 rdotnet_GateSchedulingSat \ 970 rdotnet_JobshopFt06Sat \ 971 rdotnet_JobshopSat \ 972 rdotnet_NursesSat \ 973 rdotnet_ShiftSchedulingSat \ 974 rdotnet_SpeakerSchedulingSat \ 975 rdotnet_TaskSchedulingSat 976# rdotnet_NetworkRoutingSat \ 977 ARGS="--clients=10 --backbones=5 --demands=10 --trafficMin=5 --trafficMax=10 --minClientDegree=2 --maxClientDegree=5 --minBackboneDegree=3 --maxBackboneDegree=5 --maxCapacity=20 --fixedChargeCost=10" \ 978 979.PHONY: test_dotnet_pimpl 980test_dotnet_pimpl: \ 981 check_dotnet_pimpl \ 982 test_dotnet_tests \ 983 test_dotnet_contrib \ 984 test_dotnet_dotnet 985 986####################### 987## EXAMPLE ARCHIVE ## 988####################### 989$(TEMP_DOTNET_DIR)/ortools_examples: | $(TEMP_DOTNET_DIR) 990 $(MKDIR) $(TEMP_DOTNET_DIR)$Sortools_examples 991 992$(TEMP_DOTNET_DIR)/ortools_examples/examples: | $(TEMP_DOTNET_DIR)/ortools_examples 993 $(MKDIR) $(TEMP_DOTNET_DIR)$Sortools_examples$Sexamples 994 995$(TEMP_DOTNET_DIR)/ortools_examples/examples/dotnet: | $(TEMP_DOTNET_DIR)/ortools_examples/examples 996 $(MKDIR) $(TEMP_DOTNET_DIR)$Sortools_examples$Sexamples$Sdotnet 997 998$(TEMP_DOTNET_DIR)/ortools_examples/examples/data: | $(TEMP_DOTNET_DIR)/ortools_examples/examples 999 $(MKDIR) $(TEMP_DOTNET_DIR)$Sortools_examples$Sexamples$Sdata 1000 1001define dotnet-sample-archive = 1002$$(TEMP_DOTNET_DIR)/ortools_examples/examples/dotnet/%.csproj: \ 1003 ortools/$1/samples/%.cs \ 1004 | $$(TEMP_DOTNET_DIR)/ortools_examples/examples/dotnet 1005 $$(COPY) $$(SRC_DIR)$$Sortools$$S$1$$Ssamples$$S$$*.cs \ 1006 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet 1007 $$(COPY) ortools$$Sdotnet$$SSample.csproj.in \ 1008 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1009 $(SED) -i -e 's/@PROJECT_VERSION@/$$(OR_TOOLS_VERSION)/' \ 1010 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1011 $$(SED) -i -e 's/@PROJECT_VERSION_MAJOR@/$$(OR_TOOLS_MAJOR)/' \ 1012 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1013 $$(SED) -i -e 's/@PROJECT_VERSION_MINOR@/$$(OR_TOOLS_MINOR)/' \ 1014 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1015 $$(SED) -i -e 's/@PROJECT_VERSION_PATCH@/$$(GIT_REVISION)/' \ 1016 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1017 $(SED) -i -e 's/@DOTNET_PACKAGES_DIR@/./' \ 1018 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1019 $(SED) -i -e 's/@DOTNET_PROJECT@/$$(DOTNET_ORTOOLS_ASSEMBLY_NAME)/' \ 1020 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1021 $(SED) -i -e 's/@SAMPLE_NAME@/$$*/' \ 1022 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1023 $(SED) -i -e 's/@FILE_NAME@/$$*.cs/' \ 1024 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1025endef 1026 1027DOTNET_SAMPLES := algorithms graph constraint_solver linear_solver sat 1028$(foreach sample,$(DOTNET_SAMPLES),$(eval $(call dotnet-sample-archive,$(sample)))) 1029 1030define dotnet-example-archive = 1031$$(TEMP_DOTNET_DIR)/ortools_examples/examples/dotnet/%.csproj: \ 1032 examples/$1/%.cs \ 1033 | $$(TEMP_DOTNET_DIR)/ortools_examples/examples/dotnet 1034 $$(COPY) $$(SRC_DIR)$$Sexamples$$S$1$$S$$*.cs \ 1035 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet 1036 $$(COPY) ortools$$Sdotnet$$SSample.csproj.in \ 1037 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1038 $(SED) -i -e 's/@PROJECT_VERSION@/$$(OR_TOOLS_VERSION)/' \ 1039 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1040 $$(SED) -i -e 's/@PROJECT_VERSION_MAJOR@/$$(OR_TOOLS_MAJOR)/' \ 1041 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1042 $$(SED) -i -e 's/@PROJECT_VERSION_MINOR@/$$(OR_TOOLS_MINOR)/' \ 1043 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1044 $$(SED) -i -e 's/@PROJECT_VERSION_PATCH@/$$(GIT_REVISION)/' \ 1045 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1046 $(SED) -i -e 's/@DOTNET_PACKAGES_DIR@/./' \ 1047 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1048 $(SED) -i -e 's/@DOTNET_PROJECT@/$$(DOTNET_ORTOOLS_ASSEMBLY_NAME)/' \ 1049 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1050 $(SED) -i -e 's/@SAMPLE_NAME@/$$*/' \ 1051 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1052 $(SED) -i -e 's/@FILE_NAME@/$$*.cs/' \ 1053 $$(TEMP_DOTNET_DIR)$$Sortools_examples$$Sexamples$$Sdotnet$$S$$*.csproj 1054endef 1055 1056DOTNET_EXAMPLES := contrib dotnet 1057$(foreach example,$(DOTNET_EXAMPLES),$(eval $(call dotnet-example-archive,$(example)))) 1058 1059SAMPLE_DOTNET_FILES = \ 1060 $(addsuffix proj,$(addprefix $(TEMP_DOTNET_DIR)/ortools_examples/examples/dotnet/,$(notdir $(wildcard ortools/*/samples/*.cs)))) 1061 1062EXAMPLE_DOTNET_FILES = \ 1063 $(addsuffix proj,$(addprefix $(TEMP_DOTNET_DIR)/ortools_examples/examples/dotnet/,$(notdir $(wildcard examples/contrib/*.cs)))) \ 1064 $(addsuffix proj,$(addprefix $(TEMP_DOTNET_DIR)/ortools_examples/examples/dotnet/,$(notdir $(wildcard examples/dotnet/*.cs)))) 1065 1066.PHONY: dotnet_examples_archive # Build stand-alone C++ examples archive file for redistribution. 1067dotnet_examples_archive: \ 1068 $(SAMPLE_DOTNET_FILES) \ 1069 $(EXAMPLE_DOTNET_FILES) \ 1070 | $(TEMP_DOTNET_DIR)/ortools_examples/examples/dotnet 1071 -$(COPY) tools$SREADME.dotnet.md $(TEMP_DOTNET_DIR)$Sortools_examples$SREADME.md 1072 $(COPY) LICENSE-2.0.txt $(TEMP_DOTNET_DIR)$Sortools_examples 1073ifeq ($(SYSTEM),win) 1074 cd $(TEMP_DOTNET_DIR) \ 1075 && ..\$(ZIP) \ 1076 -r ..\or-tools_dotnet_examples_v$(OR_TOOLS_VERSION).zip \ 1077 ortools_examples 1078else 1079 cd $(TEMP_DOTNET_DIR) \ 1080 && tar -c -v -z --no-same-owner \ 1081 -f ../or-tools_dotnet_examples_v$(OR_TOOLS_VERSION).tar.gz \ 1082 ortools_examples 1083endif 1084 -$(DELREC) $(TEMP_DOTNET_DIR)$Sortools_examples 1085 1086###################### 1087## Nuget artifact ## 1088###################### 1089.PHONY: nuget_archive # Build .Net "Google.OrTools" Nuget Package 1090nuget_archive: dotnet | $(TEMP_DOTNET_DIR) 1091 "$(DOTNET_BIN)" publish $(DOTNET_BUILD_ARGS) --no-build --no-dependencies --no-restore -f net6.0 \ 1092 -o "..$S..$S..$S$(TEMP_DOTNET_DIR)" \ 1093 ortools$Sdotnet$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).csproj 1094 "$(DOTNET_BIN)" publish $(DOTNET_BUILD_ARGS) --no-build --no-dependencies --no-restore -f net6.0 \ 1095 -o "..$S..$S..$S$(TEMP_DOTNET_DIR)" \ 1096 ortools$Sdotnet$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME).fsproj 1097 "$(DOTNET_BIN)" pack -c Release $(NUGET_PACK_ARGS) --no-build \ 1098 -o "..$S..$S..$S$(BIN_DIR)" \ 1099 ortools$Sdotnet 1100 1101.PHONY: nuget_upload # Upload Nuget Package 1102nuget_upload: nuget_archive 1103 @echo Uploading Nuget package for "net6.0". 1104 $(warning Not Implemented) 1105 1106################ 1107## Cleaning ## 1108################ 1109.PHONY: clean_dotnet # Clean files 1110clean_dotnet: 1111 -$(DELREC) ortools$Sdotnet$SCreateSigningKey$Sbin 1112 -$(DELREC) ortools$Sdotnet$SCreateSigningKey$Sobj 1113 -$(DEL) $(DOTNET_ORTOOLS_SNK_PATH) 1114 -$(DELREC) $(TEMP_DOTNET_DIR) 1115 -$(DEL) $(GEN_PATH)$Sortools$Salgorithms$S*.cs 1116 -$(DEL) $(GEN_PATH)$Sortools$Salgorithms$S*csharp_wrap* 1117 -$(DEL) $(GEN_PATH)$Sortools$Sgraph$S*.cs 1118 -$(DEL) $(GEN_PATH)$Sortools$Sgraph$S*csharp_wrap* 1119 -$(DEL) $(GEN_PATH)$Sortools$Sconstraint_solver$S*.cs 1120 -$(DEL) $(GEN_PATH)$Sortools$Sconstraint_solver$S*csharp_wrap* 1121 -$(DEL) $(GEN_PATH)$Sortools$Slinear_solver$S*.cs 1122 -$(DEL) $(GEN_PATH)$Sortools$Slinear_solver$S*csharp_wrap* 1123 -$(DEL) $(GEN_PATH)$Sortools$Ssat$S*.cs 1124 -$(DEL) $(GEN_PATH)$Sortools$Ssat$S*csharp_wrap* 1125 -$(DEL) $(GEN_PATH)$Sortools$Sutil$S*.cs 1126 -$(DEL) $(GEN_PATH)$Sortools$Sutil$S*csharp_wrap* 1127 -$(DEL) $(GEN_PATH)$Sortools$Sinit$S*.cs 1128 -$(DEL) $(GEN_PATH)$Sortools$Sinit$S*csharp_wrap* 1129 -$(DEL) $(OBJ_DIR)$Sswig$S*_csharp_wrap.$O 1130 -$(DEL) $(LIB_DIR)$S$(DOTNET_ORTOOLS_NATIVE).* 1131 -$(DEL) $(BIN_DIR)$S$(DOTNET_ORTOOLS_ASSEMBLY_NAME).* 1132 -$(DEL) $(BIN_DIR)$S$(FSHARP_ORTOOLS_ASSEMBLY_NAME).* 1133 -$(DELREC) $(DOTNET_EX_PATH)$Sbin 1134 -$(DELREC) $(DOTNET_EX_PATH)$Sobj 1135 -$(DELREC) $(CONTRIB_EX_PATH)$Sbin 1136 -$(DELREC) $(CONTRIB_EX_PATH)$Sobj 1137 -$(DELREC) $(TEST_PATH)$Sbin 1138 -$(DELREC) $(TEST_PATH)$Sobj 1139 -$(DELREC) ortools$Salgorithms$Ssamples$Sbin 1140 -$(DELREC) ortools$Salgorithms$Ssamples$Sobj 1141 -$(DELREC) ortools$Sconstraint_solver$Ssamples$Sbin 1142 -$(DELREC) ortools$Sconstraint_solver$Ssamples$Sobj 1143 -$(DELREC) ortools$Sgraph$Ssamples$Sbin 1144 -$(DELREC) ortools$Sgraph$Ssamples$Sobj 1145 -$(DELREC) ortools$Slinear_solver$Ssamples$Sbin 1146 -$(DELREC) ortools$Slinear_solver$Ssamples$Sobj 1147 -$(DELREC) ortools$Ssat$Ssamples$Sbin 1148 -$(DELREC) ortools$Ssat$Ssamples$Sobj 1149 -@"$(DOTNET_BIN)" nuget locals all --clear 1150 1151############# 1152## DEBUG ## 1153############# 1154.PHONY: detect_dotnet # Show variables used to build dotnet OR-Tools. 1155detect_dotnet: 1156 @echo Relevant info for the dotnet build: 1157 @echo DOTNET_BIN = $(DOTNET_BIN) 1158 @echo NUGET_BIN = $(NUGET_BIN) 1159 @echo PROTOC = $(PROTOC) 1160 @echo DOTNET_SNK = $(DOTNET_SNK) 1161 @echo DOTNET_ORTOOLS_SNK = $(DOTNET_ORTOOLS_SNK) 1162 @echo SWIG_BINARY = $(SWIG_BINARY) 1163 @echo SWIG_INC = $(SWIG_INC) 1164 @echo SWIG_DOTNET_LIB_SUFFIX = $(SWIG_DOTNET_LIB_SUFFIX) 1165 @echo DOTNET_ORTOOLS_NATIVE = $(DOTNET_ORTOOLS_NATIVE) 1166 @echo DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME =$(DOTNET_ORTOOLS_RUNTIME_ASSEMBLY_NAME) 1167 @echo DOTNET_ORTOOLS_RUNTIME_NUPKG = $(DOTNET_ORTOOLS_RUNTIME_NUPKG) 1168 @echo DOTNET_ORTOOLS_ASSEMBLY_NAME = $(DOTNET_ORTOOLS_ASSEMBLY_NAME) 1169 @echo DOTNET_ORTOOLS_NUPKG = $(DOTNET_ORTOOLS_NUPKG) 1170 @echo FSHARP_ORTOOLS_ASSEMBLY_NAME = $(FSHARP_ORTOOLS_ASSEMBLY_NAME) 1171 @echo FSHARP_ORTOOLS_NUPKG = $(FSHARP_ORTOOLS_NUPKG) 1172 @echo FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME = $(FSHARP_ORTOOLS_TESTS_ASSEMBLY_NAME) 1173ifeq ($(SYSTEM),win) 1174 @echo off & echo( 1175else 1176 @echo 1177endif 1178