From 6207fbed49441ef65b4c4bf8cacdf90c2b63506e Mon Sep 17 00:00:00 2001 From: ziad Date: Thu, 8 Feb 2018 05:41:08 -0800 Subject: [PATCH] fix bugs in osx build create tool to generate signing key when sn.exe is not present add build info to readme add DOTNET_INSTALL_PATH to Makefile.local and try to detect --- .gitignore | 2 ++ makefiles/Makefile.csharp.mk | 25 +++++++++------ makefiles/Makefile.port.mk | 13 ++++++++ makefiles/Makefile.third_party.unix.mk | 1 + makefiles/Makefile.third_party.win.mk | 1 + tools/README.netstandard | 21 ++++++++++++- .../CreateSigningKey/CreateSigningKey.dll | Bin 0 -> 5120 bytes tools/netstandard/CreateSigningKey/Program.cs | 29 ++++++++++++++++++ tools/netstandard/OrTools.NetCore.csproj | 4 +-- tools/netstandard/OrTools.targets | 10 +----- 10 files changed, 84 insertions(+), 22 deletions(-) create mode 100644 tools/netstandard/CreateSigningKey/CreateSigningKey.dll create mode 100644 tools/netstandard/CreateSigningKey/Program.cs diff --git a/.gitignore b/.gitignore index 8fb2dcfc8f..8eae3fe34c 100644 --- a/.gitignore +++ b/.gitignore @@ -74,3 +74,5 @@ build/ cache/ **/.vscode/* .DS_Store + +!tools/netstandard/CreateSigningKey/CreateSigningKey.dll diff --git a/makefiles/Makefile.csharp.mk b/makefiles/Makefile.csharp.mk index 9d47402f26..d36365ea56 100755 --- a/makefiles/Makefile.csharp.mk +++ b/makefiles/Makefile.csharp.mk @@ -34,7 +34,7 @@ NAMESPACE_ORTOOLS_FZ:=$(BASE_CLR_ORTOOLS_DLL_NAME).Flatzinc CLR_ORTOOLS_IMPORT_DLL_NAME:=$(CLR_ORTOOLS_DLL_NAME) NETSTANDARD_ORTOOLS_IMPORT_DLL_NAME:=$(CLR_ORTOOLS_IMPORT_DLL_NAME).Native NETSTANDARD_OBJ_DIR = $(OBJ_DIR)$Snetstandard -NETSTANDARD_RUNTIME_IDENTIFIER=win10-x64 +NETSTANDARD_RUNTIME_IDENTIFIER= # NuGet specification file name ORTOOLS_NUSPEC_NAME := or-tools.nuspec @@ -69,10 +69,10 @@ endif ifeq "$(SYSTEM)" "win" NETSTANDARD_RUNTIME_IDENTIFIER=win-$(NETPLATFORM) -else ifeq ($(PLATFORM),LINUX) - NETSTANDARD_RUNTIME_IDENTIFIER=linux-$(NETPLATFORM) else ifeq ($(PLATFORM),MACOSX) - NETSTANDARD_RUNTIME_IDENTIFIER=osx-$(NETPLATFORM) + NETSTANDARD_RUNTIME_IDENTIFIER=osx +else + NETSTANDARD_RUNTIME_IDENTIFIER=linux-$(NETPLATFORM) endif CSHARPEXE = \ @@ -181,7 +181,7 @@ csharportools: $(BIN_DIR)/$(CLR_ORTOOLS_DLL_NAME)$(DLL) $(BIN_DIR)/$(CLR_PROTOBU # setup path for dotnet sdk CANONIC_PATH_TO_DOTNET_SDK = $(subst $(SPACE),$(BACKSLASH_SPACE),$(subst \,/,$(subst \\,/,$(DOTNET_INSTALL_PATH)))) -PATH_TO_DOTNET_EXE = $(CANONIC_PATH_TO_DOTNET_SDK)$Sdotnet.exe +PATH_TO_DOTNET_EXE = $(CANONIC_PATH_TO_DOTNET_SDK)$Sdotnet ifeq ($(wildcard $(CANONIC_PATH_TO_DOTNET_SDK)),) netstandard: @echo "The dotnet sdk path was not set properly. Check Makefile.local for more information." @@ -195,7 +195,7 @@ endif netstandardortools: $(BIN_DIR)/$(NETSTANDARD_ORTOOLS_DLL_NAME)$(DLL) $(BIN_DIR)/$(CLR_PROTOBUF_DLL_NAME)$(DLL) $(NETSTANDARD_OBJ_DIR)/AssemblyInfo.cs: \ - $(CLR_KEYFILE) \ + $(NETSTANDARD_CLR_KEYFILE) \ $(GEN_DIR)/com/google/ortools/properties/CommonAssemblyInfo.cs $(COPY) tools$Scsharp$SAssemblyInfo.cs $(NETSTANDARD_OBJ_DIR)$SAssemblyInfo.cs ifdef CLR_KEYFILE @@ -297,6 +297,11 @@ ifdef CLR_KEYFILE sn -k $(CLR_KEYFILE) endif +$(NETSTANDARD_CLR_KEYFILE): +ifdef CLR_KEYFILE + $(PATH_TO_DOTNET_EXE) run tools$Snetstandard$SCreateSigningKey$SCreateSigningKey.dll $(CLR_KEYFILE) +endif + $(BIN_DIR)/$(CLR_ORTOOLS_DLL_NAME)$(DLL): \ $(GEN_DIR)/com/google/ortools/properties/AssemblyInfo.cs \ $(CLR_KEYFILE) \ @@ -337,14 +342,14 @@ else endif $(BIN_DIR)/$(NETSTANDARD_ORTOOLS_DLL_NAME)$(DLL): \ - $(BIN_DIR)/$(NETSTANDARD_ORTOOLS_IMPORT_DLL_NAME)$(DLL) \ + $(BIN_DIR)/$(NETSTANDARD_ORTOOLS_IMPORT_DLL_NAME)$(SWIG_LIB_SUFFIX) \ netstandard_create_obj_dir \ $(NETSTANDARD_OBJ_DIR)/AssemblyInfo.cs $(PATH_TO_DOTNET_EXE) restore $(NETSTANDARD_OBJ_DIR)$SOrTools.NetCore.csproj $(PATH_TO_DOTNET_EXE) build $(NETSTANDARD_OBJ_DIR)$SOrTools.NetCore.csproj -f netstandard2.0 -o:$(realpath $(BIN_DIR))$S - $(PATH_TO_DOTNET_EXE) pack $(NETSTANDARD_OBJ_DIR)$SOrTools.NetCore.csproj -o:$(realpath $(BIN_DIR))$S /p:PackageVersion=$(OR_TOOLS_VERSION);TargetRid=$(NETSTANDARD_RUNTIME_IDENTIFIER) + $(PATH_TO_DOTNET_EXE) pack $(NETSTANDARD_OBJ_DIR)$SOrTools.NetCore.csproj -o:$(realpath $(BIN_DIR))$S /p:PackageVersion=$(OR_TOOLS_VERSION)\;TargetRid=$(NETSTANDARD_RUNTIME_IDENTIFIER)\;NativeDllName=$(NETSTANDARD_ORTOOLS_IMPORT_DLL_NAME).$(SWIG_LIB_SUFFIX) -$(BIN_DIR)/$(NETSTANDARD_ORTOOLS_IMPORT_DLL_NAME)$(DLL): \ +$(BIN_DIR)/$(NETSTANDARD_ORTOOLS_IMPORT_DLL_NAME)$(SWIG_LIB_SUFFIX): \ $(BIN_DIR)/$(CLR_PROTOBUF_DLL_NAME)$(DLL) \ $(OBJ_DIR)/swig/linear_solver_csharp_wrap.$O \ $(OBJ_DIR)/swig/sat_csharp_wrap.$O \ @@ -372,7 +377,7 @@ $(BIN_DIR)/$(NETSTANDARD_ORTOOLS_IMPORT_DLL_NAME)$(DLL): \ $(GEN_DIR)/com/google/ortools/constraintsolver/RoutingEnums.g.cs\ $(GEN_DIR)/com/google/ortools/sat/CpModel.g.cs \ $(OR_TOOLS_LIBS) - $(DYNAMIC_LD) $(LDOUT)$(BIN_DIR)$S$(LIB_PREFIX)$(NETSTANDARD_ORTOOLS_IMPORT_DLL_NAME).$(SWIG_LIB_SUFFIX) $(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 $(OR_TOOLS_LNK) $(OR_TOOLS_LD_FLAGS) + $(DYNAMIC_LD) $(LDOUT)$(BIN_DIR)$S$(NETSTANDARD_ORTOOLS_IMPORT_DLL_NAME).$(SWIG_LIB_SUFFIX) $(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 $(OR_TOOLS_LNK) $(OR_TOOLS_LD_FLAGS) netstandard_create_obj_dir: $(MKDIR_P) $(NETSTANDARD_OBJ_DIR) diff --git a/makefiles/Makefile.port.mk b/makefiles/Makefile.port.mk index 51985c9b1e..ba5e862808 100755 --- a/makefiles/Makefile.port.mk +++ b/makefiles/Makefile.port.mk @@ -14,6 +14,13 @@ ifeq ("$(SYSTEM)","unix") OR_TOOLS_TOP ?= $(shell pwd) OS = $(shell uname -s) DETECTED_PYTHON_VERSION = $(shell python -c "from sys import version_info as v; print (str(v[0]) + '.' + str(v[1]))") + # Detect the .net core sdk folder + DOTNET_INSTALL_PATH = /usr/local/share/dotnet/sdk + ifneq ($(wildcard $(DOTNET_INSTALL_PATH)\dotnet.exe),) + DOTNET_INSTALL_PATH = \# DOTNET install path not found + endif + + ifeq ($(OS),Linux) PLATFORM = LINUX CODEPORT = OpSys-Linux @@ -138,6 +145,12 @@ ifeq ("$(SYSTEM)","win") endif endif + # Detect the .net core sdk folder + DOTNET_INSTALL_PATH = $(ProgramW6432)\dotnet + ifneq ($(wildcard $(DOTNET_INSTALL_PATH)\dotnet.exe),) + DOTNET_INSTALL_PATH = \# DOTNET install path not found + endif + # Set common windows variables # OS Specific diff --git a/makefiles/Makefile.third_party.unix.mk b/makefiles/Makefile.third_party.unix.mk index 855fbd7965..36d62e9ac4 100644 --- a/makefiles/Makefile.third_party.unix.mk +++ b/makefiles/Makefile.third_party.unix.mk @@ -296,6 +296,7 @@ Makefile.local: makefiles/Makefile.third_party.unix.mk @echo JDK_DIRECTORY = $(JDK_DIRECTORY)>> Makefile.local @echo UNIX_PYTHON_VER = $(DETECTED_PYTHON_VERSION)>> Makefile.local @echo PATH_TO_CSHARP_COMPILER = $(DETECTED_MCS_BINARY)>> Makefile.local + @echo DOTNET_INSTALL_PATH = $(DOTNET_INSTALL_PATH)>> Makefile.local @echo CLR_KEYFILE = bin/or-tools.snk>> Makefile.local @echo >> Makefile.local @echo "# Define UNIX_GLPK_DIR to point to a compiled version of GLPK to use it" >> Makefile.local diff --git a/makefiles/Makefile.third_party.win.mk b/makefiles/Makefile.third_party.win.mk index d267434e3e..0059de4d25 100644 --- a/makefiles/Makefile.third_party.win.mk +++ b/makefiles/Makefile.third_party.win.mk @@ -374,6 +374,7 @@ Makefile.local: makefiles/Makefile.third_party.$(SYSTEM).mk @echo JDK_DIRECTORY = $(JDK_DIRECTORY)>> Makefile.local @echo $(SELECTED_PATH_TO_PYTHON)>> Makefile.local @echo $(SELECTED_CSC_BINARY)>> Makefile.local + @echo DOTNET_INSTALL_PATH = $(DOTNET_INSTALL_PATH)>> Makefile.local @echo # >> Makefile.local @echo # Define WINDOWS_SCIP_DIR to point to a compiled version of SCIP to use it >> Makefile.local @echo # i.e.: path\\scip-4.0.0 >> Makefile.local diff --git a/tools/README.netstandard b/tools/README.netstandard index dccd4cb5b8..a2e3a55c8f 100644 --- a/tools/README.netstandard +++ b/tools/README.netstandard @@ -60,6 +60,25 @@ The project file can be modified in any text editor as well: * Building -The build currently does not detect the .NET SDK folder. The DOTNET_INSTALL_PATH variable must be set Makefile.local file in the build root: + +To build use the following command: + +make netstandard + +The .NET Core SDK 2.0 or later must be installed before building. Use the link below to find appropriate +download for the build platform. + +https://github.com/dotnet/core/blob/master/release-notes/download-archives/2.0.0-download.md + +Alternatively the command below can be used to install the SDK: +curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel 2.0 + +The build will attempt to detect the SDK path. If there are any issues please check the +DOTNET_INSTALL_PATH variable in the Makefile.local file: DOTNET_INSTALL_PATH=C:\Program Files\dotnet + +The dotnet restore command will not update the nuget packages if the version does not change. This +can cause confusion when testing local builds. Use the command below to clear the package: + +dotnet nuget locals all --clear \ No newline at end of file diff --git a/tools/netstandard/CreateSigningKey/CreateSigningKey.dll b/tools/netstandard/CreateSigningKey/CreateSigningKey.dll new file mode 100644 index 0000000000000000000000000000000000000000..eee0ca516a3adb992ccf870e5d60f3e7addc9e7b GIT binary patch literal 5120 zcmeHLTWlOx8UD}MUOOASwVlRw$%W~rQQgK_uj7=q#!l8=J7E)FHeSaStx+;Nd%T`x zc4nC~>v$_D;h`0MplU#BQQL>84@E*kw17lJR8>NWKtLZVQ3<39ka!{>H4i)>6eWD; z%#6K`6Oz2-smGcBod0tE+qwOlspnp!CL(IacjE@p1@y9I6#W0-EZB)J{VGAf*!0mO z7ue)SkIXGuLa%ym*)uA-X*iDS>qV}6HAlA`eSD^%SKJa$wYSF~4OQnSh$dMRoqK)z zpCW62qa2vIxX-UBjvyB=`23bWox3$OGF*&-&!A{fe5_; zy)$y0Av)g@5*xddL|*`Y=`o_G8|il%>#MFS$u{6$ZJ3kt`HBzxs*Ddj6>I1>Fx7OT zlPOPlCNSk&27?$r=}<$eYvBGg^bvw~-{>$cA zUu(=o=yCeA^$7;1Mm@A;55W#mQtRC!SyKO4;m8_zVtYE)PqThAAK$kFvDcW`Tcy1j1AA$c{;$ya3L@yhrv%_08 z+9Z+xvO(%rc~Z*+o;ruf6v07wsN|J*2psKACV6s6HnHcl7(K6`Nr$xu=mkuV(W_Kv zF&bkZ170Bsf280g1s_-RGiv-}?J|o~Li;uJ{D56%2^ylytcy~x8>hDwJqe1m7g!DQ z)ImRG?`s2~G0N+bdyf9Va=_kJ*z5F|HiI~?D(vN+QRtVEF?vJWM57wRLQ2}hfN^>p zu!9B^d`7`h1#=1>Q}AmF*6A4Le1~4qcG4@L!~mPMKC&?G2mGt{Wxxj!#W{K&nJ|=0 z3QInRn6}W@0k_dN0e8_$fP3g7;2?br_!asTFiZacJgVpgz^$~Kn$JejBLvmnM=;GQ zq5#i?2dWtnMlC~sSIBzWpklA5{W6*~Jmr>ZHa|dxy6|}=m7Af7m8$FcSy5H{CpT`1 zsw<45&FPQ@5DI2pN4RU~Y|Zhl3a4j1%jc7p!zq}Do)>H7vYbEaV*?j!KBrM3c%^99 z=PbXGJZE@i?jOPp&d<2s>5cNzfqCu;%XKy~bIzjcRSX|Y!@jK){9d%mHBZT{DapE( zs%0zUEVqpnH4c{qGelt12@cKD3l7_#qp-#lvCE@ zhR+LD*#Yq=ucu13O|UNCw`dJ=Gbx#oKo?CJmJ@Mi`J&BDnTm)~;ARbLQ%_~RdexU| zs!Kpbm7sjORw;6iW(%VMx4^w+%j7V(Y?Z(`%pH!5arovs z?A$Uu!frZ|uN7^}oN?^BJO>ZEd0w+(9L#K)LA04~|l>+#WQwJ+RQBg^|zX(&iMxO%$e z`LvC?Tuj=^sN?1hhlhYsi#ok{qo98PPZa(Fx3s2@KbQVzhZc?tEce0-mQh+5cgJ@C{5HmBSXV&P`THxk_9sRb3tg2R0inK7zWvFWQMdeGtIe~;vtZ;P(D?-}f>clGUjoqYYHfs2s(vSg7?GYVSbPuTcpqg&r z2UP%Sva=0D4Ari`nW*TJvveEz^Z4QMS_b=4{s0MEN7H_c=BYp@04Hb`qZ}&qY2Z1) zLqWApA2feX9{5#0g0>u4wb94m{`y?w1_ymqpw#vOP+2)*QG7r~>zo zft$wy*HL_;_nNCXU<^L_kg`B8-$K)*l1Wqax1Wj_%i_BebFK9(ZUkLn5#d+=^1@h|&>xKMr|;J5l;lUFYlF=t|>SW2^qpLzf3_Yw-@?hE1=2 z()L!!%Z&L-)`72fLj-rSnZliI<4?9;R8b7oGe?wCi_A(D`H+#6v18)+%>B6HL^5-{1f%^}fJFP<+RVHfSbvka&;9CCVZ%3KyQRG)Z zcLh7bR`1;H=g8b+$7PAGG;HM0E`B(CaHV4F%RvP;lEfpB)VX82CA{M!$>Vc}_CB4| zg>N_|!*(4$lB{!)Jb0iz-X0$|!kSNq3P+42Yo0SC%q3ni#NLW!daiI6{k^7J88SpA zwLFm2D~4k&a^XjBn6d|Dy1uF`SHkmvs%D)}@|8;J4j#6VaDJA{4@FsG-f1U5c{i{iUz;J)GLI<$; Y_oL~-Z{L62(|>N<563>YaX&KfKSz;LtpET3 literal 0 HcmV?d00001 diff --git a/tools/netstandard/CreateSigningKey/Program.cs b/tools/netstandard/CreateSigningKey/Program.cs new file mode 100644 index 0000000000..dae4f4291a --- /dev/null +++ b/tools/netstandard/CreateSigningKey/Program.cs @@ -0,0 +1,29 @@ +using System; +using System.IO; +using System.Security.Cryptography; + +namespace CreateSigningKey +{ + class Program + { + static void Main(string[] args) + { + args = new[] { "or-tools.snk" }; + if (args == null || args.Length == 0) + { + Console.WriteLine("Key filename not specified."); + return; + } + + File.WriteAllBytes(args[0], GenerateStrongNameKeyPair()); + } + + public static byte[] GenerateStrongNameKeyPair() + { + using (var provider = new RSACryptoServiceProvider(1024, new CspParameters() { KeyNumber = 2 })) + { + return provider.ExportCspBlob(!provider.PublicOnly); + } + } + } +} diff --git a/tools/netstandard/OrTools.NetCore.csproj b/tools/netstandard/OrTools.NetCore.csproj index c761e406aa..a3b296802c 100644 --- a/tools/netstandard/OrTools.NetCore.csproj +++ b/tools/netstandard/OrTools.NetCore.csproj @@ -63,8 +63,8 @@ - - runtimes/$(TargetRid)/native/Google.OrTools.Native.dll + + runtimes/$(TargetRid)/native/$(NativeDllName) true diff --git a/tools/netstandard/OrTools.targets b/tools/netstandard/OrTools.targets index 67e51c9dfe..35dc229e2f 100644 --- a/tools/netstandard/OrTools.targets +++ b/tools/netstandard/OrTools.targets @@ -30,18 +30,10 @@ - + PreserveNewest Google.OrTools.Native.so - - - PreserveNewest - Google.OrTools.Native.so - - - - \ No newline at end of file