BUILD.gn 10.0 KB
Newer Older
1 2 3 4 5 6 7
# 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")
8
import("//flutter/shell/gpu/gpu.gni")
9 10 11
import("//flutter/shell/platform/darwin/common/framework_shared.gni")
import("//flutter/shell/platform/glfw/config.gni")
import("//flutter/testing/testing.gni")
12

13 14 15 16 17 18 19
shell_gpu_configuration("macos_gpu_configuration") {
  enable_software = true
  enable_gl = true
  enable_vulkan = false
  enable_metal = shell_enable_metal
}

20
group("macos") {
21
  deps = [ ":flutter_framework" ]
22 23 24
  if (build_glfw_shell) {
    deps += [
      ":flutter_macos_glfw",
25 26
      "//flutter/shell/platform/glfw:publish_headers_glfw",
      "//flutter/shell/platform/glfw/client_wrapper:publish_wrapper_glfw",
27 28 29
    ]
  }
}
30

31 32 33
_flutter_framework_name = "FlutterMacOS"
_flutter_framework_filename = "$_flutter_framework_name.framework"
_flutter_framework_dir = "$root_out_dir/$_flutter_framework_filename"
34
_framework_binary_subpath = "Versions/A/$_flutter_framework_name"
35

36 37
# The headers that will be copied to the framework and be accessed from outside
# the Flutter engine source root.
38
_flutter_framework_headers = [
39
  "framework/Headers/FlutterAppDelegate.h",
40 41
  "framework/Headers/FlutterDartProject.h",
  "framework/Headers/FlutterEngine.h",
42
  "framework/Headers/FlutterMacOS.h",
43 44
  "framework/Headers/FlutterPluginMacOS.h",
  "framework/Headers/FlutterPluginRegistrarMacOS.h",
45
  "framework/Headers/FlutterViewController.h",
46 47 48 49 50
]

_flutter_framework_headers_copy_dir =
    "$_flutter_framework_dir/Versions/A/Headers"

51
source_set("flutter_framework_source") {
52 53 54
  visibility = [ ":*" ]

  sources = [
55 56
    "framework/Source/AccessibilityBridgeMacDelegate.h",
    "framework/Source/AccessibilityBridgeMacDelegate.mm",
57
    "framework/Source/FlutterAppDelegate.mm",
58 59
    "framework/Source/FlutterBackingStore.h",
    "framework/Source/FlutterBackingStore.mm",
60 61
    "framework/Source/FlutterBackingStoreData.h",
    "framework/Source/FlutterBackingStoreData.mm",
T
Tong Mu 已提交
62 63
    "framework/Source/FlutterChannelKeyResponder.h",
    "framework/Source/FlutterChannelKeyResponder.mm",
64 65
    "framework/Source/FlutterCompositor.h",
    "framework/Source/FlutterCompositor.mm",
66 67
    "framework/Source/FlutterDartProject.mm",
    "framework/Source/FlutterDartProject_Internal.h",
T
Tong Mu 已提交
68 69
    "framework/Source/FlutterEmbedderKeyResponder.h",
    "framework/Source/FlutterEmbedderKeyResponder.mm",
70 71
    "framework/Source/FlutterEngine.mm",
    "framework/Source/FlutterEngine_Internal.h",
72 73
    "framework/Source/FlutterExternalTextureGL.h",
    "framework/Source/FlutterExternalTextureGL.mm",
74 75
    "framework/Source/FlutterExternalTextureMetal.h",
    "framework/Source/FlutterExternalTextureMetal.mm",
76 77
    "framework/Source/FlutterFrameBufferProvider.h",
    "framework/Source/FlutterFrameBufferProvider.mm",
78 79
    "framework/Source/FlutterGLCompositor.h",
    "framework/Source/FlutterGLCompositor.mm",
80 81
    "framework/Source/FlutterIOSurfaceHolder.h",
    "framework/Source/FlutterIOSurfaceHolder.mm",
T
Tong Mu 已提交
82 83 84 85
    "framework/Source/FlutterKeyPrimaryResponder.h",
    "framework/Source/FlutterKeySecondaryResponder.h",
    "framework/Source/FlutterKeyboardManager.h",
    "framework/Source/FlutterKeyboardManager.mm",
86 87
    "framework/Source/FlutterMacOSExternalTexture.h",
    "framework/Source/FlutterMacOSExternalTexture.h",
88 89
    "framework/Source/FlutterMetalCompositor.h",
    "framework/Source/FlutterMetalCompositor.mm",
90 91
    "framework/Source/FlutterMetalRenderer.h",
    "framework/Source/FlutterMetalRenderer.mm",
T
Tong Mu 已提交
92 93
    "framework/Source/FlutterMouseCursorPlugin.h",
    "framework/Source/FlutterMouseCursorPlugin.mm",
94 95
    "framework/Source/FlutterOpenGLRenderer.h",
    "framework/Source/FlutterOpenGLRenderer.mm",
96 97
    "framework/Source/FlutterPlatformNodeDelegateMac.h",
    "framework/Source/FlutterPlatformNodeDelegateMac.mm",
98
    "framework/Source/FlutterRenderer.h",
99 100
    "framework/Source/FlutterRenderingBackend.h",
    "framework/Source/FlutterRenderingBackend.mm",
101 102
    "framework/Source/FlutterResizableBackingStoreProvider.h",
    "framework/Source/FlutterResizableBackingStoreProvider.mm",
103 104 105 106
    "framework/Source/FlutterResizeSynchronizer.h",
    "framework/Source/FlutterResizeSynchronizer.mm",
    "framework/Source/FlutterSurfaceManager.h",
    "framework/Source/FlutterSurfaceManager.mm",
107 108
    "framework/Source/FlutterTextInputPlugin.h",
    "framework/Source/FlutterTextInputPlugin.mm",
109 110
    "framework/Source/FlutterTextureRegistrar.h",
    "framework/Source/FlutterTextureRegistrar.mm",
111 112
    "framework/Source/FlutterView.h",
    "framework/Source/FlutterView.mm",
113 114
    "framework/Source/FlutterViewController.mm",
    "framework/Source/FlutterViewController_Internal.h",
T
Tong Mu 已提交
115
    "framework/Source/KeyCodeMap.mm",
116 117
    "framework/Source/MacOSGLContextSwitch.h",
    "framework/Source/MacOSGLContextSwitch.mm",
118 119 120 121 122
  ]

  sources += _flutter_framework_headers

  deps = [
123
    ":macos_gpu_configuration",
124 125
    "//flutter/flow:flow",
    "//flutter/fml",
126
    "//flutter/shell/platform/common:common_cpp_accessibility",
127
    "//flutter/shell/platform/common:common_cpp_input",
128
    "//flutter/shell/platform/common:common_cpp_switches",
129
    "//flutter/shell/platform/darwin/common:framework_shared",
130
    "//flutter/shell/platform/darwin/graphics:graphics",
131
    "//flutter/shell/platform/embedder:embedder_as_internal_library",
132
    "//third_party/skia",
133 134
  ]

135
  public_configs = [ "//flutter:config" ]
136

137 138 139 140
  defines = [
    "FLUTTER_FRAMEWORK",
    "FLUTTER_ENGINE_NO_PROTOTYPES",
  ]
141

142
  cflags_objcc = flutter_cflags_objcc_arc
143

144 145 146
  libs = [
    "Cocoa.framework",
    "CoreVideo.framework",
147
    "IOSurface.framework",
148
    "Metal.framework",
149
    "QuartzCore.framework",
150
  ]
151 152
}

153 154 155 156
shared_library("flutter_framework_dylib") {
  visibility = [ ":*" ]
  output_name = "$_flutter_framework_name"

157 158
  ldflags = [ "-Wl,-install_name,@rpath/$_flutter_framework_filename/$_framework_binary_subpath" ]

159
  deps = [ ":flutter_framework_source" ]
160 161 162 163 164 165 166 167 168 169 170
}

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

J
Justin McCandless 已提交
171
  sources = [
172
    "framework/Source/AccessibilityBridgeMacDelegateTest.mm",
T
Tong Mu 已提交
173
    "framework/Source/FlutterChannelKeyResponderUnittests.mm",
174
    "framework/Source/FlutterEmbedderExternalTextureUnittests.mm",
T
Tong Mu 已提交
175
    "framework/Source/FlutterEmbedderKeyResponderUnittests.mm",
176
    "framework/Source/FlutterEngineTest.mm",
177
    "framework/Source/FlutterGLCompositorUnittests.mm",
T
Tong Mu 已提交
178
    "framework/Source/FlutterKeyboardManagerUnittests.mm",
179 180 181
    "framework/Source/FlutterMetalRendererTest.mm",
    "framework/Source/FlutterMetalSurfaceManagerTest.mm",
    "framework/Source/FlutterOpenGLRendererTest.mm",
182
    "framework/Source/FlutterPlatformNodeDelegateMacTest.mm",
183
    "framework/Source/FlutterTextInputPluginTest.mm",
J
Justin McCandless 已提交
184
    "framework/Source/FlutterViewControllerTest.mm",
185 186
    "framework/Source/FlutterViewControllerTestUtils.h",
    "framework/Source/FlutterViewControllerTestUtils.mm",
J
Justin McCandless 已提交
187
  ]
188

189
  cflags_objcc = flutter_cflags_objcc_arc
190

191 192
  ldflags = [ "-ObjC" ]

193 194 195
  deps = [
    ":flutter_desktop_darwin_fixtures",
    ":flutter_framework_source",
196
    "//flutter/shell/platform/common:common_cpp_accessibility",
197
    "//flutter/shell/platform/darwin/common:framework_shared",
198
    "//flutter/shell/platform/darwin/graphics",
199
    "//flutter/shell/platform/embedder:embedder_as_internal_library",
200
    "//flutter/shell/platform/embedder:embedder_test_utils",
201 202 203 204
    "//flutter/testing",
    "//flutter/testing:dart",
    "//flutter/testing:skia",
    "//flutter/testing:testing_lib",
J
Justin McCandless 已提交
205
    "//third_party/ocmock:ocmock",
206 207 208
  ]
}

209
copy("copy_dylib") {
210 211
  visibility = [ ":*" ]

212 213
  sources = [ "$root_out_dir/lib$_flutter_framework_name.dylib" ]
  outputs = [ "$_flutter_framework_dir/$_framework_binary_subpath" ]
214

215
  deps = [ ":flutter_framework_dylib" ]
216 217 218 219
}

copy("copy_framework_info_plist") {
  visibility = [ ":*" ]
220 221
  sources = [ "framework/Info.plist" ]
  outputs = [ "$_flutter_framework_dir/Versions/A/Resources/Info.plist" ]
222 223 224 225
}

copy("copy_framework_module_map") {
  visibility = [ ":*" ]
226 227
  sources = [ "framework/module.modulemap" ]
  outputs = [ "$_flutter_framework_dir/Versions/A/Modules/module.modulemap" ]
228 229 230
}

action("copy_framework_headers") {
231
  script = "//flutter/sky/tools/install_framework_headers.py"
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
  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 = [ ":*" ]
249 250 251
  sources = [ "//third_party/icu/flutter/icudtl.dat" ]
  outputs =
      [ "$_flutter_framework_dir/Versions/A/Resources/{{source_file_part}}" ]
252 253 254 255
}

copy("copy_license") {
  visibility = [ ":*" ]
256 257
  sources = [ "//LICENSE" ]
  outputs = [ "$root_out_dir/LICENSE" ]
258 259 260 261 262
}

action("_generate_symlinks") {
  visibility = [ ":*" ]
  script = "//build/config/mac/package_framework.py"
263
  outputs = [ "$root_build_dir/$_flutter_framework_name.stamp" ]
264 265
  args = [
    "--framework",
266
    "$_flutter_framework_filename",
267 268 269 270 271 272 273 274 275 276 277
    "--version",
    "A",
    "--contents",
    "$_flutter_framework_name",
    "Resources",
    "Headers",
    "Modules",
    "--stamp",
    "$_flutter_framework_name.stamp",
  ]
  deps = [
278
    ":copy_dylib",
279 280 281 282 283 284 285 286
    ":copy_framework_headers",
    ":copy_framework_icu",
    ":copy_framework_info_plist",
    ":copy_framework_module_map",
    ":copy_license",
  ]
}

287 288
copy("copy_framework_podspec") {
  visibility = [ ":*" ]
289 290
  sources = [ "framework/FlutterMacOS.podspec" ]
  outputs = [ "$root_out_dir/FlutterMacOS.podspec" ]
291 292
}

293 294 295
group("flutter_framework") {
  deps = [
    ":_generate_symlinks",
296
    ":copy_framework_podspec",
297 298
  ]
}
299 300 301

if (build_glfw_shell) {
  shared_library("flutter_macos_glfw") {
302
    deps = [ "//flutter/shell/platform/glfw:flutter_glfw" ]
303

304
    public_configs = [ "//flutter:config" ]
305 306
  }
}