| // Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| import 'dart:ffi'; | |
| import 'dart:io'; | |
| import "utils/io_utils.dart"; | |
| void main(List<String> args) { | |
| Uri dart = repoDir.resolve( | |
| "tools/sdks/dart-sdk/bin/dart${Platform.isWindows ? ".exe" : ""}", | |
| ); | |
| if (!new File.fromUri(dart).existsSync()) { | |
| throw "Couldn't find $dart executable."; | |
| } | |
| Uri d8 = repoDir.resolve(_d8executable); | |
| if (!new File.fromUri(d8).existsSync()) { | |
| throw "Couldn't find $d8 executable."; | |
| } | |
| Uri fileHelper = repoDir.resolve( | |
| "pkg/front_end/test/web_parser_git_test_helper.dart", | |
| ); | |
| if (!new File.fromUri(fileHelper).existsSync()) { | |
| throw "Couldn't find $fileHelper file."; | |
| } | |
| Directory tempDir = Directory.systemTemp.createTempSync("web_parser_test"); | |
| try { | |
| Uri outFile = tempDir.uri.resolve("out.js"); | |
| ProcessResult dartRun = Process.runSync(dart.toFilePath(), [ | |
| "compile", | |
| "js", | |
| "--output", | |
| outFile.toFilePath(), | |
| "--enable-asserts", | |
| fileHelper.toFilePath(), | |
| ]); | |
| if (dartRun.exitCode != 0) { | |
| throw "---\n" | |
| "Dart run returned ${dartRun.exitCode}.\n" | |
| "stdout: ${dartRun.stdout}\n\n" | |
| "stderr: ${dartRun.stderr}" | |
| "---"; | |
| } | |
| ProcessResult d8Run = Process.runSync(d8.toFilePath(), [ | |
| outFile.toFilePath(), | |
| ]); | |
| if (d8Run.exitCode != 0) { | |
| throw "---\n" | |
| "D8 run returned ${d8Run.exitCode}.\n" | |
| "stdout: ${d8Run.stdout}\n\n" | |
| "stderr: ${d8Run.stderr}\n" | |
| "---"; | |
| } | |
| } finally { | |
| tempDir.deleteSync(recursive: true); | |
| } | |
| } | |
| final Uri repoDir = computeRepoDirUri(); | |
| String get _d8executable { | |
| final arch = Abi.current().toString().split('_')[1]; | |
| if (Platform.isWindows) { | |
| return 'third_party/d8/windows/$arch/d8.exe'; | |
| } else if (Platform.isLinux) { | |
| return 'third_party/d8/linux/$arch/d8'; | |
| } else if (Platform.isMacOS) { | |
| return 'third_party/d8/macos/$arch/d8'; | |
| } | |
| throw UnsupportedError('Unsupported platform.'); | |
| } |