Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 2b21a31

Browse files
Web sdk build reland (#36851)
1 parent 6803f42 commit 2b21a31

File tree

13 files changed

+365
-524
lines changed

13 files changed

+365
-524
lines changed

BUILD.gn

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import("//third_party/dart/build/dart/copy_tree.gni")
1212

1313
# Whether to build the dartdevc sdk, libraries, and source files
1414
# required for the flutter web sdk.
15+
# TODO(jacksongardner): remove this poorly named argument once the recipes stop
16+
# using it. https://github.com/flutter/flutter/issues/113303
1517
declare_args() {
1618
full_dart_sdk = false
1719
}
@@ -44,30 +46,6 @@ config("export_dynamic_symbols") {
4446
}
4547
}
4648

47-
if (flutter_prebuilt_dart_sdk) {
48-
copy_trees("_copy_trees") {
49-
sources = [
50-
{
51-
target = "copy_dart_sdk"
52-
visibility = [ ":dart_sdk" ]
53-
source = prebuilt_dart_sdk
54-
dest = "$root_out_dir/dart-sdk"
55-
ignore_patterns = "{}"
56-
},
57-
]
58-
}
59-
}
60-
61-
group("dart_sdk") {
62-
if (build_engine_artifacts) {
63-
if (flutter_prebuilt_dart_sdk) {
64-
public_deps = [ ":copy_dart_sdk" ]
65-
} else {
66-
public_deps = [ "//third_party/dart:create_sdk" ]
67-
}
68-
}
69-
}
70-
7149
group("flutter") {
7250
testonly = true
7351

@@ -96,7 +74,7 @@ group("flutter") {
9674

9775
if (build_engine_artifacts) {
9876
public_deps += [
99-
":dart_sdk",
77+
"//flutter/build/dart:dart_sdk",
10078
"//flutter/flutter_frontend_server:frontend_server",
10179

10280
# This must be listed explicitly for desktop cross-builds since

build/archives/BUILD.gn

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -220,13 +220,6 @@ if (build_engine_artifacts && !flutter_prebuilt_dart_sdk) {
220220
}
221221
}
222222

223-
# Archives Flutter Web SDK
224-
if (!is_fuchsia) {
225-
group("flutter_web_sdk") {
226-
deps = [ "//flutter/web_sdk:flutter_web_sdk_archive" ]
227-
}
228-
}
229-
230223
# Archives Flutter Windows Artifacts
231224
if (host_os == "win") {
232225
zip_bundle("windows_flutter") {

build/dart/BUILD.gn

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
# found in the LICENSE file.
44

55
import("//flutter/build/concurrent_jobs.gni")
6+
import("//flutter/common/config.gni")
7+
import("//third_party/dart/build/dart/copy_tree.gni")
68

79
declare_args() {
810
# Maximum number of Dart processes to run in parallel.
@@ -14,3 +16,25 @@ declare_args() {
1416
pool("dart_pool") {
1517
depth = concurrent_dart_jobs
1618
}
19+
20+
if (flutter_prebuilt_dart_sdk) {
21+
copy_trees("_copy_trees") {
22+
sources = [
23+
{
24+
target = "copy_dart_sdk"
25+
visibility = [ ":dart_sdk" ]
26+
source = prebuilt_dart_sdk
27+
dest = "$root_out_dir/dart-sdk"
28+
ignore_patterns = "{}"
29+
},
30+
]
31+
}
32+
}
33+
34+
group("dart_sdk") {
35+
if (flutter_prebuilt_dart_sdk) {
36+
public_deps = [ ":copy_dart_sdk" ]
37+
} else {
38+
public_deps = [ "//third_party/dart:create_sdk" ]
39+
}
40+
}

ci/builders/linux_host_engine.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
"flutter/build/archives:embedder",
6565
"flutter/build/archives:flutter_patched_sdk",
6666
"flutter/build/archives:dart_sdk_archive",
67-
"flutter/build/archives:flutter_web_sdk",
67+
"flutter/web_sdk",
6868
"flutter/tools/font-subset",
6969
"flutter/shell/platform/linux:flutter_gtk"
7070
]
@@ -151,8 +151,7 @@
151151
"targets": [
152152
"flutter:unittests",
153153
"flutter/build/archives:flutter_patched_sdk",
154-
"flutter/shell/platform/linux:flutter_gtk",
155-
"flutter/build/archives:flutter_web_sdk"
154+
"flutter/shell/platform/linux:flutter_gtk"
156155
]
157156
},
158157
"tests": [

ci/builders/mac_host_engine.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"flutter/shell/platform/darwin/macos:zip_macos_flutter_framework",
3838
"flutter/build/archives:artifacts",
3939
"flutter/build/archives:dart_sdk_archive",
40-
"flutter/build/archives:flutter_web_sdk",
40+
"flutter/web_sdk",
4141
"flutter/build/archives:archive_gen_snapshot",
4242
"flutter/build/archives:flutter_embedder_framework"
4343
]

ci/builders/windows_host_engine.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"flutter/build/archives:dart_sdk_archive",
4242
"flutter/shell/platform/windows/client_wrapper:client_wrapper_archive",
4343
"flutter/build/archives:windows_flutter",
44-
"flutter/build/archives:flutter_web_sdk"
44+
"flutter/web_sdk"
4545
]
4646
},
4747
"tests": [

common/config.gni

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ declare_args() {
2222

2323
# Whether to use a prebuilt Dart SDK instead of building one.
2424
flutter_prebuilt_dart_sdk = false
25+
26+
# Whether to build the flutter web sdk outline/DDC artifacts.
27+
flutter_build_web_sdk = false
2528
}
2629

2730
# feature_defines_list ---------------------------------------------------------
@@ -114,7 +117,7 @@ if (flutter_prebuilt_dart_sdk) {
114117
# There is no prebuilt Dart SDK targeting Fuchsia, but we also don't need
115118
# one, so even when the build is targeting Fuchsia, use the prebuilt
116119
# Dart SDK for the host.
117-
if (current_toolchain == host_toolchain || is_fuchsia) {
120+
if (current_toolchain == host_toolchain || is_fuchsia || is_wasm) {
118121
prebuilt_dart_sdk = host_prebuilt_dart_sdk
119122
prebuilt_dart_sdk_config = _host_prebuilt_dart_sdk_config
120123
} else {

lib/web_ui/dev/build.dart

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// found in the LICENSE file.
44

55
import 'dart:async';
6-
import 'dart:io' show Directory, Platform;
6+
import 'dart:io' show Directory;
77

88
import 'package:args/command_runner.dart';
99
import 'package:path/path.dart' as path;
@@ -25,6 +25,12 @@ class BuildCommand extends Command<bool> with ArgUtils<bool> {
2525
'build-canvaskit',
2626
help: 'Build CanvasKit locally instead of getting it from CIPD. Disabled '
2727
'by default.',
28+
defaultsTo: true
29+
);
30+
argParser.addFlag(
31+
'host',
32+
help: 'Build the host build instead of the wasm build, which is currently'
33+
'needed for `flutter run --local-engine` to work'
2834
);
2935
}
3036

@@ -38,19 +44,15 @@ class BuildCommand extends Command<bool> with ArgUtils<bool> {
3844

3945
bool get buildCanvasKit => boolArg('build-canvaskit');
4046

47+
bool get host => boolArg('host');
48+
4149
@override
4250
FutureOr<bool> run() async {
4351
final FilePath libPath = FilePath.fromWebUi('lib');
4452
final List<PipelineStep> steps = <PipelineStep>[
45-
GnPipelineStep(),
46-
NinjaPipelineStep(target: environment.engineBuildDir),
53+
GnPipelineStep(buildCanvasKit: buildCanvasKit, host: host),
54+
NinjaPipelineStep(target: host ? environment.hostDebugUnoptDir : environment.wasmReleaseOutDir),
4755
];
48-
if (buildCanvasKit) {
49-
steps.addAll(<PipelineStep>[
50-
GnPipelineStep(target: 'canvaskit'),
51-
NinjaPipelineStep(target: environment.wasmReleaseOutDir),
52-
]);
53-
}
5456
final Pipeline buildPipeline = Pipeline(steps: steps);
5557
await buildPipeline.run();
5658

@@ -73,42 +75,38 @@ class BuildCommand extends Command<bool> with ArgUtils<bool> {
7375
/// Not safe to interrupt as it may leave the `out/` directory in a corrupted
7476
/// state. GN is pretty quick though, so it's OK to not support interruption.
7577
class GnPipelineStep extends ProcessStep {
76-
GnPipelineStep({this.target = 'engine'})
77-
: assert(target == 'engine' || target == 'canvaskit');
78+
GnPipelineStep({required this.buildCanvasKit, required this.host});
79+
80+
final bool buildCanvasKit;
81+
final bool host;
7882

7983
@override
8084
String get description => 'gn';
8185

8286
@override
8387
bool get isSafeToInterrupt => false;
8488

85-
/// The target to build with gn.
86-
///
87-
/// Acceptable values: engine, canvaskit
88-
final String target;
89-
90-
@override
91-
Future<ProcessManager> createProcess() {
92-
print('Running gn for $target...');
93-
final List<String> gnArgs = <String>[];
94-
if (target == 'engine') {
95-
gnArgs.addAll(<String>[
96-
'--unopt',
97-
if (Platform.isMacOS) '--xcode-symlinks',
89+
List<String> get _gnArgs {
90+
if (host) {
91+
return <String>[
92+
'--unoptimized',
9893
'--full-dart-sdk',
99-
if (environment.isMacosArm) '--mac-cpu=arm64',
100-
]);
101-
} else if (target == 'canvaskit') {
102-
gnArgs.addAll(<String>[
103-
'--wasm',
104-
'--runtime-mode=release',
105-
]);
94+
];
10695
} else {
107-
throw StateError('Target was not engine or canvaskit: $target');
96+
return <String>[
97+
'--web',
98+
'--runtime-mode=release',
99+
if (buildCanvasKit) '--build-canvaskit',
100+
];
108101
}
102+
}
103+
104+
@override
105+
Future<ProcessManager> createProcess() {
106+
print('Running gn...');
109107
return startProcess(
110108
path.join(environment.flutterDirectory.path, 'tools', 'gn'),
111-
gnArgs,
109+
_gnArgs,
112110
);
113111
}
114112
}

lib/web_ui/dev/environment.dart

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,19 @@ Environment? _environment;
2020
class Environment {
2121
factory Environment() {
2222
final bool isMacosArm = ffi.Abi.current() == ffi.Abi.macosArm64;
23+
final io.File dartExecutable = io.File(io.Platform.resolvedExecutable);
2324
final io.File self = io.File.fromUri(io.Platform.script);
25+
2426
final io.Directory engineSrcDir = self.parent.parent.parent.parent.parent;
2527
final io.Directory engineToolsDir =
2628
io.Directory(pathlib.join(engineSrcDir.path, 'flutter', 'tools'));
2729
final io.Directory outDir =
2830
io.Directory(pathlib.join(engineSrcDir.path, 'out'));
29-
final io.Directory engineBuildDir =
30-
io.Directory(pathlib.join(
31-
outDir.path,
32-
isMacosArm ? 'host_debug_unopt_arm64' : 'host_debug_unopt'
33-
));
3431
final io.Directory wasmReleaseOutDir =
3532
io.Directory(pathlib.join(outDir.path, 'wasm_release'));
36-
final io.Directory dartSdkDir =
37-
io.Directory(pathlib.join(engineBuildDir.path, 'dart-sdk'));
33+
final io.Directory hostDebugUnoptDir =
34+
io.Directory(pathlib.join(outDir.path, 'host_debug_unopt'));
35+
final io.Directory dartSdkDir = dartExecutable.parent.parent;
3836
final io.Directory webUiRootDir = io.Directory(
3937
pathlib.join(engineSrcDir.path, 'flutter', 'lib', 'web_ui'));
4038

@@ -55,8 +53,8 @@ class Environment {
5553
engineSrcDir: engineSrcDir,
5654
engineToolsDir: engineToolsDir,
5755
outDir: outDir,
58-
engineBuildDir: engineBuildDir,
5956
wasmReleaseOutDir: wasmReleaseOutDir,
57+
hostDebugUnoptDir: hostDebugUnoptDir,
6058
dartSdkDir: dartSdkDir,
6159
);
6260
}
@@ -68,8 +66,8 @@ class Environment {
6866
required this.engineSrcDir,
6967
required this.engineToolsDir,
7068
required this.outDir,
71-
required this.engineBuildDir,
7269
required this.wasmReleaseOutDir,
70+
required this.hostDebugUnoptDir,
7371
required this.dartSdkDir,
7472
});
7573

@@ -93,14 +91,14 @@ class Environment {
9391
/// This is where you'll find the ninja output, such as the Dart SDK.
9492
final io.Directory outDir;
9593

96-
/// The output directory for the host_debug_unopt build.
97-
final io.Directory engineBuildDir;
98-
9994
/// The output directory for the wasm_release build.
10095
///
10196
/// We build CanvasKit in release mode to reduce code size.
10297
final io.Directory wasmReleaseOutDir;
10398

99+
/// The output directory for the host_debug_unopt build.
100+
final io.Directory hostDebugUnoptDir;
101+
104102
/// The root of the Dart SDK.
105103
final io.Directory dartSdkDir;
106104

0 commit comments

Comments
 (0)