Skip to content

Commit 048d70b

Browse files
author
Jonah Williams
authored
Support dartdevc, dart2js with shared source files, dartdevc sdk (flutter#8105)
1 parent e0782de commit 048d70b

File tree

7 files changed

+359
-215
lines changed

7 files changed

+359
-215
lines changed

BUILD.gn

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44

55
import("$flutter_root/common/config.gni")
66

7+
# Whether to build the dartdevc sdk, libraries, and source files
8+
# required for the flutter web sdk.
9+
declare_args() {
10+
full_dart_sdk = false
11+
}
12+
713
group("flutter") {
814
testonly = true
915

@@ -23,8 +29,13 @@ group("flutter") {
2329
public_deps += [
2430
"$flutter_root/frontend_server",
2531
"//third_party/dart:create_sdk",
26-
"$flutter_root/web_sdk",
2732
]
33+
34+
if (full_dart_sdk) {
35+
public_deps += [
36+
"$flutter_root/web_sdk",
37+
]
38+
}
2839
}
2940
}
3041

ci/licenses_golden/licenses_flutter

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,7 @@ FILE: ../../../flutter/vulkan/vulkan_utilities.cc
704704
FILE: ../../../flutter/vulkan/vulkan_utilities.h
705705
FILE: ../../../flutter/vulkan/vulkan_window.cc
706706
FILE: ../../../flutter/vulkan/vulkan_window.h
707+
FILE: ../../../flutter/web_sdk/flutter_kernel_sdk.dart
707708
FILE: ../../../flutter/web_sdk/libraries.json
708709
----------------------------------------------------------------------------------------------------
709710
Copyright 2013 The Flutter Authors. All rights reserved.

tools/gn

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,10 @@ def to_gn_args(args):
234234
if args.arm_float_abi:
235235
gn_args['arm_float_abi'] = args.arm_float_abi
236236

237-
# Whether to build trained Dart SDK snapshots of dart2js and dartdevc.
237+
# Whether to build trained Dart SDK snapshots of dart2js and dartdevc,
238+
# including the web sdk kernel and source files.
238239
gn_args['dart_platform_sdk'] = not args.full_dart_sdk
240+
gn_args['full_dart_sdk'] = args.full_dart_sdk
239241

240242
return gn_args
241243

web_sdk/BUILD.gn

Lines changed: 57 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,63 +2,82 @@
22
# Use of this source code is governed by a BSD-style license that can be
33
# found in the LICENSE file.
44

5+
import("//third_party/dart/build/dart/dart_action.gni")
6+
import("//third_party/dart/utils/compile_platform.gni")
7+
8+
sdk_dill = "$root_out_dir/flutter_web_sdk/kernel/flutter_ddc_sdk.dill"
9+
sdk_libraries_json = "$flutter_root/web_sdk/libraries.json"
10+
11+
web_ui_sources = [
12+
"$flutter_root/lib/stub_ui/compositing.dart",
13+
"$flutter_root/lib/stub_ui/geometry.dart",
14+
"$flutter_root/lib/stub_ui/hash_codes.dart",
15+
"$flutter_root/lib/stub_ui/hooks.dart",
16+
"$flutter_root/lib/stub_ui/isolate_name_server.dart",
17+
"$flutter_root/lib/stub_ui/lerp.dart",
18+
"$flutter_root/lib/stub_ui/natives.dart",
19+
"$flutter_root/lib/stub_ui/painting.dart",
20+
"$flutter_root/lib/stub_ui/plugins.dart",
21+
"$flutter_root/lib/stub_ui/pointer.dart",
22+
"$flutter_root/lib/stub_ui/semantics.dart",
23+
"$flutter_root/lib/stub_ui/text.dart",
24+
"$flutter_root/lib/stub_ui/ui.dart",
25+
"$flutter_root/lib/stub_ui/versions.dart",
26+
"$flutter_root/lib/stub_ui/window.dart",
27+
]
28+
529
group("web_sdk") {
630
deps = [
731
":web_ui_sources",
8-
":web_libraries_json",
9-
#":dart_sdk_internal",
32+
":web_ui_library",
33+
":flutter_dartdevc_kernel_sdk",
1034
]
1135
}
1236

1337
copy("web_ui_sources") {
14-
sources = [
15-
"$flutter_root/lib/stub_ui/compositing.dart",
16-
"$flutter_root/lib/stub_ui/geometry.dart",
17-
"$flutter_root/lib/stub_ui/hash_codes.dart",
18-
"$flutter_root/lib/stub_ui/hooks.dart",
19-
"$flutter_root/lib/stub_ui/isolate_name_server.dart",
20-
"$flutter_root/lib/stub_ui/lerp.dart",
21-
"$flutter_root/lib/stub_ui/natives.dart",
22-
"$flutter_root/lib/stub_ui/painting.dart",
23-
"$flutter_root/lib/stub_ui/plugins.dart",
24-
"$flutter_root/lib/stub_ui/pointer.dart",
25-
"$flutter_root/lib/stub_ui/semantics.dart",
26-
"$flutter_root/lib/stub_ui/text.dart",
27-
"$flutter_root/lib/stub_ui/ui.dart",
28-
"$flutter_root/lib/stub_ui/versions.dart",
29-
"$flutter_root/lib/stub_ui/window.dart",
30-
]
38+
sources = web_ui_sources
3139

3240
outputs = [
3341
"$root_out_dir/flutter_web_sdk/lib/ui/{{source_file_part}}"
3442
]
3543
}
3644

37-
copy("web_libraries_json") {
45+
copy("web_ui_library") {
3846
sources = [
39-
"libraries.json"
47+
"$flutter_root/web_sdk/libraries.json",
4048
]
4149

4250
outputs = [
43-
"$root_out_dir/flutter_web_sdk/lib/libraries.json"
51+
"$root_out_dir/flutter_web_sdk/{{source_file_part}}"
4452
]
4553
}
4654

47-
# copy("dart_sdk_internal") {
48-
# deps = [
49-
# "//third_party/dart:create_sdk"
50-
# ]
55+
prebuilt_dart_action("flutter_dartdevc_kernel_sdk") {
56+
deps = [
57+
"//third_party/dart/pkg:pkg_files_stamp",
58+
"//third_party/dart/utils/dartdevc:dartdevc_files_stamp",
59+
"//third_party/dart/utils/dartdevc:dartdevc_sdk_patch_stamp",
60+
]
5161

52-
# sources = [
53-
# "$root_out_dir/dart-sdk/lib/_internal/ddc_sdk.dill",
54-
# "$root_out_dir/dart-sdk/lib/_internal/dart2js_platform.dill",
55-
# "$root_out_dir/dart-sdk/lib/_internal/dart2js_server_platform.dill",
56-
# "$root_out_dir/dart-sdk/lib/_internal/ddc_sdk.sum",
57-
# "$root_out_dir/dart-sdk/lib/_internal/strong.sum",
58-
# "$root_out_dir/dart-sdk/lib/_internal/vm_platform_strong.dill",
59-
# ]
62+
inputs = [
63+
"//third_party/dart/pkg/dev_compiler/tool/kernel_sdk.dart",
64+
]
6065

61-
# outputs = [
62-
# "$root_out_dir/flutter_web_sdk/lib/_internal/{{source_file_part}}"
63-
# ]
64-
# }
66+
outputs = [
67+
sdk_dill,
68+
"$root_out_dir/flutter_web_sdk/lib/_internal/libraries.json",
69+
"$root_out_dir/flutter_web_sdk/kernel/amd/dart_sdk.js",
70+
"$root_out_dir/flutter_web_sdk/kernel/amd/dart_sdk.js.map",
71+
]
72+
73+
script = "flutter_kernel_sdk.dart"
74+
packages = "//third_party/dart/.packages"
75+
76+
output_path = rebase_path(sdk_dill)
77+
libraries_path = rebase_path(sdk_libraries_json)
78+
79+
args = [
80+
"--output=$output_path",
81+
"--libraries=$libraries_path",
82+
]
83+
}

web_sdk/flutter_kernel_sdk.dart

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'dart:async';
6+
import 'dart:convert' show json;
7+
import 'dart:io';
8+
import 'package:args/args.dart' show ArgParser;
9+
import 'package:dev_compiler/src/compiler/module_builder.dart';
10+
import 'package:dev_compiler/src/compiler/shared_command.dart' show SharedCompilerOptions;
11+
import 'package:dev_compiler/src/kernel/target.dart';
12+
import 'package:dev_compiler/src/kernel/command.dart';
13+
import 'package:dev_compiler/src/kernel/compiler.dart';
14+
import 'package:front_end/src/api_unstable/ddc.dart' show CompilerOptions, kernelForComponent;
15+
import 'package:kernel/kernel.dart';
16+
import 'package:path/path.dart' as path;
17+
18+
// This script is forked from https://github.com/dart-lang/sdk/blob/master/pkg/dev_compiler/tool/kernel_sdk.dart
19+
// and produces the precompiled sdk for dartdevc. This has been modified to include a dart:ui target.
20+
Future main(List<String> args) async {
21+
var ddcPath = path.dirname(path.dirname(path.fromUri(Platform.script)));
22+
23+
// Parse flags.
24+
var parser = ArgParser()
25+
..addOption('output')
26+
..addOption('libraries',
27+
defaultsTo: path.join(ddcPath, '../../sdk/lib/libraries.json'));
28+
var parserOptions = parser.parse(args);
29+
30+
var outputPath = parserOptions['output'] as String;
31+
if (outputPath == null) {
32+
var sdkRoot = path.absolute(path.dirname(path.dirname(ddcPath)));
33+
var buildDir = path.join(sdkRoot, Platform.isMacOS ? 'xcodebuild' : 'out');
34+
var genDir = path.join(buildDir, 'ReleaseX64', 'gen', 'utils', 'dartdevc');
35+
outputPath = path.join(genDir, 'kernel', 'ddc_sdk.dill');
36+
}
37+
38+
var librarySpecPath = parserOptions['libraries'] as String;
39+
40+
var target = FlutterDevCompilerTarget();
41+
var options = CompilerOptions()
42+
..compileSdk = true
43+
// TODO(sigmund): remove this unnecessary option when possible.
44+
..sdkRoot = Uri.base
45+
..librariesSpecificationUri = Uri.base.resolveUri(Uri.file(librarySpecPath))
46+
..target = target;
47+
48+
var inputs = target.extraRequiredLibraries.map(Uri.parse).toList();
49+
var component = await kernelForComponent(inputs, options);
50+
51+
var outputDir = path.dirname(outputPath);
52+
await Directory(outputDir).create(recursive: true);
53+
await writeComponentToBinary(component, outputPath);
54+
55+
var jsModule = ProgramCompiler(
56+
component,
57+
target.hierarchy,
58+
SharedCompilerOptions(moduleName: 'dart_sdk'),
59+
{}).emitModule(component, [], [], {});
60+
var moduleFormats = {
61+
'amd': ModuleFormat.amd,
62+
};
63+
64+
for (var name in moduleFormats.keys) {
65+
var format = moduleFormats[name];
66+
var jsDir = path.join(outputDir, name);
67+
var jsPath = path.join(jsDir, 'dart_sdk.js');
68+
await Directory(jsDir).create();
69+
var jsCode = jsProgramToCode(jsModule, format);
70+
await File(jsPath).writeAsString(jsCode.code);
71+
await File('$jsPath.map').writeAsString(json.encode(jsCode.sourceMap));
72+
}
73+
}
74+
75+
class FlutterDevCompilerTarget extends DevCompilerTarget {
76+
@override
77+
List<String> get extraRequiredLibraries => const [
78+
'dart:_runtime',
79+
'dart:_debugger',
80+
'dart:_foreign_helper',
81+
'dart:_interceptors',
82+
'dart:_internal',
83+
'dart:_isolate_helper',
84+
'dart:_js_helper',
85+
'dart:_js_mirrors',
86+
'dart:_js_primitives',
87+
'dart:_metadata',
88+
'dart:_native_typed_data',
89+
'dart:async',
90+
'dart:collection',
91+
'dart:convert',
92+
'dart:developer',
93+
'dart:io',
94+
'dart:isolate',
95+
'dart:js',
96+
'dart:js_util',
97+
'dart:math',
98+
'dart:mirrors',
99+
'dart:typed_data',
100+
'dart:indexed_db',
101+
'dart:html',
102+
'dart:html_common',
103+
'dart:svg',
104+
'dart:web_audio',
105+
'dart:web_gl',
106+
'dart:web_sql',
107+
'dart:ui',
108+
];
109+
}

0 commit comments

Comments
 (0)