| # 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("$flutter_root/common/config.gni") |
| import("$flutter_root/shell/gpu/gpu.gni") |
| import("$flutter_root/shell/platform/embedder/embedder.gni") |
| import("$flutter_root/testing/testing.gni") |
| |
| shell_gpu_configuration("embedder_gpu_configuration") { |
| enable_software = true |
| enable_vulkan = false |
| enable_gl = true |
| enable_metal = false |
| } |
| |
| # Template for the embedder build. Used to allow building it multiple times with |
| # different flags. |
| template("embedder_source_set") { |
| forward_variables_from(invoker, "*") |
| |
| source_set(target_name) { |
| sources = [ |
| "embedder.cc", |
| "embedder.h", |
| "embedder_engine.cc", |
| "embedder_engine.h", |
| "embedder_external_texture_gl.cc", |
| "embedder_external_texture_gl.h", |
| "embedder_external_view_embedder.cc", |
| "embedder_external_view_embedder.h", |
| "embedder_include.c", |
| "embedder_platform_message_response.cc", |
| "embedder_platform_message_response.h", |
| "embedder_render_target.cc", |
| "embedder_render_target.h", |
| "embedder_safe_access.h", |
| "embedder_surface.cc", |
| "embedder_surface.h", |
| "embedder_surface_gl.cc", |
| "embedder_surface_gl.h", |
| "embedder_surface_software.cc", |
| "embedder_surface_software.h", |
| "embedder_task_runner.cc", |
| "embedder_task_runner.h", |
| "embedder_thread_host.cc", |
| "embedder_thread_host.h", |
| "platform_view_embedder.cc", |
| "platform_view_embedder.h", |
| "vsync_waiter_embedder.cc", |
| "vsync_waiter_embedder.h", |
| ] |
| |
| deps = [ |
| ":embedder_gpu_configuration", |
| "$flutter_root/assets", |
| "$flutter_root/common", |
| "$flutter_root/flow", |
| "$flutter_root/fml", |
| "$flutter_root/lib/ui", |
| "$flutter_root/runtime:libdart", |
| "$flutter_root/shell/common", |
| "//third_party/dart/runtime/bin:dart_io_api", |
| "//third_party/skia", |
| "//third_party/tonic", |
| ] |
| |
| public_configs += [ "$flutter_root:config" ] |
| } |
| } |
| |
| embedder_source_set("embedder") { |
| public_configs = [] |
| } |
| |
| embedder_source_set("embedder_with_symbol_prefix") { |
| public_configs = [ ":embedder_prefix_config" ] |
| } |
| |
| config("embedder_prefix_config") { |
| defines = [ "FLUTTER_API_SYMBOL_PREFIX=Embedder" ] |
| } |
| |
| test_fixtures("fixtures") { |
| dart_main = "fixtures/main.dart" |
| fixtures = [ "fixtures/compositor.png" ] |
| } |
| |
| if (current_toolchain == host_toolchain) { |
| executable("embedder_unittests") { |
| testonly = true |
| |
| configs += [ "$flutter_root:export_dynamic_symbols" ] |
| |
| include_dirs = [ "." ] |
| |
| sources = [ |
| "tests/embedder_a11y_unittests.cc", |
| "tests/embedder_config_builder.cc", |
| "tests/embedder_config_builder.h", |
| "tests/embedder_test.cc", |
| "tests/embedder_test.h", |
| "tests/embedder_test_compositor.cc", |
| "tests/embedder_test_compositor.h", |
| "tests/embedder_test_context.cc", |
| "tests/embedder_test_context.h", |
| "tests/embedder_unittests.cc", |
| ] |
| |
| deps = [ |
| ":embedder", |
| ":fixtures", |
| "$flutter_root/lib/ui", |
| "$flutter_root/runtime", |
| "$flutter_root/testing:dart", |
| "$flutter_root/testing:opengl", |
| "//third_party/skia", |
| "//third_party/tonic", |
| ] |
| } |
| } |
| |
| shared_library("flutter_engine_library") { |
| visibility = [ ":*" ] |
| |
| output_name = "flutter_engine" |
| |
| deps = [ |
| ":embedder", |
| ] |
| |
| public_configs = [ "$flutter_root:config" ] |
| } |
| |
| copy("copy_headers") { |
| visibility = [ ":*" ] |
| sources = [ |
| "embedder.h", |
| ] |
| outputs = [ |
| "$root_out_dir/flutter_embedder.h", |
| ] |
| } |
| |
| if (is_mac && !embedder_for_target) { |
| _flutter_embedder_framework_dir = "$root_out_dir/FlutterEmbedder.framework" |
| |
| copy("copy_dylib") { |
| visibility = [ ":*" ] |
| sources = [ |
| "$root_out_dir/libflutter_engine.dylib", |
| ] |
| outputs = [ |
| "$_flutter_embedder_framework_dir/Versions/A/FlutterEmbedder", |
| ] |
| deps = [ |
| ":flutter_engine_library", |
| ] |
| } |
| |
| copy("copy_framework_headers") { |
| visibility = [ ":*" ] |
| sources = [ |
| "embedder.h", |
| ] |
| outputs = [ |
| "$_flutter_embedder_framework_dir/Versions/A/Headers/FlutterEmbedder.h", |
| ] |
| } |
| |
| copy("copy_icu") { |
| visibility = [ ":*" ] |
| sources = [ |
| "//third_party/icu/flutter/icudtl.dat", |
| ] |
| outputs = [ |
| "$_flutter_embedder_framework_dir/Versions/A/Resources/icudtl.dat", |
| ] |
| } |
| |
| action("copy_info_plist") { |
| script = "$flutter_root/build/copy_info_plist.py" |
| visibility = [ ":*" ] |
| sources = [ |
| "assets/EmbedderInfo.plist", |
| ] |
| outputs = [ |
| "$_flutter_embedder_framework_dir/Versions/A/Resources/Info.plist", |
| ] |
| args = [ |
| rebase_path(sources[0]), |
| rebase_path(outputs[0]), |
| "--bitcode=$flutter_enable_bitcode", |
| ] |
| } |
| |
| copy("copy_module_map") { |
| visibility = [ ":*" ] |
| sources = [ |
| "assets/embedder.modulemap", |
| ] |
| outputs = [ |
| "$_flutter_embedder_framework_dir/Versions/A/Modules/module.modulemap", |
| ] |
| } |
| |
| action("install_dylib") { |
| visibility = [ ":*" ] |
| stamp_file = "$root_build_dir/flutter_embedder_install_name_stamp" |
| script = "$flutter_root/sky/tools/change_install_name.py" |
| |
| inputs = [ |
| "$_flutter_embedder_framework_dir/Versions/A/FlutterEmbedder", |
| ] |
| |
| outputs = [ |
| stamp_file, |
| ] |
| |
| args = [ |
| "--dylib", |
| "FlutterEmbedder.framework/Versions/A/FlutterEmbedder", |
| "--install_name", |
| "@rpath/FlutterEmbedder.framework/Versions/A/FlutterEmbedder", |
| "--stamp", |
| rebase_path(stamp_file), |
| ] |
| |
| deps = [ |
| ":copy_dylib", |
| ] |
| } |
| |
| action("generate_symlinks") { |
| visibility = [ ":*" ] |
| script = "//build/config/mac/package_framework.py" |
| outputs = [ |
| "$root_build_dir/FlutterEmbedder.stamp", |
| ] |
| args = [ |
| "--framework", |
| "FlutterEmbedder.framework", |
| "--version", |
| "A", |
| "--contents", |
| "FlutterEmbedder", |
| "Resources", |
| "Headers", |
| "Modules", |
| "--stamp", |
| "FlutterEmbedder.stamp", |
| ] |
| deps = [ |
| ":copy_framework_headers", |
| ":copy_icu", |
| ":copy_info_plist", |
| ":copy_module_map", |
| ":install_dylib", |
| ] |
| } |
| |
| group("flutter_embedder_framework") { |
| visibility = [ ":*" ] |
| deps = [ |
| ":generate_symlinks", |
| ] |
| } |
| } |
| |
| group("flutter_engine") { |
| 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 && !embedder_for_target) { |
| deps += [ ":flutter_embedder_framework" ] |
| } |
| } |
| } |