1/* 2* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd. 3* Licensed under the Apache License, Version 2.0 (the "License"); 4* you may not use this file except in compliance with the License. 5* You may obtain a copy of the License at 6* 7* http://www.apache.org/licenses/LICENSE-2.0 8* 9* Unless required by applicable law or agreed to in writing, software 10* distributed under the License is distributed on an "AS IS" BASIS, 11* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12* See the License for the specific language governing permissions and 13* limitations under the License. 14*/ 15const path = require('path'); 16 17class Tool { 18 constructor() { 19 20 } 21 static CURRENT_TOOL_PATH = null;//生成工具或插件所在路径,用于找到res 22 static OHOS_PROJECT_PATH = "/home/xx/ohos"; 23 static OHOS_PORTING_TO = "third_party/opencv"; 24 static OHOS_PRODUCT_OUTPUT_PATH = "out/rk3568-khdvk";//输出目录 25 static OHOS_SUBSYSTEM_NAME = "common"; 26 static OHOS_PART_NAME = "common"; 27 28 static getResAbsPath(respath) { 29 return path.join(Tool.CURRENT_TOOL_PATH, respath); 30 } 31 static getCMakeToolchain() { 32 switch (process.platform) { 33 case 'win32': 34 return path.join(Tool.CURRENT_TOOL_PATH, "res/win64/ohos.toolchain.cmake"); 35 case 'linux': 36 return path.join(Tool.CURRENT_TOOL_PATH, "res/linux/ohos.toolchain.cmake"); 37 default: 38 Logger.err("不支持 %s 平台".format(process.platform)); 39 return ""; 40 } 41 } 42 static getMakeRaw() { 43 switch (process.platform) { 44 case 'win32': 45 return path.join(Tool.CURRENT_TOOL_PATH, "res/win64/bin/make_raw.exe"); 46 case 'linux': 47 return path.join(Tool.CURRENT_TOOL_PATH, "res/linux/bin/make_raw"); 48 default: 49 Logger.err("不支持 %s 平台".format(process.platform)); 50 return ""; 51 } 52 } 53 static getMake() { 54 switch (process.platform) { 55 case 'win32': 56 return path.join(Tool.CURRENT_TOOL_PATH, "res/win64/bin/make.exe"); 57 case 'linux': 58 return path.join(Tool.CURRENT_TOOL_PATH, "res/linux/bin/make"); 59 default: 60 Logger.err("不支持 %s 平台".format(process.platform)); 61 return ""; 62 } 63 } 64 static getCMake() { 65 switch (process.platform) { 66 case 'win32': 67 return path.join(Tool.OHOS_PROJECT_PATH, "prebuilts/cmake/windows-x86/bin/cmake.exe"); 68 case 'linux': 69 return path.join(Tool.OHOS_PROJECT_PATH, "prebuilts/cmake/linux-x86/bin/cmake"); 70 default: 71 Logger.err("不支持 %s 平台".format(process.platform)); 72 return ""; 73 } 74 75 } 76 static swapPath(p, swapd) { 77 while (p.indexOf("\\") >= 0) { 78 p = p.replace("\\", "/"); 79 } 80 return p; 81 } 82 83 static DIRECTORY_STACK = []; 84 static pushd(path) { 85 path = Tool.swapPath(path, false); 86 Tool.DIRECTORY_STACK.push(process.cwd()); 87 process.chdir(path); 88 } 89 static popd() { 90 let d = Tool.DIRECTORY_STACK.pop(); 91 if (d) { 92 process.chdir(d); 93 } 94 } 95 static BACKUP_DIRECTORY = []; 96 static backupd(bkp) { 97 Tool.BACKUP_DIRECTORY[bkp] = Tool.DIRECTORY_STACK.concat([process.cwd()]); 98 } 99 static recoverd(bkp) { 100 Tool.DIRECTORY_STACK = [].concat(Tool.BACKUP_DIRECTORY[bkp]) 101 Tool.popd(); 102 } 103 104 static TARGET_TYPE = { 105 NONE: 0, 106 MAKE: 1, 107 GN: 2, 108 CMAKE: 3, 109 SCONS: 4, 110 VS: 5, 111 } 112 static GENERATE_TARGET_TYPE = Tool.TARGET_TYPE.GN; 113 114 static setTarget(type) {//设置生成目标 115 Tool.GENERATE_TARGET_TYPE = type; 116 } 117 static generateTarget(projectPath, analyzeResult) { 118 switch (Tool.GENERATE_TARGET_TYPE) { 119 case Tool.TARGET_TYPE.NONE: 120 break; 121 case Tool.TARGET_TYPE.GN: 122 const { GenerateGn } = require('./generate_gn'); 123 GenerateGn.generate(projectPath, analyzeResult); 124 break; 125 default: 126 Logger.err("generate target not support"); 127 break; 128 } 129 } 130 131 static MOCK_ENUM = { 132 NO_MOCK: 1, 133 MOCK_RECORD: 2, 134 MOCK_RUN: 3, 135 }; 136 static MOCK_TYPE = Tool.MOCK_ENUM.NO_MOCK; 137} 138 139String.prototype.format = function (...args) { 140 var result = this; 141 let reg = new RegExp("%[sd]{1}") 142 for (let i = 0; i < args.length; i++) { 143 let p = result.search(reg) 144 if (p < 0) break; 145 result = result.substring(0, p) + args[i] + result.substring(p + 2, result.length) 146 } 147 return result; 148} 149 150try { 151 Tool.VSCODE_INST = require('vscode'); 152} 153catch (err) { 154 Tool.VSCODE_INST = null; 155} 156 157module.exports = { 158 Tool 159} 160 161 162const Logger = require('./logger');