Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CMake build #70

Closed
wants to merge 19 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
55606a7
Add node headers as submodules
vishniakov-nikolai Nov 27, 2023
734e487
Build nodejs bindings using cmake
vishniakov-nikolai Nov 27, 2023
e8d4b6b
Remove extra scripts
vishniakov-nikolai Nov 27, 2023
8163bad
Add .npmignore
vishniakov-nikolai Nov 27, 2023
4232b06
Replace submodules by cmake FetchContent
vishniakov-nikolai Nov 29, 2023
752f7ba
Replace path to package in tests
vishniakov-nikolai Nov 29, 2023
1499b75
Add task that exports compiled bindings
vishniakov-nikolai Nov 29, 2023
950a2ec
Fix cmake, update README
vishniakov-nikolai Nov 29, 2023
9e51e35
Revert and adapt download runtime scrips
vishniakov-nikolai Nov 29, 2023
28e0a14
Merge branch 'master' into feature/cmake-build
vishniakov-nikolai Nov 30, 2023
15ec488
Merge branch 'js-wasm-proto' into feature/cmake-build
vishniakov-nikolai Nov 30, 2023
22556ee
Adapt download_binaries script
vishniakov-nikolai Dec 5, 2023
da66821
Update download binaries script and package.json info
vishniakov-nikolai Dec 5, 2023
9d4056a
Merge branch 'js-wasm-proto' into feature/cmake-build
vishniakov-nikolai Dec 5, 2023
7dd39ae
Fix instruction
vishniakov-nikolai Dec 5, 2023
bc1e460
Merge branch 'master' into feature/cmake-build
vishniakov-nikolai Dec 12, 2023
a8a31a5
Merge branch 'js-wasm-proto' into feature/cmake-build
vishniakov-nikolai Dec 12, 2023
a6c3a3b
Merge branch 'js-wasm-proto' into feature/cmake-build
vishniakov-nikolai Dec 12, 2023
b008ffd
Merge branch 'js-wasm-proto' into feature/cmake-build
vishniakov-nikolai Dec 13, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/bindings/js/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@

project(OpenVINO_JS_API)

add_subdirectory(node)
ov_option(ENABLE_NODEJS "Enables OpenVINO Node.js API build" OFF)

if(ENABLE_JS)
add_subdirectory(node)
endif()
13 changes: 13 additions & 0 deletions src/bindings/js/node/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
build
include
lib
src
tests
thirdparty

.eslintrc.js
CMakeLists.txt
tsconfig.json

**/*.tsbuildinfo
*.tgz
66 changes: 65 additions & 1 deletion src/bindings/js/node/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,68 @@
# SPDX-License-Identifier: Apache-2.0
#

execute_process(COMMAND npm --prefix ${OpenVINO_SOURCE_DIR}/src/bindings/js/node install)
project(ov_node_addon)

set(CMAKE_CXX_STANDARD 17)
add_definitions(-DNAPI_VERSION=6)

include(FetchContent)

FetchContent_Declare(
node-api-headers
URL https://github.com/nodejs/node-api-headers/archive/refs/tags/v1.1.0.tar.gz
URL_HASH SHA256=70608bc1e6dddce280285f3462f18a106f687c0720a4b90893e1ecd86e5a8bbf
)
FetchContent_MakeAvailable(node-api-headers)

FetchContent_Declare(
node-addon-api
URL https://github.com/nodejs/node-addon-api/archive/refs/tags/v7.0.0.tar.gz
URL_HASH SHA256=e0cf2ef9bed9965ac8f498b4a7007b9f0002fa022c1ff665f256ab54260d6305
)
FetchContent_MakeAvailable(node-addon-api)
set(CMAKE_SKIP_INSTALL_RPATH OFF)
add_library(${PROJECT_NAME} SHARED
src/node_output.cpp
src/async_reader.cpp
src/preprocess/preprocess.cpp
src/preprocess/pre_post_process_wrap.cpp
src/preprocess/preprocess_steps.cpp
src/preprocess/input_info.cpp
src/preprocess/output_info.cpp
src/preprocess/input_tensor_info.cpp
src/preprocess/output_tensor_info.cpp
src/preprocess/input_model_info.cpp
src/preprocess/resize_algorithm.cpp
src/errors.cpp
src/helper.cpp
src/tensor.cpp
src/infer_request.cpp
src/compiled_model.cpp
src/core_wrap.cpp
src/model_wrap.cpp
src/addon.cpp
src/element_type.cpp
src/partial_shape_wrap.cpp
)

target_include_directories(${PROJECT_NAME} PRIVATE
"${node-api-headers_SOURCE_DIR}/include"
"${node-addon-api_SOURCE_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}/include"
)

target_link_libraries(${PROJECT_NAME} PRIVATE openvino::runtime)

set_target_properties(${PROJECT_NAME} PROPERTIES
INSTALL_RPATH "$ORIGIN/"
PREFIX ""
SUFFIX ".node"
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH_USE_LINK_PATH FALSE
)

install(TARGETS ${PROJECT_NAME}
LIBRARY DESTINATION . COMPONENT ${PROJECT_NAME} EXCLUDE_FROM_ALL
RUNTIME DESTINATION . COMPONENT ${PROJECT_NAME} EXCLUDE_FROM_ALL
)
15 changes: 12 additions & 3 deletions src/bindings/js/node/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,18 @@
- [src](./src/) - C++ sources for current API.
- [tests](./tests/) - tests directory for current API.

## Installation

- Run `npm install` from current directory
## Build

- Make sure that all submodules are updated `git submodule update --init --recursive`
- Build **openvino** with flag `-DENABLE_JS=ON`
- From build directory run `cmake -DCOMPONENT=ov_node_addon -DCMAKE_INSTALL_PREFIX=../src/bindings/js/node/bin/ -P cmake_install.cmake`
- Copy openvino shared libraries into `src/bindings/js/node/bin`:
`cp ../bin/intel64/Release/libopenvino_ir_frontend.so.2023.3.0 ../src/bindings/js/node/bin`
`cp ../bin/intel64/Release/libopenvino_ir_frontend.so.2330 ../src/bindings/js/node/bin`
`cp ../bin/intel64/Release/libopenvino.so.2330 ../src/bindings/js/node/bin`
`cp ../bin/intel64/Release/libopenvino.so.2023.3.0 ../src/bindings/js/node/bin`
- Now you can install dependencies packages `npm install`
- Run tests `npm run test` to make sure that **openvinojs-node** built successfully

## Usage

Expand Down
79 changes: 0 additions & 79 deletions src/bindings/js/node/binding.gyp

This file was deleted.

20 changes: 1 addition & 19 deletions src/bindings/js/node/lib/addon.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
import os from 'node:os';
import path from 'node:path';

type SupportedTypedArray =
| Int8Array
| Uint8Array
Expand Down Expand Up @@ -175,22 +172,7 @@ export interface NodeAddon {
element: typeof element,
}

setPath();

export default
// eslint-disable-next-line @typescript-eslint/no-var-requires
require('../build/Release/ov_node_addon.node') as
require('../bin/ov_node_addon.node') as
NodeAddon;

function setPath() {
const { delimiter } = path;

if (os.platform() === 'win32')
process.env.PATH = [
process.env.PATH,
path.join(__dirname,
...'../ov_runtime/runtime/bin/intel64/Release'.split('/')),
path.join(__dirname,
...'../ov_runtime/runtime/3rdparty/tbb/bin'.split('/')),
].join(delimiter) + delimiter;
}
Loading
Loading