summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts')
-rw-r--r--fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts119
1 files changed, 119 insertions, 0 deletions
diff --git a/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts
new file mode 100644
index 000000000..9170a75d3
--- /dev/null
+++ b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/test-tools/wamr-ide/VSCode-Extension/src/utilities/lldbUtilities.ts
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2022 Amazon.com Inc. or its affiliates. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ */
+
+import * as vscode from 'vscode';
+import * as os from 'os';
+import * as path from 'path';
+import * as fs from 'fs';
+import {
+ checkIfFileExists,
+ downloadFile,
+ unzipFile,
+} from './directoryUtilities';
+import { SelectionOfPrompt } from '../constants';
+
+const LLDB_RESOURCE_DIR = 'resource/debug';
+const LLDB_OS_DOWNLOAD_URL_SUFFIX_MAP: Partial<
+ Record<NodeJS.Platform, string>
+> = {
+ linux: 'x86_64-ubuntu-20.04',
+ darwin: 'universal-macos-latest',
+};
+
+const WAMR_LLDB_NOT_SUPPORTED_ERROR = new Error(
+ 'WAMR LLDB is not supported on this platform'
+);
+
+function getLLDBUnzipFilePath(destinationFolder: string, filename: string) {
+ const dirs = filename.split('/');
+ if (dirs[0] === 'wamr-lldb') {
+ dirs.shift();
+ }
+
+ return path.join(destinationFolder, ...dirs);
+}
+
+export function getWAMRExtensionVersion(
+ context: vscode.ExtensionContext
+): string {
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
+ return require(path.join(context.extensionPath, 'package.json')).version;
+}
+
+function getLLDBDownloadUrl(context: vscode.ExtensionContext): string {
+ const wamrVersion = getWAMRExtensionVersion(context);
+ const lldbOsUrlSuffix = LLDB_OS_DOWNLOAD_URL_SUFFIX_MAP[os.platform()];
+
+ if (!lldbOsUrlSuffix) {
+ throw WAMR_LLDB_NOT_SUPPORTED_ERROR;
+ }
+
+ return `https://github.com/bytecodealliance/wasm-micro-runtime/releases/download/WAMR-${wamrVersion}/wamr-lldb-${wamrVersion}-${lldbOsUrlSuffix}.zip`;
+}
+
+export function isLLDBInstalled(context: vscode.ExtensionContext): boolean {
+ const extensionPath = context.extensionPath;
+ const lldbOSDir = os.platform();
+ const lldbBinaryPath = path.join(
+ extensionPath,
+ LLDB_RESOURCE_DIR,
+ lldbOSDir,
+ 'bin',
+ 'lldb'
+ );
+ return checkIfFileExists(lldbBinaryPath);
+}
+
+export async function promptInstallLLDB(
+ context: vscode.ExtensionContext
+): Promise<SelectionOfPrompt> {
+ const extensionPath = context.extensionPath;
+
+ const response = await vscode.window.showWarningMessage(
+ 'No LLDB instance found. Setup now?',
+ SelectionOfPrompt.setUp,
+ SelectionOfPrompt.skip
+ );
+
+ if (response === SelectionOfPrompt.skip) {
+ return response;
+ }
+
+ const downloadUrl = getLLDBDownloadUrl(context);
+ const destinationDir = os.platform();
+
+ if (!downloadUrl) {
+ throw WAMR_LLDB_NOT_SUPPORTED_ERROR;
+ }
+
+ const lldbDestinationFolder = path.join(
+ extensionPath,
+ LLDB_RESOURCE_DIR,
+ destinationDir
+ );
+ const lldbZipPath = path.join(lldbDestinationFolder, 'bundle.zip');
+
+ vscode.window.showInformationMessage(`Downloading LLDB...`);
+
+ await downloadFile(downloadUrl, lldbZipPath);
+
+ vscode.window.showInformationMessage(
+ `LLDB downloaded to ${lldbZipPath}. Installing...`
+ );
+
+ const lldbFiles = await unzipFile(lldbZipPath, filename =>
+ getLLDBUnzipFilePath(lldbDestinationFolder, filename)
+ );
+ // Allow execution of lldb
+ lldbFiles.forEach(file => fs.chmodSync(file, '0775'));
+
+ vscode.window.showInformationMessage(
+ `LLDB installed at ${lldbDestinationFolder}`
+ );
+
+ // Remove the bundle.zip
+ fs.unlinkSync(lldbZipPath);
+ return SelectionOfPrompt.setUp;
+}