Remove sky_snapshot sources (#3471)

* Remove sky_snapshot sources

* update licenses
This commit is contained in:
Michael Goderbauer 2017-03-14 10:24:17 -07:00 committed by GitHub
parent aa2c2449c4
commit cd417b0519
7 changed files with 28 additions and 383 deletions

View File

@ -15,8 +15,6 @@ group("flutter") {
"//flutter/examples",
"//flutter/flow",
"//flutter/runtime",
"//flutter/snapshotter",
"//flutter/snapshotter($host_toolchain)",
]
}

View File

@ -58,9 +58,14 @@ template("flutter_app") {
bundle_name = "${target_name}.flx"
}
flutter_snapshot_label = "//flutter/snapshotter($host_toolchain)"
flutter_snapshot_label = "//dart/runtime/bin:gen_snapshot($host_toolchain)"
flutter_snapshot_dir = get_label_info(flutter_snapshot_label, "root_out_dir")
flutter_snapshot = "$flutter_snapshot_dir/sky_snapshot"
flutter_snapshot = "$flutter_snapshot_dir/gen_snapshot"
flutter_core_snapshot_label = "//flutter/lib/snapshot:generate_snapshot_bin"
flutter_core_snapshot_gen_dir = get_label_info(flutter_core_snapshot_label, "target_gen_dir")
flutter_core_snapshot_vm_data = "$flutter_core_snapshot_gen_dir/vm_isolate_snapshot.bin"
flutter_core_snapshot_isolate_data = "$flutter_core_snapshot_gen_dir/isolate_snapshot.bin"
dart_binary_label = "//dart/runtime/bin:dart($host_toolchain)"
dart_binary_dir = get_label_info(dart_binary_label, "root_out_dir")
@ -102,23 +107,26 @@ template("flutter_app") {
args = [
"--snapshotter-path",
rebase_path(flutter_snapshot),
"--app-dir",
rebase_path("."),
"--vm-snapshot-data",
rebase_path(flutter_core_snapshot_vm_data),
"--isolate-snapshot-data",
rebase_path(flutter_core_snapshot_isolate_data),
"--main-dart",
rebase_path(main_dart),
"--packages",
rebase_path(dot_packages),
"--snapshot",
rebase_path(snapshot_path),
rebase_path(snapshot_path, root_build_dir),
"--depfile",
rebase_path(depfile_path),
"--build-output",
rebase_path(snapshot_path, root_build_dir),
"--root-build-dir",
rebase_path(root_build_dir),
]
deps = [
":$dart_package_name",
flutter_snapshot_label,
flutter_core_snapshot_label,
]
if (defined(invoker.deps)) {

View File

@ -14,29 +14,33 @@ def main():
parser.add_argument('--snapshotter-path', type=str, required=True,
help='The Flutter snapshotter')
parser.add_argument('--app-dir', type=str, required=True,
help='The root of the app')
parser.add_argument('--vm-snapshot-data', type=str, required=True,
help='Path to vm_isolate_snapshot.bin')
parser.add_argument('--isolate-snapshot-data', type=str, required=True,
help='Path to isolate_snapshot.bin')
parser.add_argument('--main-dart', type=str, required=True,
help='The main.dart file to use')
parser.add_argument('--packages', type=str, required=True,
help='The package map to use')
parser.add_argument('--snapshot', type=str, required=True,
help='Path to application snapshot')
help='Where to output application snapshot')
parser.add_argument('--depfile', type=str, required=True,
help='Where to output dependency information')
parser.add_argument('--build-output', type=str, required=True,
help='Target name used in the depfile')
parser.add_argument('--root-build-dir', type=str, required=True,
help='The root build dir for --depfile and --snapshot')
args = parser.parse_args()
result = subprocess.call([
args.snapshotter_path,
'--snapshot_kind=script',
'--vm_snapshot_data=%s' % args.vm_snapshot_data,
'--isolate_snapshot_data=%s' % args.isolate_snapshot_data,
'--packages=%s' % args.packages,
'--snapshot=%s' % args.snapshot,
'--depfile=%s' % args.depfile,
'--build-output=%s' % args.build_output,
'--script_snapshot=%s' % args.snapshot,
'--dependencies=%s' % args.depfile,
args.main_dart,
], cwd=args.app_dir)
], cwd=args.root_build_dir)
return result

View File

@ -14,8 +14,4 @@ group("sky") {
if (!is_fuchsia) {
deps += [ "//flutter/shell" ]
}
if (dart_host_toolchain == host_toolchain) {
deps += [ "//flutter/snapshotter($dart_host_toolchain)" ]
}
}

View File

@ -1,30 +0,0 @@
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
executable("snapshotter") {
output_name = "sky_snapshot"
sources = [
"main.cc",
]
deps = [
"//dart/runtime:libdart",
"//dart/runtime/vm:libdart_platform",
"//flutter/lib/snapshot",
"//lib/ftl",
"//lib/tonic/converter",
"//lib/tonic/file_loader",
]
if (!is_ios && !is_mac && !is_fuchsia) {
ldflags = [
# libgcc_s is not a DT_NEEDED library; it normally gets loaded implicitly.
# This flag ensures that rpath is referenced when searching for
# the so, which in turn gets the resulting sky_snapshot binary
# closer to being able to run in Google's production environment.
"-lgcc_s",
]
}
}

View File

@ -1,330 +0,0 @@
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <fcntl.h>
#include <iostream>
#include <set>
#include <string>
#include "dart/runtime/include/dart_api.h"
#include "dart/runtime/include/dart_native_api.h"
#include "dart/runtime/include/dart_tools_api.h"
#include "lib/ftl/arraysize.h"
#include "lib/ftl/command_line.h"
#include "lib/ftl/files/directory.h"
#include "lib/ftl/files/eintr_wrapper.h"
#include "lib/ftl/files/file_descriptor.h"
#include "lib/ftl/files/file.h"
#include "lib/ftl/files/symlink.h"
#include "lib/ftl/files/unique_fd.h"
#include "lib/ftl/logging.h"
#include "lib/tonic/converter/dart_converter.h"
#include "lib/tonic/file_loader/file_loader.h"
extern "C" {
extern const uint8_t kDartVmSnapshotData[];
extern const uint8_t kDartVmSnapshotInstructions[];
extern const uint8_t kDartIsolateSnapshotData[];
extern const uint8_t kDartIsolateSnapshotInstructions[];
}
namespace {
using tonic::ToDart;
constexpr char kHelp[] = "help";
constexpr char kPackages[] = "packages";
constexpr char kSnapshot[] = "snapshot";
constexpr char kDepfile[] = "depfile";
constexpr char kBuildOutput[] = "build-output";
constexpr char kPrintDeps[] = "print-deps";
constexpr char kCompileAll[] = "compile-all";
const char* kDartArgs[] = {
// clang-format off
"--enable_mirrors=false",
"--load_deferred_eagerly=true",
"--conditional_directives",
// TODO(chinmaygarde): The experimental interpreter for iOS device targets
// does not support all these flags. The build process uses its own version
// of this snapshotter. Till support for all these flags is added, make
// sure the snapshotter does not error out on unrecognized flags.
"--ignore-unrecognized-flags",
// clang-format on
};
void Usage() {
std::cerr
<< "Usage: sky_snapshot [<options>] <dart-script-file>" << std::endl
<< std::endl
<< "Global options:" << std::endl
<< " --packages=<package-file> Where to find a .package spec" << std::endl
<< " file." << std::endl
<< std::endl
<< "To create a script snapshot of <dart-script-file>:" << std::endl
<< " --snapshot=<output-file> Where to write the snapshot to." << std::endl
<< " --depfile=<output-file> (optional) Where to write the" << std::endl
<< " dependecy file to, which lists" << std::endl
<< " all transitive imports of the" << std::endl
<< " generated snapshot as sources" << std::endl
<< " in the style of a Makefile." << std::endl
<< " --build-output=<target_name> (required with --depfile)" << std::endl
<< " Determines target name used in" << std::endl
<< " dependency file." << std::endl
<< " --compile-all Compile all code loaded" << std::endl
<< " into the isolate to eagerly" << std::endl
<< " detect syntax errors." << std::endl
<< std::endl
<< "To print dependencies of <dart-script-file> to stdout:" << std::endl
<< " --print-deps Prints all transitive imports" << std::endl
<< " as sources to stdout (no" << std::endl
<< " snapshot will be created)." << std::endl;
}
class DartScope {
public:
DartScope(Dart_Isolate isolate) {
Dart_EnterIsolate(isolate);
Dart_EnterScope();
}
~DartScope() {
Dart_ExitScope();
Dart_ExitIsolate();
}
};
void InitDartVM() {
FTL_CHECK(Dart_SetVMFlags(arraysize(kDartArgs), kDartArgs));
Dart_InitializeParams params = {};
params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION;
params.vm_snapshot_data = kDartVmSnapshotData;
params.vm_snapshot_instructions = kDartVmSnapshotInstructions;
char* error = Dart_Initialize(&params);
if (error)
FTL_LOG(FATAL) << error;
}
Dart_Isolate CreateDartIsolate() {
char* error = nullptr;
Dart_Isolate isolate =
Dart_CreateIsolate("dart:snapshot", "main", kDartIsolateSnapshotData,
kDartIsolateSnapshotInstructions,
nullptr, nullptr, &error);
FTL_CHECK(isolate) << error;
Dart_ExitIsolate();
return isolate;
}
tonic::FileLoader* g_loader = nullptr;
tonic::FileLoader& GetLoader() {
if (!g_loader)
g_loader = new tonic::FileLoader();
return *g_loader;
}
Dart_Handle HandleLibraryTag(Dart_LibraryTag tag,
Dart_Handle library,
Dart_Handle url) {
return GetLoader().HandleLibraryTag(tag, library, url);
}
static const char StubNativeFunctionName[] = "StubNativeFunction";
void StubNativeFunction(Dart_NativeArguments arguments) {
// This is a stub function for the resolver
Dart_SetReturnValue(
arguments, Dart_NewApiError("<EMBEDDER DID NOT SETUP NATIVE RESOLVER>"));
}
static Dart_NativeFunction StubNativeLookup(Dart_Handle name,
int argument_count,
bool* auto_setup_scope) {
return &StubNativeFunction;
}
static const uint8_t* StubNativeSymbol(Dart_NativeFunction nf) {
return reinterpret_cast<const uint8_t*>(StubNativeFunctionName);
}
// Registers a dummy native symbol resolver on all loaded libraries that do not
// already have a native symbol resolver. This is necessary because
// `--compile-all` will try and resolve all native functions. The function
// returned by the dummy native symbol resolver will never be invoked.
static void SetupStubNativeResolvers() {
Dart_Handle libraries = Dart_GetLoadedLibraries();
DART_CHECK_VALID(libraries);
intptr_t libraries_length;
DART_CHECK_VALID(Dart_ListLength(libraries, &libraries_length));
for (intptr_t i = 0; i < libraries_length; i++) {
Dart_Handle library = Dart_ListGetAt(libraries, i);
DART_CHECK_VALID(library);
Dart_NativeEntryResolver old_resolver = NULL;
DART_CHECK_VALID(Dart_GetNativeResolver(library, &old_resolver));
if (old_resolver == NULL) {
Dart_Handle result =
Dart_SetNativeResolver(library, &StubNativeLookup, &StubNativeSymbol);
DART_CHECK_VALID(result);
}
}
}
std::vector<char> CreateSnapshot() {
uint8_t* buffer = nullptr;
intptr_t size = 0;
DART_CHECK_VALID(Dart_CreateScriptSnapshot(&buffer, &size));
const char* begin = reinterpret_cast<const char*>(buffer);
return std::vector<char>(begin, begin + size);
}
bool WriteDepfile(const std::string& path,
const std::string& build_output,
const std::set<std::string>& deps) {
std::string current_directory = files::GetCurrentDirectory();
std::string output = build_output + ":";
for (const auto& dep : deps) {
std::string file = dep;
FTL_DCHECK(!file.empty());
if (file[0] != '/')
file = current_directory + "/" + file;
std::string resolved_file;
if (files::ReadSymbolicLink(file, &resolved_file)) {
output += " " + resolved_file;
} else {
output += " " + file;
}
}
return files::WriteFile(path, output.data(), output.size());
}
int CreateSnapshot(const ftl::CommandLine& command_line) {
if (command_line.HasOption(kHelp, nullptr)) {
Usage();
return 0;
}
if (command_line.positional_args().empty()) {
Usage();
return 1;
}
std::string packages;
if (!command_line.GetOptionValue(kPackages, &packages)) {
std::cerr << "error: Need --" << kPackages << std::endl;
return 1;
}
std::vector<std::string> args = command_line.positional_args();
if (args.size() != 1) {
std::cerr << "error: Need one position argument. Got " << args.size() << "."
<< std::endl;
return 1;
}
std::string main_dart = args[0];
const bool print_deps_mode = command_line.HasOption(kPrintDeps, nullptr);
std::string snapshot;
std::string depfile;
std::string build_output;
if (!print_deps_mode) {
if (!command_line.GetOptionValue(kSnapshot, &snapshot)) {
std::cerr << "error: Need --" << kSnapshot << "." << std::endl;
return 1;
}
if (command_line.GetOptionValue(kDepfile, &depfile) &&
!command_line.GetOptionValue(kBuildOutput, &build_output)) {
std::cerr << "error: Need --" << kBuildOutput << " if --" << kDepfile
<< " is specified." << std::endl;
return 1;
}
}
InitDartVM();
tonic::FileLoader& loader = GetLoader();
if (!loader.LoadPackagesMap(packages))
return 1;
Dart_Isolate isolate = CreateDartIsolate();
FTL_CHECK(isolate) << "Failed to create isolate.";
DartScope scope(isolate);
DART_CHECK_VALID(Dart_SetLibraryTagHandler(HandleLibraryTag));
Dart_Handle load_result =
Dart_LoadScript(ToDart(main_dart), Dart_Null(),
ToDart(loader.Fetch(main_dart)), 0, 0);
if (Dart_IsError(load_result)) {
std::cerr << "error: Failed to load main script:"
<< std::endl
<< Dart_GetError(load_result)
<< std::endl;
return 1;
}
SetupStubNativeResolvers();
if (print_deps_mode) {
if (Dart_IsError(load_result)) {
// Loading / parsing the source resulted in an error. Report the error
// to stderr and exit.
std::cerr << Dart_GetError(load_result) << std::endl;
return 1;
}
// The script has been loaded, print out the minimal dependencies to run.
for (const auto& dep : loader.dependencies()) {
std::string file = dep;
FTL_DCHECK(!file.empty());
std::cout << file << "\n";
}
} else {
DART_CHECK_VALID(load_result);
DART_CHECK_VALID(Dart_FinalizeLoading(false));
// The script has been loaded, generate a snapshot.
std::vector<char> snapshot_blob = CreateSnapshot();
if (!snapshot.empty() &&
!files::WriteFile(snapshot, snapshot_blob.data(), snapshot_blob.size())) {
std::cerr << "error: Failed to write snapshot to '" << snapshot << "'."
<< std::endl;
return 1;
}
if (!depfile.empty() &&
!WriteDepfile(depfile, build_output, loader.dependencies())) {
std::cerr << "error: Failed to write depfile to '" << depfile << "'."
<< std::endl;
return 1;
}
// Run compile-all *after* generating the snapshot to avoid adding
// unnecessary compilation related artifacts to the snapshot.
const bool compile_all_mode = command_line.HasOption(kCompileAll, nullptr);
if (compile_all_mode) {
// Compile all the code loaded into the isolate. This will eagerly detect
// syntax errors.
Dart_Handle compile_all_results = Dart_CompileAll();
if (Dart_IsError(compile_all_results)) {
std::cerr << "error: Compilation errors detected:"
<< std::endl
<< Dart_GetError(compile_all_results)
<< std::endl;
return 1;
}
}
}
return 0;
}
} // namespace
int main(int argc, const char* argv[]) {
return CreateSnapshot(ftl::CommandLineFromArgcArgv(argc, argv));
}

View File

@ -1829,7 +1829,6 @@ FILE: ../../../flutter/sky/engine/platform/fonts/fuchsia/FontCacheFuchsia.cpp
FILE: ../../../flutter/sky/engine/platform/fonts/fuchsia/FontCacheFuchsia.h
FILE: ../../../flutter/sky/engine/platform/text/TextBox.h
FILE: ../../../flutter/sky/packages/flutter_services/lib/empty.dart
FILE: ../../../flutter/snapshotter/main.cc
FILE: ../../../flutter/synchronization/debug_thread_checker.h
FILE: ../../../flutter/synchronization/pipeline.cc
FILE: ../../../flutter/synchronization/pipeline.h