| # 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" ] |
| } |
| } |