================
@@ -115,31 +116,60 @@ class Interpreter {
   /// An optional compiler instance for CUDA offloading
   std::unique_ptr<CompilerInstance> DeviceCI;
 
+public:
+  struct OutOfProcessJITConfig {
+    /// Indicates whether out-of-process JIT execution is enabled.
+    bool IsOutOfProcess;
+    /// Path to the out-of-process JIT executor.
+    std::string OOPExecutor;
+    std::string OOPExecutorConnect;
+    /// Indicates whether to use shared memory for communication.
+    bool UseSharedMemory;
+    /// String representing the slab allocation size for memory management.
+    std::string SlabAllocateSizeString;
+    /// Path to the ORC runtime library.
+    std::string OrcRuntimePath;
+
+    OutOfProcessJITConfig()
+        : IsOutOfProcess(false), OOPExecutor(""), OOPExecutorConnect(""),
+          UseSharedMemory(false), SlabAllocateSizeString(""),
+          OrcRuntimePath("") {}
+  };
+
 protected:
   // Derived classes can use an extended interface of the Interpreter.
   Interpreter(std::unique_ptr<CompilerInstance> Instance, llvm::Error &Err,
               std::unique_ptr<llvm::orc::LLJITBuilder> JITBuilder = nullptr,
-              std::unique_ptr<clang::ASTConsumer> Consumer = nullptr);
+              std::unique_ptr<clang::ASTConsumer> Consumer = nullptr,
+              OutOfProcessJITConfig OOPConfig = OutOfProcessJITConfig());
 
   // Create the internal IncrementalExecutor, or re-create it after calling
   // ResetExecutor().
-  llvm::Error CreateExecutor();
+  llvm::Error
+  CreateExecutor(OutOfProcessJITConfig OOPConfig = OutOfProcessJITConfig());
 
   // Delete the internal IncrementalExecutor. This causes a hard shutdown of 
the
   // JIT engine. In particular, it doesn't run cleanup or destructors.
   void ResetExecutor();
 
 public:
   virtual ~Interpreter();
-  static llvm::Expected<std::unique_ptr<Interpreter>>
-  create(std::unique_ptr<CompilerInstance> CI,
-         std::unique_ptr<llvm::orc::LLJITBuilder> JITBuilder = nullptr);
+  static llvm::Expected<std::unique_ptr<Interpreter>> create(
+      std::unique_ptr<CompilerInstance> CI,
+      std::optional<OutOfProcessJITConfig> OutOfProcessConfig = std::nullopt);
   static llvm::Expected<std::unique_ptr<Interpreter>>
   createWithCUDA(std::unique_ptr<CompilerInstance> CI,
                  std::unique_ptr<CompilerInstance> DCI);
   static llvm::Expected<std::unique_ptr<llvm::orc::LLJITBuilder>>
   createLLJITBuilder(std::unique_ptr<llvm::orc::ExecutorProcessControl> EPC,
                      llvm::StringRef OrcRuntimePath);
+#ifndef _WIN32
+  static llvm::Expected<
+      std::pair<std::unique_ptr<llvm::orc::LLJITBuilder>, pid_t>>
+  outOfProcessJITBuilder(OutOfProcessJITConfig OutOfProcessConfig);
+  static llvm::Expected<std::string>
+  getOrcRuntimePath(const driver::ToolChain &TC);
+#endif
----------------
vgvassilev wrote:

```suggestion
  static llvm::Expected<
      std::pair<std::unique_ptr<llvm::orc::LLJITBuilder>, pid_t>>
  outOfProcessJITBuilder(OutOfProcessJITConfig OutOfProcessConfig);
  static llvm::Expected<std::string>
  getOrcRuntimePath(const driver::ToolChain &TC);
```

We should drop these checks and return `llvm::Error` if the target triple is 
Windows.

https://github.com/llvm/llvm-project/pull/155140
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to