/*! * Copyright (c) 2017 by Contributors * \file cpu_dsl_api.cc * \brief DSL API dispatcher */ #include <tvm/runtime/registry.h> #include <tvm/c_dsl_api.h> #include "./dsl_api.h" #include "./runtime_base.h" namespace tvm { namespace runtime { DSLAPI* FindDSLAPI() { auto* f = Registry::Get("dsl_api.singleton"); if (f == nullptr) { throw dmlc::Error("TVM runtime only environment,"\ " DSL API is not available"); } void* ptr = (*f)(); return static_cast<DSLAPI*>(ptr); } static DSLAPI* GetDSLAPI() { static DSLAPI* inst = FindDSLAPI(); return inst; } } // namespace runtime } // namespace tvm using namespace tvm::runtime; int TVMNodeFree(NodeHandle handle) { API_BEGIN(); GetDSLAPI()->NodeFree(handle); API_END(); } int TVMNodeTypeKey2Index(const char* type_key, int* out_index) { API_BEGIN(); GetDSLAPI()->NodeTypeKey2Index(type_key, out_index); API_END(); } int TVMNodeGetTypeIndex(NodeHandle handle, int* out_index) { API_BEGIN(); GetDSLAPI()->NodeGetTypeIndex(handle, out_index); API_END(); } int TVMNodeGetAttr(NodeHandle handle, const char* key, TVMValue* out_value, int* out_type_code, int* out_success) { API_BEGIN(); GetDSLAPI()->NodeGetAttr( handle, key, out_value, out_type_code, out_success); API_END(); } int TVMNodeListAttrNames(NodeHandle handle, int *out_size, const char*** out_array) { API_BEGIN(); GetDSLAPI()->NodeListAttrNames( handle, out_size, out_array); API_END(); }