From 517ab4bb967b095866b0ec997ad0b981a5528f7c Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sat, 28 Sep 2019 17:41:26 -0700 Subject: [PATCH 01/13] allow providing composite transformer to incremental compiler --- frontend_server/lib/server.dart | 62 +++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/frontend_server/lib/server.dart b/frontend_server/lib/server.dart index c2f81292fe1c8..23d2e4dc15827 100644 --- a/frontend_server/lib/server.dart +++ b/frontend_server/lib/server.dart @@ -8,24 +8,53 @@ import 'dart:async'; import 'dart:io' hide FileSystemEntity; import 'package:args/args.dart'; +import 'package:kernel/ast.dart'; import 'package:path/path.dart' as path; import 'package:vm/incremental_compiler.dart'; -import 'package:vm/frontend_server.dart' as frontend show FrontendCompiler, - CompilerInterface, listenAndCompile, argParser, usage; +import 'package:vm/frontend_server.dart' as frontend + show + FrontendCompiler, + CompilerInterface, + listenAndCompile, + argParser, + usage, + ProgramTransformer; + +/// A kernel transformer which applies multiple transformers in order. +class CompositeProgramTransformer implements frontend.ProgramTransformer { + /// Create a new [CompositeProgramTransformer] from zero or more + /// [frontend.ProgramTransformer]. + /// + /// [_transformers] must not be null. + const CompositeProgramTransformer(this._transformers) + : assert(_transformers != null); + + final List _transformers; + + @override + void transform(Component component) { + for (frontend.ProgramTransformer programTransformer in _transformers) { + programTransformer.transform(component); + } + } +} /// Wrapper around [FrontendCompiler] that adds [widgetCreatorTracker] kernel /// transformation to the compilation. -class _FlutterFrontendCompiler implements frontend.CompilerInterface{ +class _FlutterFrontendCompiler implements frontend.CompilerInterface { final frontend.CompilerInterface _compiler; _FlutterFrontendCompiler(StringSink output, - {bool unsafePackageSerialization}) : - _compiler = frontend.FrontendCompiler(output, - unsafePackageSerialization: unsafePackageSerialization); + {bool unsafePackageSerialization, + CompositeProgramTransformer transformer}) + : _compiler = frontend.FrontendCompiler(output, + transformer: transformer, + unsafePackageSerialization: unsafePackageSerialization); @override - Future compile(String filename, ArgResults options, {IncrementalCompiler generator}) async { + Future compile(String filename, ArgResults options, + {IncrementalCompiler generator}) async { return _compiler.compile(filename, options, generator: generator); } @@ -57,8 +86,8 @@ class _FlutterFrontendCompiler implements frontend.CompilerInterface{ String libraryUri, String klass, bool isStatic) { - return _compiler.compileExpression(expression, definitions, typeDefinitions, - libraryUri, klass, isStatic); + return _compiler.compileExpression( + expression, definitions, typeDefinitions, libraryUri, klass, isStatic); } @override @@ -77,11 +106,12 @@ class _FlutterFrontendCompiler implements frontend.CompilerInterface{ /// `compiler` is an optional parameter so it can be replaced with mocked /// version for testing. Future starter( - List args, { - frontend.CompilerInterface compiler, - Stream> input, - StringSink output, - }) async { + List args, { + frontend.CompilerInterface compiler, + Stream> input, + StringSink output, + CompositeProgramTransformer transformer, +}) async { ArgResults options; try { options = frontend.argParser.parse(args); @@ -98,7 +128,8 @@ Future starter( final String input = options.rest[0]; final String sdkRoot = options['sdk-root']; - final Directory temp = Directory.systemTemp.createTempSync('train_frontend_server'); + final Directory temp = + Directory.systemTemp.createTempSync('train_frontend_server'); try { final String outputTrainingDill = path.join(temp.path, 'app.dill'); options = frontend.argParser.parse([ @@ -126,6 +157,7 @@ Future starter( } compiler ??= _FlutterFrontendCompiler(output, + transformer: transformer, unsafePackageSerialization: options['unsafe-package-serialization']); if (options.rest.isNotEmpty) { From 11510fecc0b05d044be86dc0ec397c9f8bc08f03 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 29 Sep 2019 14:28:33 -0700 Subject: [PATCH 02/13] fix transformer type --- frontend_server/lib/server.dart | 8 +++----- frontend_server/pubspec.yaml | 4 ++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/frontend_server/lib/server.dart b/frontend_server/lib/server.dart index 23d2e4dc15827..57cd8554523d7 100644 --- a/frontend_server/lib/server.dart +++ b/frontend_server/lib/server.dart @@ -24,19 +24,17 @@ import 'package:vm/frontend_server.dart' as frontend /// A kernel transformer which applies multiple transformers in order. class CompositeProgramTransformer implements frontend.ProgramTransformer { /// Create a new [CompositeProgramTransformer] from zero or more - /// [frontend.ProgramTransformer]. + /// [kernel.Transformer]. /// /// [_transformers] must not be null. const CompositeProgramTransformer(this._transformers) : assert(_transformers != null); - final List _transformers; + final List _transformers; @override void transform(Component component) { - for (frontend.ProgramTransformer programTransformer in _transformers) { - programTransformer.transform(component); - } + _transformers.forEach(component.transformChildren); } } diff --git a/frontend_server/pubspec.yaml b/frontend_server/pubspec.yaml index badc50e49d184..3a61d2a85cb01 100644 --- a/frontend_server/pubspec.yaml +++ b/frontend_server/pubspec.yaml @@ -4,6 +4,10 @@ description: Communication pipe to Dart Frontend homepage: http://flutter.io author: Flutter Authors +environment: + # The pub client defaults to an <2.0.0 sdk constraint which we need to explicitly overwrite. + sdk: ">=2.2.2 <3.0.0" + dependencies: args: any async: any From 8300b7600701d4a93c732ed34da1119477b8a730 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 29 Sep 2019 19:06:27 -0700 Subject: [PATCH 03/13] make build_integration, vm packagable --- frontend_server/BUILD.gn | 47 +++++++++++++++++++++++++++ frontend_server/publish.dart | 47 +++++++++++++++++++++++++++ frontend_server/pubspec.yaml | 42 ++++-------------------- frontend_server/test/server_test.dart | 19 ----------- 4 files changed, 100 insertions(+), 55 deletions(-) create mode 100644 frontend_server/publish.dart delete mode 100644 frontend_server/test/server_test.dart diff --git a/frontend_server/BUILD.gn b/frontend_server/BUILD.gn index 28d2d18eb9887..a38dff5e447e5 100644 --- a/frontend_server/BUILD.gn +++ b/frontend_server/BUILD.gn @@ -44,6 +44,8 @@ if (is_fuchsia_host || is_fuchsia) { main_dart = "bin/starter.dart" deps = [ "$flutter_root/lib/snapshot:kernel_platform_files", + ":flutter_package_vm", + ":flutter_package_build_integration", ] dot_packages = rebase_path(".packages") flutter_patched_sdk = rebase_path("$root_out_dir/flutter_patched_sdk") @@ -71,4 +73,49 @@ if (is_fuchsia_host || is_fuchsia) { inputs = frontend_server_files } + + # Creates a packageable vm. + prebuilt_dart_action("flutter_package_vm") { + packages = "//third_party/dart/.packages" + + script = "$flutter_root/frontend_server/publish.dart" + + inputs = exec_script("//third_party/dart/tools/list_dart_files.py", + [ + "absolute", + rebase_path("../../third_party/dart/pkg/vm"), + ], + "list lines") + + outputs = ["$root_build_dir/dist/packages/vm/pubspec.yaml"] + + args = [ + rebase_path("//third_party/dart/pkg/vm"), + rebase_path("$root_build_dir/dist/packages/vm"), + "vm", + ] + } + + # Creates a packageable build_integration. + prebuilt_dart_action("flutter_package_build_integration") { + packages = "//third_party/dart/.packages" + + script = "$flutter_root/frontend_server/publish.dart" + + inputs = exec_script("//third_party/dart/tools/list_dart_files.py", + [ + "absolute", + rebase_path("../../third_party/dart/pkg/build_integration"), + ], + "list lines") + + outputs = ["$root_build_dir/dist/packages/build_integration/pubspec.yaml"] + + args = [ + rebase_path("//third_party/dart/pkg/build_integration"), + rebase_path("$root_build_dir/dist/packages/build_integration"), + "build_integration", + ] + + } } diff --git a/frontend_server/publish.dart b/frontend_server/publish.dart new file mode 100644 index 0000000000000..002f78ddcdf9c --- /dev/null +++ b/frontend_server/publish.dart @@ -0,0 +1,47 @@ +// Copyright 2013 The Flutter Authors. 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:io'; +import 'package:path/path.dart' as path; + +const String vmPubspec = r''' +name: vm +version: 0.0.1 + +dependencies: + front_end: any + kernel: any + meta: any + build_integratioon: any +'''; + +const String buildIntegrationPubspec = r''' +name: build_integration +version: 0.0.1 + +dependencies: + front_end: any + meta: any +'''; + +const Map packages = { + 'vm': vmPubspec, + 'build_integration': buildIntegrationPubspec, +}; + +// A script for creating a packagable version of several SDK libraries. +void main(List arguments) { + final Directory packageSource = Directory(arguments[0]); + final String destination = arguments[1]; + final String packageName = arguments[2]; + for (File file in packageSource.listSync(recursive: true).whereType()) { + final File destinationFile = File(path.join(destination, path.relative(file.path, from: packageSource.path))); + destinationFile.parent.createSync(recursive: true); + file.copySync(destinationFile.path); + } + if (packages.containsKey(packageName)) { + File(path.join(destination, 'pubspec.yaml')) + .writeAsStringSync(packages[packageName]); + } +} diff --git a/frontend_server/pubspec.yaml b/frontend_server/pubspec.yaml index 3a61d2a85cb01..059f787e1dc4a 100644 --- a/frontend_server/pubspec.yaml +++ b/frontend_server/pubspec.yaml @@ -15,8 +15,10 @@ dependencies: collection: any convert: any crypto: any - front_end: any - kernel: any + front_end: + path: ../../third_party/dart/pkg/front_end + kernel: + path: ../../third_party/dart/pkg/kernel logging: any meta: any quiver: any @@ -25,37 +27,5 @@ dependencies: source_span: any typed_data: any usage: any - vm: any - -dev_dependencies: - analyzer: any - boolean_selector: any - cli_util: any - csslib: any - glob: any - html: any - http: any - http_multi_server: any - http_parser: any - matcher: any - mime: any - mockito: any - package_resolver: any - plugin: any - pool: any - pub_semver: any - shelf: any - shelf_packages_handler: any - shelf_static: any - shelf_web_socket: any - source_map_stack_trace: any - source_maps: any - stack_trace: any - stream_channel: any - string_scanner: any - test: any - utf: any - watcher: any - web_socket_channel: any - when: any - yaml: any + vm: + path: ../../third_party/dart/pkg/vm \ No newline at end of file diff --git a/frontend_server/test/server_test.dart b/frontend_server/test/server_test.dart deleted file mode 100644 index ce00035c81833..0000000000000 --- a/frontend_server/test/server_test.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'dart:async'; - -import 'package:frontend_server/server.dart'; -import 'package:mockito/mockito.dart'; -import 'package:test/test.dart'; -import 'package:vm/frontend_server.dart' as frontend show CompilerInterface; - -class _MockedCompiler extends Mock implements frontend.CompilerInterface {} - -Future main() async { - group('basic', () { - final frontend.CompilerInterface compiler = _MockedCompiler(); - - test('train with mocked compiler completes', () async { - expect(await starter(['--train'], compiler: compiler), equals(0)); - }); - }); - return 0; -} From 7855df1b2f5966d55903175a0654ae2add15072d Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 29 Sep 2019 19:22:19 -0700 Subject: [PATCH 04/13] build to directory with sky packages --- frontend_server/BUILD.gn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend_server/BUILD.gn b/frontend_server/BUILD.gn index a38dff5e447e5..3565d998ba5f6 100644 --- a/frontend_server/BUILD.gn +++ b/frontend_server/BUILD.gn @@ -91,7 +91,7 @@ if (is_fuchsia_host || is_fuchsia) { args = [ rebase_path("//third_party/dart/pkg/vm"), - rebase_path("$root_build_dir/dist/packages/vm"), + rebase_path("$root_gen_dir/dart-pkg/vm"), "vm", ] } @@ -113,7 +113,7 @@ if (is_fuchsia_host || is_fuchsia) { args = [ rebase_path("//third_party/dart/pkg/build_integration"), - rebase_path("$root_build_dir/dist/packages/build_integration"), + rebase_path("$root_gen_dir/dart-pkg/build_integration"), "build_integration", ] From 5ab9de1c2c65cfae7c1e1071a0bfed5e8f64dcc9 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 29 Sep 2019 19:24:30 -0700 Subject: [PATCH 05/13] remove special composite transform type --- frontend_server/lib/server.dart | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/frontend_server/lib/server.dart b/frontend_server/lib/server.dart index 57cd8554523d7..58fe7a0d68fe2 100644 --- a/frontend_server/lib/server.dart +++ b/frontend_server/lib/server.dart @@ -21,23 +21,6 @@ import 'package:vm/frontend_server.dart' as frontend usage, ProgramTransformer; -/// A kernel transformer which applies multiple transformers in order. -class CompositeProgramTransformer implements frontend.ProgramTransformer { - /// Create a new [CompositeProgramTransformer] from zero or more - /// [kernel.Transformer]. - /// - /// [_transformers] must not be null. - const CompositeProgramTransformer(this._transformers) - : assert(_transformers != null); - - final List _transformers; - - @override - void transform(Component component) { - _transformers.forEach(component.transformChildren); - } -} - /// Wrapper around [FrontendCompiler] that adds [widgetCreatorTracker] kernel /// transformation to the compilation. class _FlutterFrontendCompiler implements frontend.CompilerInterface { @@ -45,7 +28,7 @@ class _FlutterFrontendCompiler implements frontend.CompilerInterface { _FlutterFrontendCompiler(StringSink output, {bool unsafePackageSerialization, - CompositeProgramTransformer transformer}) + frontend.ProgramTransformer transformer}) : _compiler = frontend.FrontendCompiler(output, transformer: transformer, unsafePackageSerialization: unsafePackageSerialization); @@ -108,7 +91,7 @@ Future starter( frontend.CompilerInterface compiler, Stream> input, StringSink output, - CompositeProgramTransformer transformer, + frontend.ProgramTransformer transformer, }) async { ArgResults options; try { From b91fcb9e58777b252514de9aea8399e68afa5aeb Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 29 Sep 2019 19:29:24 -0700 Subject: [PATCH 06/13] formatting --- frontend_server/lib/server.dart | 1 - frontend_server/publish.dart | 4 ++++ frontend_server/pubspec.yaml | 9 +++------ 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/frontend_server/lib/server.dart b/frontend_server/lib/server.dart index 58fe7a0d68fe2..8e34efa93877b 100644 --- a/frontend_server/lib/server.dart +++ b/frontend_server/lib/server.dart @@ -8,7 +8,6 @@ import 'dart:async'; import 'dart:io' hide FileSystemEntity; import 'package:args/args.dart'; -import 'package:kernel/ast.dart'; import 'package:path/path.dart' as path; import 'package:vm/incremental_compiler.dart'; diff --git a/frontend_server/publish.dart b/frontend_server/publish.dart index 002f78ddcdf9c..367db7d9c72c3 100644 --- a/frontend_server/publish.dart +++ b/frontend_server/publish.dart @@ -8,6 +8,8 @@ import 'package:path/path.dart' as path; const String vmPubspec = r''' name: vm version: 0.0.1 +environment: + sdk: ">=2.2.2 <3.0.0" dependencies: front_end: any @@ -19,6 +21,8 @@ dependencies: const String buildIntegrationPubspec = r''' name: build_integration version: 0.0.1 +environment: + sdk: ">=2.2.2 <3.0.0" dependencies: front_end: any diff --git a/frontend_server/pubspec.yaml b/frontend_server/pubspec.yaml index 059f787e1dc4a..8bc51c8d62d0e 100644 --- a/frontend_server/pubspec.yaml +++ b/frontend_server/pubspec.yaml @@ -15,10 +15,8 @@ dependencies: collection: any convert: any crypto: any - front_end: - path: ../../third_party/dart/pkg/front_end - kernel: - path: ../../third_party/dart/pkg/kernel + front_end: any + kernel: any logging: any meta: any quiver: any @@ -27,5 +25,4 @@ dependencies: source_span: any typed_data: any usage: any - vm: - path: ../../third_party/dart/pkg/vm \ No newline at end of file + vm: any From 64aa2b12fda5bdeb82a587cdb793eef822140c72 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 29 Sep 2019 19:36:48 -0700 Subject: [PATCH 07/13] package frontend server --- frontend_server/BUILD.gn | 24 ++++++++++++++++++++++++ frontend_server/publish.dart | 18 ++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/frontend_server/BUILD.gn b/frontend_server/BUILD.gn index 3565d998ba5f6..6c7359c0cc0c0 100644 --- a/frontend_server/BUILD.gn +++ b/frontend_server/BUILD.gn @@ -46,6 +46,7 @@ if (is_fuchsia_host || is_fuchsia) { "$flutter_root/lib/snapshot:kernel_platform_files", ":flutter_package_vm", ":flutter_package_build_integration", + ":flutter_package_frontend_server", ] dot_packages = rebase_path(".packages") flutter_patched_sdk = rebase_path("$root_out_dir/flutter_patched_sdk") @@ -118,4 +119,27 @@ if (is_fuchsia_host || is_fuchsia) { ] } + + # Creates a packageable frontend_server. + prebuilt_dart_action("flutter_package_frontend_server") { + packages = "//third_party/dart/.packages" + + script = "$flutter_root/frontend_server/publish.dart" + + inputs = exec_script("//third_party/dart/tools/list_dart_files.py", + [ + "absolute", + rebase_path("lib"), + ], + "list lines") + + outputs = ["$root_build_dir/dist/packages/frontend_server/pubspec.yaml"] + + args = [ + rebase_path("lib"), + rebase_path("$root_gen_dir/dart-pkg/frontend_server"), + "frontend_server", + ] + + } } diff --git a/frontend_server/publish.dart b/frontend_server/publish.dart index 367db7d9c72c3..1e4020115c0ed 100644 --- a/frontend_server/publish.dart +++ b/frontend_server/publish.dart @@ -29,9 +29,23 @@ dependencies: meta: any '''; +const String frontendServerPubspec = r''' +name: frontend_server +version: 0.0.1 +environment: + sdk: ">=2.2.2 <3.0.0" + +dependencies: + args: any + path: any + vm: any +'''; + + const Map packages = { 'vm': vmPubspec, 'build_integration': buildIntegrationPubspec, + 'frontend_server': frontendServerPubspec, }; // A script for creating a packagable version of several SDK libraries. @@ -40,6 +54,10 @@ void main(List arguments) { final String destination = arguments[1]; final String packageName = arguments[2]; for (File file in packageSource.listSync(recursive: true).whereType()) { + if (!file.path.contains('lib')) { + // Skip test/bin directories and pubspec. + continue; + } final File destinationFile = File(path.join(destination, path.relative(file.path, from: packageSource.path))); destinationFile.parent.createSync(recursive: true); file.copySync(destinationFile.path); From b3129a7637cafd494adea226ee176a1d16cc5ff4 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Sun, 29 Sep 2019 20:11:38 -0700 Subject: [PATCH 08/13] include kernel and front_end --- frontend_server/BUILD.gn | 45 +++++++++++++++++++++++++++++++++++- frontend_server/publish.dart | 23 ++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/frontend_server/BUILD.gn b/frontend_server/BUILD.gn index 6c7359c0cc0c0..dc86763d2fff3 100644 --- a/frontend_server/BUILD.gn +++ b/frontend_server/BUILD.gn @@ -120,7 +120,7 @@ if (is_fuchsia_host || is_fuchsia) { } - # Creates a packageable frontend_server. + # Creates a packageable frontend_server. prebuilt_dart_action("flutter_package_frontend_server") { packages = "//third_party/dart/.packages" @@ -140,6 +140,49 @@ if (is_fuchsia_host || is_fuchsia) { rebase_path("$root_gen_dir/dart-pkg/frontend_server"), "frontend_server", ] + } + + # Creates a packageable front_end. + prebuilt_dart_action("flutter_package_front_end") { + packages = "//third_party/dart/.packages" + + script = "$flutter_root/frontend_server/publish.dart" + inputs = exec_script("//third_party/dart/tools/list_dart_files.py", + [ + "absolute", + rebase_path("lib"), + ], + "list lines") + + outputs = ["$root_build_dir/dist/packages/front_end/pubspec.yaml"] + + args = [ + rebase_path("lib"), + rebase_path("$root_gen_dir/dart-pkg/front_end"), + "front_end", + ] + } + + # Creates a packageable kernel. + prebuilt_dart_action("flutter_package_kernel") { + packages = "//third_party/dart/.packages" + + script = "$flutter_root/frontend_server/publish.dart" + + inputs = exec_script("//third_party/dart/tools/list_dart_files.py", + [ + "absolute", + rebase_path("lib"), + ], + "list lines") + + outputs = ["$root_build_dir/dist/packages/kernel/pubspec.yaml"] + + args = [ + rebase_path("lib"), + rebase_path("$root_gen_dir/dart-pkg/kernel"), + "kernel", + ] } } diff --git a/frontend_server/publish.dart b/frontend_server/publish.dart index 1e4020115c0ed..45783c2d2e0b9 100644 --- a/frontend_server/publish.dart +++ b/frontend_server/publish.dart @@ -41,11 +41,34 @@ dependencies: vm: any '''; +const String kernelPubspec = r''' +name: kernel +version: 0.0.1 +environment: + sdk: '>=2.2.2 <3.0.0' + +dependencies: + args: any + meta: any +'''; + +const String frontendPubspec = r''' +name: front_end +version: 0.0.1 +environment: + sdk: '>=2.2.2 <3.0.0' +dependencies: + kernel: any + package_config: any + meta: any +'''; const Map packages = { 'vm': vmPubspec, 'build_integration': buildIntegrationPubspec, 'frontend_server': frontendServerPubspec, + 'kernel': kernelPubspec, + 'front_end': frontendPubspec, }; // A script for creating a packagable version of several SDK libraries. From ee3730fc9db3c2bac2dad4ff6e1fad408c8e9102 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Mon, 30 Sep 2019 10:40:12 -0700 Subject: [PATCH 09/13] Update BUILD.gn --- frontend_server/BUILD.gn | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend_server/BUILD.gn b/frontend_server/BUILD.gn index dc86763d2fff3..7ceb73e7f47d3 100644 --- a/frontend_server/BUILD.gn +++ b/frontend_server/BUILD.gn @@ -75,6 +75,9 @@ if (is_fuchsia_host || is_fuchsia) { inputs = frontend_server_files } + # For flutter/flutter#36738 we make the source files availible so that + # we can generate a local frontend_server snapshot in the tools cache. + # Creates a packageable vm. prebuilt_dart_action("flutter_package_vm") { packages = "//third_party/dart/.packages" From bb64ee1fc0a7b42dfe7d6c0a755c65956bded36b Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Wed, 2 Oct 2019 08:31:43 -0700 Subject: [PATCH 10/13] replace build rules with python --- frontend_server/BUILD.gn | 152 +++++-------------------- frontend_server/package_incremental.py | 114 +++++++++++++++++++ 2 files changed, 143 insertions(+), 123 deletions(-) create mode 100644 frontend_server/package_incremental.py diff --git a/frontend_server/BUILD.gn b/frontend_server/BUILD.gn index 7ceb73e7f47d3..52530c4393b7e 100644 --- a/frontend_server/BUILD.gn +++ b/frontend_server/BUILD.gn @@ -40,13 +40,27 @@ if (is_fuchsia_host || is_fuchsia) { } else { import("//third_party/dart/utils/application_snapshot.gni") + frontend_server_files = + exec_script("//third_party/dart/tools/list_dart_files.py", + [ + "absolute", + rebase_path("."), + ], + "list lines") + + frontend_server_files += + exec_script("//third_party/dart/tools/list_dart_files.py", + [ + "absolute", + rebase_path("../../third_party/dart/pkg"), + ], + "list lines") + application_snapshot("frontend_server") { main_dart = "bin/starter.dart" deps = [ + ":package_incremental_compiler", "$flutter_root/lib/snapshot:kernel_platform_files", - ":flutter_package_vm", - ":flutter_package_build_integration", - ":flutter_package_frontend_server", ] dot_packages = rebase_path(".packages") flutter_patched_sdk = rebase_path("$root_out_dir/flutter_patched_sdk") @@ -56,136 +70,28 @@ if (is_fuchsia_host || is_fuchsia) { rebase_path(main_dart), ] - frontend_server_files = - exec_script("//third_party/dart/tools/list_dart_files.py", - [ - "absolute", - rebase_path("."), - ], - "list lines") - - frontend_server_files += - exec_script("//third_party/dart/tools/list_dart_files.py", - [ - "absolute", - rebase_path("../../third_party/dart/pkg"), - ], - "list lines") - inputs = frontend_server_files } - # For flutter/flutter#36738 we make the source files availible so that + # For flutter/flutter#36738 we make the source files available so that # we can generate a local frontend_server snapshot in the tools cache. + action("package_incremental_compiler") { + script = "$flutter_root/frontend_server/package_incremental.py" - # Creates a packageable vm. - prebuilt_dart_action("flutter_package_vm") { - packages = "//third_party/dart/.packages" - - script = "$flutter_root/frontend_server/publish.dart" - - inputs = exec_script("//third_party/dart/tools/list_dart_files.py", - [ - "absolute", - rebase_path("../../third_party/dart/pkg/vm"), - ], - "list lines") - - outputs = ["$root_build_dir/dist/packages/vm/pubspec.yaml"] - - args = [ - rebase_path("//third_party/dart/pkg/vm"), - rebase_path("$root_gen_dir/dart-pkg/vm"), - "vm", - ] - } - - # Creates a packageable build_integration. - prebuilt_dart_action("flutter_package_build_integration") { - packages = "//third_party/dart/.packages" - - script = "$flutter_root/frontend_server/publish.dart" - - inputs = exec_script("//third_party/dart/tools/list_dart_files.py", - [ - "absolute", - rebase_path("../../third_party/dart/pkg/build_integration"), - ], - "list lines") - - outputs = ["$root_build_dir/dist/packages/build_integration/pubspec.yaml"] - - args = [ - rebase_path("//third_party/dart/pkg/build_integration"), - rebase_path("$root_gen_dir/dart-pkg/build_integration"), - "build_integration", - ] - - } - - # Creates a packageable frontend_server. - prebuilt_dart_action("flutter_package_frontend_server") { - packages = "//third_party/dart/.packages" - - script = "$flutter_root/frontend_server/publish.dart" - - inputs = exec_script("//third_party/dart/tools/list_dart_files.py", - [ - "absolute", - rebase_path("lib"), - ], - "list lines") - - outputs = ["$root_build_dir/dist/packages/frontend_server/pubspec.yaml"] - - args = [ - rebase_path("lib"), - rebase_path("$root_gen_dir/dart-pkg/frontend_server"), - "frontend_server", - ] - } - - # Creates a packageable front_end. - prebuilt_dart_action("flutter_package_front_end") { - packages = "//third_party/dart/.packages" - - script = "$flutter_root/frontend_server/publish.dart" - - inputs = exec_script("//third_party/dart/tools/list_dart_files.py", - [ - "absolute", - rebase_path("lib"), - ], - "list lines") + inputs = frontend_server_files - outputs = ["$root_build_dir/dist/packages/front_end/pubspec.yaml"] + outputs = [ + "$root_build_dir/dist/packages/frontend_server/pubspec.yaml", + "$root_build_dir/dist/packages/vm/pubspec.yaml", + "$root_build_dir/dist/packages/build_integration/pubspec.yaml", - args = [ - rebase_path("lib"), - rebase_path("$root_gen_dir/dart-pkg/front_end"), - "front_end", + "$root_build_dir/dist/packages/front_end/pubspec.yaml", + "$root_build_dir/dist/packages/kernel/pubspec.yaml", ] - } - - # Creates a packageable kernel. - prebuilt_dart_action("flutter_package_kernel") { - packages = "//third_party/dart/.packages" - - script = "$flutter_root/frontend_server/publish.dart" - - inputs = exec_script("//third_party/dart/tools/list_dart_files.py", - [ - "absolute", - rebase_path("lib"), - ], - "list lines") - - outputs = ["$root_build_dir/dist/packages/kernel/pubspec.yaml"] args = [ - rebase_path("lib"), - rebase_path("$root_gen_dir/dart-pkg/kernel"), - "kernel", + "--input-root=" + rebase_path("//third_party/dart/pkg"), + "--output-root=" + rebase_path("$root_gen_dir/dart-pkg"), ] } } diff --git a/frontend_server/package_incremental.py b/frontend_server/package_incremental.py new file mode 100644 index 0000000000000..e169dbca0ed74 --- /dev/null +++ b/frontend_server/package_incremental.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +# Copyright (c) 2012, 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 argparse +import os +import sys +import shutil + +# The list of packages copied from the Dart SDK. +PACKAGES = [ + "vm", "build_integration", "kernel", "front_end", "frontend_server", +] + +VM_PUBSPEC = r'''name: vm +version: 0.0.1 +environment: + sdk: ">=2.2.2 <3.0.0" + +dependencies: + front_end: any + kernel: any + meta: any + build_integration: any +''' + +BUILD_INTEGRATION_PUBSPEC = r'''name: build_integration +version: 0.0.1 +environment: + sdk: ">=2.2.2 <3.0.0" + +dependencies: + front_end: any + meta: any +''' + +FRONTEND_SERVER_PUBSPEC = r'''name: frontend_server +version: 0.0.1 +environment: + sdk: ">=2.2.2 <3.0.0" + +dependencies: + args: any + path: any + vm: any +''' + +KERNEL_PUBSPEC = r'''name: kernel +version: 0.0.1 +environment: + sdk: '>=2.2.2 <3.0.0' + +dependencies: + args: any + meta: any +''' + +FRONT_END_PUBSPEC = r'''name: front_end +version: 0.0.1 +environment: + sdk: '>=2.2.2 <3.0.0' +dependencies: + kernel: any + package_config: any + meta: any +''' + +PUBSPECS = { + 'vm': VM_PUBSPEC, + 'build_integration': BUILD_INTEGRATION_PUBSPEC, + 'frontend_server': FRONTEND_SERVER_PUBSPEC, + 'kernel': KERNEL_PUBSPEC, + 'front_end': FRONT_END_PUBSPEC, +} + +def main(): + parser = argparse.ArgumentParser() + + parser.add_argument('--input-root', type=str, dest='input', action='store') + parser.add_argument('--output-root', type=str, dest='output', action='store') + + args = parser.parse_args() + for package in PACKAGES: + package_root = os.path.join(args.input, package) + for root, directories, files in os.walk(package_root): + # We only care about actual source files, not generated code or tests. + for skip_dir in ['.git', 'gen', 'test']: + if skip_dir in directories: + directories.remove(skip_dir) + + # Ensure we have a dest directory + if not os.path.isdir(os.path.join(args.output, package)): + os.makedirs(os.path.join(args.output, package)) + + if '.git' in directories: + directories.remove('.git') + for filename in files: + if filename.endswith('.dart') and not filename.endswith('_test.dart'): + destination_file = os.path.join(args.output, package, + os.path.relpath(os.path.join(root, filename), start=package_root)) + parent_path = os.path.abspath(os.path.join(destination_file, os.pardir)) + if not os.path.isdir(parent_path): + os.makedirs(parent_path) + shutil.copyfile(os.path.join(root, filename), destination_file) + + # Write the overriden pubspec for each package. + pubspec_file = os.path.join(args.output, package, 'pubspec.yaml') + with open(pubspec_file, 'w+') as output_file: + output_file.write(PUBSPECS[package]) + + +if __name__ == '__main__': + sys.exit(main()) \ No newline at end of file From 5b4a902ff2665c92ce20aea04b25b1ee4880ed71 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Wed, 2 Oct 2019 08:33:38 -0700 Subject: [PATCH 11/13] delete dart file --- frontend_server/publish.dart | 92 ------------------------------------ 1 file changed, 92 deletions(-) delete mode 100644 frontend_server/publish.dart diff --git a/frontend_server/publish.dart b/frontend_server/publish.dart deleted file mode 100644 index 45783c2d2e0b9..0000000000000 --- a/frontend_server/publish.dart +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2013 The Flutter Authors. 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:io'; -import 'package:path/path.dart' as path; - -const String vmPubspec = r''' -name: vm -version: 0.0.1 -environment: - sdk: ">=2.2.2 <3.0.0" - -dependencies: - front_end: any - kernel: any - meta: any - build_integratioon: any -'''; - -const String buildIntegrationPubspec = r''' -name: build_integration -version: 0.0.1 -environment: - sdk: ">=2.2.2 <3.0.0" - -dependencies: - front_end: any - meta: any -'''; - -const String frontendServerPubspec = r''' -name: frontend_server -version: 0.0.1 -environment: - sdk: ">=2.2.2 <3.0.0" - -dependencies: - args: any - path: any - vm: any -'''; - -const String kernelPubspec = r''' -name: kernel -version: 0.0.1 -environment: - sdk: '>=2.2.2 <3.0.0' - -dependencies: - args: any - meta: any -'''; - -const String frontendPubspec = r''' -name: front_end -version: 0.0.1 -environment: - sdk: '>=2.2.2 <3.0.0' -dependencies: - kernel: any - package_config: any - meta: any -'''; - -const Map packages = { - 'vm': vmPubspec, - 'build_integration': buildIntegrationPubspec, - 'frontend_server': frontendServerPubspec, - 'kernel': kernelPubspec, - 'front_end': frontendPubspec, -}; - -// A script for creating a packagable version of several SDK libraries. -void main(List arguments) { - final Directory packageSource = Directory(arguments[0]); - final String destination = arguments[1]; - final String packageName = arguments[2]; - for (File file in packageSource.listSync(recursive: true).whereType()) { - if (!file.path.contains('lib')) { - // Skip test/bin directories and pubspec. - continue; - } - final File destinationFile = File(path.join(destination, path.relative(file.path, from: packageSource.path))); - destinationFile.parent.createSync(recursive: true); - file.copySync(destinationFile.path); - } - if (packages.containsKey(packageName)) { - File(path.join(destination, 'pubspec.yaml')) - .writeAsStringSync(packages[packageName]); - } -} From 2d0b97b70f62f1dd1d152411715036ff7469459c Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Wed, 2 Oct 2019 12:16:38 -0700 Subject: [PATCH 12/13] cleanup python --- frontend_server/package_incremental.py | 86 ++++++++++++-------------- 1 file changed, 41 insertions(+), 45 deletions(-) diff --git a/frontend_server/package_incremental.py b/frontend_server/package_incremental.py index e169dbca0ed74..f380dc04f82a8 100644 --- a/frontend_server/package_incremental.py +++ b/frontend_server/package_incremental.py @@ -1,16 +1,16 @@ #!/usr/bin/env python -# Copyright (c) 2012, 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. +# Copyright 2013 The Flutter Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. import argparse import os -import sys import shutil +import sys # The list of packages copied from the Dart SDK. PACKAGES = [ - "vm", "build_integration", "kernel", "front_end", "frontend_server", + "vm", "build_integration", "kernel", "front_end", "frontend_server", ] VM_PUBSPEC = r'''name: vm @@ -67,48 +67,44 @@ ''' PUBSPECS = { - 'vm': VM_PUBSPEC, - 'build_integration': BUILD_INTEGRATION_PUBSPEC, - 'frontend_server': FRONTEND_SERVER_PUBSPEC, - 'kernel': KERNEL_PUBSPEC, - 'front_end': FRONT_END_PUBSPEC, + 'vm': VM_PUBSPEC, + 'build_integration': BUILD_INTEGRATION_PUBSPEC, + 'frontend_server': FRONTEND_SERVER_PUBSPEC, + 'kernel': KERNEL_PUBSPEC, + 'front_end': FRONT_END_PUBSPEC, } def main(): - parser = argparse.ArgumentParser() - - parser.add_argument('--input-root', type=str, dest='input', action='store') - parser.add_argument('--output-root', type=str, dest='output', action='store') - - args = parser.parse_args() - for package in PACKAGES: - package_root = os.path.join(args.input, package) - for root, directories, files in os.walk(package_root): - # We only care about actual source files, not generated code or tests. - for skip_dir in ['.git', 'gen', 'test']: - if skip_dir in directories: - directories.remove(skip_dir) - - # Ensure we have a dest directory - if not os.path.isdir(os.path.join(args.output, package)): - os.makedirs(os.path.join(args.output, package)) - - if '.git' in directories: - directories.remove('.git') - for filename in files: - if filename.endswith('.dart') and not filename.endswith('_test.dart'): - destination_file = os.path.join(args.output, package, - os.path.relpath(os.path.join(root, filename), start=package_root)) - parent_path = os.path.abspath(os.path.join(destination_file, os.pardir)) - if not os.path.isdir(parent_path): - os.makedirs(parent_path) - shutil.copyfile(os.path.join(root, filename), destination_file) - - # Write the overriden pubspec for each package. - pubspec_file = os.path.join(args.output, package, 'pubspec.yaml') - with open(pubspec_file, 'w+') as output_file: - output_file.write(PUBSPECS[package]) - + parser = argparse.ArgumentParser() + parser.add_argument('--input-root', type=str, dest='input', action='store') + parser.add_argument('--output-root', type=str, dest='output', action='store') + + args = parser.parse_args() + for package in PACKAGES: + package_root = os.path.join(args.input, package) + for root, directories, files in os.walk(package_root): + # We only care about actual source files, not generated code or tests. + for skip_dir in ['.git', 'gen', 'test']: + if skip_dir in directories: + directories.remove(skip_dir) + + # Ensure we have a dest directory + if not os.path.isdir(os.path.join(args.output, package)): + os.makedirs(os.path.join(args.output, package)) + + for filename in files: + if filename.endswith('.dart') and not filename.endswith('_test.dart'): + destination_file = os.path.join(args.output, package, + os.path.relpath(os.path.join(root, filename), start=package_root)) + parent_path = os.path.abspath(os.path.join(destination_file, os.pardir)) + if not os.path.isdir(parent_path): + os.makedirs(parent_path) + shutil.copyfile(os.path.join(root, filename), destination_file) + + # Write the overriden pubspec for each package. + pubspec_file = os.path.join(args.output, package, 'pubspec.yaml') + with open(pubspec_file, 'w+') as output_file: + output_file.write(PUBSPECS[package]) if __name__ == '__main__': - sys.exit(main()) \ No newline at end of file + sys.exit(main()) From 543105eb04f7a6123af89f15c820e95d6c48f23a Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Wed, 2 Oct 2019 12:24:18 -0700 Subject: [PATCH 13/13] +x --- frontend_server/package_incremental.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 frontend_server/package_incremental.py diff --git a/frontend_server/package_incremental.py b/frontend_server/package_incremental.py old mode 100644 new mode 100755