Skip to content

Commit

Permalink
Reland ui_web files in sky_engine (#41169)
Browse files Browse the repository at this point in the history
Previous attempt was here: #40846

I was including un-rewritten source files, which caused breakage. Now we run out `ui_web` files through the sdk_rewriter script before putting them into sky_engine
  • Loading branch information
eyebrowsoffire committed Apr 17, 2023
1 parent 4a603aa commit 8d92070
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 74 deletions.
7 changes: 7 additions & 0 deletions lib/ui/dart_ui.gni
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,10 @@ dart_ui_files = [
]

dart_ui_path = "//flutter/lib/ui/ui.dart"

dart_ui_web_files = [
"$root_out_dir/flutter_web_sdk/lib/ui_web/ui_web/url_strategy.dart",
"$root_out_dir/flutter_web_sdk/lib/ui_web/ui_web.dart",
]

dart_ui_web_path = "//flutter/lib/web_ui/lib/ui_web/src/ui_web.dart"
7 changes: 7 additions & 0 deletions sky/packages/sky_engine/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import("//build/fuchsia/sdk.gni")
import("//flutter/build/dart/rules.gni")
import("//flutter/lib/ui/dart_ui.gni")
import("//flutter/web_sdk/web_sdk.gni")
import("//third_party/dart/sdk/lib/_http/http_sources.gni")
import(
"//third_party/dart/sdk/lib/_internal/js_runtime/interceptors_sources.gni")
Expand Down Expand Up @@ -175,6 +176,10 @@ copy("copy_dart_ui") {
outputs = [ "$root_gen_dir/dart-pkg/sky_engine/lib/ui/{{source_file_part}}" ]
}

web_ui_ui_web_with_output("copy_dart_ui_web") {
output_dir = "$root_gen_dir/dart-pkg/sky_engine/lib/ui_web/"
}

copy("copy_allowed_experiments") {
sources = [ "//third_party/dart/sdk/lib/_internal/allowed_experiments.json" ]

Expand Down Expand Up @@ -230,6 +235,7 @@ generated_file("_embedder_yaml") {
" \"dart:math\": \"math/math.dart\"",
" \"dart:typed_data\": \"typed_data/typed_data.dart\"",
" \"dart:ui\": \"ui/ui.dart\"",
" \"dart:ui_web\": \"ui_web/ui_web.dart\"",
"",
" \"dart:_http\": \"_http/http.dart\"",
" \"dart:_interceptors\": \"_interceptors/interceptors.dart\"",
Expand Down Expand Up @@ -257,6 +263,7 @@ dart_pkg("sky_engine") {
":_embedder_yaml",
":copy_dart_sdk",
":copy_dart_ui",
":copy_dart_ui_web",
]

if (!is_fuchsia) {
Expand Down
1 change: 1 addition & 0 deletions sky/packages/sky_engine/lib/_embedder.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ embedded_libs:
"dart:math": "../../../../../third_party/dart/sdk/lib/math/math.dart"
"dart:typed_data": "../../../../../third_party/dart/sdk/lib/typed_data/typed_data.dart"
"dart:ui": "../../../../lib/ui/ui.dart"
"dart:ui_web": "../../../../lib/web_ui/lib/ui_web/src/ui_web.dart"

"dart:_http": "../../../../../third_party/dart/sdk/lib/_http/http.dart"
"dart:_interceptors": "../../../../../third_party/dart/sdk/lib/_interceptors/interceptors.dart"
Expand Down
76 changes: 2 additions & 74 deletions web_sdk/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@

import("//flutter/build/zip_bundle.gni")
import("//flutter/common/config.gni")
import("//flutter/web_sdk/web_sdk.gni")
import("//third_party/dart/build/dart/dart_action.gni")

dart_sdk_package_config = "//third_party/dart/.dart_tool/package_config.json"

web_ui_sources = exec_script("//third_party/dart/tools/list_dart_files.py",
[
"absolute",
Expand All @@ -34,73 +33,6 @@ group("web_sdk") {
]
}

template("sdk_rewriter") {
ui = defined(invoker.ui) && invoker.ui
if (!ui) {
assert(defined(invoker.library_name), "Must pass 'library_name'")
assert(defined(invoker.api_file), "Must pass 'api_file'")
}
assert(defined(invoker.input_dir), "Must pass 'input_dir'")
assert(defined(invoker.output_dir), "Must pass 'output_dir'")

source_dart_files = exec_script("//third_party/dart/tools/list_dart_files.py",
[
"absolute",
rebase_path(invoker.input_dir),
],
"list lines")

if (defined(invoker.exclude_patterns)) {
filtered_files = filter_exclude(source_dart_files, invoker.exclude_patterns)
source_dart_files = []
source_dart_files = filtered_files
}

prebuilt_dart_action(target_name) {
packages = dart_sdk_package_config
pool = "//flutter/build/dart:dart_pool"

script = "sdk_rewriter.dart"
inputs = source_dart_files + [ "sdk_rewriter.dart" ]

stamp_location = "$target_gen_dir/$target_name.stamp"
outputs = [
stamp_location,
invoker.output_dir,
]

input_dir = rebase_path(invoker.input_dir)
output_dir = rebase_path(invoker.output_dir)

args = [
"--output-dir=$output_dir",
"--input-dir=$input_dir",
"--stamp",
rebase_path(stamp_location, root_build_dir),
]

if (defined(invoker.is_public) && invoker.is_public) {
args += [ "--public" ]
}

if (ui) {
args += [ "--ui" ]
} else {
library_name = invoker.library_name
api_file = rebase_path(invoker.api_file)
args += [
"--library-name=$library_name",
"--api-file=$api_file",
]
}

foreach(source_file, source_dart_files) {
path = rebase_path(source_file)
args += [ "--source-file=$path" ]
}
}
}

sdk_rewriter("web_ui_library_sources") {
ui = true
input_dir = "//flutter/lib/web_ui/lib/"
Expand All @@ -110,11 +42,7 @@ sdk_rewriter("web_ui_library_sources") {
exclude_patterns = [ rebase_path("//flutter/lib/web_ui/lib/src/*") ]
}

sdk_rewriter("web_ui_ui_web") {
library_name = "ui_web"
is_public = true
api_file = "//flutter/lib/web_ui/lib/ui_web/src/ui_web.dart"
input_dir = "//flutter/lib/web_ui/lib/ui_web/src/ui_web/"
web_ui_ui_web_with_output("web_ui_ui_web") {
output_dir = "$root_out_dir/flutter_web_sdk/lib/ui_web/"
}

Expand Down
85 changes: 85 additions & 0 deletions web_sdk/web_sdk.gni
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Copyright 2019 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("//flutter/common/config.gni")
import("//third_party/dart/build/dart/dart_action.gni")

dart_sdk_package_config = "//third_party/dart/.dart_tool/package_config.json"

template("sdk_rewriter") {
ui = defined(invoker.ui) && invoker.ui
if (!ui) {
assert(defined(invoker.library_name), "Must pass 'library_name'")
assert(defined(invoker.api_file), "Must pass 'api_file'")
}
assert(defined(invoker.input_dir), "Must pass 'input_dir'")
assert(defined(invoker.output_dir), "Must pass 'output_dir'")

source_dart_files = exec_script("//third_party/dart/tools/list_dart_files.py",
[
"absolute",
rebase_path(invoker.input_dir),
],
"list lines")

if (defined(invoker.exclude_patterns)) {
filtered_files = filter_exclude(source_dart_files, invoker.exclude_patterns)
source_dart_files = []
source_dart_files = filtered_files
}

prebuilt_dart_action(target_name) {
packages = dart_sdk_package_config
pool = "//flutter/build/dart:dart_pool"

script = "//flutter/web_sdk/sdk_rewriter.dart"
inputs = source_dart_files + [ script ]

stamp_location = "$target_gen_dir/$target_name.stamp"
outputs = [
stamp_location,
invoker.output_dir,
]

input_dir = rebase_path(invoker.input_dir)
output_dir = rebase_path(invoker.output_dir)

args = [
"--output-dir=$output_dir",
"--input-dir=$input_dir",
"--stamp",
rebase_path(stamp_location, root_build_dir),
]

if (defined(invoker.is_public) && invoker.is_public) {
args += [ "--public" ]
}

if (ui) {
args += [ "--ui" ]
} else {
library_name = invoker.library_name
api_file = rebase_path(invoker.api_file)
args += [
"--library-name=$library_name",
"--api-file=$api_file",
]
}

foreach(source_file, source_dart_files) {
path = rebase_path(source_file)
args += [ "--source-file=$path" ]
}
}
}

template("web_ui_ui_web_with_output") {
sdk_rewriter(target_name) {
library_name = "ui_web"
is_public = true
api_file = "//flutter/lib/web_ui/lib/ui_web/src/ui_web.dart"
input_dir = "//flutter/lib/web_ui/lib/ui_web/src/ui_web/"
output_dir = invoker.output_dir
}
}

0 comments on commit 8d92070

Please sign in to comment.