Commit b11b9c69 authored by Artur Wojcik's avatar Artur Wojcik Committed by Robert Kimball

[ONNXIFI] public interface stubs (#1487)

* onnxifi: add 'onnx' as external project
Signed-off-by: 's avatarArtur Wojcik <artur.wojcik@intel.com>

* onnxifi: public interface function stubs
Signed-off-by: 's avatarArtur Wojcik <artur.wojcik@intel.com>

* onnxifi: fix the typo in function name
Signed-off-by: 's avatarArtur Wojcik <artur.wojcik@intel.com>

* onnx: fix compilation Ubuntu 16.04
Signed-off-by: 's avatarArtur Wojcik <artur.wojcik@intel.com>

* onnxifi: update to dummy backend
Signed-off-by: 's avatarArtur Wojcik <artur.wojcik@intel.com>

* onnxifi: style cleanup
Signed-off-by: 's avatarArtur Wojcik <artur.wojcik@intel.com>
parent 62f00d68
......@@ -233,6 +233,12 @@ if (NGRAPH_ONNX_IMPORT_ENABLE)
else()
find_package(Protobuf 2.6.1 REQUIRED)
endif()
if (NGRAPH_ONNXIFI_ENABLE)
include(cmake/external_onnx.cmake)
if (TARGET ext_protobuf)
add_dependencies(ext_onnx ext_protobuf)
endif()
endif()
endif()
include(cmake/external_gtest.cmake)
......
# ******************************************************************************
# Copyright 2017-2018 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ******************************************************************************
# Enable ExternalProject CMake module
include(ExternalProject)
#------------------------------------------------------------------------------
# ONNX.proto definition version
#------------------------------------------------------------------------------
set(ONNX_VERSION 1.2.2)
#------------------------------------------------------------------------------
# Download and install libonnx ...
#------------------------------------------------------------------------------
set(ONNX_GIT_REPO_URL https://github.com/onnx/onnx.git)
set(ONNX_GIT_BRANCH rel-${ONNX_VERSION})
# The 'BUILD_BYPRODUCTS' arguments was introduced in CMake 3.2.
if (${CMAKE_VERSION} VERSION_LESS 3.2)
ExternalProject_Add(
ext_onnx
PREFIX onnx
GIT_REPOSITORY ${ONNX_GIT_REPO_URL}
GIT_TAG ${ONNX_GIT_BRANCH}
INSTALL_COMMAND ""
UPDATE_COMMAND ""
CMAKE_ARGS -DONNX_GEN_PB_TYPE_STUBS=OFF
-DProtobuf_PROTOC_EXECUTABLE=${Protobuf_PROTOC_EXECUTABLE}
-DProtobuf_INCLUDE_DIR=${Protobuf_INCLUDE_DIR}
-DPROTOBUF_LIBRARY=${Protobuf_LIBRARY}
-DPROTOBUF_SRC_ROOT_FOLDER=${Protobuf_SRC_ROOT_FOLDER}
TMP_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/tmp"
STAMP_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/stamp"
DOWNLOAD_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/download"
SOURCE_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/src"
BINARY_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/bin"
INSTALL_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx"
EXCLUDE_FROM_ALL TRUE
)
else()
if (${CMAKE_VERSION} VERSION_LESS 3.6)
ExternalProject_Add(
ext_onnx
PREFIX ext_onnx
GIT_REPOSITORY ${ONNX_GIT_REPO_URL}
GIT_TAG ${ONNX_GIT_BRANCH}
INSTALL_COMMAND ""
UPDATE_COMMAND ""
CMAKE_ARGS -DONNX_GEN_PB_TYPE_STUBS=OFF
-DProtobuf_PROTOC_EXECUTABLE=${Protobuf_PROTOC_EXECUTABLE}
-DProtobuf_INCLUDE_DIR=${Protobuf_INCLUDE_DIR}
-DPROTOBUF_LIBRARY=${Protobuf_LIBRARY}
-DPROTOBUF_SRC_ROOT_FOLDER=${Protobuf_SRC_ROOT_FOLDER}
TMP_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/tmp"
STAMP_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/stamp"
DOWNLOAD_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/download"
SOURCE_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/src"
BINARY_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/bin"
INSTALL_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx"
BUILD_BYPRODUCTS ${EXTERNAL_PROJECTS_ROOT}/onnx/bin/libonnx_proto.a
${EXTERNAL_PROJECTS_ROOT}/onnx/bin/libonnx.a
EXCLUDE_FROM_ALL TRUE
)
else()
# To speed things up prefer 'shallow copy' for CMake 3.6 and later
ExternalProject_Add(
ext_onnx
PREFIX ext_onnx
GIT_REPOSITORY ${ONNX_GIT_REPO_URL}
GIT_TAG ${ONNX_GIT_BRANCH}
GIT_SHALLOW TRUE
INSTALL_COMMAND ""
UPDATE_COMMAND ""
CMAKE_ARGS -DONNX_GEN_PB_TYPE_STUBS=OFF
-DProtobuf_PROTOC_EXECUTABLE=${Protobuf_PROTOC_EXECUTABLE}
-DProtobuf_INCLUDE_DIR=${Protobuf_INCLUDE_DIR}
TMP_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/tmp"
STAMP_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/stamp"
DOWNLOAD_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/download"
SOURCE_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/src"
BINARY_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx/bin"
INSTALL_DIR "${EXTERNAL_PROJECTS_ROOT}/onnx"
BUILD_BYPRODUCTS ${EXTERNAL_PROJECTS_ROOT}/onnx/bin/libonnx_proto.a
${EXTERNAL_PROJECTS_ROOT}/onnx/bin/libonnx.a
EXCLUDE_FROM_ALL TRUE
)
endif()
endif()
# -----------------------------------------------------------------------------
ExternalProject_Get_Property(ext_onnx SOURCE_DIR BINARY_DIR)
set(ONNX_INCLUDE_DIR ${SOURCE_DIR}/onnx)
set(ONNX_PROTO_INCLUDE_DIR ${BINARY_DIR}/onnx)
set(ONNX_LIBRARY ${BINARY_DIR}/libonnx.a)
set(ONNX_PROTO_LIBRARY ${BINARY_DIR}/libonnx_proto.a)
set(ONNX_LIBRARIES ${ONNX_LIBRARY} ${ONNX_PROTO_LIBRARY})
if (NOT TARGET onnx::libonnx)
add_library(onnx::libonnx UNKNOWN IMPORTED)
set_target_properties(onnx::libonnx PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${ONNX_INCLUDE_DIR}
IMPORTED_LOCATION ${ONNX_LIBRARY})
add_dependencies(onnx::libonnx ext_onnx)
endif()
if (NOT TARGET onnnx::libonnx_proto)
add_library(onnx::libonnx_proto UNKNOWN IMPORTED)
set_target_properties(onnx::libonnx_proto PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${ONNX_PROTO_INCLUDE_DIR}
IMPORTED_LOCATION ${ONNX_PROTO_LIBRARY})
add_dependencies(onnx::libonnx_proto ext_onnx)
endif()
......@@ -119,3 +119,6 @@ if (NOT TARGET protobuf::protoc)
IMPORTED_LOCATION "${Protobuf_PROTOC_EXECUTABLE}")
add_dependencies(protobuf::protoc ext_protobuf)
endif()
set(Protobuf_FOUND)
set(PROTOBUF_FOUND)
......@@ -14,26 +14,13 @@
# limitations under the License.
# ******************************************************************************
set(ONNX_SOURCE_URL "https://raw.githubusercontent.com/onnx/onnx/v1.1.2/onnx/onnx.proto")
set_source_files_properties(onnx.pb.h onnx.pb.cc PROPERTIES GENERATED TRUE)
if (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/onnx.proto")
file(DOWNLOAD ${ONNX_SOURCE_URL} ${CMAKE_CURRENT_BINARY_DIR}/onnx.proto)
endif()
add_custom_command(OUTPUT onnx.pb.cc onnx.pb.h
COMMAND protobuf::protoc --cpp_out ${CMAKE_CURRENT_BINARY_DIR} --proto_path ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/onnx.proto
DEPENDS onnx.proto)
add_library(onnx_import_interface OBJECT
onnx.cpp
onnx.hpp
onnx.pb.h
onnx.proto)
onnx.hpp)
target_include_directories(onnx_import_interface PRIVATE ${ONNX_PROTO_INCLUDE_DIR})
add_library(onnx_import STATIC
onnx.pb.cc
core/attribute.cpp
core/attribute.hpp
core/graph.cpp
......@@ -68,12 +55,12 @@ add_dependencies(onnx_import onnx_import_interface)
if (NOT NGRAPH_USE_SYSTEM_PROTOBUF)
add_dependencies(onnx_import_interface protobuf::libprotobuf)
add_dependencies(onnx_import protobuf::libprotobuf)
add_dependencies(onnx_import_interface onnx::libonnx_proto)
endif()
set_property(TARGET onnx_import PROPERTY POSITION_INDEPENDENT_CODE ON)
target_include_directories(onnx_import PUBLIC ${CMAKE_CURRENT_BINARY_DIR} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${NGRAPH_INCLUDE_PATH} ${Protobuf_INCLUDE_DIR})
target_link_libraries(onnx_import PRIVATE ${Protobuf_LIBRARIES})
target_include_directories(onnx_import PUBLIC ${CMAKE_CURRENT_BINARY_DIR} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${NGRAPH_INCLUDE_PATH} ${ONNX_PROTO_INCLUDE_DIR} ${Protobuf_INCLUDE_DIR})
target_link_libraries(onnx_import PRIVATE ${Protobuf_LIBRARIES} ${ONNX_PROTO_LIBRARY})
set_property(TARGET onnx_import_interface PROPERTY POSITION_INDEPENDENT_CODE ON)
target_include_directories(onnx_import_interface PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
......
......@@ -17,6 +17,9 @@
add_library(onnxifi-ngraph SHARED onnxifi.cpp)
target_link_libraries(onnxifi-ngraph PRIVATE ngraph)
add_dependencies(onnxifi-ngraph onnx::libonnx)
target_include_directories(onnxifi-ngraph PRIVATE ${ONNX_INCLUDE_DIR})
set(ONNXIFI_VERSION ${NGRAPH_VERSION})
set(ONNXIFI_ABI_VERSION 1)
......
/*******************************************************************************
* Copyright 2017-2018 Intel Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
#include <cstdint>
#include <onnxifi.h>
extern "C" {
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI
onnxGetBackendIDs(onnxBackendID* backendIDs, std::size_t* numBackends)
{
if ((backendIDs == nullptr) || (numBackends == nullptr))
{
return ONNXIFI_STATUS_INVALID_POINTER;
}
return ONNXIFI_STATUS_INTERNAL_ERROR;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI
onnxReleaseBackendID(onnxBackendID backendID)
{
return ONNXIFI_STATUS_INTERNAL_ERROR;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI onnxGetBackendInfo(
onnxBackendID backendID, onnxBackendInfo infoType, void* infoValue, std::size_t* infoValueSize)
{
return ONNXIFI_STATUS_BACKEND_UNAVAILABLE;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI onnxGetBackendCompatibility(
onnxBackendID backendID, std::size_t onnxModelSize, const void* onnxModel)
{
return ONNXIFI_STATUS_BACKEND_UNAVAILABLE;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI onnxInitBackend(
onnxBackendID backendID, const uint64_t* auxPropertiesList, onnxBackend* backend)
{
return ONNXIFI_STATUS_BACKEND_UNAVAILABLE;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI onnxReleaseBackend(onnxBackend backend)
{
return ONNXIFI_STATUS_INTERNAL_ERROR;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI onnxInitEvent(onnxBackend backend,
onnxEvent* event)
{
return ONNXIFI_STATUS_BACKEND_UNAVAILABLE;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI onnxSignalEvent(onnxEvent event)
{
return ONNXIFI_STATUS_BACKEND_UNAVAILABLE;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI onnxWaitEvent(onnxEvent event)
{
return ONNXIFI_STATUS_BACKEND_UNAVAILABLE;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI onnxReleaseEvent(onnxEvent event)
{
return ONNXIFI_STATUS_INTERNAL_ERROR;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI
onnxInitGraph(onnxBackend backend,
std::size_t onnxModelSize,
const void* onnxModel,
std::uint32_t weightsCount,
const onnxTensorDescriptor* weightDescriptors,
onnxGraph* graph)
{
return ONNXIFI_STATUS_BACKEND_UNAVAILABLE;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI
onnxSetGraphIO(onnxGraph graph,
std::uint32_t inputsCount,
const onnxTensorDescriptor* inputDescriptors,
std::uint32_t outputsCount,
const onnxTensorDescriptor* outputDescriptors)
{
return ONNXIFI_STATUS_BACKEND_UNAVAILABLE;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI
onnxRunGraph(onnxGraph graph, const onnxMemoryFence* inputFence, onnxMemoryFence* outputFence)
{
return ONNXIFI_STATUS_BACKEND_UNAVAILABLE;
}
ONNXIFI_PUBLIC ONNXIFI_CHECK_RESULT onnxStatus ONNXIFI_ABI onnxReleaseGraph(onnxGraph graph)
{
return ONNXIFI_STATUS_INTERNAL_ERROR;
}
} /* extern "C" */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment