|  | # 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. | 
|  |  | 
|  | assert(is_linux) | 
|  |  | 
|  | import("//flutter/build/zip_bundle.gni") | 
|  | import("//flutter/shell/platform/glfw/config.gni") | 
|  | import("//flutter/testing/testing.gni") | 
|  |  | 
|  | group("linux") { | 
|  | deps = [ | 
|  | ":flutter_linux_gtk", | 
|  | ":publish_headers_linux", | 
|  | ] | 
|  | if (build_glfw_shell) { | 
|  | deps += [ | 
|  | ":flutter_linux_glfw", | 
|  | "//flutter/shell/platform/glfw:publish_headers_glfw", | 
|  | "//flutter/shell/platform/glfw/client_wrapper:publish_wrapper_glfw", | 
|  | ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # Temporary workaround for the issue describe in | 
|  | # https://github.com/flutter/flutter/issues/14509 and | 
|  | # https://github.com/flutter/flutter/issues/14438 | 
|  | # Remove once the build infrastructure moves to Ubuntu 18.04 or newer, where | 
|  | # the underlying issue is fixed. | 
|  | config("disable_fatal_link_warnings") { | 
|  | visibility = [ ":*" ] | 
|  | ldflags = [ "-Wl,--no-fatal-warnings" ] | 
|  | } | 
|  |  | 
|  | if (build_glfw_shell) { | 
|  | shared_library("flutter_linux_glfw") { | 
|  | deps = [ "//flutter/shell/platform/glfw:flutter_glfw" ] | 
|  |  | 
|  | configs += [ ":disable_fatal_link_warnings" ] | 
|  |  | 
|  | public_configs = [ "//flutter:config" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | _public_headers = [ | 
|  | "public/flutter_linux/fl_basic_message_channel.h", | 
|  | "public/flutter_linux/fl_binary_codec.h", | 
|  | "public/flutter_linux/fl_binary_messenger.h", | 
|  | "public/flutter_linux/fl_dart_project.h", | 
|  | "public/flutter_linux/fl_engine.h", | 
|  | "public/flutter_linux/fl_event_channel.h", | 
|  | "public/flutter_linux/fl_json_message_codec.h", | 
|  | "public/flutter_linux/fl_json_method_codec.h", | 
|  | "public/flutter_linux/fl_message_codec.h", | 
|  | "public/flutter_linux/fl_method_call.h", | 
|  | "public/flutter_linux/fl_method_channel.h", | 
|  | "public/flutter_linux/fl_method_codec.h", | 
|  | "public/flutter_linux/fl_method_response.h", | 
|  | "public/flutter_linux/fl_pixel_buffer_texture.h", | 
|  | "public/flutter_linux/fl_plugin_registrar.h", | 
|  | "public/flutter_linux/fl_plugin_registry.h", | 
|  | "public/flutter_linux/fl_standard_message_codec.h", | 
|  | "public/flutter_linux/fl_standard_method_codec.h", | 
|  | "public/flutter_linux/fl_string_codec.h", | 
|  | "public/flutter_linux/fl_texture.h", | 
|  | "public/flutter_linux/fl_texture_gl.h", | 
|  | "public/flutter_linux/fl_texture_registrar.h", | 
|  | "public/flutter_linux/fl_value.h", | 
|  | "public/flutter_linux/fl_view.h", | 
|  | "public/flutter_linux/flutter_linux.h", | 
|  | ] | 
|  |  | 
|  | config("relative_flutter_linux_headers") { | 
|  | include_dirs = [ "public" ] | 
|  | } | 
|  |  | 
|  | source_set("flutter_linux_sources") { | 
|  | public = _public_headers + [ | 
|  | "fl_binary_messenger_private.h", | 
|  | "fl_dart_project_private.h", | 
|  | "fl_engine_private.h", | 
|  | "fl_keyboard_manager.h", | 
|  | "fl_keyboard_view_delegate.h", | 
|  | "fl_key_event.h", | 
|  | "fl_key_responder.h", | 
|  | "fl_key_channel_responder.h", | 
|  | "fl_key_embedder_responder.h", | 
|  | "fl_key_embedder_responder_private.h", | 
|  | "fl_method_call_private.h", | 
|  | "fl_method_channel_private.h", | 
|  | "fl_method_codec_private.h", | 
|  | "fl_plugin_registrar_private.h", | 
|  | "key_mapping.h", | 
|  | ] | 
|  |  | 
|  | configs += [ "//flutter/shell/platform/linux/config:gtk" ] | 
|  |  | 
|  | sources = [ | 
|  | "fl_accessible_node.cc", | 
|  | "fl_accessible_text_field.cc", | 
|  | "fl_backing_store_provider.cc", | 
|  | "fl_basic_message_channel.cc", | 
|  | "fl_binary_codec.cc", | 
|  | "fl_binary_messenger.cc", | 
|  | "fl_dart_project.cc", | 
|  | "fl_engine.cc", | 
|  | "fl_event_channel.cc", | 
|  | "fl_gnome_settings.cc", | 
|  | "fl_json_message_codec.cc", | 
|  | "fl_json_method_codec.cc", | 
|  | "fl_key_channel_responder.cc", | 
|  | "fl_key_embedder_responder.cc", | 
|  | "fl_key_event.cc", | 
|  | "fl_key_responder.cc", | 
|  | "fl_keyboard_manager.cc", | 
|  | "fl_keyboard_view_delegate.cc", | 
|  | "fl_message_codec.cc", | 
|  | "fl_method_call.cc", | 
|  | "fl_method_channel.cc", | 
|  | "fl_method_codec.cc", | 
|  | "fl_method_response.cc", | 
|  | "fl_mouse_cursor_plugin.cc", | 
|  | "fl_pixel_buffer_texture.cc", | 
|  | "fl_platform_plugin.cc", | 
|  | "fl_plugin_registrar.cc", | 
|  | "fl_plugin_registry.cc", | 
|  | "fl_renderer.cc", | 
|  | "fl_renderer_gdk.cc", | 
|  | "fl_renderer_headless.cc", | 
|  | "fl_scrolling_manager.cc", | 
|  | "fl_scrolling_view_delegate.cc", | 
|  | "fl_settings.cc", | 
|  | "fl_settings_plugin.cc", | 
|  | "fl_settings_portal.cc", | 
|  | "fl_socket_accessible.cc", | 
|  | "fl_standard_message_codec.cc", | 
|  | "fl_standard_method_codec.cc", | 
|  | "fl_string_codec.cc", | 
|  | "fl_task_runner.cc", | 
|  | "fl_task_runner.h", | 
|  | "fl_text_input_plugin.cc", | 
|  | "fl_text_input_view_delegate.cc", | 
|  | "fl_texture.cc", | 
|  | "fl_texture_gl.cc", | 
|  | "fl_texture_registrar.cc", | 
|  | "fl_value.cc", | 
|  | "fl_view.cc", | 
|  | "fl_view_accessible.cc", | 
|  | "key_mapping.g.cc", | 
|  | ] | 
|  |  | 
|  | # Set flag to stop headers being directly included (library users should not do this) | 
|  | defines = [ | 
|  | "FLUTTER_LINUX_COMPILATION", | 
|  | "FLUTTER_ENGINE_NO_PROTOTYPES", | 
|  | ] | 
|  |  | 
|  | deps = [ | 
|  | "//flutter/fml", | 
|  | "//flutter/shell/platform/common:common_cpp_enums", | 
|  | "//flutter/shell/platform/common:common_cpp_input", | 
|  | "//flutter/shell/platform/common:common_cpp_switches", | 
|  | "//flutter/shell/platform/embedder:embedder_headers", | 
|  | "//flutter/third_party/rapidjson", | 
|  | ] | 
|  | } | 
|  |  | 
|  | source_set("flutter_linux") { | 
|  | configs += [ | 
|  | "//flutter/shell/platform/linux/config:gtk", | 
|  | "//flutter/shell/platform/linux/config:epoxy", | 
|  | ] | 
|  |  | 
|  | defines = [ "FLUTTER_ENGINE_NO_PROTOTYPES" ] | 
|  |  | 
|  | public_deps = [ ":flutter_linux_sources" ] | 
|  |  | 
|  | deps = [ "//flutter/shell/platform/embedder:embedder_as_internal_library" ] | 
|  | } | 
|  |  | 
|  | test_fixtures("flutter_linux_fixtures") { | 
|  | fixtures = [] | 
|  | } | 
|  |  | 
|  | copy("flutter_linux_gschemas") { | 
|  | testonly = true | 
|  |  | 
|  | sources = [ "testing/gschemas/ubuntu-20.04.compiled" ] | 
|  | outputs = [ "$target_gen_dir/assets/{{source_name_part}}/gschemas.compiled" ] | 
|  | } | 
|  |  | 
|  | executable("flutter_linux_unittests") { | 
|  | testonly = true | 
|  |  | 
|  | sources = [ | 
|  | "fl_accessible_node_test.cc", | 
|  | "fl_accessible_text_field_test.cc", | 
|  | "fl_basic_message_channel_test.cc", | 
|  | "fl_binary_codec_test.cc", | 
|  | "fl_binary_messenger_test.cc", | 
|  | "fl_dart_project_test.cc", | 
|  | "fl_engine_test.cc", | 
|  | "fl_event_channel_test.cc", | 
|  | "fl_gnome_settings_test.cc", | 
|  | "fl_json_message_codec_test.cc", | 
|  | "fl_json_method_codec_test.cc", | 
|  | "fl_key_channel_responder_test.cc", | 
|  | "fl_key_embedder_responder_test.cc", | 
|  | "fl_keyboard_manager_test.cc", | 
|  | "fl_message_codec_test.cc", | 
|  | "fl_method_channel_test.cc", | 
|  | "fl_method_codec_test.cc", | 
|  | "fl_method_response_test.cc", | 
|  | "fl_pixel_buffer_texture_test.cc", | 
|  | "fl_platform_plugin_test.cc", | 
|  | "fl_plugin_registrar_test.cc", | 
|  | "fl_renderer_test.cc", | 
|  | "fl_scrolling_manager_test.cc", | 
|  | "fl_settings_plugin_test.cc", | 
|  | "fl_settings_portal_test.cc", | 
|  | "fl_standard_message_codec_test.cc", | 
|  | "fl_standard_method_codec_test.cc", | 
|  | "fl_string_codec_test.cc", | 
|  | "fl_text_input_plugin_test.cc", | 
|  | "fl_texture_gl_test.cc", | 
|  | "fl_texture_registrar_test.cc", | 
|  | "fl_value_test.cc", | 
|  | "fl_view_accessible_test.cc", | 
|  | "fl_view_test.cc", | 
|  | "key_mapping_test.cc", | 
|  | "testing/fl_test.cc", | 
|  | "testing/fl_test_gtk_logs.cc", | 
|  | "testing/fl_test_gtk_logs.h", | 
|  | "testing/mock_binary_messenger.cc", | 
|  | "testing/mock_binary_messenger_response_handle.cc", | 
|  | "testing/mock_engine.cc", | 
|  | "testing/mock_epoxy.cc", | 
|  | "testing/mock_im_context.cc", | 
|  | "testing/mock_plugin_registrar.cc", | 
|  | "testing/mock_renderer.cc", | 
|  | "testing/mock_settings.cc", | 
|  | "testing/mock_signal_handler.cc", | 
|  | "testing/mock_text_input_plugin.cc", | 
|  | "testing/mock_text_input_view_delegate.cc", | 
|  | "testing/mock_texture_registrar.cc", | 
|  | ] | 
|  |  | 
|  | public_configs = [ "//flutter:config" ] | 
|  |  | 
|  | configs += [ | 
|  | "//flutter/shell/platform/linux/config:gtk", | 
|  | "//flutter/shell/platform/linux/config:epoxy", | 
|  | ] | 
|  |  | 
|  | defines = [ | 
|  | "FLUTTER_ENGINE_NO_PROTOTYPES", | 
|  |  | 
|  | # Set flag to allow public headers to be directly included | 
|  | # (library users should not do this) | 
|  | "FLUTTER_LINUX_COMPILATION", | 
|  | ] | 
|  |  | 
|  | deps = [ | 
|  | ":flutter_linux_fixtures", | 
|  | ":flutter_linux_gschemas", | 
|  | ":flutter_linux_sources", | 
|  | "//flutter/runtime:libdart", | 
|  | "//flutter/shell/platform/common:common_cpp_enums", | 
|  | "//flutter/shell/platform/embedder:embedder_headers", | 
|  | "//flutter/shell/platform/embedder:embedder_test_utils", | 
|  | "//flutter/testing", | 
|  | ] | 
|  | } | 
|  |  | 
|  | shared_library("flutter_linux_gtk") { | 
|  | deps = [ ":flutter_linux" ] | 
|  |  | 
|  | ldflags = [ "-Wl,-rpath,\$ORIGIN" ] | 
|  |  | 
|  | public_configs = [ "//flutter:config" ] | 
|  | } | 
|  |  | 
|  | copy("publish_headers_linux") { | 
|  | sources = _public_headers | 
|  | outputs = [ "$root_out_dir/flutter_linux/{{source_file_part}}" ] | 
|  | } | 
|  |  | 
|  | zip_bundle("flutter_gtk") { | 
|  | prefix = "$full_target_platform_name-$flutter_runtime_mode/" | 
|  | output = "${prefix}${full_target_platform_name}-flutter-gtk.zip" | 
|  | deps = [ | 
|  | ":flutter_linux_gtk", | 
|  | ":publish_headers_linux", | 
|  | "$dart_src/runtime/bin:gen_snapshot", | 
|  | ] | 
|  | sources = get_target_outputs(":publish_headers_linux") | 
|  | tmp_files = [] | 
|  | foreach(source, sources) { | 
|  | tmp_files += [ | 
|  | { | 
|  | source = source | 
|  | destination = rebase_path(source, "$root_build_dir") | 
|  | }, | 
|  | ] | 
|  | } | 
|  | tmp_files += [ | 
|  | { | 
|  | source = "$root_build_dir/libflutter_${host_os}_gtk.so" | 
|  | destination = "libflutter_${host_os}_gtk.so" | 
|  | }, | 
|  | { | 
|  | source = "$root_build_dir/gen_snapshot" | 
|  | destination = "gen_snapshot" | 
|  | }, | 
|  | ] | 
|  | files = tmp_files | 
|  | } |