/*! * Copyright (c) 2017 by Contributors * \file module_util.h * \brief Helper utilities for module building */ #ifndef DGL_RUNTIME_MODULE_UTIL_H_ #define DGL_RUNTIME_MODULE_UTIL_H_ #include #include #include #include #include extern "C" { // Function signature for generated packed function in shared library typedef int (*BackendPackedCFunc)(void* args, int* type_codes, int num_args); } // extern "C" namespace dgl { namespace runtime { /*! * \brief Wrap a BackendPackedCFunc to packed function. * \param faddr The function address * \param mptr The module pointer node. */ PackedFunc WrapPackedFunc(BackendPackedCFunc faddr, const std::shared_ptr& mptr); /*! * \brief Load and append module blob to module list * \param mblob The module blob. * \param module_list The module list to append to */ void ImportModuleBlob(const char* mblob, std::vector* module_list); /*! * \brief Utility to initialize conext function symbols during startup * \param flookup A symbol lookup function. * \tparam FLookup a function of signature string->void* */ template void InitContextFunctions(FLookup flookup) { #define DGL_INIT_CONTEXT_FUNC(FuncName) \ if (auto *fp = reinterpret_cast \ (flookup("__" #FuncName))) { \ *fp = FuncName; \ } // Initialize the functions DGL_INIT_CONTEXT_FUNC(DGLFuncCall); DGL_INIT_CONTEXT_FUNC(DGLAPISetLastError); DGL_INIT_CONTEXT_FUNC(DGLBackendGetFuncFromEnv); DGL_INIT_CONTEXT_FUNC(DGLBackendAllocWorkspace); DGL_INIT_CONTEXT_FUNC(DGLBackendFreeWorkspace); DGL_INIT_CONTEXT_FUNC(DGLBackendParallelLaunch); DGL_INIT_CONTEXT_FUNC(DGLBackendParallelBarrier); #undef DGL_INIT_CONTEXT_FUNC } } // namespace runtime } // namespace dgl #endif // DGL_RUNTIME_MODULE_UTIL_H_