From 62cbe9a228552e2f2cafc457903730cf93fe0b31 Mon Sep 17 00:00:00 2001 From: Corentin Le Molgat Date: Tue, 7 Aug 2018 17:31:13 +0200 Subject: [PATCH] dotnet: Full Rework - Create native project runtime.{rid}.Google.OrTools - follow the microsoft convention e.g.: https://www.nuget.org/packages/Microsoft.NETCore.App/ https://www.nuget.org/packages/runtime.linux-x64.Microsoft.NETCore.App/ - Target `make_dotnet` targets local nupkg instead of dll. - Use 4096 RSA key for or-tools.snk - Clean nuget cache in `clean_dotnet` recipe Refactor: - Move cs files to ortools/*/csharp - Move dotnet project to ortools/dotnet/Google.OrTools - Move example generation to temp_dotnet - Avoid to mess the `BIN_DIR` - Rework Google.OrTools.FSharp Cleanup: - Remove deps to netfx.props since we only support: netstandard2.0 TFM and netcoreapp2.1 Runtime TFM - Remove OrTools.nuspec.in -> use newly added properties to .csproj format - Remove of ortools/dotnet/OrTools project - replaced by ortools/dotnet/Google.OrTools - Remove provided protobuf.dll. - Automatically retrieved from nuget.org Misc: - Add **/*.csproj to gitignore - Add **/runtime.json to gitignore - dotnet: Makefile windows fix - make.exe doesn't support `else ifeq` --- .gitignore | 3 +- examples/dotnet/csharp/a_puzzle.csproj | 6 +- examples/dotnet/csharp/tsp.csproj | 5 +- makefiles/Makefile.dotnet.mk | 591 +++++++++--------- makefiles/Makefile.test.mk | 10 +- .../csharp}/IntArrayHelper.cs | 0 .../csharp}/IntArrayHelper.cs | 0 .../csharp}/IntVarArrayHelper.cs | 0 .../csharp}/IntervalVarArrayHelper.cs | 0 .../csharp}/NetDecisionBuilder.cs | 0 .../csharp}/SolverHelper.cs | 0 .../csharp}/ValCstPair.cs | 0 .../Google.OrTools.FSharp.fsproj.in | 43 ++ .../OrTools.fs | 0 .../Google.OrTools/Google.OrTools.csproj.in | 158 +++++ ortools/dotnet/Google.OrTools/runtime.json.in | 19 + .../OrTools.FSharp.Tests.fsproj | 1 + .../OrTools.FSharp/OrTools.FSharp.fsproj.in | 36 -- .../dotnet/OrTools.Tests/OrTools.Tests.csproj | 3 +- ortools/dotnet/OrTools.nuspec.in | 28 - ortools/dotnet/OrTools/AssemblyInfo.cs | 11 - ortools/dotnet/OrTools/OrTools.csproj.in | 52 -- ortools/dotnet/README.md | 7 +- ortools/dotnet/netfx.props | 51 -- ...runtime.linux-x64.Google.OrTools.csproj.in | 87 +++ .../runtime.osx-x64.Google.OrTools.csproj.in | 85 +++ .../runtime.win-x64.Google.OrTools.csproj.in | 81 +++ .../csharp}/DoubleArrayHelper.cs | 0 .../csharp}/LinearConstraint.cs | 0 .../csharp}/LinearExpr.cs | 0 .../csharp}/SolverHelper.cs | 0 .../csharp}/VariableHelper.cs | 0 .../OrTools/sat => sat/csharp}/Constraints.cs | 0 .../OrTools/sat => sat/csharp}/CpModel.cs | 0 .../OrTools/sat => sat/csharp}/CpSolver.cs | 0 .../sat => sat/csharp}/IntegerExpressions.cs | 0 .../sat => sat/csharp}/IntervalVariables.cs | 0 .../util => util/csharp}/NestedArrayHelper.cs | 0 .../util => util/csharp}/ProtoHelper.cs | 0 tools/dotnet/CreateSigningKey/Program.cs | 2 +- tools/dotnet/Google.Protobuf.dll | Bin 294400 -> 0 bytes 41 files changed, 784 insertions(+), 495 deletions(-) rename ortools/{dotnet/OrTools/algorithms => algorithms/csharp}/IntArrayHelper.cs (100%) rename ortools/{dotnet/OrTools/constraint_solver => constraint_solver/csharp}/IntArrayHelper.cs (100%) rename ortools/{dotnet/OrTools/constraint_solver => constraint_solver/csharp}/IntVarArrayHelper.cs (100%) rename ortools/{dotnet/OrTools/constraint_solver => constraint_solver/csharp}/IntervalVarArrayHelper.cs (100%) rename ortools/{dotnet/OrTools/constraint_solver => constraint_solver/csharp}/NetDecisionBuilder.cs (100%) rename ortools/{dotnet/OrTools/constraint_solver => constraint_solver/csharp}/SolverHelper.cs (100%) rename ortools/{dotnet/OrTools/constraint_solver => constraint_solver/csharp}/ValCstPair.cs (100%) create mode 100644 ortools/dotnet/Google.OrTools.FSharp/Google.OrTools.FSharp.fsproj.in rename ortools/dotnet/{OrTools.FSharp => Google.OrTools.FSharp}/OrTools.fs (100%) create mode 100644 ortools/dotnet/Google.OrTools/Google.OrTools.csproj.in create mode 100644 ortools/dotnet/Google.OrTools/runtime.json.in delete mode 100644 ortools/dotnet/OrTools.FSharp/OrTools.FSharp.fsproj.in delete mode 100644 ortools/dotnet/OrTools.nuspec.in delete mode 100644 ortools/dotnet/OrTools/AssemblyInfo.cs delete mode 100644 ortools/dotnet/OrTools/OrTools.csproj.in delete mode 100644 ortools/dotnet/netfx.props create mode 100644 ortools/dotnet/runtime.linux-x64.Google.OrTools/runtime.linux-x64.Google.OrTools.csproj.in create mode 100644 ortools/dotnet/runtime.osx-x64.Google.OrTools/runtime.osx-x64.Google.OrTools.csproj.in create mode 100644 ortools/dotnet/runtime.win-x64.Google.OrTools/runtime.win-x64.Google.OrTools.csproj.in rename ortools/{dotnet/OrTools/linear_solver => linear_solver/csharp}/DoubleArrayHelper.cs (100%) rename ortools/{dotnet/OrTools/linear_solver => linear_solver/csharp}/LinearConstraint.cs (100%) rename ortools/{dotnet/OrTools/linear_solver => linear_solver/csharp}/LinearExpr.cs (100%) rename ortools/{dotnet/OrTools/linear_solver => linear_solver/csharp}/SolverHelper.cs (100%) rename ortools/{dotnet/OrTools/linear_solver => linear_solver/csharp}/VariableHelper.cs (100%) rename ortools/{dotnet/OrTools/sat => sat/csharp}/Constraints.cs (100%) rename ortools/{dotnet/OrTools/sat => sat/csharp}/CpModel.cs (100%) rename ortools/{dotnet/OrTools/sat => sat/csharp}/CpSolver.cs (100%) rename ortools/{dotnet/OrTools/sat => sat/csharp}/IntegerExpressions.cs (100%) rename ortools/{dotnet/OrTools/sat => sat/csharp}/IntervalVariables.cs (100%) rename ortools/{dotnet/OrTools/util => util/csharp}/NestedArrayHelper.cs (100%) rename ortools/{dotnet/OrTools/util => util/csharp}/ProtoHelper.cs (100%) delete mode 100644 tools/dotnet/Google.Protobuf.dll diff --git a/.gitignore b/.gitignore index 1d17b801dd..b52458653a 100644 --- a/.gitignore +++ b/.gitignore @@ -97,7 +97,8 @@ ortools/fsharp/**/packages examples/dotnet/**/bin examples/dotnet/**/obj -ortools/dotnet/OrTools/*.csproj +ortools/dotnet/*/*.csproj +ortools/dotnet/*/runtime.json ortools/dotnet/OrTools.FSharp/*.fsproj ortools/dotnet/*.nuspec ortools/dotnet/**/bin diff --git a/examples/dotnet/csharp/a_puzzle.csproj b/examples/dotnet/csharp/a_puzzle.csproj index ed4efa4487..aabf8664a7 100644 --- a/examples/dotnet/csharp/a_puzzle.csproj +++ b/examples/dotnet/csharp/a_puzzle.csproj @@ -1,9 +1,9 @@ - Exe netcoreapp2.0 false + ../../../packages;$(RestoreSources);https://api.nuget.org/v3/index.json @@ -14,8 +14,6 @@ - - ..\..\..\bin\Google.OrTools.dll - + diff --git a/examples/dotnet/csharp/tsp.csproj b/examples/dotnet/csharp/tsp.csproj index 1e16bcf504..c59c5c890e 100644 --- a/examples/dotnet/csharp/tsp.csproj +++ b/examples/dotnet/csharp/tsp.csproj @@ -4,6 +4,7 @@ 7.2 netcoreapp2.0 false + ../../../packages;$(RestoreSources);https://api.nuget.org/v3/index.json @@ -14,8 +15,6 @@ - - ..\..\..\bin\Google.OrTools.dll - + diff --git a/makefiles/Makefile.dotnet.mk b/makefiles/Makefile.dotnet.mk index 3002fc7074..a0370f7742 100644 --- a/makefiles/Makefile.dotnet.mk +++ b/makefiles/Makefile.dotnet.mk @@ -10,25 +10,6 @@ else @echo endif -ORTOOLS_DLL_NAME := OrTools -ORTOOLS_TEST_DLL_NAME := $(ORTOOLS_DLL_NAME).Tests -ORTOOLS_FSHARP_DLL_NAME := $(ORTOOLS_DLL_NAME).FSharp -ORTOOLS_FSHARP_TEST_DLL_NAME := $(ORTOOLS_DLL_NAME).FSharp.Tests - -ORTOOLS_NUSPEC_FILE := $(ORTOOLS_DLL_NAME).nuspec - -CLR_PROTOBUF_DLL_NAME := Google.Protobuf -CLR_ORTOOLS_DLL_NAME := Google.$(ORTOOLS_DLL_NAME) -CLR_ORTOOLS_TEST_DLL_NAME := Google.$(ORTOOLS_TEST_DLL_NAME) -CLR_ORTOOLS_FSHARP_DLL_NAME := Google.$(ORTOOLS_FSHARP_DLL_NAME) -CLR_ORTOOLS_FSHARP_TEST_DLL_NAME := Google.$(ORTOOLS_FSHARP_TEST_DLL_NAME) -CLR_ORTOOLS_IMPORT_DLL_NAME := $(CLR_ORTOOLS_DLL_NAME).import -CLR_KEYFILE = $(BIN_DIR)/or-tools.snk -CLR_KEYFILE_PATH = $(subst /,$S,$(CLR_KEYFILE)) - -# relative to the project root folder -TEMP_DOTNET_TEST_DIR = temp_dotnet_test - # Check for required build tools DOTNET = dotnet ifeq ($(SYSTEM),win) @@ -43,12 +24,16 @@ ifndef DOTNET_BIN HAS_DOTNET = endif -DOTNET_ORTOOLS_LIBS = $(BIN_DIR)/$(CLR_ORTOOLS_DLL_NAME)$D $(BIN_DIR)/$(CLR_ORTOOLS_FSHARP_DLL_NAME)$D +# List Examples and Tests +TEMP_DOTNET_DIR=temp_dotnet DOTNET_EXAMPLES = \ -$(BIN_DIR)/a_puzzle$D \ -$(BIN_DIR)/tsp$D \ -$(BIN_DIR)/Program$D +$(TEMP_DOTNET_DIR)/tsp$D \ +$(TEMP_DOTNET_DIR)/a_puzzle$D \ +#$(TEMP_DOTNET_DIR)/Program$D + +DOTNET_TESTS = \ +#$(TEMP_DOTNET_DIR)/algorithms_test$D # Main target .PHONY: dotnet # Build OrTools for .NET @@ -57,182 +42,55 @@ ifndef HAS_DOTNET dotnet: @echo DOTNET_BIN = $(DOTNET_BIN) $(warning Cannot find '$@' command which is needed for build. Please make sure it is installed and in system path.) + test_dotnet: dotnet else -dotnet: ortoolslibs $(DOTNET_ORTOOLS_LIBS) $(DOTNET_EXAMPLES) +dotnet: \ + ortoolslibs \ + csharp_dotnet \ + fsharp_dotnet \ + $(DOTNET_TESTS) \ + $(DOTNET_EXAMPLES) + test_dotnet: test_dotnet_examples - "$(DOTNET_BIN)" restore \ - --packages "ortools$Sdotnet$Spackages" \ - "ortools$Sdotnet$S$(ORTOOLS_TEST_DLL_NAME)$S$(ORTOOLS_TEST_DLL_NAME).csproj" - "$(DOTNET_BIN)" restore \ - --packages "ortools$Sdotnet$Spackages" \ - "ortools$Sdotnet$S$(ORTOOLS_FSHARP_TEST_DLL_NAME)$S$(ORTOOLS_FSHARP_TEST_DLL_NAME).fsproj" - $(MKDIR_P) .$S$(TEMP_DOTNET_TEST_DIR) - $(COPY) $(BIN_DIR)$S$(CLR_ORTOOLS_IMPORT_DLL_NAME).$(SWIG_DOTNET_LIB_SUFFIX) .$S$(TEMP_DOTNET_TEST_DIR) - "$(DOTNET_BIN)" clean \ - "ortools$Sdotnet$S$(ORTOOLS_TEST_DLL_NAME)$S$(ORTOOLS_TEST_DLL_NAME).csproj" - "$(DOTNET_BIN)" build \ - -o "..$S..$S..$S$(TEMP_DOTNET_TEST_DIR)" \ - "ortools$Sdotnet$S$(ORTOOLS_TEST_DLL_NAME)$S$(ORTOOLS_TEST_DLL_NAME).csproj" - "$(DOTNET_BIN)" clean \ - "ortools$Sdotnet$S$(ORTOOLS_FSHARP_TEST_DLL_NAME)$S$(ORTOOLS_FSHARP_TEST_DLL_NAME).fsproj" - "$(DOTNET_BIN)" build \ - -o "..$S..$S..$S$(TEMP_DOTNET_TEST_DIR)" \ - "ortools$Sdotnet$S$(ORTOOLS_FSHARP_TEST_DLL_NAME)$S$(ORTOOLS_FSHARP_TEST_DLL_NAME).fsproj" - "$(DOTNET_BIN)" test \ - --no-build -v n \ - -o "..$S..$S..$S$(TEMP_DOTNET_TEST_DIR)" \ - "ortools$Sdotnet$S$(ORTOOLS_TEST_DLL_NAME)" - "$(DOTNET_BIN)" test \ - --no-build -v n \ - -o "..$S..$S..$S$(TEMP_DOTNET_TEST_DIR)" \ - "ortools$Sdotnet$S$(ORTOOLS_FSHARP_TEST_DLL_NAME)" BUILT_LANGUAGES +=, dotnet \(netstandard2.0\) endif -# Assembly Info -$(GEN_DIR)/ortools/properties: - $(MKDIR_P) $(GEN_PATH)$Sortools$Sproperties +$(PACKAGE_DIR): + $(MKDIR_P) $(PACKAGE_DIR) -$(GEN_DIR)/ortools/properties/GitVersion$(OR_TOOLS_VERSION).txt: \ - | $(GEN_DIR)/ortools/properties - @echo $(OR_TOOLS_VERSION) > $(GEN_PATH)$Sortools$Sproperties$SGitVersion$(OR_TOOLS_VERSION).txt +$(TEMP_DOTNET_DIR): + $(MKDIR_P) $(TEMP_DOTNET_DIR) + +# Detect RuntimeIDentifier +ifeq ($(OS),Windows) +RUNTIME_IDENTIFIER=win-x64 +else + ifeq ($(OS),Linux) + RUNTIME_IDENTIFIER=linux-x64 + else + ifeq ($(OS),Darwin) + RUNTIME_IDENTIFIER=osx-x64 + else + $(error OS unknown !) + endif + endif +endif + +# All libraries and dependecies +DOTNET_ORTOOLS_SNK := $(BIN_DIR)/or-tools.snk +DOTNET_ORTOOLS_SNK_PATH := $(subst /,$S,$(DOTNET_ORTOOLS_SNK)) +OR_TOOLS_ASSEMBLY_NAME := Google.OrTools +OR_TOOLS_NATIVE_ASSEMBLY_NAME := runtime.$(RUNTIME_IDENTIFIER).$(OR_TOOLS_ASSEMBLY_NAME) +OR_TOOLS_FSHARP_ASSEMBLY_NAME := $(OR_TOOLS_ASSEMBLY_NAME).FSharp +DOTNET_ORTOOLS_NUPKG := $(PACKAGE_DIR)/$(OR_TOOLS_ASSEMBLY_NAME).$(OR_TOOLS_VERSION).nupkg +DOTNET_ORTOOLS_NATIVE_NUPKG := $(PACKAGE_DIR)/$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).$(OR_TOOLS_VERSION).nupkg +DOTNET_ORTOOLS_FSHARP_NUPKG := $(PACKAGE_DIR)/$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).$(OR_TOOLS_VERSION).nupkg .PHONY: csharp_dotnet # Build C# OR-Tools -csharp_dotnet: $(BIN_DIR)/$(CLR_ORTOOLS_DLL_NAME)$D $(BIN_DIR)/$(CLR_PROTOBUF_DLL_NAME)$D +csharp_dotnet: $(DOTNET_ORTOOLS_NUPKG) -# Auto-generated code -$(BIN_DIR)/$(CLR_PROTOBUF_DLL_NAME)$D: tools/dotnet/$(CLR_PROTOBUF_DLL_NAME)$D | $(BIN_DIR) - $(COPY) tools$Sdotnet$S$(CLR_PROTOBUF_DLL_NAME)$D $(BIN_DIR) - -$(GEN_DIR)/ortools/linear_solver/linear_solver_csharp_wrap.cc: \ - $(SRC_DIR)/ortools/linear_solver/csharp/linear_solver.i \ - $(SRC_DIR)/ortools/base/base.i \ - $(SRC_DIR)/ortools/util/csharp/proto.i \ - $(GLOP_DEPS) \ - $(LP_DEPS) \ - | $(GEN_DIR)/ortools/linear_solver - $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ - -o $(GEN_PATH)$Sortools$Slinear_solver$Slinear_solver_csharp_wrap.cc \ - -module operations_research_linear_solver \ - -namespace $(CLR_ORTOOLS_DLL_NAME).LinearSolver \ - -dllimport "$(CLR_ORTOOLS_IMPORT_DLL_NAME).$(SWIG_DOTNET_LIB_SUFFIX)" \ - -outdir $(GEN_PATH)$Sortools$Slinear_solver \ - $(SRC_DIR)$Sortools$Slinear_solver$Scsharp$Slinear_solver.i - -$(OBJ_DIR)/swig/linear_solver_csharp_wrap.$O: \ - $(GEN_DIR)/ortools/linear_solver/linear_solver_csharp_wrap.cc \ - | $(OBJ_DIR)/swig - $(CCC) $(CFLAGS) \ - -c $(GEN_PATH)$Sortools$Slinear_solver$Slinear_solver_csharp_wrap.cc \ - $(OBJ_OUT)$(OBJ_DIR)$Sswig$Slinear_solver_csharp_wrap.$O - -$(GEN_DIR)/ortools/constraint_solver/constraint_solver_csharp_wrap.cc: \ - $(SRC_DIR)/ortools/constraint_solver/csharp/routing.i \ - $(SRC_DIR)/ortools/constraint_solver/csharp/constraint_solver.i \ - $(SRC_DIR)/ortools/base/base.i \ - $(SRC_DIR)/ortools/util/csharp/proto.i \ - $(SRC_DIR)/ortools/util/csharp/functions.i \ - $(CP_DEPS) \ - | $(GEN_DIR)/ortools/constraint_solver - $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ - -o $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.cc \ - -module operations_research_constraint_solver \ - -namespace $(CLR_ORTOOLS_DLL_NAME).ConstraintSolver \ - -dllimport "$(CLR_ORTOOLS_IMPORT_DLL_NAME).$(SWIG_DOTNET_LIB_SUFFIX)" \ - -outdir $(GEN_PATH)$Sortools$Sconstraint_solver \ - $(SRC_DIR)$Sortools$Sconstraint_solver$Scsharp$Srouting.i - $(SED) -i -e 's/CSharp_new_Solver/CSharp_new_CpSolver/g' \ - $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ - $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* - $(SED) -i -e 's/CSharp_delete_Solver/CSharp_delete_CpSolver/g' \ - $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ - $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* - $(SED) -i -e 's/CSharp_Solver/CSharp_CpSolver/g' \ - $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ - $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* - $(SED) -i -e 's/CSharp_new_Constraint/CSharp_new_CpConstraint/g' \ - $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ - $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* - $(SED) -i -e 's/CSharp_delete_Constraint/CSharp_delete_CpConstraint/g' \ - $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ - $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* - $(SED) -i -e 's/CSharp_Constraint/CSharp_CpConstraint/g' \ - $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ - $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* - -$(OBJ_DIR)/swig/constraint_solver_csharp_wrap.$O: \ - $(GEN_DIR)/ortools/constraint_solver/constraint_solver_csharp_wrap.cc \ - | $(OBJ_DIR)/swig - $(CCC) $(CFLAGS) \ - -c $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.cc \ - $(OBJ_OUT)$(OBJ_DIR)$Sswig$Sconstraint_solver_csharp_wrap.$O - -$(GEN_DIR)/ortools/algorithms/knapsack_solver_csharp_wrap.cc: \ - $(SRC_DIR)/ortools/algorithms/csharp/knapsack_solver.i \ - $(SRC_DIR)/ortools/base/base.i \ - $(SRC_DIR)/ortools/util/csharp/proto.i \ - $(SRC_DIR)/ortools/algorithms/knapsack_solver.h \ - | $(GEN_DIR)/ortools/algorithms - $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ - -o $(GEN_PATH)$Sortools$Salgorithms$Sknapsack_solver_csharp_wrap.cc \ - -module operations_research_algorithms \ - -namespace $(CLR_ORTOOLS_DLL_NAME).Algorithms \ - -dllimport "$(CLR_ORTOOLS_IMPORT_DLL_NAME).$(SWIG_DOTNET_LIB_SUFFIX)" \ - -outdir $(GEN_PATH)$Sortools$Salgorithms \ - $(SRC_DIR)$Sortools$Salgorithms$Scsharp$Sknapsack_solver.i - -$(OBJ_DIR)/swig/knapsack_solver_csharp_wrap.$O: \ - $(GEN_DIR)/ortools/algorithms/knapsack_solver_csharp_wrap.cc \ - | $(OBJ_DIR)/swig - $(CCC) $(CFLAGS) \ - -c $(GEN_PATH)$Sortools$Salgorithms$Sknapsack_solver_csharp_wrap.cc \ - $(OBJ_OUT)$(OBJ_DIR)$Sswig$Sknapsack_solver_csharp_wrap.$O - -$(GEN_DIR)/ortools/graph/graph_csharp_wrap.cc: \ - $(SRC_DIR)/ortools/graph/csharp/graph.i \ - $(SRC_DIR)/ortools/base/base.i \ - $(SRC_DIR)/ortools/util/csharp/proto.i \ - $(GRAPH_DEPS) \ - | $(GEN_DIR)/ortools/graph $(GEN_DIR)/ortools/graph - $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ - -o $(GEN_PATH)$Sortools$Sgraph$Sgraph_csharp_wrap.cc \ - -module operations_research_graph \ - -namespace $(CLR_ORTOOLS_DLL_NAME).Graph \ - -dllimport "$(CLR_ORTOOLS_IMPORT_DLL_NAME).$(SWIG_DOTNET_LIB_SUFFIX)" \ - -outdir $(GEN_PATH)$Sortools$Sgraph \ - $(SRC_DIR)$Sortools$Sgraph$Scsharp$Sgraph.i - -$(OBJ_DIR)/swig/graph_csharp_wrap.$O: \ - $(GEN_DIR)/ortools/graph/graph_csharp_wrap.cc \ - | $(OBJ_DIR)/swig - $(CCC) $(CFLAGS) \ - -c $(GEN_PATH)$Sortools$Sgraph$Sgraph_csharp_wrap.cc \ - $(OBJ_OUT)$(OBJ_DIR)$Sswig$Sgraph_csharp_wrap.$O - -$(GEN_DIR)/ortools/sat/sat_csharp_wrap.cc: \ - $(SRC_DIR)/ortools/base/base.i \ - $(SRC_DIR)/ortools/sat/csharp/sat.i \ - $(SRC_DIR)/ortools/sat/swig_helper.h \ - $(SRC_DIR)/ortools/util/csharp/proto.i \ - $(SAT_DEPS) \ - | $(GEN_DIR)/ortools/sat $(GEN_DIR)/ortools/sat - $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ - -o $(GEN_PATH)$Sortools$Ssat$Ssat_csharp_wrap.cc \ - -module operations_research_sat \ - -namespace $(CLR_ORTOOLS_DLL_NAME).Sat \ - -dllimport "$(CLR_ORTOOLS_IMPORT_DLL_NAME).$(SWIG_DOTNET_LIB_SUFFIX)" \ - -outdir $(GEN_PATH)$Sortools$Ssat \ - $(SRC_DIR)$Sortools$Ssat$Scsharp$Ssat.i - -$(OBJ_DIR)/swig/sat_csharp_wrap.$O: \ - $(GEN_DIR)/ortools/sat/sat_csharp_wrap.cc \ - | $(OBJ_DIR)/swig - $(CCC) $(CFLAGS) \ - -c $(GEN_PATH)$Sortools$Ssat$Ssat_csharp_wrap.cc \ - $(OBJ_OUT)$(OBJ_DIR)$Sswig$Ssat_csharp_wrap.$O - -# Protobufs +# Protobufs generated code $(GEN_DIR)/ortools/constraint_solver/SearchLimit.pb.cs: \ $(SRC_DIR)/ortools/constraint_solver/search_limit.proto \ | $(GEN_DIR)/ortools/constraint_solver @@ -289,43 +147,147 @@ $(GEN_DIR)/ortools/sat/SatParameters.pb.cs: \ --csharp_opt=file_extension=.pb.cs \ $(SRC_DIR)$Sortools$Ssat$Ssat_parameters.proto -$(CLR_KEYFILE): $(SRC_DIR)/tools/dotnet/CreateSigningKey/CreateSigningKey.csproj | $(BIN_DIR) - "$(DOTNET_BIN)" run --project tools$Sdotnet$SCreateSigningKey$SCreateSigningKey.csproj $S$(CLR_KEYFILE_PATH) +# Auto-generated rid dependent source code +$(GEN_DIR)/ortools/linear_solver/linear_solver_csharp_wrap.cc: \ + $(SRC_DIR)/ortools/linear_solver/csharp/linear_solver.i \ + $(SRC_DIR)/ortools/base/base.i \ + $(SRC_DIR)/ortools/util/csharp/proto.i \ + $(GLOP_DEPS) \ + $(LP_DEPS) \ + | $(GEN_DIR)/ortools/linear_solver + $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ + -o $(GEN_PATH)$Sortools$Slinear_solver$Slinear_solver_csharp_wrap.cc \ + -module operations_research_linear_solver \ + -namespace $(OR_TOOLS_ASSEMBLY_NAME).LinearSolver \ + -dllimport "$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).$(SWIG_DOTNET_LIB_SUFFIX)" \ + -outdir $(GEN_PATH)$Sortools$Slinear_solver \ + $(SRC_DIR)$Sortools$Slinear_solver$Scsharp$Slinear_solver.i -$(BIN_DIR)/$(CLR_ORTOOLS_DLL_NAME)$D: \ - $(SRC_DIR)/ortools/dotnet/$(ORTOOLS_DLL_NAME)/$(ORTOOLS_DLL_NAME).csproj \ +$(OBJ_DIR)/swig/linear_solver_csharp_wrap.$O: \ + $(GEN_DIR)/ortools/linear_solver/linear_solver_csharp_wrap.cc \ + | $(OBJ_DIR)/swig + $(CCC) $(CFLAGS) \ + -c $(GEN_PATH)$Sortools$Slinear_solver$Slinear_solver_csharp_wrap.cc \ + $(OBJ_OUT)$(OBJ_DIR)$Sswig$Slinear_solver_csharp_wrap.$O + +$(GEN_DIR)/ortools/constraint_solver/constraint_solver_csharp_wrap.cc: \ + $(SRC_DIR)/ortools/constraint_solver/csharp/routing.i \ + $(SRC_DIR)/ortools/constraint_solver/csharp/constraint_solver.i \ + $(SRC_DIR)/ortools/base/base.i \ + $(SRC_DIR)/ortools/util/csharp/proto.i \ + $(SRC_DIR)/ortools/util/csharp/functions.i \ + $(CP_DEPS) \ + | $(GEN_DIR)/ortools/constraint_solver + $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ + -o $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.cc \ + -module operations_research_constraint_solver \ + -namespace $(OR_TOOLS_ASSEMBLY_NAME).ConstraintSolver \ + -dllimport "$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).$(SWIG_DOTNET_LIB_SUFFIX)" \ + -outdir $(GEN_PATH)$Sortools$Sconstraint_solver \ + $(SRC_DIR)$Sortools$Sconstraint_solver$Scsharp$Srouting.i + $(SED) -i -e 's/CSharp_new_Solver/CSharp_new_CpSolver/g' \ + $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ + $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* + $(SED) -i -e 's/CSharp_delete_Solver/CSharp_delete_CpSolver/g' \ + $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ + $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* + $(SED) -i -e 's/CSharp_Solver/CSharp_CpSolver/g' \ + $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ + $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* + $(SED) -i -e 's/CSharp_new_Constraint/CSharp_new_CpConstraint/g' \ + $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ + $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* + $(SED) -i -e 's/CSharp_delete_Constraint/CSharp_delete_CpConstraint/g' \ + $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ + $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* + $(SED) -i -e 's/CSharp_Constraint/CSharp_CpConstraint/g' \ + $(GEN_PATH)$Sortools$Sconstraint_solver$S*cs \ + $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.* + +$(OBJ_DIR)/swig/constraint_solver_csharp_wrap.$O: \ + $(GEN_DIR)/ortools/constraint_solver/constraint_solver_csharp_wrap.cc \ + | $(OBJ_DIR)/swig + $(CCC) $(CFLAGS) \ + -c $(GEN_PATH)$Sortools$Sconstraint_solver$Sconstraint_solver_csharp_wrap.cc \ + $(OBJ_OUT)$(OBJ_DIR)$Sswig$Sconstraint_solver_csharp_wrap.$O + +$(GEN_DIR)/ortools/algorithms/knapsack_solver_csharp_wrap.cc: \ + $(SRC_DIR)/ortools/algorithms/csharp/knapsack_solver.i \ + $(SRC_DIR)/ortools/base/base.i \ + $(SRC_DIR)/ortools/util/csharp/proto.i \ + $(SRC_DIR)/ortools/algorithms/knapsack_solver.h \ + | $(GEN_DIR)/ortools/algorithms + $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ + -o $(GEN_PATH)$Sortools$Salgorithms$Sknapsack_solver_csharp_wrap.cc \ + -module operations_research_algorithms \ + -namespace $(OR_TOOLS_ASSEMBLY_NAME).Algorithms \ + -dllimport "$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).$(SWIG_DOTNET_LIB_SUFFIX)" \ + -outdir $(GEN_PATH)$Sortools$Salgorithms \ + $(SRC_DIR)$Sortools$Salgorithms$Scsharp$Sknapsack_solver.i + +$(OBJ_DIR)/swig/knapsack_solver_csharp_wrap.$O: \ + $(GEN_DIR)/ortools/algorithms/knapsack_solver_csharp_wrap.cc \ + | $(OBJ_DIR)/swig + $(CCC) $(CFLAGS) \ + -c $(GEN_PATH)$Sortools$Salgorithms$Sknapsack_solver_csharp_wrap.cc \ + $(OBJ_OUT)$(OBJ_DIR)$Sswig$Sknapsack_solver_csharp_wrap.$O + +$(GEN_DIR)/ortools/graph/graph_csharp_wrap.cc: \ + $(SRC_DIR)/ortools/graph/csharp/graph.i \ + $(SRC_DIR)/ortools/base/base.i \ + $(SRC_DIR)/ortools/util/csharp/proto.i \ + $(GRAPH_DEPS) \ + | $(GEN_DIR)/ortools/graph $(GEN_DIR)/ortools/graph + $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ + -o $(GEN_PATH)$Sortools$Sgraph$Sgraph_csharp_wrap.cc \ + -module operations_research_graph \ + -namespace $(OR_TOOLS_ASSEMBLY_NAME).Graph \ + -dllimport "$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).$(SWIG_DOTNET_LIB_SUFFIX)" \ + -outdir $(GEN_PATH)$Sortools$Sgraph \ + $(SRC_DIR)$Sortools$Sgraph$Scsharp$Sgraph.i + +$(OBJ_DIR)/swig/graph_csharp_wrap.$O: \ + $(GEN_DIR)/ortools/graph/graph_csharp_wrap.cc \ + | $(OBJ_DIR)/swig + $(CCC) $(CFLAGS) \ + -c $(GEN_PATH)$Sortools$Sgraph$Sgraph_csharp_wrap.cc \ + $(OBJ_OUT)$(OBJ_DIR)$Sswig$Sgraph_csharp_wrap.$O + +$(GEN_DIR)/ortools/sat/sat_csharp_wrap.cc: \ + $(SRC_DIR)/ortools/base/base.i \ + $(SRC_DIR)/ortools/sat/csharp/sat.i \ + $(SRC_DIR)/ortools/sat/swig_helper.h \ + $(SRC_DIR)/ortools/util/csharp/proto.i \ + $(SAT_DEPS) \ + | $(GEN_DIR)/ortools/sat $(GEN_DIR)/ortools/sat + $(SWIG_BINARY) $(SWIG_INC) -I$(INC_DIR) -c++ -csharp \ + -o $(GEN_PATH)$Sortools$Ssat$Ssat_csharp_wrap.cc \ + -module operations_research_sat \ + -namespace $(OR_TOOLS_ASSEMBLY_NAME).Sat \ + -dllimport "$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).$(SWIG_DOTNET_LIB_SUFFIX)" \ + -outdir $(GEN_PATH)$Sortools$Ssat \ + $(SRC_DIR)$Sortools$Ssat$Scsharp$Ssat.i + +$(OBJ_DIR)/swig/sat_csharp_wrap.$O: \ + $(GEN_DIR)/ortools/sat/sat_csharp_wrap.cc \ + | $(OBJ_DIR)/swig + $(CCC) $(CFLAGS) \ + -c $(GEN_PATH)$Sortools$Ssat$Ssat_csharp_wrap.cc \ + $(OBJ_OUT)$(OBJ_DIR)$Sswig$Ssat_csharp_wrap.$O + +$(DOTNET_ORTOOLS_SNK): $(SRC_DIR)/tools/dotnet/CreateSigningKey/CreateSigningKey.csproj | $(BIN_DIR) + "$(DOTNET_BIN)" run --project tools$Sdotnet$SCreateSigningKey$SCreateSigningKey.csproj $S$(DOTNET_ORTOOLS_SNK_PATH) + +$(LIB_DIR)/$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).$(SWIG_DOTNET_LIB_SUFFIX): \ $(OR_TOOLS_LIBS) \ - $(BIN_DIR)/$(CLR_PROTOBUF_DLL_NAME)$D \ - $(CLR_KEYFILE) \ - $(SRC_DIR)/ortools/dotnet/OrTools/algorithms/IntArrayHelper.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/constraint_solver/IntVarArrayHelper.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/constraint_solver/IntervalVarArrayHelper.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/constraint_solver/IntArrayHelper.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/constraint_solver/NetDecisionBuilder.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/constraint_solver/SolverHelper.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/constraint_solver/ValCstPair.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/linear_solver/DoubleArrayHelper.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/linear_solver/LinearExpr.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/linear_solver/LinearConstraint.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/linear_solver/SolverHelper.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/linear_solver/VariableHelper.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/sat/CpModel.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/util/NestedArrayHelper.cs \ - $(SRC_DIR)/ortools/dotnet/OrTools/util/ProtoHelper.cs \ - $(GEN_DIR)/ortools/constraint_solver/Model.pb.cs \ - $(GEN_DIR)/ortools/constraint_solver/SearchLimit.pb.cs \ - $(GEN_DIR)/ortools/constraint_solver/SolverParameters.pb.cs \ - $(GEN_DIR)/ortools/constraint_solver/RoutingParameters.pb.cs \ - $(GEN_DIR)/ortools/constraint_solver/RoutingEnums.pb.cs \ - $(GEN_DIR)/ortools/sat/CpModel.pb.cs \ $(OBJ_DIR)/swig/linear_solver_csharp_wrap.$O \ $(OBJ_DIR)/swig/sat_csharp_wrap.$O \ $(OBJ_DIR)/swig/constraint_solver_csharp_wrap.$O \ $(OBJ_DIR)/swig/knapsack_solver_csharp_wrap.$O \ $(OBJ_DIR)/swig/graph_csharp_wrap.$O \ - | $(BIN_DIR) + | $(LIB_DIR) $(DYNAMIC_LD) \ - $(LD_OUT)$(BIN_DIR)$S$(CLR_ORTOOLS_IMPORT_DLL_NAME).$(SWIG_DOTNET_LIB_SUFFIX) \ + $(LD_OUT)$(LIB_DIR)$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).$(SWIG_DOTNET_LIB_SUFFIX) \ $(OBJ_DIR)$Sswig$Slinear_solver_csharp_wrap.$O \ $(OBJ_DIR)$Sswig$Ssat_csharp_wrap.$O \ $(OBJ_DIR)$Sswig$Sconstraint_solver_csharp_wrap.$O \ @@ -333,41 +295,80 @@ $(BIN_DIR)/$(CLR_ORTOOLS_DLL_NAME)$D: \ $(OBJ_DIR)$Sswig$Sgraph_csharp_wrap.$O \ $(OR_TOOLS_LNK) \ $(OR_TOOLS_LDFLAGS) - "$(DOTNET_BIN)" build -c Debug ortools$Sdotnet$S$(ORTOOLS_DLL_NAME)$S$(ORTOOLS_DLL_NAME).csproj -ifeq ($(SYSTEM),win) - $(COPY) ortools$Sdotnet$S$(ORTOOLS_DLL_NAME)$Sbin$Sx64$SDebug$Snetstandard2.0$S*.* $(BIN_DIR) -else - $(COPY) ortools$Sdotnet$S$(ORTOOLS_DLL_NAME)$Sbin$SDebug$Snetstandard2.0$S*.* $(BIN_DIR) -endif -$(SRC_DIR)/ortools/dotnet/$(ORTOOLS_DLL_NAME)/$(ORTOOLS_DLL_NAME).csproj: \ - $(SRC_DIR)/ortools/dotnet/$(ORTOOLS_DLL_NAME)/$(ORTOOLS_DLL_NAME).csproj.in +$(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_NATIVE_ASSEMBLY_NAME)/$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).csproj: \ + $(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_NATIVE_ASSEMBLY_NAME)/$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).csproj.in $(SED) -e "s/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/" \ - ortools$Sdotnet$S$(ORTOOLS_DLL_NAME)$S$(ORTOOLS_DLL_NAME).csproj.in \ - >ortools$Sdotnet$S$(ORTOOLS_DLL_NAME)$S$(ORTOOLS_DLL_NAME).csproj + ortools$Sdotnet$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME)$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).csproj.in \ + > ortools$Sdotnet$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME)$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).csproj + +$(DOTNET_ORTOOLS_NATIVE_NUPKG): \ + $(DOTNET_ORTOOLS_SNK) \ + $(LIB_DIR)/$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).$(SWIG_DOTNET_LIB_SUFFIX) \ + $(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_NATIVE_ASSEMBLY_NAME)/$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).csproj \ + $(SRC_DIR)/ortools/algorithms/csharp/IntArrayHelper.cs \ + $(SRC_DIR)/ortools/constraint_solver/csharp/IntVarArrayHelper.cs \ + $(SRC_DIR)/ortools/constraint_solver/csharp/IntervalVarArrayHelper.cs \ + $(SRC_DIR)/ortools/constraint_solver/csharp/IntArrayHelper.cs \ + $(SRC_DIR)/ortools/constraint_solver/csharp/NetDecisionBuilder.cs \ + $(SRC_DIR)/ortools/constraint_solver/csharp/SolverHelper.cs \ + $(SRC_DIR)/ortools/constraint_solver/csharp/ValCstPair.cs \ + $(SRC_DIR)/ortools/linear_solver/csharp/DoubleArrayHelper.cs \ + $(SRC_DIR)/ortools/linear_solver/csharp/LinearExpr.cs \ + $(SRC_DIR)/ortools/linear_solver/csharp/LinearConstraint.cs \ + $(SRC_DIR)/ortools/linear_solver/csharp/SolverHelper.cs \ + $(SRC_DIR)/ortools/linear_solver/csharp/VariableHelper.cs \ + $(SRC_DIR)/ortools/sat/csharp/CpModel.cs \ + $(SRC_DIR)/ortools/util/csharp/NestedArrayHelper.cs \ + $(SRC_DIR)/ortools/util/csharp/ProtoHelper.cs \ + $(GEN_DIR)/ortools/constraint_solver/Model.pb.cs \ + $(GEN_DIR)/ortools/constraint_solver/SearchLimit.pb.cs \ + $(GEN_DIR)/ortools/constraint_solver/SolverParameters.pb.cs \ + $(GEN_DIR)/ortools/constraint_solver/RoutingParameters.pb.cs \ + $(GEN_DIR)/ortools/constraint_solver/RoutingEnums.pb.cs \ + $(GEN_DIR)/ortools/sat/CpModel.pb.cs \ + | $(PACKAGE_DIR) + "$(DOTNET_BIN)" build ortools$Sdotnet$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME)$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).csproj + "$(DOTNET_BIN)" pack ortools$Sdotnet$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME)$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).csproj + +$(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_ASSEMBLY_NAME)/$(OR_TOOLS_ASSEMBLY_NAME).csproj: \ + $(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_ASSEMBLY_NAME)/$(OR_TOOLS_ASSEMBLY_NAME).csproj.in + $(SED) -e "s/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/" \ + ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$S$(OR_TOOLS_ASSEMBLY_NAME).csproj.in \ + > ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$S$(OR_TOOLS_ASSEMBLY_NAME).csproj + +$(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_ASSEMBLY_NAME)/runtime.json: \ + $(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_ASSEMBLY_NAME)/runtime.json.in + $(SED) -e "s/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/" \ + ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$Sruntime.json.in \ + > ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$Sruntime.json + +$(DOTNET_ORTOOLS_NUPKG): \ + $(DOTNET_ORTOOLS_NATIVE_NUPKG) \ + $(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_ASSEMBLY_NAME)/$(OR_TOOLS_ASSEMBLY_NAME).csproj \ + $(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_ASSEMBLY_NAME)/runtime.json \ + | $(PACKAGE_DIR) + "$(DOTNET_BIN)" build ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$S$(OR_TOOLS_ASSEMBLY_NAME).csproj + "$(DOTNET_BIN)" pack ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$S$(OR_TOOLS_ASSEMBLY_NAME).csproj ############## ## FSHARP ## ############## .PHONY: fsharp_dotnet # Build F# OR-Tools -fsharp_dotnet: $(BIN_DIR)/$(CLR_ORTOOLS_FSHARP_DLL_NAME)$D +fsharp_dotnet: $(DOTNET_ORTOOLS_FSHARP_NUPKG) -$(BIN_DIR)/$(CLR_ORTOOLS_FSHARP_DLL_NAME)$D: \ - $(SRC_DIR)/ortools/dotnet/$(ORTOOLS_FSHARP_DLL_NAME)/$(ORTOOLS_FSHARP_DLL_NAME).fsproj \ - $(BIN_DIR)/$(CLR_ORTOOLS_DLL_NAME)$D \ - | $(BIN_DIR) - "$(DOTNET_BIN)" build -c Debug ortools$Sdotnet$S$(ORTOOLS_FSHARP_DLL_NAME)$S$(ORTOOLS_FSHARP_DLL_NAME).fsproj -ifeq ($(SYSTEM),win) - $(COPY) ortools$Sdotnet$S$(ORTOOLS_FSHARP_DLL_NAME)$Sbin$Sx64$SDebug$Snetstandard2.0$S*.* $(BIN_DIR) -else - $(COPY) ortools$Sdotnet$S$(ORTOOLS_FSHARP_DLL_NAME)$Sbin$SDebug$Snetstandard2.0$S*.* $(BIN_DIR) -endif - -$(SRC_DIR)/ortools/dotnet/$(ORTOOLS_FSHARP_DLL_NAME)/$(ORTOOLS_FSHARP_DLL_NAME).fsproj: \ - $(SRC_DIR)/ortools/dotnet/$(ORTOOLS_FSHARP_DLL_NAME)/$(ORTOOLS_FSHARP_DLL_NAME).fsproj.in +$(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)/$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).fsproj: \ + $(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)/$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).fsproj.in $(SED) -e "s/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/" \ - ortools$Sdotnet$S$(ORTOOLS_FSHARP_DLL_NAME)$S$(ORTOOLS_FSHARP_DLL_NAME).fsproj.in \ - >ortools$Sdotnet$S$(ORTOOLS_FSHARP_DLL_NAME)$S$(ORTOOLS_FSHARP_DLL_NAME).fsproj + ortools$Sdotnet$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).fsproj.in \ + > ortools$Sdotnet$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).fsproj + +$(DOTNET_ORTOOLS_FSHARP_NUPKG): \ + $(DOTNET_ORTOOLS_NUPKG) \ + $(SRC_DIR)/ortools/dotnet/$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)/$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).fsproj \ + | $(PACKAGE_DIR) + "$(DOTNET_BIN)" build ortools$Sdotnet$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).fsproj + "$(DOTNET_BIN)" pack ortools$Sdotnet$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).fsproj ##################### ## .NET Examples ## @@ -389,16 +390,27 @@ rdotnet: $(BIN_DIR)/$(EX_NAME)$D "$(DOTNET_BIN)" $(BIN_DIR)$S$(EX_NAME)$D endif # ifeq ($(EX),) -$(BIN_DIR)/%$D: $(DOTNET_EX_DIR)/csharp/%.csproj $(DOTNET_EX_DIR)/csharp/%.cs \ - $(BIN_DIR)/$(CLR_ORTOOLS_DLL_NAME)$D | $(BIN_DIR) - "$(DOTNET_BIN)" build -o "..$S..$S..$S$(BIN_DIR)" \ +$(TEMP_DOTNET_DIR)/%$D: \ + $(DOTNET_EX_DIR)/csharp/%.csproj \ + $(DOTNET_EX_DIR)/csharp/%.cs \ + $(DOTNET_ORTOOLS_NUPKG) \ + | $(TEMP_DOTNET_DIR) + "$(DOTNET_BIN)" build \ + -o "..$S..$S..$S$(TEMP_DOTNET_DIR)" \ $(DOTNET_EX_PATH)$Scsharp$S$*.csproj -$(BIN_DIR)/%$D: $(DOTNET_EX_DIR)/fsharp/%.fsproj $(DOTNET_EX_DIR)/fsharp/%.fs \ - $(BIN_DIR)/$(CLR_ORTOOLS_FSHARP_DLL_NAME)$D | $(BIN_DIR) - "$(DOTNET_BIN)" build -o "..$S..$S..$S$(BIN_DIR)" \ +$(TEMP_DOTNET_DIR)/%$D: \ + $(DOTNET_EX_DIR)/fsharp/%.fsproj \ + $(DOTNET_EX_DIR)/fsharp/%.fs \ + $(DOTNET_ORTOOLS_FSHARP_NUPKG) \ + | $(BIN_DIR) + "$(DOTNET_BIN)" build \ + -o "..$S..$S..$S$(TEMP_DOTNET_DIR)" \ $(DOTNET_EX_PATH)$Sfsharp$S$*.fsproj +rdotnet_%: $(DOTNET_EX_DIR)/csharp/%.csproj + "$(DOTNET_BIN)" run --project $(DOTNET_EX_PATH)$Scsharp$S$*.csproj -- $(ARGS) + ################ ## Cleaning ## ################ @@ -406,21 +418,18 @@ $(BIN_DIR)/%$D: $(DOTNET_EX_DIR)/fsharp/%.fsproj $(DOTNET_EX_DIR)/fsharp/%.fs \ clean_dotnet: -$(DELREC) tools$Sdotnet$SCreateSigningKey$Sbin -$(DELREC) tools$Sdotnet$SCreateSigningKey$Sobj - -$(DEL) $(CLR_KEYFILE_PATH) - -$(DELREC) ortools$Sdotnet$S$(ORTOOLS_DLL_NAME)$S$(ORTOOLS_DLL_NAME).csproj - -$(DELREC) ortools$Sdotnet$S$(ORTOOLS_DLL_NAME)$Sbin - -$(DELREC) ortools$Sdotnet$S$(ORTOOLS_DLL_NAME)$Sobj - -$(DELREC) ortools$Sdotnet$S$(ORTOOLS_TEST_DLL_NAME)$Sbin - -$(DELREC) ortools$Sdotnet$S$(ORTOOLS_TEST_DLL_NAME)$Sobj - -$(DELREC) ortools$Sdotnet$S$(ORTOOLS_FSHARP_DLL_NAME)$S$(ORTOOLS_FSHARP_DLL_NAME).fsproj - -$(DELREC) ortools$Sdotnet$S$(ORTOOLS_FSHARP_DLL_NAME)$Sbin - -$(DELREC) ortools$Sdotnet$S$(ORTOOLS_FSHARP_DLL_NAME)$Sobj - -$(DELREC) ortools$Sdotnet$S$(ORTOOLS_FSHARP_TEST_DLL_NAME)$Sbin - -$(DELREC) ortools$Sdotnet$S$(ORTOOLS_FSHARP_TEST_DLL_NAME)$Sobj - -$(DELREC) ortools$Sdotnet$Spackages - -$(DELREC) $(EX_PATH)$Sdotnet$Scsharp$Sbin - -$(DELREC) $(EX_PATH)$Sdotnet$Scsharp$Sobj - -$(DELREC) $(EX_PATH)$Sdotnet$Sfsharp$Sobj + -$(DEL) $(DOTNET_ORTOOLS_SNK_PATH) + -$(DELREC) ortools$Sdotnet$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME)$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).csproj + -$(DELREC) ortools$Sdotnet$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME)$Sbin + -$(DELREC) ortools$Sdotnet$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME)$Sobj + -$(DELREC) ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$S$(OR_TOOLS_ASSEMBLY_NAME).csproj + -$(DELREC) ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$Sruntime.json + -$(DELREC) ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$Sbin + -$(DELREC) ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$Sobj + -$(DELREC) ortools$Sdotnet$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).csproj + -$(DELREC) ortools$Sdotnet$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)$Sbin + -$(DELREC) ortools$Sdotnet$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)$Sobj + -$(DELREC) $(PACKAGE_DIR) -$(DEL) $(GEN_PATH)$Sortools$Salgorithms$S*.cs -$(DEL) $(GEN_PATH)$Sortools$Salgorithms$S*csharp_wrap* -$(DEL) $(GEN_PATH)$Sortools$Sgraph$S*.cs @@ -432,44 +441,36 @@ clean_dotnet: -$(DEL) $(GEN_PATH)$Sortools$Ssat$S*.cs -$(DEL) $(GEN_PATH)$Sortools$Ssat$S*csharp_wrap* -$(DEL) $(OBJ_DIR)$Sswig$S*_csharp_wrap.$O - -$(DEL) $(BIN_DIR)$S$(CLR_ORTOOLS_IMPORT_DLL_NAME).* - -$(DEL) $(BIN_DIR)$S$(CLR_PROTOBUF_DLL_NAME).* - -$(DEL) $(BIN_DIR)$S$(CLR_ORTOOLS_DLL_NAME).* - -$(DEL) $(BIN_DIR)$S$(CLR_ORTOOLS_FSHARP_DLL_NAME).* - -$(DEL) $(SRC_DIR)/ortools/dotnet/$(ORTOOLS_NUSPEC_FILE) + -$(DEL) $(LIB_DIR)$S$(OR_TOOLS_NATIVE_ASSEMBLY_NAME).* + -$(DEL) $(BIN_DIR)$S$(OR_TOOLS_ASSEMBLY_NAME).* + -$(DEL) $(BIN_DIR)$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).* + -$(DELREC) $(EX_PATH)$Sdotnet$Scsharp$Sbin + -$(DELREC) $(EX_PATH)$Sdotnet$Scsharp$Sobj + -$(DELREC) $(EX_PATH)$Sdotnet$Sfsharp$Sbin + -$(DELREC) $(EX_PATH)$Sdotnet$Sfsharp$Sobj -$(DELREC) $(TEMP_DOTNET_DIR) -$(DELREC) $(TEMP_DOTNET_TEST_DIR) + -@"$(DOTNET_BIN)" nuget locals all --clear ###################### ## Nuget artifact ## ###################### -TEMP_DOTNET_DIR=temp_dotnet - -$(TEMP_DOTNET_DIR): - $(MKDIR_P) $(TEMP_DOTNET_DIR) - -$(SRC_DIR)/ortools/dotnet/$(ORTOOLS_NUSPEC_FILE): $(SRC_DIR)/ortools/dotnet/$(ORTOOLS_NUSPEC_FILE).in - $(SED) -e "s/@PROJECT_DLL_NAME@/$(CLR_ORTOOLS_DLL_NAME)/" \ - ortools$Sdotnet$S$(ORTOOLS_NUSPEC_FILE).in \ - >ortools$Sdotnet$S$(ORTOOLS_NUSPEC_FILE) - $(SED) -i -e "s/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/" \ - ortools$Sdotnet$S$(ORTOOLS_NUSPEC_FILE) .PHONY: nuget_archive # Build .Net "Google.OrTools" Nuget Package -nuget_archive: dotnet $(SRC_DIR)/ortools/dotnet/$(ORTOOLS_NUSPEC_FILE) | $(TEMP_DOTNET_DIR) +nuget_archive: dotnet | $(TEMP_DOTNET_DIR) "$(DOTNET_BIN)" publish -c Release --no-dependencies --no-restore -f netstandard2.0 \ -o "..$S..$S..$S$(TEMP_DOTNET_DIR)" \ - ortools$Sdotnet$S$(ORTOOLS_DLL_NAME)$S$(ORTOOLS_DLL_NAME).csproj + ortools$Sdotnet$S$(OR_TOOLS_ASSEMBLY_NAME)$S$(OR_TOOLS_ASSEMBLY_NAME).csproj "$(DOTNET_BIN)" publish -c Release --no-dependencies --no-restore -f netstandard2.0 \ -o "..$S..$S..$S$(TEMP_DOTNET_DIR)" \ - ortools$Sdotnet$S$(ORTOOLS_FSHARP_DLL_NAME)$S$(ORTOOLS_FSHARP_DLL_NAME).fsproj + ortools$Sdotnet$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME)$S$(OR_TOOLS_FSHARP_ASSEMBLY_NAME).fsproj "$(DOTNET_BIN)" pack -c Release \ -o "..$S..$S..$S$(BIN_DIR)" \ ortools$Sdotnet .PHONY: nuget_upload # Upload Nuget Package nuget_upload: nuget_archive - @echo Uploading Nuget package for "netstandard2". + @echo Uploading Nuget package for "netstandard2.0". $(warning Not Implemented) ############# @@ -478,19 +479,17 @@ nuget_upload: nuget_archive .PHONY: detect_dotnet # Show variables used to build dotnet OR-Tools. detect_dotnet: @echo Relevant info for the dotnet build: - @echo PROTOC = $(PROTOC) @echo DOTNET_BIN = $(DOTNET_BIN) - @echo CLR_KEYFILE = $(CLR_KEYFILE) - @echo SWIG_PYTHON_LIB_SUFFIX = $(SWIG_PYTHON_LIB_SUFFIX) - @echo CLR_PROTOBUF_DLL_NAME = $(CLR_PROTOBUF_DLL_NAME) - @echo CLR_ORTOOLS_IMPORT_DLL_NAME = $(CLR_ORTOOLS_IMPORT_DLL_NAME) - @echo CLR_ORTOOLS_DLL_NAME = $(CLR_ORTOOLS_DLL_NAME) - @echo CLR_ORTOOLS_FSHARP_DLL_NAME = $(CLR_ORTOOLS_FSHARP_DLL_NAME) - @echo CLR_ORTOOLS_TEST_DLL_NAME = $(CLR_ORTOOLS_TEST_DLL_NAME) - @echo CLR_ORTOOLS_FSHARP_TEST_DLL_NAME = $(CLR_ORTOOLS_FSHARP_TEST_DLL_NAME) - @echo DOTNET_ORTOOLS_LIBS = $(DOTNET_ORTOOLS_LIBS) @echo NUGET_BIN = $(NUGET_BIN) - @echo ORTOOLS_NUSPEC_FILE = $(ORTOOLS_NUSPEC_FILE) + @echo PROTOC = $(PROTOC) + @echo DOTNET_ORTOOLS_SNK = $(DOTNET_ORTOOLS_SNK) + @echo SWIG_DOTNET_LIB_SUFFIX = $(SWIG_DOTNET_LIB_SUFFIX) + @echo OR_TOOLS_NATIVE_ASSEMBLY_NAME = $(OR_TOOLS_NATIVE_ASSEMBLY_NAME) + @echo DOTNET_ORTOOLS_NATIVE_NUPKG = $(DOTNET_ORTOOLS_NATIVE_NUPKG) + @echo OR_TOOLS_ASSEMBLY_NAME = $(OR_TOOLS_ASSEMBLY_NAME) + @echo DOTNET_ORTOOLS_NUPKG = $(DOTNET_ORTOOLS_NUPKG) + @echo OR_TOOLS_FSHARP_ASSEMBLY_NAME = $(OR_TOOLS_FSHARP_ASSEMBLY_NAME) + @echo DOTNET_ORTOOLS_FSHARP_NUPKG = $(DOTNET_ORTOOLS_FSHARP_NUPKG) ifeq ($(SYSTEM),win) @echo off & echo( else diff --git a/makefiles/Makefile.test.mk b/makefiles/Makefile.test.mk index 4b8a69423d..ce907c415d 100755 --- a/makefiles/Makefile.test.mk +++ b/makefiles/Makefile.test.mk @@ -254,12 +254,10 @@ test_java_examples: java $(MAKE) rjava_YoungTableaux .PHONY: test_donet_examples -test_dotnet_examples: dotnet -# C# tests - "$(DOTNET_BIN)" $(BIN_DIR)$Sa_puzzle$D - "$(DOTNET_BIN)" $(BIN_DIR)$Stsp$D -# F# tests - "$(DOTNET_BIN)" $(BIN_DIR)$SProgram$D +test_dotnet_examples: dotnet \ +rdotnet_a_puzzle \ +rdotnet_tsp \ +#rdotnet_Program # csharp test .PHONY: test_csharp_examples diff --git a/ortools/dotnet/OrTools/algorithms/IntArrayHelper.cs b/ortools/algorithms/csharp/IntArrayHelper.cs similarity index 100% rename from ortools/dotnet/OrTools/algorithms/IntArrayHelper.cs rename to ortools/algorithms/csharp/IntArrayHelper.cs diff --git a/ortools/dotnet/OrTools/constraint_solver/IntArrayHelper.cs b/ortools/constraint_solver/csharp/IntArrayHelper.cs similarity index 100% rename from ortools/dotnet/OrTools/constraint_solver/IntArrayHelper.cs rename to ortools/constraint_solver/csharp/IntArrayHelper.cs diff --git a/ortools/dotnet/OrTools/constraint_solver/IntVarArrayHelper.cs b/ortools/constraint_solver/csharp/IntVarArrayHelper.cs similarity index 100% rename from ortools/dotnet/OrTools/constraint_solver/IntVarArrayHelper.cs rename to ortools/constraint_solver/csharp/IntVarArrayHelper.cs diff --git a/ortools/dotnet/OrTools/constraint_solver/IntervalVarArrayHelper.cs b/ortools/constraint_solver/csharp/IntervalVarArrayHelper.cs similarity index 100% rename from ortools/dotnet/OrTools/constraint_solver/IntervalVarArrayHelper.cs rename to ortools/constraint_solver/csharp/IntervalVarArrayHelper.cs diff --git a/ortools/dotnet/OrTools/constraint_solver/NetDecisionBuilder.cs b/ortools/constraint_solver/csharp/NetDecisionBuilder.cs similarity index 100% rename from ortools/dotnet/OrTools/constraint_solver/NetDecisionBuilder.cs rename to ortools/constraint_solver/csharp/NetDecisionBuilder.cs diff --git a/ortools/dotnet/OrTools/constraint_solver/SolverHelper.cs b/ortools/constraint_solver/csharp/SolverHelper.cs similarity index 100% rename from ortools/dotnet/OrTools/constraint_solver/SolverHelper.cs rename to ortools/constraint_solver/csharp/SolverHelper.cs diff --git a/ortools/dotnet/OrTools/constraint_solver/ValCstPair.cs b/ortools/constraint_solver/csharp/ValCstPair.cs similarity index 100% rename from ortools/dotnet/OrTools/constraint_solver/ValCstPair.cs rename to ortools/constraint_solver/csharp/ValCstPair.cs diff --git a/ortools/dotnet/Google.OrTools.FSharp/Google.OrTools.FSharp.fsproj.in b/ortools/dotnet/Google.OrTools.FSharp/Google.OrTools.FSharp.fsproj.in new file mode 100644 index 0000000000..c86c083523 --- /dev/null +++ b/ortools/dotnet/Google.OrTools.FSharp/Google.OrTools.FSharp.fsproj.in @@ -0,0 +1,43 @@ + + + Library + Google.OrTools.FSharp + netstandard2.0 + Google.OrTools.FSharp + + + Google.OrTools.FSharp + @PROJECT_VERSION@ + Google LLC + .NET F# wrapper for the Operations Research Tools project + Copyright 2018 Google LLC + https://github.com/google/or-tools/blob/master/LICENSE-2.0.txt + https://developers.google.com/optimization + math;LinearSolver;ConstraintSolver;ConstraintProgramming + ../../../packages + false + + ../../../bin/or-tools.snk + true + true + + + true + false + false + true + + + + full + true + true + + + + ../../../packages;$(RestoreSources);https://api.nuget.org/v3/index.json + + + + + diff --git a/ortools/dotnet/OrTools.FSharp/OrTools.fs b/ortools/dotnet/Google.OrTools.FSharp/OrTools.fs similarity index 100% rename from ortools/dotnet/OrTools.FSharp/OrTools.fs rename to ortools/dotnet/Google.OrTools.FSharp/OrTools.fs diff --git a/ortools/dotnet/Google.OrTools/Google.OrTools.csproj.in b/ortools/dotnet/Google.OrTools/Google.OrTools.csproj.in new file mode 100644 index 0000000000..47a9a4cbe9 --- /dev/null +++ b/ortools/dotnet/Google.OrTools/Google.OrTools.csproj.in @@ -0,0 +1,158 @@ + + + Library + netstandard2.0 + win-x64;osx-x64;linux-x64 + Google.OrTools + + + Google.OrTools + @PROJECT_VERSION@ + Google LLC + .NET wrapper for the Operations Research Tools project + Copyright 2018 Google LLC + https://github.com/google/or-tools/blob/master/LICENSE-2.0.txt + https://developers.google.com/optimization + native;math;LinearSolver;ConstraintSolver;ConstraintProgramming + ../../../packages + false + + ../../../bin/or-tools.snk + true + true + + + + false + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + ref/$(TargetFramework)/%(Filename)%(Extension) + true + PreserveNewest + + + ref/$(TargetFramework)/%(Filename)%(Extension) + true + PreserveNewest + + + ref/$(TargetFramework)/%(Filename)%(Extension) + true + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + ../../../packages;$(RestoreSources);https://api.nuget.org/v3/index.json + + + + + + + + + + + + + + + + + runtime.json + true + PreserveNewest + + + diff --git a/ortools/dotnet/Google.OrTools/runtime.json.in b/ortools/dotnet/Google.OrTools/runtime.json.in new file mode 100644 index 0000000000..a8a46faeda --- /dev/null +++ b/ortools/dotnet/Google.OrTools/runtime.json.in @@ -0,0 +1,19 @@ +{ + "runtimes": { + "linux-x64": { + "Google.OrTools": { + "runtime.linux-x64.Google.OrTools": "@PROJECT_VERSION@" + } + }, + "osx-x64": { + "Google.OrTools": { + "runtime.osx-x64.Google.OrTools": "@PROJECT_VERSION@" + } + }, + "win-x64": { + "Google.OrTools": { + "runtime.win-x64.Google.OrTools": "@PROJECT_VERSION@" + } + } + } +} diff --git a/ortools/dotnet/OrTools.FSharp.Tests/OrTools.FSharp.Tests.fsproj b/ortools/dotnet/OrTools.FSharp.Tests/OrTools.FSharp.Tests.fsproj index b4e4f4ef1b..f74808d39c 100644 --- a/ortools/dotnet/OrTools.FSharp.Tests/OrTools.FSharp.Tests.fsproj +++ b/ortools/dotnet/OrTools.FSharp.Tests/OrTools.FSharp.Tests.fsproj @@ -2,6 +2,7 @@ Exe netcoreapp2.0 + false Google.OrTools.FSharp.Tests Google.OrTools.FSharp.Tests diff --git a/ortools/dotnet/OrTools.FSharp/OrTools.FSharp.fsproj.in b/ortools/dotnet/OrTools.FSharp/OrTools.FSharp.fsproj.in deleted file mode 100644 index 159f3af8c0..0000000000 --- a/ortools/dotnet/OrTools.FSharp/OrTools.FSharp.fsproj.in +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Library - Google.OrTools.FSharp - netstandard2.0 - Google.OrTools.FSharp - OrTools.FSharp.nuspec - - ..\..\..\bin\or-tools.snk - true - - false - - @PROJECT_VERSION@ - @PROJECT_VERSION@ - @PROJECT_VERSION@ - - - - full - true - true - - - - - - - - ..\..\..\bin\Google.OrTools.dll - - - diff --git a/ortools/dotnet/OrTools.Tests/OrTools.Tests.csproj b/ortools/dotnet/OrTools.Tests/OrTools.Tests.csproj index ff1c0e9df1..3b5349e9aa 100644 --- a/ortools/dotnet/OrTools.Tests/OrTools.Tests.csproj +++ b/ortools/dotnet/OrTools.Tests/OrTools.Tests.csproj @@ -1,7 +1,8 @@ Exe - netcoreapp2.0 + netcoreapp2.0 + false Google.OrTools.Tests Google.OrTools.Tests diff --git a/ortools/dotnet/OrTools.nuspec.in b/ortools/dotnet/OrTools.nuspec.in deleted file mode 100644 index e704292060..0000000000 --- a/ortools/dotnet/OrTools.nuspec.in +++ /dev/null @@ -1,28 +0,0 @@ - - - - @PROJECT_DLL_NAME@ - @PROJECT_VERSION@ - Google Inc. - https://github.com/google/or-tools/blob/master/LICENSE-2.0.txt - https://developers.google.com/optimization - .NET wrapper for the Operations Research Tools project - Copyright 2018 Google, Inc - Operations Research Math Linear Constraint Programming C# F# .NETStandard - - - - - - - - - - - - - - - - - diff --git a/ortools/dotnet/OrTools/AssemblyInfo.cs b/ortools/dotnet/OrTools/AssemblyInfo.cs deleted file mode 100644 index 6f5825f7d3..0000000000 --- a/ortools/dotnet/OrTools/AssemblyInfo.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Google.OrTools")] -[assembly: AssemblyDescription(".NET Assembly for the Operations Research Tools project")] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("0a227c4c-8bb3-4db0-808f-55dae227d8c5")] diff --git a/ortools/dotnet/OrTools/OrTools.csproj.in b/ortools/dotnet/OrTools/OrTools.csproj.in deleted file mode 100644 index 121cff5813..0000000000 --- a/ortools/dotnet/OrTools/OrTools.csproj.in +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - Library - Google.OrTools - netstandard2.0 - Google.OrTools - False - ..\OrTools.nuspec - - false - - @PROJECT_VERSION@ - @PROJECT_VERSION@ - @PROJECT_VERSION@ - - Google.OrTools - - ..\..\..\bin\or-tools.snk - true - true - - - - - linear_solver\%(Filename)%(Extension) - - - - constraint_solver\%(Filename)%(Extension) - - - - algorithms\%(Filename)%(Extension) - - - - graph\%(Filename)%(Extension) - - - - sat\%(Filename)%(Extension) - - - - - - - diff --git a/ortools/dotnet/README.md b/ortools/dotnet/README.md index c1623f6072..62e9b2bda6 100644 --- a/ortools/dotnet/README.md +++ b/ortools/dotnet/README.md @@ -1,18 +1,15 @@ # Google OrTools ## Pre-requisites -- dotnet core 2.1 -- .NET framework (mono, net46x) -- nuget +- .Net Core SDK >= 2.1.302 ## Build The library is compiled against `netstandard2.0`. Either use the makefile or you can build in Visual Studio. The workflow is typically -`make test_fsharp` which will build both C# and F# libraries in debug mode. The output will be placed in `/dotnet-test` folder. All tests will be run based on this folder. When you are ready to package the application `make dotnet` will change the version and install a release version in `bin` and in `build`. +`make test_dotnet` which will build both C# and F# libraries in debug mode. The output will be placed in `/dotnet-test` folder. All tests will be run based on this folder. When you are ready to package the application `make dotnet` will change the version and install a release version in `bin` and in `build`. ## Examples - The Test projects show an example of building the application with `netcoreapp2.0`. The F# example folder shows how to compile against the typical .NET Framework installed on machine. Before compiling be sure to run `nuget install -o ./packages` in the example folder. diff --git a/ortools/dotnet/netfx.props b/ortools/dotnet/netfx.props deleted file mode 100644 index 7a0f31765a..0000000000 --- a/ortools/dotnet/netfx.props +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - true - - - /Library/Frameworks/Mono.framework/Versions/Current/lib/mono - /usr/lib/mono - /usr/local/lib/mono - - - $(BaseFrameworkPathOverrideForMono)/4.5-api - $(BaseFrameworkPathOverrideForMono)/4.5.1-api - $(BaseFrameworkPathOverrideForMono)/4.5.2-api - $(BaseFrameworkPathOverrideForMono)/4.6-api - $(BaseFrameworkPathOverrideForMono)/4.6.1-api - $(BaseFrameworkPathOverrideForMono)/4.6.2-api - $(BaseFrameworkPathOverrideForMono)/4.7-api - $(BaseFrameworkPathOverrideForMono)/4.7.1-api - true - - - $(FrameworkPathOverride)/Facades;$(AssemblySearchPaths) - - \ No newline at end of file diff --git a/ortools/dotnet/runtime.linux-x64.Google.OrTools/runtime.linux-x64.Google.OrTools.csproj.in b/ortools/dotnet/runtime.linux-x64.Google.OrTools/runtime.linux-x64.Google.OrTools.csproj.in new file mode 100644 index 0000000000..40095f2314 --- /dev/null +++ b/ortools/dotnet/runtime.linux-x64.Google.OrTools/runtime.linux-x64.Google.OrTools.csproj.in @@ -0,0 +1,87 @@ + + + Library + netstandard2.0 + linux-x64 + Google.OrTools + + + runtime.linux-x64.Google.OrTools + @PROJECT_VERSION@ + Google LLC + .NET native wrapper for the Operations Research Tools project + Copyright 2018 Google LLC + https://github.com/google/or-tools/blob/master/LICENSE-2.0.txt + https://developers.google.com/optimization + native;math;LinearSolver;ConstraintSolver;ConstraintProgramming + ../../../packages + false + + ../../../bin/or-tools.snk + true + true + + + true + false + false + runtimes/$(RuntimeIdentifier)/lib + + + + + algorithms/%(Filename)%(Extension) + + + algorithms/%(Filename)%(Extension) + + + + graph/%(Filename)%(Extension) + + + graph/%(Filename)%(Extension) + + + + linear_solver/%(Filename)%(Extension) + + + linear_solver/%(Filename)%(Extension) + + + + constraint_solver/%(Filename)%(Extension) + + + constraint_solver/%(Filename)%(Extension) + + + + sat/%(Filename)%(Extension) + + + sat/%(Filename)%(Extension) + + + + util/%(Filename)%(Extension) + + + + + runtimes/linux-x64/native/%(Filename)%(Extension) + true + PreserveNewest + + + runtimes/linux-x64/native/%(Filename)%(Extension) + true + PreserveNewest + + + + + + + diff --git a/ortools/dotnet/runtime.osx-x64.Google.OrTools/runtime.osx-x64.Google.OrTools.csproj.in b/ortools/dotnet/runtime.osx-x64.Google.OrTools/runtime.osx-x64.Google.OrTools.csproj.in new file mode 100644 index 0000000000..3735d636bd --- /dev/null +++ b/ortools/dotnet/runtime.osx-x64.Google.OrTools/runtime.osx-x64.Google.OrTools.csproj.in @@ -0,0 +1,85 @@ + + + Library + netstandard2.0 + osx-x64 + Google.OrTools + + + runtime.osx-x64.Google.OrTools + @PROJECT_VERSION@ + Google LLC + .NET native wrapper for the Operations Research Tools project + Copyright 2018 Google LLC + https://github.com/google/or-tools/blob/master/LICENSE-2.0.txt + https://developers.google.com/optimization + native;math;LinearSolver;ConstraintSolver;ConstraintProgramming + ../../../packages + false + + ../../../bin/or-tools.snk + true + true + true + false + false + runtimes/$(RuntimeIdentifier)/lib + + + + + algorithms/%(Filename)%(Extension) + + + algorithms/%(Filename)%(Extension) + + + + graph/%(Filename)%(Extension) + + + graph/%(Filename)%(Extension) + + + + linear_solver/%(Filename)%(Extension) + + + linear_solver/%(Filename)%(Extension) + + + + constraint_solver/%(Filename)%(Extension) + + + constraint_solver/%(Filename)%(Extension) + + + + sat/%(Filename)%(Extension) + + + sat/%(Filename)%(Extension) + + + + util/%(Filename)%(Extension) + + + + + runtimes/osx-x64/native/%(Filename)%(Extension) + true + PreserveNewest + + + runtimes/osx-x64/native/%(Filename)%(Extension) + true + PreserveNewest + + + + + + + diff --git a/ortools/dotnet/runtime.win-x64.Google.OrTools/runtime.win-x64.Google.OrTools.csproj.in b/ortools/dotnet/runtime.win-x64.Google.OrTools/runtime.win-x64.Google.OrTools.csproj.in new file mode 100644 index 0000000000..dbec78bc85 --- /dev/null +++ b/ortools/dotnet/runtime.win-x64.Google.OrTools/runtime.win-x64.Google.OrTools.csproj.in @@ -0,0 +1,81 @@ + + + Library + netstandard2.0 + win-x64 + Google.OrTools + + + runtime.win-x64.Google.OrTools + @PROJECT_VERSION@ + Google LLC + .NET native wrapper for the Operations Research Tools project + Copyright 2018 Google LLC + https://github.com/google/or-tools/blob/master/LICENSE-2.0.txt + https://developers.google.com/optimization + native;math;LinearSolver;ConstraintSolver;ConstraintProgramming + ../../../packages + true + + ../../../bin/or-tools.snk + true + true + true + false + false + runtimes/$(RuntimeIdentifier)/lib + + + + + algorithms/%(Filename)%(Extension) + + + algorithms/%(Filename)%(Extension) + + + + graph/%(Filename)%(Extension) + + + graph/%(Filename)%(Extension) + + + + linear_solver/%(Filename)%(Extension) + + + linear_solver/%(Filename)%(Extension) + + + + constraint_solver/%(Filename)%(Extension) + + + constraint_solver/%(Filename)%(Extension) + + + + sat/%(Filename)%(Extension) + + + sat/%(Filename)%(Extension) + + + + util/%(Filename)%(Extension) + + + + + + runtimes/win-x64/native/%(Filename)%(Extension) + true + PreserveNewest + + + + + + + diff --git a/ortools/dotnet/OrTools/linear_solver/DoubleArrayHelper.cs b/ortools/linear_solver/csharp/DoubleArrayHelper.cs similarity index 100% rename from ortools/dotnet/OrTools/linear_solver/DoubleArrayHelper.cs rename to ortools/linear_solver/csharp/DoubleArrayHelper.cs diff --git a/ortools/dotnet/OrTools/linear_solver/LinearConstraint.cs b/ortools/linear_solver/csharp/LinearConstraint.cs similarity index 100% rename from ortools/dotnet/OrTools/linear_solver/LinearConstraint.cs rename to ortools/linear_solver/csharp/LinearConstraint.cs diff --git a/ortools/dotnet/OrTools/linear_solver/LinearExpr.cs b/ortools/linear_solver/csharp/LinearExpr.cs similarity index 100% rename from ortools/dotnet/OrTools/linear_solver/LinearExpr.cs rename to ortools/linear_solver/csharp/LinearExpr.cs diff --git a/ortools/dotnet/OrTools/linear_solver/SolverHelper.cs b/ortools/linear_solver/csharp/SolverHelper.cs similarity index 100% rename from ortools/dotnet/OrTools/linear_solver/SolverHelper.cs rename to ortools/linear_solver/csharp/SolverHelper.cs diff --git a/ortools/dotnet/OrTools/linear_solver/VariableHelper.cs b/ortools/linear_solver/csharp/VariableHelper.cs similarity index 100% rename from ortools/dotnet/OrTools/linear_solver/VariableHelper.cs rename to ortools/linear_solver/csharp/VariableHelper.cs diff --git a/ortools/dotnet/OrTools/sat/Constraints.cs b/ortools/sat/csharp/Constraints.cs similarity index 100% rename from ortools/dotnet/OrTools/sat/Constraints.cs rename to ortools/sat/csharp/Constraints.cs diff --git a/ortools/dotnet/OrTools/sat/CpModel.cs b/ortools/sat/csharp/CpModel.cs similarity index 100% rename from ortools/dotnet/OrTools/sat/CpModel.cs rename to ortools/sat/csharp/CpModel.cs diff --git a/ortools/dotnet/OrTools/sat/CpSolver.cs b/ortools/sat/csharp/CpSolver.cs similarity index 100% rename from ortools/dotnet/OrTools/sat/CpSolver.cs rename to ortools/sat/csharp/CpSolver.cs diff --git a/ortools/dotnet/OrTools/sat/IntegerExpressions.cs b/ortools/sat/csharp/IntegerExpressions.cs similarity index 100% rename from ortools/dotnet/OrTools/sat/IntegerExpressions.cs rename to ortools/sat/csharp/IntegerExpressions.cs diff --git a/ortools/dotnet/OrTools/sat/IntervalVariables.cs b/ortools/sat/csharp/IntervalVariables.cs similarity index 100% rename from ortools/dotnet/OrTools/sat/IntervalVariables.cs rename to ortools/sat/csharp/IntervalVariables.cs diff --git a/ortools/dotnet/OrTools/util/NestedArrayHelper.cs b/ortools/util/csharp/NestedArrayHelper.cs similarity index 100% rename from ortools/dotnet/OrTools/util/NestedArrayHelper.cs rename to ortools/util/csharp/NestedArrayHelper.cs diff --git a/ortools/dotnet/OrTools/util/ProtoHelper.cs b/ortools/util/csharp/ProtoHelper.cs similarity index 100% rename from ortools/dotnet/OrTools/util/ProtoHelper.cs rename to ortools/util/csharp/ProtoHelper.cs diff --git a/tools/dotnet/CreateSigningKey/Program.cs b/tools/dotnet/CreateSigningKey/Program.cs index c72da071e0..6b8fbe08b1 100644 --- a/tools/dotnet/CreateSigningKey/Program.cs +++ b/tools/dotnet/CreateSigningKey/Program.cs @@ -16,7 +16,7 @@ namespace CreateSigningKey { } public static byte[] GenerateStrongNameKeyPair() { - using (var provider = new RSACryptoServiceProvider(1024)) { + using (var provider = new RSACryptoServiceProvider(4096)) { return provider.ExportCspBlob(!provider.PublicOnly); } } diff --git a/tools/dotnet/Google.Protobuf.dll b/tools/dotnet/Google.Protobuf.dll deleted file mode 100644 index 6ea720de8d20967783ec82f80d5d6e52d3fb2c8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294400 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

`NKD%+ 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