mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Relands https://github.com/flutter/engine/pull/20399 Makes BinaryMessenger available from FlutterEngine, rather than just the plugin registrar. This allows for method channels directly in applications without building them as plugins, and matches the other platforms. Requires some restructuring of code and GN targets in the client wrappers to make the internals in the shared section usable by the implementations of platform-specific parts of the wrappers. Also fixes a latent issue with EnableInputBlocking symbols being declared but not defined for Windows that came up during testing of the restructing. Fixes https://github.com/flutter/flutter/issues/62871
105 lines
3.4 KiB
Plaintext
105 lines
3.4 KiB
Plaintext
# 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("core_wrapper_files.gni")
|
|
|
|
# Publishes client wrapper files to the output directory for distribution.
|
|
# This can be used multiple times to combine various portions of a wrapper
|
|
# library into one cohesive library for clients to consume.
|
|
#
|
|
# Files that should be built by clients go into 'sources', while headers meant
|
|
# to be included by the consuming code go into 'public'.
|
|
#
|
|
# All public code is assumed to be in the 'flutter' namespace.
|
|
template("publish_client_wrapper") {
|
|
forward_variables_from(invoker, [ "directory_suffix" ])
|
|
if (defined(directory_suffix)) {
|
|
publish_dir_root = "$root_out_dir/cpp_client_wrapper_$directory_suffix"
|
|
} else {
|
|
publish_dir_root = "$root_out_dir/cpp_client_wrapper"
|
|
}
|
|
template_target_name = target_name
|
|
namespace = "flutter"
|
|
|
|
group(template_target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"public_deps",
|
|
"visibility",
|
|
])
|
|
deps = [
|
|
":${template_target_name}_publish_includes",
|
|
":${template_target_name}_publish_sources",
|
|
]
|
|
if (defined(invoker.deps)) {
|
|
deps += invoker.deps
|
|
}
|
|
}
|
|
|
|
copy("${template_target_name}_publish_includes") {
|
|
visibility = [
|
|
":$template_target_name",
|
|
":${template_target_name}_publish_sources",
|
|
]
|
|
|
|
sources = invoker.public
|
|
outputs = [ "$publish_dir_root/include/$namespace/{{source_file_part}}" ]
|
|
}
|
|
|
|
copy("${template_target_name}_publish_sources") {
|
|
visibility = [ ":$template_target_name" ]
|
|
|
|
sources = invoker.sources
|
|
outputs = [ "$publish_dir_root/{{source_file_part}}" ]
|
|
|
|
# GN on Windows appears to do #include checks even for copy
|
|
# targets, so add the dependency to the headers to satisfy
|
|
# the check.
|
|
deps = [ ":${template_target_name}_publish_includes" ]
|
|
}
|
|
}
|
|
|
|
_wrapper_readme = get_path_info("README", "abspath")
|
|
|
|
# Copies the client wrapper code to the output directory.
|
|
template("publish_client_wrapper_core") {
|
|
publish_client_wrapper(target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"directory_suffix",
|
|
"visibility",
|
|
])
|
|
public = core_cpp_client_wrapper_includes
|
|
sources = core_cpp_client_wrapper_sources +
|
|
core_cpp_client_wrapper_internal_headers + [ _wrapper_readme ] +
|
|
temporary_shim_files
|
|
}
|
|
}
|
|
|
|
# A wrapper for publish_client_wrapper that will also
|
|
# publish_client_wrapper_core into the same directory.
|
|
#
|
|
# This is a convenience utility for the common case of wanting to publish
|
|
# the core wrapper and a single set of extra wrapper files corresponding to
|
|
# the platform.
|
|
template("publish_client_wrapper_extension") {
|
|
extension_target_name = target_name
|
|
core_target_name = "${target_name}_core"
|
|
|
|
publish_client_wrapper_core(core_target_name) {
|
|
visibility = [ ":$extension_target_name" ]
|
|
forward_variables_from(invoker, [ "directory_suffix" ])
|
|
}
|
|
|
|
publish_client_wrapper(extension_target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"public",
|
|
"sources",
|
|
"directory_suffix",
|
|
])
|
|
public_deps = [ ":$core_target_name" ]
|
|
}
|
|
}
|