| Index: tests/standalone/precompilation_test.dart
|
| diff --git a/tests/standalone/precompilation_test.dart b/tests/standalone/precompilation_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4e8d491d6767516f0347d1be149debae271eed02
|
| --- /dev/null
|
| +++ b/tests/standalone/precompilation_test.dart
|
| @@ -0,0 +1,81 @@
|
| +// Copyright (c) 2015, 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.
|
| +
|
| +// Test generating and running a simple precompiled snapshot of this script.
|
| +
|
| +import 'dart:io';
|
| +
|
| +main(List args) {
|
| + if (!Platform.isLinux) {
|
| + print("Linux only test");
|
| + return;
|
| + }
|
| + if (args.length > 0 && args[0] == "--hello") {
|
| + print("Hello");
|
| + return;
|
| + }
|
| + var dart_executable =
|
| + Directory.current.path + Platform.pathSeparator + Platform.executable;
|
| + Directory tmp;
|
| + try {
|
| + tmp = Directory.current.createTempSync("temp_precompilation_test");
|
| + var result = Process.runSync(
|
| + "${dart_executable}_no_snapshot",
|
| + ["--gen-precompiled-snapshot", Platform.script.path],
|
| + workingDirectory: tmp.path);
|
| + if (result.exitCode != 0) {
|
| + print(result.stdout);
|
| + print(result.stderr);
|
| + throw "Snapshot generation failed.";
|
| + }
|
| +
|
| + // Check if gcc is present, and skip test if it is not.
|
| + try {
|
| + result = Process.runSync(
|
| + "gcc",
|
| + ["--version"],
|
| + workingDirectory: tmp.path);
|
| + if (result.exitCode != 0) {
|
| + throw "gcc --version failed.";
|
| + }
|
| + } catch(e) {
|
| + print("Skipping test because gcc is not present: $e");
|
| + return;
|
| + }
|
| +
|
| + // Detect if we're running a 32- or 64-bit VM.
|
| + result = Process.runSync( "file", [dart_executable]);
|
| + if (result.exitCode != 0) {
|
| + print(result.stdout);
|
| + print(result.stderr);
|
| + throw "'file $dart_executable' failed.";
|
| + }
|
| + var m_option = result.stdout.contains("32-bit") ? "-m32" : "-m64";
|
| +
|
| + result = Process.runSync(
|
| + "gcc",
|
| + ["-shared", m_option, "-o", "libprecompiled.so", "precompiled.S"],
|
| + workingDirectory: tmp.path);
|
| + if (result.exitCode != 0) {
|
| + print(result.stdout);
|
| + print(result.stderr);
|
| + throw "Shared library creation failed!";
|
| + }
|
| + result = Process.runSync(
|
| + "${dart_executable}",
|
| + ["--run-precompiled-snapshot", "ignored_script", "--hello"],
|
| + workingDirectory: tmp.path);
|
| + if (result.exitCode != 0) {
|
| + print(result.stdout);
|
| + print(result.stderr);
|
| + throw "Precompiled binary failed.";
|
| + }
|
| + print(result.stdout);
|
| + if (result.stdout != "Hello\n") {
|
| + throw "Precompiled binary output mismatch.";
|
| + }
|
| + } finally {
|
| + tmp?.deleteSync(recursive: true);
|
| + }
|
| +}
|
|
|