From c822ab26cfc2d2476eea9e52d6adae33ad65bd4a Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Wed, 22 Aug 2018 16:42:47 -0700 Subject: [PATCH] Allow building the embedder API for the target toolchains. (#6069) --- BUILD.gn | 2 +- shell/platform/embedder/BUILD.gn | 24 ++++++++++++++++-------- shell/platform/embedder/embedder.gni | 13 +++++++++++++ tools/gn | 5 ++++- 4 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 shell/platform/embedder/embedder.gni diff --git a/BUILD.gn b/BUILD.gn index 699af81e24c73..7b853b15cc06b 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -10,6 +10,7 @@ group("flutter") { public_deps = [ "$flutter_root/lib/snapshot:generate_snapshot_bin", "$flutter_root/lib/snapshot:kernel_platform_files", + "$flutter_root/shell/platform/embedder:flutter_engine", "$flutter_root/sky", ] @@ -45,7 +46,6 @@ group("flutter") { "$flutter_root/runtime:runtime_unittests", "$flutter_root/shell/common:shell_unittests", "$flutter_root/shell/platform/embedder:embedder_unittests", - "$flutter_root/shell/platform/embedder:flutter_engine", "$flutter_root/synchronization:synchronization_unittests", "$flutter_root/third_party/txt:txt_unittests", ] diff --git a/shell/platform/embedder/BUILD.gn b/shell/platform/embedder/BUILD.gn index db3d102a8a18d..4efa7cbbed9eb 100644 --- a/shell/platform/embedder/BUILD.gn +++ b/shell/platform/embedder/BUILD.gn @@ -4,6 +4,7 @@ import("$flutter_root/testing/testing.gni") import("$flutter_root/shell/gpu/gpu.gni") +import("$flutter_root/shell/platform/embedder/embedder.gni") shell_gpu_configuration("embedder_gpu_configuration") { enable_software = false @@ -205,14 +206,21 @@ if (is_mac) { } group("flutter_engine") { - # All platforms require the embedder dylib and headers. - deps = [ - ":copy_headers", - ":flutter_engine_library", - ] + deps = [] + + build_embedder_api = + current_toolchain == host_toolchain || embedder_for_target + + if (build_embedder_api) { + # All platforms require the embedder dylib and headers. + deps += [ + ":copy_headers", + ":flutter_engine_library", + ] - # For the Mac, the dylib is packaged in a framework with the appropriate headers. - if (is_mac) { - deps += [ ":flutter_embedder_framework" ] + # For the Mac, the dylib is packaged in a framework with the appropriate headers. + if (is_mac) { + deps += [ ":flutter_embedder_framework" ] + } } } diff --git a/shell/platform/embedder/embedder.gni b/shell/platform/embedder/embedder.gni new file mode 100644 index 0000000000000..79d06f7c9151e --- /dev/null +++ b/shell/platform/embedder/embedder.gni @@ -0,0 +1,13 @@ +# Copyright 2018 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. + +declare_args() { + # By default, the dynamic library target exposing the embedder API is only + # built for the host. The reasoning is that platforms that have target + # definitions would not need an embedder API because an embedder + # implementation is already provided for said target. This flag allows tbe + # builder to obtain a shared library exposing the embedder API for alternative + # embedder implementations. + embedder_for_target = false +} diff --git a/tools/gn b/tools/gn index 1e96bf8aacfeb..0a15b78e2b81b 100755 --- a/tools/gn +++ b/tools/gn @@ -89,6 +89,8 @@ def to_gn_args(args): gn_args['is_debug'] = args.unoptimized gn_args['android_full_debug'] = args.target_os == 'android' and args.unoptimized gn_args['is_clang'] = not sys.platform.startswith(('cygwin', 'win')) + + gn_args['embedder_for_target'] = args.embedder_for_target enable_lto = args.lto if args.unoptimized: @@ -234,9 +236,10 @@ def parse_args(args): parser.add_argument('--target-sysroot', type=str) parser.add_argument('--toolchain-prefix', type=str) - parser.add_argument('--use-glfw', action='store_true', default=False) parser.add_argument('--enable-vulkan', action='store_true', default=False) + parser.add_argument('--embedder-for-target', dest='embedder_for_target', action='store_true', default=False) + return parser.parse_args(args) def main(argv):