| # 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_mac) | |
| import("//build/config/mac/mac_sdk.gni") | |
| import("//flutter/build/zip_bundle.gni") | |
| import("//flutter/shell/gpu/gpu.gni") | |
| import("//flutter/shell/platform/darwin/common/framework_common.gni") | |
| import("//flutter/shell/platform/glfw/config.gni") | |
| import("//flutter/testing/testing.gni") | |
| shell_gpu_configuration("macos_gpu_configuration") { | |
| enable_software = true | |
| enable_gl = true | |
| enable_vulkan = false | |
| enable_metal = shell_enable_metal | |
| } | |
| group("macos") { | |
| deps = [ ":flutter_framework" ] | |
| if (build_glfw_shell) { | |
| deps += [ | |
| ":flutter_macos_glfw", | |
| "//flutter/shell/platform/glfw:publish_headers_glfw", | |
| "//flutter/shell/platform/glfw/client_wrapper:publish_wrapper_glfw", | |
| ] | |
| } | |
| } | |
| _flutter_framework_name = "FlutterMacOS" | |
| _flutter_framework_filename = "$_flutter_framework_name.framework" | |
| _flutter_framework_dir = "$root_out_dir/$_flutter_framework_filename" | |
| _framework_binary_subpath = "Versions/A/$_flutter_framework_name" | |
| # The headers that will be copied to the framework and be accessed from outside | |
| # the Flutter engine source root. | |
| _flutter_framework_headers = [ | |
| "framework/Headers/FlutterAppDelegate.h", | |
| "framework/Headers/FlutterAppLifecycleDelegate.h", | |
| "framework/Headers/FlutterEngine.h", | |
| "framework/Headers/FlutterMacOS.h", | |
| "framework/Headers/FlutterPlatformViews.h", | |
| "framework/Headers/FlutterPluginMacOS.h", | |
| "framework/Headers/FlutterPluginRegistrarMacOS.h", | |
| "framework/Headers/FlutterViewController.h", | |
| ] | |
| _flutter_framework_headers_copy_dir = | |
| "$_flutter_framework_dir/Versions/A/Headers" | |
| source_set("flutter_framework_source") { | |
| visibility = [ ":*" ] | |
| sources = [ | |
| "framework/Source/AccessibilityBridgeMac.h", | |
| "framework/Source/AccessibilityBridgeMac.mm", | |
| "framework/Source/FlutterAppDelegate.mm", | |
| "framework/Source/FlutterAppLifecycleDelegate.mm", | |
| "framework/Source/FlutterBackingStore.h", | |
| "framework/Source/FlutterBackingStore.mm", | |
| "framework/Source/FlutterChannelKeyResponder.h", | |
| "framework/Source/FlutterChannelKeyResponder.mm", | |
| "framework/Source/FlutterCompositor.h", | |
| "framework/Source/FlutterCompositor.mm", | |
| "framework/Source/FlutterDartProject.mm", | |
| "framework/Source/FlutterDartProject_Internal.h", | |
| "framework/Source/FlutterEmbedderKeyResponder.h", | |
| "framework/Source/FlutterEmbedderKeyResponder.mm", | |
| "framework/Source/FlutterEngine.mm", | |
| "framework/Source/FlutterEngine_Internal.h", | |
| "framework/Source/FlutterExternalTexture.h", | |
| "framework/Source/FlutterExternalTexture.mm", | |
| "framework/Source/FlutterKeyPrimaryResponder.h", | |
| "framework/Source/FlutterKeyboardManager.h", | |
| "framework/Source/FlutterKeyboardManager.mm", | |
| "framework/Source/FlutterKeyboardViewDelegate.h", | |
| "framework/Source/FlutterMenuPlugin.h", | |
| "framework/Source/FlutterMenuPlugin.mm", | |
| "framework/Source/FlutterMenuPlugin_Internal.h", | |
| "framework/Source/FlutterMouseCursorPlugin.h", | |
| "framework/Source/FlutterMouseCursorPlugin.mm", | |
| "framework/Source/FlutterMutatorView.h", | |
| "framework/Source/FlutterMutatorView.mm", | |
| "framework/Source/FlutterPlatformNodeDelegateMac.h", | |
| "framework/Source/FlutterPlatformNodeDelegateMac.mm", | |
| "framework/Source/FlutterPlatformViewController.h", | |
| "framework/Source/FlutterPlatformViewController.mm", | |
| "framework/Source/FlutterRenderer.h", | |
| "framework/Source/FlutterRenderer.mm", | |
| "framework/Source/FlutterSurface.h", | |
| "framework/Source/FlutterSurface.mm", | |
| "framework/Source/FlutterSurfaceManager.h", | |
| "framework/Source/FlutterSurfaceManager.mm", | |
| "framework/Source/FlutterTextInputPlugin.h", | |
| "framework/Source/FlutterTextInputPlugin.mm", | |
| "framework/Source/FlutterTextInputSemanticsObject.h", | |
| "framework/Source/FlutterTextInputSemanticsObject.mm", | |
| "framework/Source/FlutterTextureRegistrar.h", | |
| "framework/Source/FlutterTextureRegistrar.mm", | |
| "framework/Source/FlutterThreadSynchronizer.h", | |
| "framework/Source/FlutterThreadSynchronizer.mm", | |
| "framework/Source/FlutterView.h", | |
| "framework/Source/FlutterView.mm", | |
| "framework/Source/FlutterViewController.mm", | |
| "framework/Source/FlutterViewController_Internal.h", | |
| "framework/Source/FlutterViewEngineProvider.h", | |
| "framework/Source/FlutterViewEngineProvider.mm", | |
| "framework/Source/FlutterViewProvider.h", | |
| "framework/Source/KeyCodeMap.g.mm", | |
| ] | |
| sources += _flutter_framework_headers | |
| deps = [ | |
| ":macos_gpu_configuration", | |
| "//flutter/flow:flow", | |
| "//flutter/fml", | |
| "//flutter/shell/platform/common:common_cpp_accessibility", | |
| "//flutter/shell/platform/common:common_cpp_enums", | |
| "//flutter/shell/platform/common:common_cpp_input", | |
| "//flutter/shell/platform/common:common_cpp_switches", | |
| "//flutter/shell/platform/darwin/common:availability_version_check", | |
| "//flutter/shell/platform/darwin/common:framework_common", | |
| "//flutter/shell/platform/darwin/graphics:graphics", | |
| "//flutter/shell/platform/embedder:embedder_as_internal_library", | |
| "//third_party/skia", | |
| ] | |
| public_configs = [ "//flutter:config" ] | |
| defines = [ | |
| "FLUTTER_FRAMEWORK", | |
| "FLUTTER_ENGINE_NO_PROTOTYPES", | |
| ] | |
| cflags_objcc = flutter_cflags_objcc_arc | |
| frameworks = [ | |
| "Carbon.framework", | |
| "Cocoa.framework", | |
| "CoreVideo.framework", | |
| "IOSurface.framework", | |
| "Metal.framework", | |
| "QuartzCore.framework", | |
| ] | |
| } | |
| shared_library("flutter_framework_dylib") { | |
| visibility = [ ":*" ] | |
| output_name = "$_flutter_framework_name" | |
| ldflags = [ | |
| "-Wl,-install_name,@rpath/$_flutter_framework_filename/$_framework_binary_subpath", | |
| "-fapplication-extension", | |
| ] | |
| deps = [ ":flutter_framework_source" ] | |
| } | |
| test_fixtures("flutter_desktop_darwin_fixtures") { | |
| dart_main = "framework/Source/fixtures/flutter_desktop_test.dart" | |
| fixtures = [ "//third_party/icu/common/icudtl.dat" ] | |
| } | |
| executable("flutter_desktop_darwin_unittests") { | |
| testonly = true | |
| sources = [ | |
| "framework/Source/AccessibilityBridgeMacTest.mm", | |
| "framework/Source/FlutterAppDelegateTest.mm", | |
| "framework/Source/FlutterAppLifecycleDelegateTest.mm", | |
| "framework/Source/FlutterChannelKeyResponderTest.mm", | |
| "framework/Source/FlutterCompositorTest.mm", | |
| "framework/Source/FlutterEmbedderExternalTextureTest.mm", | |
| "framework/Source/FlutterEmbedderKeyResponderTest.mm", | |
| "framework/Source/FlutterEngineTest.mm", | |
| "framework/Source/FlutterEngineTestUtils.h", | |
| "framework/Source/FlutterEngineTestUtils.mm", | |
| "framework/Source/FlutterKeyboardManagerTest.mm", | |
| "framework/Source/FlutterMenuPluginTest.mm", | |
| "framework/Source/FlutterMutatorViewTest.mm", | |
| "framework/Source/FlutterPlatformNodeDelegateMacTest.mm", | |
| "framework/Source/FlutterPlatformViewControllerTest.mm", | |
| "framework/Source/FlutterSurfaceManagerTest.mm", | |
| "framework/Source/FlutterTextInputPluginTest.mm", | |
| "framework/Source/FlutterTextInputSemanticsObjectTest.mm", | |
| "framework/Source/FlutterThreadSynchronizerTest.mm", | |
| "framework/Source/FlutterViewControllerTest.mm", | |
| "framework/Source/FlutterViewControllerTestUtils.h", | |
| "framework/Source/FlutterViewControllerTestUtils.mm", | |
| "framework/Source/FlutterViewEngineProviderTest.mm", | |
| "framework/Source/FlutterViewTest.mm", | |
| "framework/Source/TestFlutterPlatformView.h", | |
| "framework/Source/TestFlutterPlatformView.mm", | |
| ] | |
| cflags_objcc = flutter_cflags_objcc_arc | |
| ldflags = [ "-ObjC" ] | |
| deps = [ | |
| ":flutter_desktop_darwin_fixtures", | |
| ":flutter_framework_source", | |
| "//flutter/shell/platform/common:common_cpp_accessibility", | |
| "//flutter/shell/platform/common:common_cpp_enums", | |
| "//flutter/shell/platform/darwin/common:framework_common", | |
| "//flutter/shell/platform/darwin/graphics", | |
| "//flutter/shell/platform/embedder:embedder_as_internal_library", | |
| "//flutter/shell/platform/embedder:embedder_test_utils", | |
| "//flutter/testing", | |
| "//flutter/testing:dart", | |
| "//flutter/testing:skia", | |
| "//flutter/testing:testing_lib", | |
| "//third_party/ocmock:ocmock", | |
| ] | |
| } | |
| copy("copy_dylib") { | |
| visibility = [ ":*" ] | |
| sources = [ "$root_out_dir/lib$_flutter_framework_name.dylib" ] | |
| outputs = [ "$_flutter_framework_dir/$_framework_binary_subpath" ] | |
| deps = [ ":flutter_framework_dylib" ] | |
| } | |
| copy("copy_framework_info_plist") { | |
| visibility = [ ":*" ] | |
| sources = [ "framework/Info.plist" ] | |
| outputs = [ "$_flutter_framework_dir/Versions/A/Resources/Info.plist" ] | |
| } | |
| copy("copy_framework_module_map") { | |
| visibility = [ ":*" ] | |
| sources = [ "framework/module.modulemap" ] | |
| outputs = [ "$_flutter_framework_dir/Versions/A/Modules/module.modulemap" ] | |
| } | |
| action("copy_framework_headers") { | |
| script = "//flutter/sky/tools/install_framework_headers.py" | |
| visibility = [ ":*" ] | |
| sources = get_path_info(_flutter_framework_headers, "abspath") + | |
| framework_common_headers | |
| outputs = [] | |
| foreach(header, sources) { | |
| header_basename = get_path_info(header, "file") | |
| outputs += [ "$_flutter_framework_headers_copy_dir/$header_basename" ] | |
| } | |
| args = [ | |
| "--location", | |
| rebase_path("$_flutter_framework_headers_copy_dir"), | |
| "--headers", | |
| ] + rebase_path(sources, "", "//") | |
| } | |
| copy("copy_framework_icu") { | |
| visibility = [ ":*" ] | |
| sources = [ "//third_party/icu/flutter/icudtl.dat" ] | |
| outputs = | |
| [ "$_flutter_framework_dir/Versions/A/Resources/{{source_file_part}}" ] | |
| } | |
| copy("copy_license") { | |
| visibility = [ ":*" ] | |
| sources = [ "//LICENSE" ] | |
| outputs = [ "$root_out_dir/LICENSE" ] | |
| } | |
| action("_generate_symlinks") { | |
| visibility = [ ":*" ] | |
| script = "//build/config/mac/package_framework.py" | |
| outputs = [ | |
| "$root_build_dir/$_flutter_framework_name.stamp", | |
| "$root_out_dir/$_flutter_framework_filename", | |
| ] | |
| args = [ | |
| "--framework", | |
| "$_flutter_framework_filename", | |
| "--version", | |
| "A", | |
| "--contents", | |
| "$_flutter_framework_name", | |
| "Resources", | |
| "Headers", | |
| "Modules", | |
| "--stamp", | |
| "$_flutter_framework_name.stamp", | |
| ] | |
| deps = [ | |
| ":copy_dylib", | |
| ":copy_framework_headers", | |
| ":copy_framework_icu", | |
| ":copy_framework_info_plist", | |
| ":copy_framework_module_map", | |
| ":copy_license", | |
| ] | |
| metadata = { | |
| macos_framework_without_entitlement = | |
| [ "FlutterMacOS.framework.zip/Versions/A/FlutterMacOS" ] | |
| } | |
| } | |
| group("flutter_framework") { | |
| deps = [ ":_generate_symlinks_and_verify_framework_module" ] | |
| } | |
| if (build_glfw_shell) { | |
| shared_library("flutter_macos_glfw") { | |
| deps = [ "//flutter/shell/platform/glfw:flutter_glfw" ] | |
| public_configs = [ "//flutter:config" ] | |
| } | |
| } | |
| zip_bundle("zip_macos_flutter_framework") { | |
| deps = [ | |
| ":_generate_symlinks", | |
| ":macos_framework_without_entitlement_config", | |
| ] | |
| prefix = "$full_platform_name-$flutter_runtime_mode/" | |
| if (flutter_runtime_mode == "debug") { | |
| prefix = "$full_platform_name/" | |
| } | |
| output = "${prefix}FlutterMacOS.framework.zip" | |
| visibility = [ ":*" ] | |
| files = [ | |
| { | |
| source = "$root_out_dir/FlutterMacOS.framework" | |
| destination = "FlutterMacOS.framework" | |
| }, | |
| ] | |
| } | |
| generated_file("macos_framework_without_entitlement_config") { | |
| outputs = [ "$target_gen_dir/framework_without_entitlements.txt" ] | |
| data_keys = [ "macos_framework_without_entitlement" ] | |
| deps = [ ":_generate_symlinks" ] | |
| } | |
| shared_library("_generate_symlinks_and_verify_framework_module") { | |
| framework_search_path = rebase_path("$root_out_dir") | |
| visibility = [ ":*" ] | |
| cflags_objc = [ "-F$framework_search_path" ] | |
| ldflags = [ | |
| "-F$framework_search_path", | |
| "-fapplication-extension", | |
| "-Xlinker", | |
| "-fatal_warnings", | |
| ] | |
| frameworks = [ "FlutterMacOS.framework" ] | |
| sources = [ "framework/Source/FlutterUmbrellaImportTests.m" ] | |
| deps = [ ":_generate_symlinks" ] | |
| } |