Break out OrcError and RPC

Summary:
When createing an ORC remote JIT target the current library split forces the target process to link large portions of LLVM (Core, Execution Engine, JITLink, Object, MC, Passes, RuntimeDyld, Support, Target, and TransformUtils). This occurs because the ORC RPC interfaces rely on the static globals the ORC Error types require, which starts a cycle of pulling in more and more.

This patch breaks the ORC RPC Error implementations out into an "OrcError" library which only depends on LLVM Support. It also pulls the ORC RPC headers into their own subdirectory.

With this patch code can include the Orc/RPC/*.h headers and will only incur link dependencies on LLVMOrcError and LLVMSupport.

Reviewers: lhames

Reviewed By: lhames

Subscribers: mgorny, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D68732
This commit is contained in:
Chris Bieneman 2019-10-09 14:27:52 -07:00
parent cbb3104b1c
commit a34680a33e
16 changed files with 45 additions and 19 deletions

View File

@ -13,7 +13,7 @@
#ifndef LLVM_TOOLS_LLI_REMOTEJITUTILS_H #ifndef LLVM_TOOLS_LLI_REMOTEJITUTILS_H
#define LLVM_TOOLS_LLI_REMOTEJITUTILS_H #define LLVM_TOOLS_LLI_REMOTEJITUTILS_H
#include "llvm/ExecutionEngine/Orc/RawByteChannel.h" #include "llvm/ExecutionEngine/Orc/RPC/RawByteChannel.h"
#include "llvm/Support/Error.h" #include "llvm/Support/Error.h"
#include <cassert> #include <cassert>
#include <cerrno> #include <cerrno>

View File

@ -16,8 +16,8 @@
#define LLVM_EXECUTIONENGINE_ORC_ORCREMOTETARGETRPCAPI_H #define LLVM_EXECUTIONENGINE_ORC_ORCREMOTETARGETRPCAPI_H
#include "llvm/ExecutionEngine/JITSymbol.h" #include "llvm/ExecutionEngine/JITSymbol.h"
#include "llvm/ExecutionEngine/Orc/RPCUtils.h" #include "llvm/ExecutionEngine/Orc/RPC/RPCUtils.h"
#include "llvm/ExecutionEngine/Orc/RawByteChannel.h" #include "llvm/ExecutionEngine/Orc/RPC/RawByteChannel.h"
namespace llvm { namespace llvm {
namespace orc { namespace orc {

View File

@ -1,4 +1,4 @@
//===- llvm/ExecutionEngine/Orc/RPCSerialization.h --------------*- C++ -*-===// //===- llvm/ExecutionEngine/Orc/RPC/RPCSerialization.h --------------*- C++ -*-===//
// //
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information. // See https://llvm.org/LICENSE.txt for license information.
@ -9,7 +9,7 @@
#ifndef LLVM_EXECUTIONENGINE_ORC_RPCSERIALIZATION_H #ifndef LLVM_EXECUTIONENGINE_ORC_RPCSERIALIZATION_H
#define LLVM_EXECUTIONENGINE_ORC_RPCSERIALIZATION_H #define LLVM_EXECUTIONENGINE_ORC_RPCSERIALIZATION_H
#include "OrcError.h" #include "llvm/ExecutionEngine/Orc/OrcError.h"
#include "llvm/Support/thread.h" #include "llvm/Support/thread.h"
#include <map> #include <map>
#include <mutex> #include <mutex>

View File

@ -23,7 +23,7 @@
#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/STLExtras.h"
#include "llvm/ExecutionEngine/Orc/OrcError.h" #include "llvm/ExecutionEngine/Orc/OrcError.h"
#include "llvm/ExecutionEngine/Orc/RPCSerialization.h" #include "llvm/ExecutionEngine/Orc/RPC/RPCSerialization.h"
#include "llvm/Support/MSVCErrorWorkarounds.h" #include "llvm/Support/MSVCErrorWorkarounds.h"
#include <future> #include <future>

View File

@ -1,4 +1,4 @@
//===- llvm/ExecutionEngine/Orc/RawByteChannel.h ----------------*- C++ -*-===// //===- llvm/ExecutionEngine/Orc/RPC/RawByteChannel.h ----------------*- C++ -*-===//
// //
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information. // See https://llvm.org/LICENSE.txt for license information.
@ -10,7 +10,7 @@
#define LLVM_EXECUTIONENGINE_ORC_RAWBYTECHANNEL_H #define LLVM_EXECUTIONENGINE_ORC_RAWBYTECHANNEL_H
#include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringRef.h"
#include "llvm/ExecutionEngine/Orc/RPCSerialization.h" #include "llvm/ExecutionEngine/Orc/RPC/RPCSerialization.h"
#include "llvm/Support/Endian.h" #include "llvm/Support/Endian.h"
#include "llvm/Support/Error.h" #include "llvm/Support/Error.h"
#include <cstdint> #include <cstdint>

View File

@ -21,6 +21,7 @@ endif()
add_subdirectory(Interpreter) add_subdirectory(Interpreter)
add_subdirectory(JITLink) add_subdirectory(JITLink)
add_subdirectory(MCJIT) add_subdirectory(MCJIT)
add_subdirectory(OrcError)
add_subdirectory(Orc) add_subdirectory(Orc)
add_subdirectory(RuntimeDyld) add_subdirectory(RuntimeDyld)

View File

@ -16,7 +16,7 @@
[common] [common]
subdirectories = Interpreter MCJIT JITLink RuntimeDyld IntelJITEvents subdirectories = Interpreter MCJIT JITLink RuntimeDyld IntelJITEvents
OProfileJIT Orc PerfJITEvents OProfileJIT Orc OrcError PerfJITEvents
[component_0] [component_0]
type = Library type = Library

View File

@ -16,9 +16,7 @@ add_llvm_library(LLVMOrcJIT
ObjectTransformLayer.cpp ObjectTransformLayer.cpp
OrcABISupport.cpp OrcABISupport.cpp
OrcCBindings.cpp OrcCBindings.cpp
OrcError.cpp
OrcMCJITReplacement.cpp OrcMCJITReplacement.cpp
RPCUtils.cpp
RTDyldObjectLinkingLayer.cpp RTDyldObjectLinkingLayer.cpp
ThreadSafeModule.cpp ThreadSafeModule.cpp
Speculation.cpp Speculation.cpp

View File

@ -18,5 +18,5 @@
type = Library type = Library
name = OrcJIT name = OrcJIT
parent = ExecutionEngine parent = ExecutionEngine
required_libraries = Core ExecutionEngine JITLink Object MC Passes RuntimeDyld required_libraries = Core ExecutionEngine JITLink Object OrcError MC Passes
Support Target TransformUtils RuntimeDyld Support Target TransformUtils

View File

@ -0,0 +1,6 @@
add_llvm_library(LLVMOrcError
OrcError.cpp
RPCError.cpp
ADDITIONAL_HEADER_DIRS
${LLVM_MAIN_INCLUDE_DIR}/llvm/ExecutionEngine/Orc
)

View File

@ -0,0 +1,21 @@
;===- ./lib/ExecutionEngine/OrcError/LLVMBuild.txt -------------*- Conf -*--===;
;
; Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
; See https://llvm.org/LICENSE.txt for license information.
; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
;
;===------------------------------------------------------------------------===;
;
; This is an LLVMBuild description file for the components in this subdirectory.
;
; For more information on the LLVMBuild system, please see:
;
; http://llvm.org/docs/LLVMBuild.html
;
;===------------------------------------------------------------------------===;
[component_0]
type = Library
name = OrcError
parent = ExecutionEngine
required_libraries = Support

View File

@ -1,4 +1,4 @@
//===--------------- RPCUtils.cpp - RPCUtils implementation ---------------===// //===--------------- RPCError.cpp - RPCERror implementation ---------------===//
// //
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information. // See https://llvm.org/LICENSE.txt for license information.
@ -6,11 +6,11 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// RPCUtils implementation. // RPC Error type implmentations.
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/ExecutionEngine/Orc/RPCUtils.h" #include "llvm/ExecutionEngine/Orc/RPC/RPCUtils.h"
char llvm::orc::rpc::RPCFatalError::ID = 0; char llvm::orc::rpc::RPCFatalError::ID = 0;
char llvm::orc::rpc::ConnectionClosed::ID = 0; char llvm::orc::rpc::ConnectionClosed::ID = 0;

View File

@ -13,7 +13,7 @@
#ifndef LLVM_TOOLS_LLI_REMOTEJITUTILS_H #ifndef LLVM_TOOLS_LLI_REMOTEJITUTILS_H
#define LLVM_TOOLS_LLI_REMOTEJITUTILS_H #define LLVM_TOOLS_LLI_REMOTEJITUTILS_H
#include "llvm/ExecutionEngine/Orc/RawByteChannel.h" #include "llvm/ExecutionEngine/Orc/RPC/RawByteChannel.h"
#include "llvm/ExecutionEngine/RTDyldMemoryManager.h" #include "llvm/ExecutionEngine/RTDyldMemoryManager.h"
#include <mutex> #include <mutex>

View File

@ -9,7 +9,7 @@
#ifndef LLVM_UNITTESTS_EXECUTIONENGINE_ORC_QUEUECHANNEL_H #ifndef LLVM_UNITTESTS_EXECUTIONENGINE_ORC_QUEUECHANNEL_H
#define LLVM_UNITTESTS_EXECUTIONENGINE_ORC_QUEUECHANNEL_H #define LLVM_UNITTESTS_EXECUTIONENGINE_ORC_QUEUECHANNEL_H
#include "llvm/ExecutionEngine/Orc/RawByteChannel.h" #include "llvm/ExecutionEngine/Orc/RPC/RawByteChannel.h"
#include "llvm/Support/Error.h" #include "llvm/Support/Error.h"
#include <atomic> #include <atomic>

View File

@ -6,7 +6,7 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "llvm/ExecutionEngine/Orc/RPCUtils.h" #include "llvm/ExecutionEngine/Orc/RPC/RPCUtils.h"
#include "QueueChannel.h" #include "QueueChannel.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"