• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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');