diff --git a/OpenTK.sln b/OpenTK.sln index aee7aa30..37733420 100644 --- a/OpenTK.sln +++ b/OpenTK.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25123.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2000 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Generator.Bind", "src\Generator.Bind\Generator.Bind.csproj", "{31D19132-0000-0000-0000-000000000000}" EndProject @@ -29,10 +29,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{F1A570 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "project", "project", "{5EEEC96B-BD2F-45B0-935D-19E9E6D7D969}" ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore build.fsx = build.fsx README.md = README.md RELEASE_NOTES.md = RELEASE_NOTES.md - .gitignore = .gitignore EndProjectSection EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "OpenTK.Tests", "tests\OpenTK.Tests\OpenTK.Tests.fsproj", "{6801C263-ADDA-4A7B-979D-649BCB5A1DF7}" @@ -43,6 +43,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTK.Tests.Math", "tests\ EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "OpenTK.Tests.Generators", "tests\OpenTK.Tests.Generators\OpenTK.Tests.Generators.fsproj", "{2B11AAEB-D8AC-4356-938F-532D720E0C30}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTK.Standard", "src\OpenTK\OpenTK.Standard.csproj", "{67F02FD3-8F7F-4D89-8551-359993271CA3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -97,6 +99,10 @@ Global {2B11AAEB-D8AC-4356-938F-532D720E0C30}.Debug|Any CPU.Build.0 = Debug|Any CPU {2B11AAEB-D8AC-4356-938F-532D720E0C30}.Release|Any CPU.ActiveCfg = Release|Any CPU {2B11AAEB-D8AC-4356-938F-532D720E0C30}.Release|Any CPU.Build.0 = Release|Any CPU + {67F02FD3-8F7F-4D89-8551-359993271CA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {67F02FD3-8F7F-4D89-8551-359993271CA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67F02FD3-8F7F-4D89-8551-359993271CA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {67F02FD3-8F7F-4D89-8551-359993271CA3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -107,4 +113,7 @@ Global {C2B07CD9-B388-4FC3-AF31-C648F7EA904E} = {1857BB8E-1A35-4EBF-9F6D-685F11DC025B} {2B11AAEB-D8AC-4356-938F-532D720E0C30} = {1857BB8E-1A35-4EBF-9F6D-685F11DC025B} EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CFF5ADCD-8B5E-4C07-ACCA-304C81D4D839} + EndGlobalSection EndGlobal diff --git a/README.md b/README.md index 60342f92..551fc090 100644 --- a/README.md +++ b/README.md @@ -59,8 +59,8 @@ cd opentk # Enter the source directory ./build.sh # Build on Mono (Linux / Mac OS X) ``` -After this is done at least once, you can build OpenTK normally through -your IDE. +After this is done at least once, you can build OpenTK.Standard project normally through +your IDE. This fork is only for building opentk for .Net Standard, and not for .Net Framework. News ==== diff --git a/src/Generator.Rewrite/Options.cs b/src/Generator.Rewrite/Options.cs index 155a3abd..c53f3a90 100644 --- a/src/Generator.Rewrite/Options.cs +++ b/src/Generator.Rewrite/Options.cs @@ -35,5 +35,12 @@ namespace OpenTK.Rewrite [Option("dllimport", Default = false, HelpText = "Force native calls to use DllImport instead of GetProcAddress.")] public bool UseDLLImport { get; set; } + + /// + /// Toggles rewriting for NetStandard. + /// + [Option('n', "netstandard", Default = false, + HelpText = "Toggles rewriting for NetStandard.")] + public bool IsNetStandard { get; set; } } } diff --git a/src/Generator.Rewrite/Program.cs b/src/Generator.Rewrite/Program.cs index d0843901..f448b74f 100644 --- a/src/Generator.Rewrite/Program.cs +++ b/src/Generator.Rewrite/Program.cs @@ -55,6 +55,8 @@ namespace OpenTK.Rewrite program.Rewrite(); } + private static string GetCoreAssemblyName() => Options.IsNetStandard ? "netstandard" : "mscorlib"; + // mscorlib types private static AssemblyDefinition mscorlib; @@ -93,6 +95,21 @@ namespace OpenTK.Rewrite Console.Error.WriteLine("No keyfile specified or keyfile missing."); } + if (Options.IsNetStandard) + { + DefaultAssemblyResolver resolver = new DefaultAssemblyResolver(); + string searchPath = GetNetstandardRefPath(); + if (!Directory.Exists(searchPath)) + { + Console.Error.WriteLine( + "Could not locate .NET Standard reference assemblies. This is necessary for binary rewriting to proceed."); + return; + } + + resolver.AddSearchDirectory(searchPath); + read_params.AssemblyResolver = resolver; + } + // Load assembly and process all modules try { @@ -108,7 +125,7 @@ namespace OpenTK.Rewrite try { var resolved = module.AssemblyResolver.Resolve(reference); - if (reference.Name == "mscorlib") + if (reference.Name == GetCoreAssemblyName()) { mscorlib = resolved; } @@ -122,7 +139,7 @@ namespace OpenTK.Rewrite if (mscorlib == null) { - Console.Error.WriteLine("Failed to locate mscorlib"); + Console.Error.WriteLine("Failed to locate " + GetCoreAssemblyName()); return; } TypeMarshal = mscorlib.MainModule.GetType("System.Runtime.InteropServices.Marshal"); @@ -1073,5 +1090,18 @@ namespace OpenTK.Rewrite { il.Emit(OpCodes.Call, reference); } + + private string GetNetstandardRefPath() + { + return Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), + ".nuget", + "packages", + "netstandard.library", + "2.0.1", + "build", + "netstandard2.0", + "ref"); + } } }