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/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/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/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 8f98b4a80f9..381a06b532f 100644
--- a/src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs
+++ b/src/Qir/Execution/Tools/Driver/QirFullStateDriverGenerator.cs
@@ -3,8 +3,7 @@
using System.IO;
using System.Threading.Tasks;
-using Microsoft.Quantum.QsCompiler;
-using Microsoft.Quantum.QsCompiler.BondSchemas.Execution;
+using Microsoft.Quantum.Qir.Serialization;
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 77ceccafb92..8917f61f09e 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..e430ce5501b 100644
--- a/src/Qir/Execution/Tools/QirTools.cs
+++ b/src/Qir/Execution/Tools/QirTools.cs
@@ -1,8 +1,12 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
+using Microsoft.Quantum.Qir.Tools.Executable;
+using Microsoft.Quantum.QsCompiler;
+using Microsoft.Quantum.QsCompiler.QIR;
using System;
using System.IO;
+using System.Linq;
using System.Threading.Tasks;
namespace Microsoft.Quantum.Qir.Tools
@@ -12,16 +16,40 @@ 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 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)
{
- throw new NotImplementedException();
+ using var qirContentStream = new MemoryStream();
+ if (!AssemblyLoader.LoadQirByteCode(qsharpDll, qirContentStream))
+ {
+ throw new ArgumentException("The given DLL does not contain QIR byte code.");
+ }
+
+ if (!executablesDirectory.Exists)
+ {
+ executablesDirectory.Create();
+ }
+
+ var tasks = EntryPointOperationLoader.LoadEntryPointOperations(qsharpDll).Select(entryPointOp =>
+ {
+ var exeFileInfo = new FileInfo(Path.Combine(executablesDirectory.FullName, 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
}
}
}