From f3c82d1c26a0c2c77d326a5b703b805355c7d1e3 Mon Sep 17 00:00:00 2001 From: Andrii Kurdiumov Date: Wed, 30 Mar 2022 21:02:36 +0600 Subject: [PATCH 1/2] Add support for Rd.xml file around project file For now added either `rd.xml` or files which ends with `.rd.xml` Rename `rd.xml` supplied by BDN to `bdn_generated.rd.xml` --- .../Toolchains/NativeAot/Generator.cs | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs b/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs index 4f806e0dd0..fb2a558c68 100644 --- a/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs +++ b/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs @@ -20,6 +20,7 @@ namespace BenchmarkDotNet.Toolchains.NativeAot public class Generator : CsProjGenerator { internal const string NativeAotNuGetFeed = "nativeAotNuGetFeed"; + internal const string GeneratedRdXmlFileName = "bdn_generated.rd.xml"; internal Generator(string ilCompilerVersion, bool useCppCodeGenerator, string runtimeFrameworkVersion, string targetFrameworkMoniker, string cliPath, @@ -150,7 +151,7 @@ private string GenerateProjectForNuGetBuild(BuildPartition buildPartition, Artif - + {GetRdXmlFiles(buildPartition.RepresentativeBenchmarkCase.Descriptor.Type, logger).Select(_ => $"{Environment.NewLine}")} "; @@ -185,7 +186,7 @@ private string GenerateProjectForLocalBuild(BuildPartition buildPartition, Artif - + {GetRdXmlFiles(buildPartition.RepresentativeBenchmarkCase.Descriptor.Type, logger).Select(_ => $"{Environment.NewLine}")} "; @@ -203,6 +204,23 @@ private string GetTrimmingSettings() return sb.ToString(); } + public IEnumerable GetRdXmlFiles(Type benchmarkTarget, ILogger logger) + { + var projectFile = GetProjectFilePath(benchmarkTarget, logger); + var projectFileFolder = projectFile.DirectoryName; + yield return GeneratedRdXmlFileName; + var rdXml = Path.Combine(projectFileFolder, "rd.xml"); + if (File.Exists(rdXml)) + { + yield return rdXml; + } + + foreach (var item in Directory.GetFiles(projectFileFolder, "*.rd.xml")) + { + yield return item; + } + } + /// /// mandatory to make it possible to call GC.GetAllocatedBytesForCurrentThread() using reflection (not part of .NET Standard) /// @@ -226,7 +244,7 @@ private void GenerateReflectionFile(ArtifactsPaths artifactsPaths) string directoryName = Path.GetDirectoryName(artifactsPaths.ProjectFilePath); if (directoryName != null) - File.WriteAllText(Path.Combine(directoryName, "rd.xml"), content); + File.WriteAllText(Path.Combine(directoryName, GeneratedRdXmlFileName), content); else throw new InvalidOperationException($"Can't get directory of projectFilePath ('{artifactsPaths.ProjectFilePath}')"); } From e0adc706e346b6e35bca4367a2e598778a8deb5d Mon Sep 17 00:00:00 2001 From: Andrii Kurdiumov Date: Wed, 30 Mar 2022 23:10:44 +0600 Subject: [PATCH 2/2] Fix issues and apply suggestions from code review --- src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs b/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs index fb2a558c68..8cf562197b 100644 --- a/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs +++ b/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs @@ -151,7 +151,7 @@ private string GenerateProjectForNuGetBuild(BuildPartition buildPartition, Artif - {GetRdXmlFiles(buildPartition.RepresentativeBenchmarkCase.Descriptor.Type, logger).Select(_ => $"{Environment.NewLine}")} + {string.Join(Environment.NewLine, GetRdXmlFiles(buildPartition.RepresentativeBenchmarkCase.Descriptor.Type, logger).Select(file => $""))} "; @@ -186,7 +186,7 @@ private string GenerateProjectForLocalBuild(BuildPartition buildPartition, Artif - {GetRdXmlFiles(buildPartition.RepresentativeBenchmarkCase.Descriptor.Type, logger).Select(_ => $"{Environment.NewLine}")} + {string.Join(Environment.NewLine, GetRdXmlFiles(buildPartition.RepresentativeBenchmarkCase.Descriptor.Type, logger).Select(file => $""))} ";