| # 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_shared.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/FlutterDartProject.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/AccessibilityBridgeMacDelegate.h", |
| "framework/Source/AccessibilityBridgeMacDelegate.mm", |
| "framework/Source/FlutterAppDelegate.mm", |
| "framework/Source/FlutterBackingStore.h", |
| "framework/Source/FlutterBackingStore.mm", |
| "framework/Source/FlutterBackingStoreData.h", |
| "framework/Source/FlutterBackingStoreData.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/FlutterExternalTextureGL.h", |
| "framework/Source/FlutterExternalTextureGL.mm", |
| "framework/Source/FlutterExternalTextureMetal.h", |
| "framework/Source/FlutterExternalTextureMetal.mm", |
| "framework/Source/FlutterFrameBufferProvider.h", |
| "framework/Source/FlutterFrameBufferProvider.mm", |
| "framework/Source/FlutterGLCompositor.h", |
| "framework/Source/FlutterGLCompositor.mm", |
| "framework/Source/FlutterIOSurfaceHolder.h", |
| "framework/Source/FlutterIOSurfaceHolder.mm", |
| "framework/Source/FlutterKeyPrimaryResponder.h", |
| "framework/Source/FlutterKeyboardManager.h", |
| "framework/Source/FlutterKeyboardManager.mm", |
| "framework/Source/FlutterKeyboardViewDelegate.h", |
| "framework/Source/FlutterMacOSExternalTexture.h", |
| "framework/Source/FlutterMacOSExternalTexture.h", |
| "framework/Source/FlutterMenuPlugin.h", |
| "framework/Source/FlutterMenuPlugin.mm", |
| "framework/Source/FlutterMenuPlugin_Internal.h", |
| "framework/Source/FlutterMetalCompositor.h", |
| "framework/Source/FlutterMetalCompositor.mm", |
| "framework/Source/FlutterMetalRenderer.h", |
| "framework/Source/FlutterMetalRenderer.mm", |
| "framework/Source/FlutterMouseCursorPlugin.h", |
| "framework/Source/FlutterMouseCursorPlugin.mm", |
| "framework/Source/FlutterOpenGLRenderer.h", |
| "framework/Source/FlutterOpenGLRenderer.mm", |
| "framework/Source/FlutterPlatformNodeDelegateMac.h", |
| "framework/Source/FlutterPlatformNodeDelegateMac.mm", |
| "framework/Source/FlutterPlatformViewController.h", |
| "framework/Source/FlutterPlatformViewController.mm", |
| "framework/Source/FlutterRenderer.h", |
| "framework/Source/FlutterRenderingBackend.h", |
| "framework/Source/FlutterRenderingBackend.mm", |
| "framework/Source/FlutterResizableBackingStoreProvider.h", |
| "framework/Source/FlutterResizableBackingStoreProvider.mm", |
| "framework/Source/FlutterResizeSynchronizer.h", |
| "framework/Source/FlutterResizeSynchronizer.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/FlutterView.h", |
| "framework/Source/FlutterView.mm", |
| "framework/Source/FlutterViewController.mm", |
| "framework/Source/FlutterViewController_Internal.h", |
| "framework/Source/KeyCodeMap.g.mm", |
| "framework/Source/MacOSGLContextSwitch.h", |
| "framework/Source/MacOSGLContextSwitch.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:framework_shared", |
| "//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" ] |
| |
| 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/AccessibilityBridgeMacDelegateTest.mm", |
| "framework/Source/FlutterChannelKeyResponderUnittests.mm", |
| "framework/Source/FlutterEmbedderExternalTextureUnittests.mm", |
| "framework/Source/FlutterEmbedderKeyResponderUnittests.mm", |
| "framework/Source/FlutterEngineTest.mm", |
| "framework/Source/FlutterEngineTestUtils.h", |
| "framework/Source/FlutterEngineTestUtils.mm", |
| "framework/Source/FlutterFrameBufferProviderUnittests.mm", |
| "framework/Source/FlutterGLCompositorUnittests.mm", |
| "framework/Source/FlutterKeyboardManagerUnittests.mm", |
| "framework/Source/FlutterMenuPluginTest.mm", |
| "framework/Source/FlutterMetalCompositorUnittests.mm", |
| "framework/Source/FlutterMetalRendererTest.mm", |
| "framework/Source/FlutterMetalSurfaceManagerTest.mm", |
| "framework/Source/FlutterOpenGLRendererTest.mm", |
| "framework/Source/FlutterPlatformNodeDelegateMacTest.mm", |
| "framework/Source/FlutterPlatformViewControllerTest.mm", |
| "framework/Source/FlutterTextInputPluginTest.mm", |
| "framework/Source/FlutterTextInputSemanticsObjectTest.mm", |
| "framework/Source/FlutterViewControllerTest.mm", |
| "framework/Source/FlutterViewControllerTestUtils.h", |
| "framework/Source/FlutterViewControllerTestUtils.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_shared", |
| "//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_shared_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" ] |
| } |
| |
| 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" ] |
| } |