From 0e89354f713e64812ff0b875d7b83706f59c6c67 Mon Sep 17 00:00:00 2001 From: Scott Carda Date: Tue, 27 Apr 2021 12:02:52 -0700 Subject: [PATCH 1/9] Fills out the BuildFromQSharpDll function. --- src/Qir/Controller/QirController.csproj | 2 +- .../Tools/Microsoft.Quantum.Qir.Tools.csproj | 2 +- src/Qir/Execution/Tools/QirTools.cs | 32 +++++++++++++++++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/Qir/Controller/QirController.csproj b/src/Qir/Controller/QirController.csproj index c4398261366..af4f4a781a8 100644 --- a/src/Qir/Controller/QirController.csproj +++ b/src/Qir/Controller/QirController.csproj @@ -22,7 +22,7 @@ - + diff --git a/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj b/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj index 06ca9571b79..05061bad690 100644 --- a/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj +++ b/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Qir/Execution/Tools/QirTools.cs b/src/Qir/Execution/Tools/QirTools.cs index 08531a54057..ea5cb93d666 100644 --- a/src/Qir/Execution/Tools/QirTools.cs +++ b/src/Qir/Execution/Tools/QirTools.cs @@ -1,8 +1,13 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +using Microsoft.Quantum.Qir.Tools.Executable; +using Microsoft.Quantum.QsCompiler; +using Microsoft.Quantum.QsCompiler.BondSchemas.EntryPoint; using System; using System.IO; +using System.Linq; +using System.Reflection.PortableExecutable; using System.Threading.Tasks; namespace Microsoft.Quantum.Qir.Tools @@ -19,9 +24,32 @@ public static class QirTools /// .NET DLL generated by the Q# compiler. /// Directory where the libraries to link to are located. /// Directory where the headers needed for compilation are located. - public static Task BuildFromQSharpDll(FileInfo qsharpDll, DirectoryInfo libraryDirectory, DirectoryInfo includeDirectory) + public static async Task BuildFromQSharpDll(FileInfo qsharpDll, DirectoryInfo libraryDirectory, DirectoryInfo includeDirectory) { - throw new NotImplementedException(); + if (!CompilationLoader.ReadBinary(qsharpDll.FullName, out var syntaxTree)) + { + throw new ArgumentException(); + } + + using var stream = File.OpenRead(qsharpDll.FullName); + using var assemblyFile = new PEReader(stream); + if (!AssemblyLoader.LoadQirByteCode(assemblyFile, out var qirByteCode)) + { + throw new ArgumentException(); + } + + var tasks = syntaxTree.EntryPoints.Select(entryPoint => + { + var ep = new EntryPointOperation() + { + Name = entryPoint.ToString() + }; + var exeFileInfo = new FileInfo(entryPoint.ToString()); + var exe = new QirFullStateExecutable(exeFileInfo, qirByteCode); + return exe.BuildAsync(ep, libraryDirectory, includeDirectory); + }); + + await Task.WhenAll(tasks); } } } From 3cd5338319f840996c838bef766108c1af77ba37 Mon Sep 17 00:00:00 2001 From: Scott Carda Date: Fri, 30 Apr 2021 12:22:11 -0700 Subject: [PATCH 2/9] Updated to latest LoadQirByteCode. --- .../Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj | 2 +- src/Qir/Execution/Tools/QirTools.cs | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj b/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj index f89615e8dc7..cd98d3b5808 100644 --- a/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj +++ b/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Qir/Execution/Tools/QirTools.cs b/src/Qir/Execution/Tools/QirTools.cs index ea5cb93d666..bdc018ef623 100644 --- a/src/Qir/Execution/Tools/QirTools.cs +++ b/src/Qir/Execution/Tools/QirTools.cs @@ -3,7 +3,7 @@ using Microsoft.Quantum.Qir.Tools.Executable; using Microsoft.Quantum.QsCompiler; -using Microsoft.Quantum.QsCompiler.BondSchemas.EntryPoint; +using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; using System; using System.IO; using System.Linq; @@ -31,9 +31,8 @@ public static async Task BuildFromQSharpDll(FileInfo qsharpDll, DirectoryInfo li throw new ArgumentException(); } - using var stream = File.OpenRead(qsharpDll.FullName); - using var assemblyFile = new PEReader(stream); - if (!AssemblyLoader.LoadQirByteCode(assemblyFile, out var qirByteCode)) + using var qirContentStream = new MemoryStream(); + if (!AssemblyLoader.LoadQirByteCode(qsharpDll, qirContentStream)) { throw new ArgumentException(); } @@ -45,7 +44,7 @@ public static async Task BuildFromQSharpDll(FileInfo qsharpDll, DirectoryInfo li Name = entryPoint.ToString() }; var exeFileInfo = new FileInfo(entryPoint.ToString()); - var exe = new QirFullStateExecutable(exeFileInfo, qirByteCode); + var exe = new QirFullStateExecutable(exeFileInfo, qirContentStream.ToArray()); return exe.BuildAsync(ep, libraryDirectory, includeDirectory); }); From d19dfc419870282ba7f21521c0fb53c3ff4d5b8b Mon Sep 17 00:00:00 2001 From: Scott Carda Date: Fri, 30 Apr 2021 12:29:07 -0700 Subject: [PATCH 3/9] Error messages --- src/Qir/Execution/Tools/QirTools.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Qir/Execution/Tools/QirTools.cs b/src/Qir/Execution/Tools/QirTools.cs index bdc018ef623..db6f6796292 100644 --- a/src/Qir/Execution/Tools/QirTools.cs +++ b/src/Qir/Execution/Tools/QirTools.cs @@ -28,13 +28,13 @@ public static async Task BuildFromQSharpDll(FileInfo qsharpDll, DirectoryInfo li { if (!CompilationLoader.ReadBinary(qsharpDll.FullName, out var syntaxTree)) { - throw new ArgumentException(); + throw new ArgumentException("Unable to read the Q# syntax tree from the given DLL."); } using var qirContentStream = new MemoryStream(); if (!AssemblyLoader.LoadQirByteCode(qsharpDll, qirContentStream)) { - throw new ArgumentException(); + throw new ArgumentException("The given DLL does not contain QIR byte code."); } var tasks = syntaxTree.EntryPoints.Select(entryPoint => From 23c8130b83bd9602a60dbed8c0a197572d8c140b Mon Sep 17 00:00:00 2001 From: Scott Carda Date: Mon, 3 May 2021 12:07:04 -0700 Subject: [PATCH 4/9] remove unused using --- src/Qir/Execution/Tools/QirTools.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Qir/Execution/Tools/QirTools.cs b/src/Qir/Execution/Tools/QirTools.cs index db6f6796292..1bd765b5d7b 100644 --- a/src/Qir/Execution/Tools/QirTools.cs +++ b/src/Qir/Execution/Tools/QirTools.cs @@ -7,7 +7,6 @@ using System; using System.IO; using System.Linq; -using System.Reflection.PortableExecutable; using System.Threading.Tasks; namespace Microsoft.Quantum.Qir.Tools From 02ebc7d55a072453eb3d936b4ae07f48cff9af83 Mon Sep 17 00:00:00 2001 From: Scott Carda Date: Thu, 6 May 2021 10:39:58 -0700 Subject: [PATCH 5/9] Update to new alpha version --- src/Qir/Controller/Controller.cs | 2 +- .../Tests.Microsoft.Quantum.Qir.Tools/QirExecutableTests.cs | 2 +- src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/Util.cs | 2 -- src/Qir/Execution/Tools/Driver/IQirDriverGenerator.cs | 2 +- src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs | 2 +- src/Qir/Execution/Tools/Executable/IQirExecutable.cs | 2 +- src/Qir/Execution/Tools/Executable/QirExecutable.cs | 2 +- src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj | 2 +- src/Qir/Execution/Tools/QirTools.cs | 2 +- 9 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Qir/Controller/Controller.cs b/src/Qir/Controller/Controller.cs index 2e6593dde35..1ae7e6a747c 100644 --- a/src/Qir/Controller/Controller.cs +++ b/src/Qir/Controller/Controller.cs @@ -7,9 +7,9 @@ using System.Text.Json; using System.Threading.Tasks; using Microsoft.Quantum.Qir.Model; +using Microsoft.Quantum.Qir.Serialization; using Microsoft.Quantum.Qir.Tools.Executable; using Microsoft.Quantum.Qir.Utility; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; namespace Microsoft.Quantum.Qir { diff --git a/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/QirExecutableTests.cs b/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/QirExecutableTests.cs index a47b4023b68..8c3b469c2a5 100644 --- a/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/QirExecutableTests.cs +++ b/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/QirExecutableTests.cs @@ -5,10 +5,10 @@ using System.Collections.Generic; using System.IO; using System.Threading.Tasks; +using Microsoft.Quantum.Qir.Serialization; using Microsoft.Quantum.Qir.Tools.Driver; using Microsoft.Quantum.Qir.Tools.Executable; using Microsoft.Quantum.Qir.Utility; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; using Moq; using Xunit; diff --git a/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/Util.cs b/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/Util.cs index ab6aee7d8eb..e027bbe5403 100644 --- a/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/Util.cs +++ b/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/Util.cs @@ -2,8 +2,6 @@ // Licensed under the MIT License. using System.IO; -using System.Reflection; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; namespace Tests.Microsoft.Quantum.Qir.Tools { diff --git a/src/Qir/Execution/Tools/Driver/IQirDriverGenerator.cs b/src/Qir/Execution/Tools/Driver/IQirDriverGenerator.cs index 28c3ef5fc90..8f29518aca3 100644 --- a/src/Qir/Execution/Tools/Driver/IQirDriverGenerator.cs +++ b/src/Qir/Execution/Tools/Driver/IQirDriverGenerator.cs @@ -3,7 +3,7 @@ using System.IO; using System.Threading.Tasks; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; +using Microsoft.Quantum.Qir.Serialization; namespace Microsoft.Quantum.Qir.Tools.Driver { diff --git a/src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs b/src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs index 20ff9bb5491..7d70a86e574 100644 --- a/src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs +++ b/src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs @@ -3,8 +3,8 @@ using System.IO; using System.Threading.Tasks; +using Microsoft.Quantum.Qir.Serialization; using Microsoft.Quantum.QsCompiler; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; namespace Microsoft.Quantum.Qir.Tools.Driver { diff --git a/src/Qir/Execution/Tools/Executable/IQirExecutable.cs b/src/Qir/Execution/Tools/Executable/IQirExecutable.cs index 765207e3c99..477dd2cfe2a 100644 --- a/src/Qir/Execution/Tools/Executable/IQirExecutable.cs +++ b/src/Qir/Execution/Tools/Executable/IQirExecutable.cs @@ -3,7 +3,7 @@ using System.IO; using System.Threading.Tasks; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; +using Microsoft.Quantum.Qir.Serialization; namespace Microsoft.Quantum.Qir.Tools.Executable { diff --git a/src/Qir/Execution/Tools/Executable/QirExecutable.cs b/src/Qir/Execution/Tools/Executable/QirExecutable.cs index a1613c41773..4c6f73c7d2d 100644 --- a/src/Qir/Execution/Tools/Executable/QirExecutable.cs +++ b/src/Qir/Execution/Tools/Executable/QirExecutable.cs @@ -4,9 +4,9 @@ using System.Collections.Generic; using System.IO; using System.Threading.Tasks; +using Microsoft.Quantum.Qir.Serialization; using Microsoft.Quantum.Qir.Tools.Driver; using Microsoft.Quantum.Qir.Utility; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; namespace Microsoft.Quantum.Qir.Tools.Executable { diff --git a/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj b/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj index cd98d3b5808..4784b8324fe 100644 --- a/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj +++ b/src/Qir/Execution/Tools/Microsoft.Quantum.Qir.Tools.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Qir/Execution/Tools/QirTools.cs b/src/Qir/Execution/Tools/QirTools.cs index 1bd765b5d7b..f4fc8c4b80e 100644 --- a/src/Qir/Execution/Tools/QirTools.cs +++ b/src/Qir/Execution/Tools/QirTools.cs @@ -1,9 +1,9 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +using Microsoft.Quantum.Qir.Serialization; using Microsoft.Quantum.Qir.Tools.Executable; using Microsoft.Quantum.QsCompiler; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; using System; using System.IO; using System.Linq; From 76136bb1a22887cfb6103a3067a2e7a6102b9f9b Mon Sep 17 00:00:00 2001 From: Scott Carda Date: Thu, 6 May 2021 10:50:45 -0700 Subject: [PATCH 6/9] Updated to new alpha version --- .../QirDriverGeneratorTests.cs | 2 +- src/Qir/Execution/Tools/Driver/QirCppDriver.cs | 2 +- src/Qir/Execution/Tools/Driver/QirCppDriverEx.cs | 2 +- src/Qir/Execution/Tools/Driver/QirCppDriverGenerator.cs | 2 +- src/Qir/Execution/Tools/Driver/QirCppInterop.cs | 2 +- src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs | 1 - 6 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/QirDriverGeneratorTests.cs b/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/QirDriverGeneratorTests.cs index 92d8daaa744..03a0859093e 100644 --- a/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/QirDriverGeneratorTests.cs +++ b/src/Qir/Execution/Tests.Microsoft.Quantum.Qir.Tools/QirDriverGeneratorTests.cs @@ -8,7 +8,7 @@ using Xunit; using Microsoft.Quantum.Qir.Tools.Driver; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; +using Microsoft.Quantum.Qir.Serialization; namespace Tests.Microsoft.Quantum.Qir.Tools { diff --git a/src/Qir/Execution/Tools/Driver/QirCppDriver.cs b/src/Qir/Execution/Tools/Driver/QirCppDriver.cs index 807f959095b..c1eb3cec1d3 100644 --- a/src/Qir/Execution/Tools/Driver/QirCppDriver.cs +++ b/src/Qir/Execution/Tools/Driver/QirCppDriver.cs @@ -10,7 +10,7 @@ namespace Microsoft.Quantum.Qir.Tools.Driver { using System.IO; - using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; + using Microsoft.Quantum.Qir.Serialization; using System; /// diff --git a/src/Qir/Execution/Tools/Driver/QirCppDriverEx.cs b/src/Qir/Execution/Tools/Driver/QirCppDriverEx.cs index 7c05fba2b3e..b66eca09a57 100644 --- a/src/Qir/Execution/Tools/Driver/QirCppDriverEx.cs +++ b/src/Qir/Execution/Tools/Driver/QirCppDriverEx.cs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; +using Microsoft.Quantum.Qir.Serialization; namespace Microsoft.Quantum.Qir.Tools.Driver { diff --git a/src/Qir/Execution/Tools/Driver/QirCppDriverGenerator.cs b/src/Qir/Execution/Tools/Driver/QirCppDriverGenerator.cs index a9a8233464b..26db40b0c90 100644 --- a/src/Qir/Execution/Tools/Driver/QirCppDriverGenerator.cs +++ b/src/Qir/Execution/Tools/Driver/QirCppDriverGenerator.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; +using Microsoft.Quantum.Qir.Serialization; namespace Microsoft.Quantum.Qir.Tools.Driver { diff --git a/src/Qir/Execution/Tools/Driver/QirCppInterop.cs b/src/Qir/Execution/Tools/Driver/QirCppInterop.cs index b4da38b9676..dfac2fac833 100644 --- a/src/Qir/Execution/Tools/Driver/QirCppInterop.cs +++ b/src/Qir/Execution/Tools/Driver/QirCppInterop.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; -using Microsoft.Quantum.QsCompiler.BondSchemas.Execution; +using Microsoft.Quantum.Qir.Serialization; #nullable enable diff --git a/src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs b/src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs index a90392873c6..381a06b532f 100644 --- a/src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs +++ b/src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs @@ -4,7 +4,6 @@ using System.IO; using System.Threading.Tasks; using Microsoft.Quantum.Qir.Serialization; -using Microsoft.Quantum.QsCompiler; namespace Microsoft.Quantum.Qir.Tools.Driver { From e0a9588385301664b4a29dde949db52f345a98fe Mon Sep 17 00:00:00 2001 From: Scott Carda Date: Thu, 6 May 2021 11:00:02 -0700 Subject: [PATCH 7/9] updated BuildFromQSharpDll to use the new API from the compiler to make EntryPointOperation objects --- src/Qir/Execution/Tools/QirTools.cs | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/Qir/Execution/Tools/QirTools.cs b/src/Qir/Execution/Tools/QirTools.cs index f4fc8c4b80e..7556bd23ae8 100644 --- a/src/Qir/Execution/Tools/QirTools.cs +++ b/src/Qir/Execution/Tools/QirTools.cs @@ -4,6 +4,7 @@ using Microsoft.Quantum.Qir.Serialization; using Microsoft.Quantum.Qir.Tools.Executable; using Microsoft.Quantum.QsCompiler; +using Microsoft.Quantum.QsCompiler.QIR; using System; using System.IO; using System.Linq; @@ -25,26 +26,17 @@ public static class QirTools /// Directory where the headers needed for compilation are located. public static async Task BuildFromQSharpDll(FileInfo qsharpDll, DirectoryInfo libraryDirectory, DirectoryInfo includeDirectory) { - if (!CompilationLoader.ReadBinary(qsharpDll.FullName, out var syntaxTree)) - { - throw new ArgumentException("Unable to read the Q# syntax tree from the given DLL."); - } - using var qirContentStream = new MemoryStream(); if (!AssemblyLoader.LoadQirByteCode(qsharpDll, qirContentStream)) { throw new ArgumentException("The given DLL does not contain QIR byte code."); } - var tasks = syntaxTree.EntryPoints.Select(entryPoint => + var tasks = EntryPointOperationLoader.LoadEntryPointOperations(qsharpDll).Select(entryPointOp => { - var ep = new EntryPointOperation() - { - Name = entryPoint.ToString() - }; - var exeFileInfo = new FileInfo(entryPoint.ToString()); + var exeFileInfo = new FileInfo(entryPointOp.Name); var exe = new QirFullStateExecutable(exeFileInfo, qirContentStream.ToArray()); - return exe.BuildAsync(ep, libraryDirectory, includeDirectory); + return exe.BuildAsync(entryPointOp, libraryDirectory, includeDirectory); }); await Task.WhenAll(tasks); From ef39c0ce607b4adcf495e256f89320f819430801 Mon Sep 17 00:00:00 2001 From: Scott Carda Date: Thu, 6 May 2021 16:56:21 -0700 Subject: [PATCH 8/9] Added parameter for specifying the output directory for created executable files. --- src/Qir/Execution/Tools/QirTools.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Qir/Execution/Tools/QirTools.cs b/src/Qir/Execution/Tools/QirTools.cs index 7556bd23ae8..547e891b670 100644 --- a/src/Qir/Execution/Tools/QirTools.cs +++ b/src/Qir/Execution/Tools/QirTools.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -using Microsoft.Quantum.Qir.Serialization; using Microsoft.Quantum.Qir.Tools.Executable; using Microsoft.Quantum.QsCompiler; using Microsoft.Quantum.QsCompiler.QIR; @@ -17,14 +16,18 @@ namespace Microsoft.Quantum.Qir.Tools /// public static class QirTools { - /// /// Creates a QIR-based executable from a .NET DLL generated by the Q# compiler. /// /// .NET DLL generated by the Q# compiler. /// Directory where the libraries to link to are located. /// Directory where the headers needed for compilation are located. - public static async Task BuildFromQSharpDll(FileInfo qsharpDll, DirectoryInfo libraryDirectory, DirectoryInfo includeDirectory) + /// Directory where the created executables are placed. + public static async Task BuildFromQSharpDll( + FileInfo qsharpDll, + DirectoryInfo libraryDirectory, + DirectoryInfo includeDirectory, + DirectoryInfo executablesDirectory) { using var qirContentStream = new MemoryStream(); if (!AssemblyLoader.LoadQirByteCode(qsharpDll, qirContentStream)) @@ -32,14 +35,22 @@ public static async Task BuildFromQSharpDll(FileInfo qsharpDll, DirectoryInfo li throw new ArgumentException("The given DLL does not contain QIR byte code."); } + if (!executablesDirectory.Exists) + { + executablesDirectory.Create(); + } + + var dirStr = executablesDirectory.FullName + Path.DirectorySeparatorChar; var tasks = EntryPointOperationLoader.LoadEntryPointOperations(qsharpDll).Select(entryPointOp => { - var exeFileInfo = new FileInfo(entryPointOp.Name); + var exeFileInfo = new FileInfo(dirStr + entryPointOp.Name); var exe = new QirFullStateExecutable(exeFileInfo, qirContentStream.ToArray()); return exe.BuildAsync(entryPointOp, libraryDirectory, includeDirectory); }); await Task.WhenAll(tasks); + + // ToDo: Return list of created file names } } } From 42555e5d074ad02aaef9accf9b500dc1485a5ef5 Mon Sep 17 00:00:00 2001 From: Scott Carda Date: Thu, 6 May 2021 17:10:08 -0700 Subject: [PATCH 9/9] Use Path.Combine instead --- src/Qir/Execution/Tools/QirTools.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Qir/Execution/Tools/QirTools.cs b/src/Qir/Execution/Tools/QirTools.cs index 547e891b670..e430ce5501b 100644 --- a/src/Qir/Execution/Tools/QirTools.cs +++ b/src/Qir/Execution/Tools/QirTools.cs @@ -40,10 +40,9 @@ public static async Task BuildFromQSharpDll( executablesDirectory.Create(); } - var dirStr = executablesDirectory.FullName + Path.DirectorySeparatorChar; var tasks = EntryPointOperationLoader.LoadEntryPointOperations(qsharpDll).Select(entryPointOp => { - var exeFileInfo = new FileInfo(dirStr + entryPointOp.Name); + var exeFileInfo = new FileInfo(Path.Combine(executablesDirectory.FullName, entryPointOp.Name)); var exe = new QirFullStateExecutable(exeFileInfo, qirContentStream.ToArray()); return exe.BuildAsync(entryPointOp, libraryDirectory, includeDirectory); });