/** * @license * Copyright 2018 Google LLC. All Rights Reserved. * 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. * ============================================================================= */ const os = require('os'); const fs = require('fs'); const join = require('path').join; const module_path_napi = require('../package.json').binary.module_path; const modulePath = module_path_napi.replace('{napi_build_version}', process.versions.napi); /** Version of the libtensorflow shared library to depend on. */ const LIBTENSORFLOW_VERSION = '2.9.1'; /** Map the os.arch() to arch string in a file name */ const ARCH_MAPPING = { 'x64': 'x86_64', 'arm64': 'arm64' }; /** Map the os.platform() to the platform value in a file name */ const PLATFORM_MAPPING = { 'darwin': 'darwin', 'linux': 'linux', 'win32': 'windows' }; /** The extension of a compressed file */ const PLATFORM_EXTENSION = os.platform() === 'win32' ? 'zip' : 'tar.gz'; /** * Current supported type, platform and architecture combinations * `tf-lib` represents tensorflow shared libraries and `binding` represents * node binding. */ const ALL_SUPPORTED_COMBINATION = [ 'cpu-darwin-x86_64', 'gpu-linux-x86_64', 'cpu-linux-x86_64', 'cpu-windows-x86_64', 'gpu-windows-x86_64' ]; /** Get the MAJOR.MINOR-only version of libtensorflow. */ function getLibTensorFlowMajorDotMinorVersion() { const items = LIBTENSORFLOW_VERSION.split('.'); if (items.length < 3) { throw new Error( `Invalid version string for libtensorflow: ${LIBTENSORFLOW_VERSION}`); } return `${items[0]}.${items[1]}`; } // Determine constants for deps folder names and destination (build) path names. let depsLibTensorFlowName = 'libtensorflow'; let depsLibTensorFlowFrameworkName = 'libtensorflow_framework'; let destLibTensorFlowName = depsLibTensorFlowName; let destLibTensorFlowFrameworkName = depsLibTensorFlowFrameworkName; if (os.platform() === 'win32') { depsLibTensorFlowName = 'tensorflow.dll'; depsLibTensorFlowFrameworkName = ''; // Not supported on Windows destLibTensorFlowName = depsLibTensorFlowName; destLibTensorFlowFrameworkName = ''; // Not supported on Windows } else if (os.platform() === 'darwin') { depsLibTensorFlowName += '.dylib'; depsLibTensorFlowFrameworkName += '.dylib'; destLibTensorFlowName = depsLibTensorFlowName; destLibTensorFlowFrameworkName = depsLibTensorFlowFrameworkName; } else if (os.platform() === 'linux') { // Linux has a hard-coded version number, make the destination name simpler: depsLibTensorFlowName += `.so.${LIBTENSORFLOW_VERSION}`; depsLibTensorFlowFrameworkName += `.so.${LIBTENSORFLOW_VERSION}`; destLibTensorFlowName += '.so'; destLibTensorFlowFrameworkName += '.so'; } else { throw new Error('Unsupported platform: ' + os.platform()); } const depsPath = join(__dirname, '..', 'deps'); const depsLibPath = join(depsPath, 'lib'); const depsLibTensorFlowPath = join(depsLibPath, depsLibTensorFlowName); const depsLibTensorFlowFrameworkPath = join(depsLibPath, depsLibTensorFlowFrameworkName); // Get information for custom binary const CUSTOM_BINARY_FILENAME = 'custom-binary.json'; function loadCustomBinary() { const cfg = join(__dirname, CUSTOM_BINARY_FILENAME); return fs.existsSync(cfg) ? require(cfg) : {}; } const customBinaries = loadCustomBinary(); module.exports = { depsPath, depsLibPath, depsLibTensorFlowFrameworkName, depsLibTensorFlowFrameworkPath, depsLibTensorFlowName, depsLibTensorFlowPath, destLibTensorFlowFrameworkName, destLibTensorFlowName, getLibTensorFlowMajorDotMinorVersion, modulePath, LIBTENSORFLOW_VERSION, ARCH_MAPPING, PLATFORM_MAPPING, PLATFORM_EXTENSION, ALL_SUPPORTED_COMBINATION, customTFLibUri : customBinaries['tf-lib'], customAddon : customBinaries['addon'] };