blob: 2e5a9cc6e7423b8f0bf01977d8be789ac406336a [file] [log] [blame]
# 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/common/config.gni")
import("//flutter/shell/platform/darwin/common/framework_shared.gni")
import("//flutter/shell/platform/glfw/config.gni")
import("//flutter/testing/testing.gni")
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/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/FlutterAppDelegate.mm",
"framework/Source/FlutterDartProject.mm",
"framework/Source/FlutterDartProject_Internal.h",
"framework/Source/FlutterEngine.mm",
"framework/Source/FlutterEngine_Internal.h",
"framework/Source/FlutterExternalTextureGL.h",
"framework/Source/FlutterExternalTextureGL.mm",
"framework/Source/FlutterMouseCursorPlugin.h",
"framework/Source/FlutterMouseCursorPlugin.mm",
"framework/Source/FlutterTextInputModel.h",
"framework/Source/FlutterTextInputModel.mm",
"framework/Source/FlutterTextInputPlugin.h",
"framework/Source/FlutterTextInputPlugin.mm",
"framework/Source/FlutterView.h",
"framework/Source/FlutterView.mm",
"framework/Source/FlutterViewController.mm",
"framework/Source/FlutterViewController_Internal.h",
]
sources += _flutter_framework_headers
deps = [
"//flutter/shell/platform/darwin/common:framework_shared",
"//flutter/shell/platform/embedder:embedder_with_symbol_prefix",
]
public_configs = [ "//flutter:config" ]
defines = [ "FLUTTER_FRAMEWORK" ]
cflags_objcc = [ "-fobjc-arc" ]
libs = [
"Cocoa.framework",
"CoreVideo.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/FlutterEngineUnittests.mm",
]
cflags_objcc = [ "-fobjc-arc" ]
deps = [
":flutter_desktop_darwin_fixtures",
":flutter_framework_source",
"//flutter/shell/platform/darwin/common:framework_shared",
"//flutter/shell/platform/embedder:embedder_with_symbol_prefix",
"//flutter/testing",
"//flutter/testing:dart",
"//flutter/testing:skia",
"//flutter/testing:testing_lib",
]
}
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",
]
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",
]
}
copy("copy_framework_podspec") {
visibility = [ ":*" ]
sources = [
"framework/FlutterMacOS.podspec",
]
outputs = [
"$root_out_dir/FlutterMacOS.podspec",
]
}
group("flutter_framework") {
deps = [
":_generate_symlinks",
":copy_framework_podspec",
]
}
if (build_glfw_shell) {
shared_library("flutter_macos_glfw") {
deps = [
"//flutter/shell/platform/glfw:flutter_glfw",
]
public_configs = [ "//flutter:config" ]
}
}