Specify in linking stage, where runtime shared library is located. (#120)
* Specify in linking stage, where runtime shared library is located. * Cite & make comment a full sentence. * Fix error communicating runtime dir to ld.
This commit is contained in:
parent
7f2bffb27d
commit
adc08fb93e
|
@ -2,20 +2,37 @@
|
||||||
|
|
||||||
ExecutionSession::ExecutionSession(
|
ExecutionSession::ExecutionSession(
|
||||||
std::string sharedLibPath, std::string entryPointName) {
|
std::string sharedLibPath, std::string entryPointName) {
|
||||||
|
// Adapted from https://www.tldp.org/HOWTO/html_single/C++-dlopen/.
|
||||||
_sharedLibraryHandle = dlopen(sharedLibPath.c_str(), RTLD_LAZY);
|
_sharedLibraryHandle = dlopen(sharedLibPath.c_str(), RTLD_LAZY);
|
||||||
|
if (!_sharedLibraryHandle) {
|
||||||
|
std::stringstream errStr;
|
||||||
|
errStr << "Cannot open library: " << dlerror() << std::endl;
|
||||||
|
throw std::runtime_error(errStr.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset errors.
|
||||||
|
dlerror();
|
||||||
_entryPointFunc =
|
_entryPointFunc =
|
||||||
(entryPointFuncType)dlsym(_sharedLibraryHandle, entryPointName.c_str());
|
(entryPointFuncType)dlsym(_sharedLibraryHandle, entryPointName.c_str());
|
||||||
|
auto *dlsymError = dlerror();
|
||||||
|
if (dlsymError) {
|
||||||
|
std::stringstream errStr;
|
||||||
|
errStr << "Cannot load symbol '" << entryPointName << "': " << dlsymError
|
||||||
|
<< std::endl;
|
||||||
|
dlclose(_sharedLibraryHandle);
|
||||||
|
throw std::runtime_error(errStr.str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<py::array> ExecutionSession::run(
|
std::vector<py::array> ExecutionSession::run(
|
||||||
std::vector<py::array> inputsPyArray) {
|
std::vector<py::array> inputsPyArray) {
|
||||||
assert(_entryPointFunc && "entry point not loaded");
|
assert(_entryPointFunc && "Entry point not loaded.");
|
||||||
auto *wrappedInput = createOrderedDynMemRefDict();
|
auto *wrappedInput = createOrderedDynMemRefDict();
|
||||||
int inputIdx = 0;
|
int inputIdx = 0;
|
||||||
for (auto inputPyArray : inputsPyArray) {
|
for (auto inputPyArray : inputsPyArray) {
|
||||||
auto *inputDynMemRef = createDynMemRef(inputPyArray.ndim());
|
auto *inputDynMemRef = createDynMemRef(inputPyArray.ndim());
|
||||||
assert(inputPyArray.flags() && py::array::c_style &&
|
assert(inputPyArray.flags() && py::array::c_style &&
|
||||||
"expect contiguous python array");
|
"Expect contiguous python array.");
|
||||||
|
|
||||||
if (inputPyArray.writeable()) {
|
if (inputPyArray.writeable()) {
|
||||||
inputDynMemRef->data = inputPyArray.mutable_data();
|
inputDynMemRef->data = inputPyArray.mutable_data();
|
||||||
|
|
|
@ -12,7 +12,7 @@ if(EXISTS ${LIBSTDCXX_LIB})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_custom_target(check-onnx-backend
|
add_custom_target(check-onnx-backend
|
||||||
COMMAND LD_PRELOAD=${LD_PRELOADS} ${PYTHON_EXECUTABLE}
|
COMMAND ${PYTHON_EXECUTABLE}
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/test.py)
|
${CMAKE_CURRENT_BINARY_DIR}/test.py)
|
||||||
|
|
||||||
add_dependencies(check-onnx-backend onnx-mlir)
|
add_dependencies(check-onnx-backend onnx-mlir)
|
||||||
|
|
|
@ -46,7 +46,7 @@ class DummyBackend(onnx.backend.base.Backend):
|
||||||
# Generate shared library from object file, linking with c runtime.
|
# Generate shared library from object file, linking with c runtime.
|
||||||
execute_commands([
|
execute_commands([
|
||||||
CXX, "-shared", "-fPIC", "temp_model.o", "-o", "temp_model.so",
|
CXX, "-shared", "-fPIC", "temp_model.o", "-o", "temp_model.so",
|
||||||
"-L" + RUNTIME_DIR, "-lcruntime"
|
"-L" + RUNTIME_DIR, "-lcruntime", "-Wl,-rpath=" + RUNTIME_DIR,
|
||||||
])
|
])
|
||||||
return ExecutionSession("./temp_model.so", "_dyn_entry_point_main_graph")
|
return ExecutionSession("./temp_model.so", "_dyn_entry_point_main_graph")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue