# 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/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_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_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_method_call_private.h", "fl_method_channel_private.h", "fl_method_codec_private.h", "fl_plugin_registrar_private.h", "fl_standard_message_codec_private.h", ] configs += [ "//flutter/shell/platform/linux/config:gtk", "//flutter/shell/platform/linux/config:wayland-client", ] sources = [ "egl_utils.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_json_message_codec.cc", "fl_json_method_codec.cc", "fl_key_event_plugin.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_platform_plugin.cc", "fl_plugin_registrar.cc", "fl_plugin_registry.cc", "fl_renderer.cc", "fl_renderer_headless.cc", "fl_renderer_wayland.cc", "fl_renderer_x11.cc", "fl_standard_message_codec.cc", "fl_standard_method_codec.cc", "fl_string_codec.cc", "fl_text_input_plugin.cc", "fl_value.cc", "fl_view.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/shell/platform/common/cpp:common_cpp_input", "//flutter/shell/platform/common/cpp:common_cpp_switches", "//flutter/shell/platform/embedder:embedder_headers", "//third_party/rapidjson", ] } source_set("flutter_linux") { configs += [ "//flutter/shell/platform/linux/config:gtk", "//flutter/shell/platform/linux/config:egl", "//flutter/shell/platform/linux/config:wayland-egl", "//flutter/shell/platform/linux/config:x11", "//third_party/khronos:khronos_headers", ] 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 = [] } executable("flutter_linux_unittests") { testonly = true sources = [ "egl_utils_test.cc", "fl_basic_message_channel_test.cc", "fl_binary_codec_test.cc", "fl_binary_messenger_test.cc", "fl_dart_project_test.cc", "fl_event_channel_test.cc", "fl_json_message_codec_test.cc", "fl_json_method_codec_test.cc", "fl_key_event_plugin_test.cc", "fl_message_codec_test.cc", "fl_method_channel_test.cc", "fl_method_codec_test.cc", "fl_method_response_test.cc", "fl_standard_message_codec_test.cc", "fl_standard_method_codec_test.cc", "fl_string_codec_test.cc", "fl_value_test.cc", "testing/fl_test.cc", "testing/mock_egl.cc", "testing/mock_engine.cc", "testing/mock_renderer.cc", ] public_configs = [ "//flutter:config" ] configs += [ "//flutter/shell/platform/linux/config:gtk", "//flutter/shell/platform/linux/config:wayland-egl", "//flutter/shell/platform/linux/config:x11", ] 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_sources", "//flutter/runtime:libdart", "//flutter/shell/platform/embedder:embedder_headers", "//flutter/shell/platform/embedder:embedder_test_utils", "//flutter/testing", ] } shared_library("flutter_linux_gtk") { deps = [ ":flutter_linux" ] public_configs = [ "//flutter:config" ] } copy("publish_headers_linux") { sources = _public_headers outputs = [ "$root_out_dir/flutter_linux/{{source_file_part}}" ] }