BUILD.gn 6.3 KB
Newer Older
1 2 3 4 5 6
# Copyright 2016 The Chromium 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_ios)

7
import("$flutter_root/common/config.gni")
8 9
import("//build/config/ios/ios_sdk.gni")

10 11
_flutter_framework_dir = "$root_out_dir/Flutter.framework"

12 13 14 15 16 17 18 19 20
# The headers that will be copied to the Flutter.framework and be accessed
# from outside the Flutter engine source root.
_flutter_framework_headers = [
  "framework/Headers/Flutter.h",
  "framework/Headers/FlutterAppDelegate.h",
  "framework/Headers/FlutterBinaryMessenger.h",
  "framework/Headers/FlutterChannels.h",
  "framework/Headers/FlutterCodecs.h",
  "framework/Headers/FlutterDartProject.h",
21
  "framework/Headers/FlutterHeadlessDartRunner.h",
22 23 24
  "framework/Headers/FlutterMacros.h",
  "framework/Headers/FlutterNavigationController.h",
  "framework/Headers/FlutterPlugin.h",
25
  "framework/Headers/FlutterTexture.h",
26 27 28 29 30 31
  "framework/Headers/FlutterViewController.h",
]

_flutter_framework_headers_copy_dir = "$_flutter_framework_dir/Headers"

shared_library("create_flutter_framework_dylib") {
32 33 34 35 36 37
  visibility = [ ":*" ]

  output_name = "Flutter"

  sources = [
    "framework/Source/FlutterAppDelegate.mm",
38 39
    "framework/Source/FlutterChannels.mm",
    "framework/Source/FlutterCodecs.mm",
40
    "framework/Source/FlutterDartProject.mm",
41
    "framework/Source/FlutterDartProject_Internal.h",
42
    "framework/Source/FlutterHeadlessDartRunner.mm",
43 44
    "framework/Source/FlutterDartSource.h",
    "framework/Source/FlutterDartSource.mm",
45
    "framework/Source/FlutterNavigationController.mm",
46 47
    "framework/Source/FlutterPlatformPlugin.h",
    "framework/Source/FlutterPlatformPlugin.mm",
48 49
    "framework/Source/FlutterStandardCodec.mm",
    "framework/Source/FlutterStandardCodec_Internal.h",
50 51 52
    "framework/Source/FlutterTextInputDelegate.h",
    "framework/Source/FlutterTextInputPlugin.h",
    "framework/Source/FlutterTextInputPlugin.mm",
53 54 55
    "framework/Source/FlutterView.h",
    "framework/Source/FlutterView.mm",
    "framework/Source/FlutterViewController.mm",
56 57
    "framework/Source/accessibility_bridge.h",
    "framework/Source/accessibility_bridge.mm",
Y
Yegor 已提交
58 59
    "framework/Source/accessibility_text_entry.h",
    "framework/Source/accessibility_text_entry.mm",
60 61
    "framework/Source/flutter_main_ios.h",
    "framework/Source/flutter_main_ios.mm",
62 63
    "framework/Source/flutter_touch_mapper.h",
    "framework/Source/flutter_touch_mapper.mm",
64 65
    "framework/Source/platform_message_router.h",
    "framework/Source/platform_message_router.mm",
66 67
    "framework/Source/vsync_waiter_ios.h",
    "framework/Source/vsync_waiter_ios.mm",
68 69
    "ios_external_texture_gl.h",
    "ios_external_texture_gl.mm",
70 71 72 73 74 75 76 77
    "ios_gl_context.h",
    "ios_gl_context.mm",
    "ios_surface.h",
    "ios_surface.mm",
    "ios_surface_gl.h",
    "ios_surface_gl.mm",
    "ios_surface_software.h",
    "ios_surface_software.mm",
78 79 80
    "platform_view_ios.h",
    "platform_view_ios.mm",
  ]
81

82 83
  sources += _flutter_framework_headers

84
  deps = [
85 86 87 88 89 90 91 92 93
    "$flutter_root/flow",
    "$flutter_root/fml",
    "$flutter_root/glue",
    "$flutter_root/lib/ui",
    "$flutter_root/shell/common",
    "$flutter_root/shell/gpu",
    "$flutter_root/shell/platform/darwin/common",
    "$flutter_root/sky/engine/platform",
    "$flutter_root/sky/engine/wtf",
94
    "//garnet/public/lib/fxl",
95
    "//third_party/skia",
96
  ]
97
  if (flutter_runtime_mode == "debug") {
98
    deps += [ "//third_party/dart/runtime:libdart_jit" ]
99
  } else {
100
    deps += [ "//third_party/dart/runtime:libdart_precompiled_runtime" ]
101
  }
102

103
  public_configs = [ "$flutter_root:config" ]
104

105
  defines = [ "FLUTTER_FRAMEWORK" ]
106 107

  libs = [
108 109
    "CoreMedia.framework",
    "CoreVideo.framework",
110 111 112 113 114 115 116
    "UIKit.framework",
    "OpenGLES.framework",
    "AudioToolbox.framework",
    "QuartzCore.framework",
  ]
}

117
copy("copy_framework_dylib") {
118
  visibility = [ ":*" ]
119

120 121 122 123 124 125
  sources = [
    "$root_out_dir/libFlutter.dylib",
  ]
  outputs = [
    "$_flutter_framework_dir/Flutter",
  ]
126 127

  deps = [
128
    ":create_flutter_framework_dylib",
129 130 131
  ]
}

132
action("copy_dylib_and_update_framework_install_name") {
133 134
  visibility = [ ":*" ]
  stamp_file = "$root_out_dir/flutter_install_name_stamp"
135
  script = "$flutter_root/sky/tools/change_install_name.py"
136

137 138 139 140 141 142
  inputs = [
    "$_flutter_framework_dir/Flutter",
  ]
  outputs = [
    stamp_file,
  ]
143 144 145 146 147 148 149 150 151 152 153

  args = [
    "--dylib",
    rebase_path("$_flutter_framework_dir/Flutter"),
    "--install_name",
    "@rpath/Flutter.framework/Flutter",
    "--stamp",
    rebase_path(stamp_file),
  ]

  deps = [
154
    ":copy_framework_dylib",
155 156 157
  ]
}

158
copy("copy_framework_info_plist") {
159
  visibility = [ ":*" ]
160 161 162 163 164 165
  sources = [
    "framework/Info.plist",
  ]
  outputs = [
    "$_flutter_framework_dir/Info.plist",
  ]
166 167
}

168
copy("copy_framework_module_map") {
169
  visibility = [ ":*" ]
170 171 172 173 174 175
  sources = [
    "framework/module.modulemap",
  ]
  outputs = [
    "$_flutter_framework_dir/Modules/module.modulemap",
  ]
176
}
177

178 179
action("copy_framework_headers") {
  script = "$flutter_root/sky/tools/install_framework_headers.py"
180
  visibility = [ ":*" ]
181 182 183 184 185 186 187 188 189 190 191
  sources = _flutter_framework_headers
  outputs = []
  foreach(header, _flutter_framework_headers) {
    header_basename = rebase_path(header, "framework/headers")
    outputs += [ "$_flutter_framework_headers_copy_dir/$header_basename" ]
  }
  args = [
           "--location",
           rebase_path("$_flutter_framework_headers_copy_dir"),
           "--headers",
         ] + rebase_path(_flutter_framework_headers)
192 193
}

194
copy("copy_framework_icu") {
195 196 197
  visibility = [ ":*" ]
  set_sources_assignment_filter([])
  sources = [
198
    "//third_party/icu/ios/icudtl.dat",
199 200
  ]
  set_sources_assignment_filter(sources_assignment_filter)
201 202 203
  outputs = [
    "$_flutter_framework_dir/{{source_file_part}}",
  ]
204 205
}

206
copy("copy_framework_podspec") {
207 208 209 210 211 212 213 214 215
  visibility = [ ":*" ]
  sources = [
    "framework/Flutter.podspec",
  ]
  outputs = [
    "$root_out_dir/Flutter.podspec",
  ]
}

216 217 218 219 220 221 222 223 224 225 226
shared_library("copy_and_verify_framework_headers") {
  visibility = [ ":*" ]
  include_dirs = [ "$_flutter_framework_headers_copy_dir" ]
  sources = [
    "framework/Source/FlutterUmbrellaImport.m",
  ]
  deps = [
    ":copy_framework_headers",
  ]
}

227
group("flutter_framework") {
228 229 230 231 232 233 234
  deps = [
    ":copy_and_verify_framework_headers",
    ":copy_dylib_and_update_framework_install_name",
    ":copy_framework_icu",
    ":copy_framework_info_plist",
    ":copy_framework_module_map",
    ":copy_framework_podspec",
235 236
  ]
}