blob: 3c882087c9b27d8e0a692bc99950cc8dd257079c [file] [log] [blame]
# Copyright 2015 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.
import("//build/config/ui.gni")
source_set("common") {
sources = [
"gpu/picture_serializer.cc",
"gpu/picture_serializer.h",
"platform_view.cc",
"platform_view.h",
"rasterizer.cc",
"rasterizer.h",
"shell.cc",
"shell.h",
"shell_view.cc",
"shell_view.h",
"switches.cc",
"switches.h",
"tracing_controller.cc",
"tracing_controller.h",
"ui/animator.cc",
"ui/animator.h",
"ui/engine.cc",
"ui/engine.h",
"ui/flutter_font_selector.cc",
"ui/flutter_font_selector.h",
"ui/platform_impl.cc",
"ui/platform_impl.h",
"ui_delegate.cc",
"ui_delegate.h",
]
if (is_ios && !use_ios_simulator) {
dart_deps = [ "//dart/runtime:libdart_precompiled_runtime" ]
} else {
dart_deps = [ "//dart/runtime:libdart" ]
}
public_deps = dart_deps + [
"//base",
"//base:i18n",
"//build/config/sanitizers:deps",
"//flow",
"//mojo/common",
"//mojo/data_pipe_utils",
"//mojo/message_pump",
"//mojo/public/cpp/application",
"//mojo/public/interfaces/application",
"//mojo/services/asset_bundle/interfaces",
"//mojo/services/gfx/composition/interfaces",
"//mojo/services/navigation/interfaces",
"//mojo/services/vsync/interfaces",
"//services/asset_bundle:lib",
"//skia",
"//sky/engine",
"//sky/engine/bindings",
"//sky/engine/core:core",
"//sky/engine/tonic",
"//sky/engine/wtf",
"//sky/services/editing:interfaces",
"//sky/services/engine:interfaces",
"//sky/services/platform",
"//sky/services/pointer:interfaces",
"//sky/services/rasterizer:interfaces",
"//sky/services/semantics:interfaces",
"//sky/shell/dart",
"//ui/gfx",
]
}
source_set("gpu_direct") {
sources = [
"gpu/direct/surface_notifications_direct.cc",
"gpu/direct/surface_notifications_direct.h",
"gpu/direct/rasterizer_direct.cc",
"gpu/direct/rasterizer_direct.h",
"gpu/direct/ganesh_canvas.cc",
"gpu/direct/ganesh_canvas.h",
]
deps = [
"//ui/gl",
":common",
]
}
source_set("gpu_mojo") {
sources = [
"gpu/mojo/gl_texture_recycler.cc",
"gpu/mojo/gl_texture_recycler.h",
"gpu/mojo/rasterizer_mojo.cc",
"gpu/mojo/rasterizer_mojo.h",
]
deps = [
"//mojo/gpu",
"//mojo/public/c/gpu",
"//mojo/skia",
":common",
]
}
if (is_linux || is_mac) {
source_set("testing") {
sources = [
"testing/test_runner.cc",
"testing/test_runner.h",
"testing/testing.cc",
"testing/testing.h",
]
deps = [
":common",
]
}
}
if (is_android) {
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
generate_jni("jni_headers") {
sources = [
"platform/android/org/domokit/sky/shell/PlatformViewAndroid.java",
"platform/android/org/domokit/sky/shell/SkyMain.java",
"platform/android/org/domokit/sky/shell/TracingController.java",
]
jni_package = "sky/shell"
}
shared_library("sky_shell") {
sources = [
"platform/android/library_loader.cc",
"platform/android/platform_view_android.cc",
"platform/android/platform_view_android.h",
"platform/android/sky_main.cc",
"platform/android/sky_main.h",
"platform/android/tracing_controller.cc",
"platform/android/tracing_controller.h",
]
deps = [
"//mojo/android:libsystem_java",
"//mojo/edk/base_edk",
"//mojo/edk/system",
"//ui/gl",
":common",
":gpu_direct",
":jni_headers",
]
ldflags = [
"-lGLESv2",
"-lEGL",
]
}
android_library("java") {
java_files = [
"platform/android/org/domokit/sky/shell/FlutterSemanticsToAndroidAccessibilityBridge.java",
"platform/android/org/domokit/sky/shell/PlatformViewAndroid.java",
"platform/android/org/domokit/sky/shell/ResourceCleaner.java",
"platform/android/org/domokit/sky/shell/ResourceExtractor.java",
"platform/android/org/domokit/sky/shell/ServiceFactory.java",
"platform/android/org/domokit/sky/shell/ServiceProviderImpl.java",
"platform/android/org/domokit/sky/shell/ServiceRegistry.java",
"platform/android/org/domokit/sky/shell/SkyActivity.java",
"platform/android/org/domokit/sky/shell/SkyApplication.java",
"platform/android/org/domokit/sky/shell/SkyMain.java",
"platform/android/org/domokit/sky/shell/TracingController.java",
]
deps = [
"//base:base_java",
"//mojo/android:system_java",
"//mojo/public/interfaces/application:application_java",
"//mojo/public/java:bindings",
"//mojo/public/java:system",
"//mojo/services/network/interfaces:interfaces_java",
"//mojo/services/sensors/interfaces:interfaces_java",
"//mojo/services/vsync/interfaces:interfaces_java",
"//services/sensors:sensors_lib",
"//sky/services/activity:activity_lib",
"//sky/services/activity:interfaces_java",
"//sky/services/common:common_lib",
"//sky/services/editing:editing_lib",
"//sky/services/editing:interfaces_java",
"//sky/services/engine:interfaces_java",
"//sky/services/media:interfaces_java",
"//sky/services/media:media_lib",
"//sky/services/oknet",
"//sky/services/platform:interfaces_java",
"//sky/services/platform:platform_lib",
"//sky/services/pointer:interfaces_java",
"//sky/services/raw_keyboard:interfaces_java",
"//sky/services/raw_keyboard:raw_keyboard_lib",
"//sky/services/semantics:interfaces_java",
"//sky/services/vsync:vsync_lib",
]
}
copy_ex("assets") {
clear_dir = true
dest = "$root_build_dir/sky_shell/assets"
sources = [
"$root_build_dir/icudtl.dat",
]
deps = [
"//third_party/icu:icudata",
]
}
android_apk("shell") {
apk_name = "SkyShell"
android_manifest = "platform/android/AndroidManifest.xml"
native_libs = [ "libsky_shell.so" ]
asset_location = "$root_build_dir/sky_shell/assets"
extensions_to_not_compress = ".flx"
flutter_dist_jar = "$root_build_dir/flutter.jar"
deps = [
"//base:base_java",
":assets",
":java",
":sky_shell",
]
}
} else if (is_ios) {
import("//build/config/ios/rules.gni")
import("//build/config/ios/ios_sdk.gni")
import("//sky/build/sky_precompilation_sdk.gni")
template("scaffolding") {
assert(defined(invoker.is_framework),
"Must specific if the scaffolding is exposed as a framework")
source_set(target_name) {
sources = [
"platform/ios/FlutterAppDelegate.h",
"platform/ios/FlutterAppDelegate.mm",
"platform/ios/FlutterDartProject.mm",
"platform/ios/FlutterDartProject_Internal.h",
"platform/ios/FlutterDartSource.h",
"platform/ios/FlutterDartSource.mm",
"platform/ios/FlutterDynamicServiceLoader.h",
"platform/ios/FlutterDynamicServiceLoader.mm",
"platform/ios/FlutterView.h",
"platform/ios/FlutterView.mm",
"platform/ios/FlutterViewController.mm",
"platform/ios/flutter_touch_mapper.h",
"platform/ios/flutter_touch_mapper.mm",
"platform/ios/main_ios.mm",
"platform/ios/public/Flutter.h",
"platform/ios/public/FlutterDartProject.h",
"platform/ios/public/FlutterMacros.h",
"platform/ios/public/FlutterViewController.h",
]
set_sources_assignment_filter([])
sources += [
"platform/mac/platform_mac.h",
"platform/mac/platform_mac.mm",
"platform/mac/platform_service_provider.cc",
"platform/mac/platform_service_provider.h",
"platform/mac/platform_view_mac.h",
"platform/mac/platform_view_mac.mm",
"platform/mac/view_service_provider.cc",
"platform/mac/view_service_provider.h",
]
set_sources_assignment_filter(sources_assignment_filter)
deps = [
"//mojo/edk/base_edk",
"//mojo/edk/system",
"//sky/services/activity",
"//sky/services/dynamic:embedder",
"//sky/services/editing",
"//sky/services/media",
"//sky/services/ns_net",
"//sky/services/vsync",
"//ui/gl",
":common",
":gpu_direct",
]
if (invoker.is_framework) {
defines = [
"FLUTTER_FRAMEWORK"
]
}
}
}
scaffolding("ios_scaffolding") {
is_framework = false
}
shared_library("flutter_framework_dylib") {
output_name = "Flutter"
scaffolding("framework_scaffolding") {
is_framework = true
}
deps = [
":framework_scaffolding"
]
libs = [
"UIKit.framework",
"OpenGLES.framework",
"AVFoundation.framework",
"AudioToolbox.framework",
"QuartzCore.framework",
]
}
group("flutter_framework") {
framework_dir = "$root_out_dir/Flutter.framework"
copy("framework_dylib") {
sources = [ "$root_out_dir/libFlutter.dylib" ]
outputs = [ "$framework_dir/Flutter" ]
deps = [
":flutter_framework_dylib",
]
}
action("framework_install_name") {
stamp_file = "$root_out_dir/flutter_install_name_stamp"
script = "//sky/tools/change_install_name.py"
inputs = [ "$framework_dir/Flutter" ]
outputs = [ stamp_file ]
args = [
"--dylib",
rebase_path("$framework_dir/Flutter"),
"--install_name",
"@rpath/Flutter.framework/Flutter",
"--stamp",
rebase_path(stamp_file),
]
deps = [
":framework_dylib"
]
}
copy("framework_info_plist") {
sources = [ "platform/ios/framework/Info.plist" ]
outputs = [ "$framework_dir/Info.plist" ]
}
copy("framework_module_map") {
sources = [ "platform/ios/framework/module.modulemap" ]
outputs = [ "$framework_dir/Modules/module.modulemap" ]
}
copy("framework_headers") {
sources = [
"platform/ios/public/Flutter.h",
"platform/ios/public/FlutterMacros.h",
"platform/ios/public/FlutterViewController.h",
]
outputs = [ "$framework_dir/Headers/{{source_file_part}}" ]
}
copy("framework_icu") {
set_sources_assignment_filter([])
sources = [
"//third_party/icu/android/icudtl.dat",
]
set_sources_assignment_filter(sources_assignment_filter)
outputs = [ "$framework_dir/{{source_file_part}}" ]
}
deps = [
":framework_headers",
":framework_icu",
":framework_info_plist",
":framework_install_name",
":framework_module_map",
]
}
sky_precompilation_sdk("shell") {
sdk_name = "Flutter"
}
} else if (is_linux && !is_fnl) {
executable("shell") {
output_name = "sky_shell"
sources = [
"platform/linux/main_linux.cc",
]
deps = [
"//mojo/common",
"//mojo/edk/base_edk",
"//mojo/edk/system",
":common",
":gpu_direct",
":testing",
]
if (use_glfw) {
sources += [
"//sky/shell/platform/glfw/init_glfw.cc",
"//sky/shell/platform/glfw/init_glfw.h",
"//sky/shell/platform/glfw/message_pump_glfw.cc",
"//sky/shell/platform/glfw/message_pump_glfw.h",
"//sky/shell/platform/glfw/platform_view_glfw.cc",
"//sky/shell/platform/glfw/platform_view_glfw.h",
"//sky/shell/platform/glfw/window_impl.cc",
"//sky/shell/platform/glfw/window_impl.h",
]
deps += [
"//third_party/glfw",
"//ui/gl",
]
} else {
sources += [ "platform/linux/platform_view_linux.cc" ]
}
}
} else if (is_mac) {
import("//build/config/mac/rules.gni")
source_set("mac_scaffolding") {
sources = [
"platform/mac/main_mac.mm",
"platform/mac/platform_mac.h",
"platform/mac/platform_mac.mm",
"platform/mac/platform_service_provider.cc",
"platform/mac/platform_service_provider.h",
"platform/mac/platform_view_mac.h",
"platform/mac/platform_view_mac.mm",
"platform/mac/sky_app_delegate.h",
"platform/mac/sky_app_delegate.m",
"platform/mac/sky_application.h",
"platform/mac/sky_application.mm",
"platform/mac/sky_window.h",
"platform/mac/sky_window.mm",
"platform/mac/view_service_provider.cc",
"platform/mac/view_service_provider.h",
]
deps = [
"//mojo/common",
"//mojo/edk/base_edk",
"//mojo/edk/system",
"//sky/services/ns_net",
"//ui/gl",
":common",
":gpu_direct",
":testing",
]
}
mac_app("shell") {
app_name = "SkyShell"
info_plist = "platform/mac/Info.plist"
xibs = [ "platform/mac/sky_mac.xib" ]
resource_copy_mac("sky_resources") {
resources = [
"//third_party/icu/android/icudtl.dat",
]
bundle_directory = "."
}
deps = [
":mac_scaffolding",
":sky_resources",
]
}
} else if (is_fnl) {
# Nothing fnl specific.
} else {
assert(false, "Unsupported platform")
}