1# Copyright (c) 2021 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14import("//build/ohos.gni") 15import("//foundation/ace/ace_engine/ace_config.gni") 16 17# ------------------------------------------------ 18# Flutter engine config begin 19# ------------------------------------------------ 20config("flutter_config") { 21 visibility = [ ":*" ] 22 23 include_dirs = [ 24 "$flutter_root", 25 "$flutter_root/engine", 26 "$flutter_root/engine/flutter", 27 "$flutter_root/engine/flutter/third_party/txt/src", 28 ] 29 30 cflags = [ 31 "-fvisibility=hidden", 32 "-fdata-sections", 33 "-ffunction-sections", 34 "-Os", 35 ] 36 37 cflags_cc = [ 38 "-fvisibility-inlines-hidden", 39 "-Os", 40 ] 41 defines = [] 42 defines += ace_common_defines 43} 44 45template("flutter_engine") { 46 forward_variables_from(invoker, "*") 47 48 ohos_source_set(target_name) { 49 license_file = "$flutter_root/engine/flutter/LICENSE" 50 deps = [ 51 ":flutter_engine_asset_manager", 52 ":flutter_engine_common_$platform", 53 ":flutter_engine_flow_$platform", 54 ":flutter_engine_fml_$platform", 55 ":flutter_engine_lib_ui_$platform", 56 ":flutter_engine_shell_$platform", 57 "libtxt:thirdparty_lib_txt_$platform", 58 ] 59 public_configs = [ 60 ":flutter_config", 61 "icu:icu_config_$platform", 62 ] 63 } 64} 65 66foreach(item, ace_platforms) { 67 flutter_engine("third_party_flutter_engine_" + item.name) { 68 platform = item.name 69 } 70} 71 72# ------------------------------------------------ 73# Flutter engine config end 74# ------------------------------------------------ 75 76# ------------------------------------------------ 77# Flutter asset_manager config begin 78# ------------------------------------------------ 79ohos_source_set("flutter_engine_asset_manager") { 80 sources = [ 81 "$flutter_root/engine/flutter/assets/asset_manager.cc", 82 "$flutter_root/engine/flutter/assets/directory_asset_bundle.cc", 83 ] 84 85 configs = [ ":flutter_config" ] 86} 87 88# ------------------------------------------------ 89# Flutter asset_manager config end 90# ------------------------------------------------ 91 92# ------------------------------------------------ 93# Flutter fml config begin 94# ------------------------------------------------ 95config("flutter_engine_fml_mac_config") { 96 cflags = [ 97 "-Wno-thread-safety-attributes", 98 "-Wno-thread-safety-analysis", 99 ] 100} 101 102template("flutter_engine_fml") { 103 forward_variables_from(invoker, "*") 104 ohos_source_set(target_name) { 105 defines += invoker.defines 106 cflags_cc += invoker.cflags_cc 107 configs = [ 108 ":flutter_config", 109 "icu:icu_config_$platform", 110 ] 111 if (platform == "android") { 112 configs += [ "$ace_root/build:reduce_eh_frame_config" ] 113 } 114 115 sources = [ 116 "$flutter_root/engine/flutter/fml/base32.cc", 117 "$flutter_root/engine/flutter/fml/command_line.cc", 118 "$flutter_root/engine/flutter/fml/concurrent_message_loop.cc", 119 "$flutter_root/engine/flutter/fml/delayed_task.cc", 120 "$flutter_root/engine/flutter/fml/file.cc", 121 "$flutter_root/engine/flutter/fml/gpu_thread_merger.cc", 122 "$flutter_root/engine/flutter/fml/icu_util.cc", 123 "$flutter_root/engine/flutter/fml/log_settings.cc", 124 "$flutter_root/engine/flutter/fml/log_settings_state.cc", 125 "$flutter_root/engine/flutter/fml/logging.cc", 126 "$flutter_root/engine/flutter/fml/mapping.cc", 127 "$flutter_root/engine/flutter/fml/memory/weak_ptr_internal.cc", 128 "$flutter_root/engine/flutter/fml/message.cc", 129 "$flutter_root/engine/flutter/fml/message_loop.cc", 130 "$flutter_root/engine/flutter/fml/message_loop_impl.cc", 131 "$flutter_root/engine/flutter/fml/message_loop_task_queues.cc", 132 "$flutter_root/engine/flutter/fml/paths.cc", 133 "$flutter_root/engine/flutter/fml/synchronization/count_down_latch.cc", 134 "$flutter_root/engine/flutter/fml/synchronization/semaphore.cc", 135 "$flutter_root/engine/flutter/fml/synchronization/waitable_event.cc", 136 "$flutter_root/engine/flutter/fml/task_runner.cc", 137 "$flutter_root/engine/flutter/fml/thread.cc", 138 "$flutter_root/engine/flutter/fml/thread_local.cc", 139 "$flutter_root/engine/flutter/fml/time/time_point.cc", 140 "$flutter_root/engine/flutter/fml/trace_event.cc", 141 "$flutter_root/engine/flutter/fml/unique_fd.cc", 142 ] 143 144 if (platform == "windows") { 145 sources += [ 146 "$flutter_root/engine/flutter/fml/platform/win/errors_win.cc", 147 "$flutter_root/engine/flutter/fml/platform/win/file_win.cc", 148 "$flutter_root/engine/flutter/fml/platform/win/mapping_win.cc", 149 "$flutter_root/engine/flutter/fml/platform/win/message_loop_win.cc", 150 "$flutter_root/engine/flutter/fml/platform/win/native_library_win.cc", 151 "$flutter_root/engine/flutter/fml/platform/win/paths_win.cc", 152 ] 153 154 libs = [ "//prebuilts/mingw-w64/ohos/linux-x86_64/clang-mingw/x86_64-w64-mingw32/lib/librpcrt4.a" ] 155 } else if (platform == "mac") { 156 public_configs = [ ":flutter_engine_fml_mac_config" ] 157 sources += [ 158 "$flutter_root/engine/flutter/fml/platform/darwin/cf_utils.cc", 159 "$flutter_root/engine/flutter/fml/platform/darwin/message_loop_darwin.mm", 160 "$flutter_root/engine/flutter/fml/platform/darwin/paths_darwin.mm", 161 "$flutter_root/engine/flutter/fml/platform/darwin/platform_version.mm", 162 "$flutter_root/engine/flutter/fml/platform/darwin/scoped_block.mm", 163 "$flutter_root/engine/flutter/fml/platform/darwin/scoped_nsobject.mm", 164 "$flutter_root/engine/flutter/fml/platform/darwin/string_range_sanitization.mm", 165 "$flutter_root/engine/flutter/fml/platform/posix/file_posix.cc", 166 "$flutter_root/engine/flutter/fml/platform/posix/mapping_posix.cc", 167 "$flutter_root/engine/flutter/fml/platform/posix/native_library_posix.cc", 168 "$flutter_root/engine/flutter/fml/platform/posix/paths_posix.cc", 169 "$flutter_root/engine/flutter/fml/platform/posix/shared_mutex_posix.cc", 170 ] 171 172 libs = [ 173 "CoreFoundation.framework", 174 "Foundation.framework", 175 ] 176 } else { 177 sources += [ 178 "$flutter_root/engine/flutter/fml/platform/linux/timerfd.cc", 179 "$flutter_root/engine/flutter/fml/platform/posix/file_posix.cc", 180 "$flutter_root/engine/flutter/fml/platform/posix/mapping_posix.cc", 181 "$flutter_root/engine/flutter/fml/platform/posix/native_library_posix.cc", 182 "$flutter_root/engine/flutter/fml/platform/posix/paths_posix.cc", 183 ] 184 185 if (is_standard_system) { 186 sources += [ 187 "$flutter_root/engine/flutter/fml/platform/linux/message_loop_linux.cc", 188 "$flutter_root/engine/flutter/fml/platform/linux/paths_linux.cc", 189 ] 190 external_deps = [ "hiviewdfx_hilog_native:libhilog" ] 191 } else { 192 sources += [ 193 "$flutter_root/engine/flutter/fml/platform/android/jni_util.cc", 194 "$flutter_root/engine/flutter/fml/platform/android/jni_weak_ref.cc", 195 "$flutter_root/engine/flutter/fml/platform/android/message_loop_android.cc", 196 "$flutter_root/engine/flutter/fml/platform/android/paths_android.cc", 197 "$flutter_root/engine/flutter/fml/platform/android/scoped_java_ref.cc", 198 ] 199 aosp_deps = [ 200 "shared_library:libandroid", 201 "shared_library:liblog", 202 ] 203 } 204 } 205 } 206} 207 208foreach(item, ace_platforms) { 209 flutter_engine_fml("flutter_engine_fml_" + item.name) { 210 platform = item.name 211 defines = [] 212 cflags_cc = [] 213 config = { 214 } 215 216 if (defined(item.config)) { 217 config = item.config 218 } 219 220 if (defined(config.defines)) { 221 defines = config.defines 222 } 223 224 if (defined(config.cflags_cc)) { 225 cflags_cc = config.cflags_cc 226 } 227 } 228} 229 230# ------------------------------------------------ 231# Flutter fml config end 232# ------------------------------------------------ 233 234# ------------------------------------------------ 235# Flutter common config begin 236# ------------------------------------------------ 237template("flutter_engine_common") { 238 forward_variables_from(invoker, "*") 239 240 ohos_source_set(target_name) { 241 defines += invoker.defines 242 cflags_cc += invoker.cflags_cc 243 configs = [ ":flutter_config" ] 244 if (platform == "android") { 245 configs += [ "$ace_root/build:reduce_eh_frame_config" ] 246 } 247 248 sources = [ 249 "$flutter_root/engine/flutter/common/settings.cc", 250 "$flutter_root/engine/flutter/common/task_runners.cc", 251 ] 252 253 deps = [ ":flutter_engine_fml_$platform" ] 254 } 255} 256 257foreach(item, ace_platforms) { 258 flutter_engine_common("flutter_engine_common_" + item.name) { 259 platform = item.name 260 defines = [] 261 cflags_cc = [] 262 config = { 263 } 264 265 if (defined(item.config)) { 266 config = item.config 267 } 268 269 if (defined(config.defines)) { 270 defines = config.defines 271 } 272 273 if (defined(config.cflags_cc)) { 274 cflags_cc = config.cflags_cc 275 } 276 } 277} 278 279# ------------------------------------------------ 280# Flutter common config end 281# ------------------------------------------------ 282 283# ------------------------------------------------ 284# Flutter flow config begin 285# ------------------------------------------------ 286template("flutter_engine_flow") { 287 forward_variables_from(invoker, "*") 288 289 ohos_source_set(target_name) { 290 defines += invoker.defines 291 cflags_cc += invoker.cflags_cc 292 293 configs = [ ":flutter_config" ] 294 if (platform == "android") { 295 configs += [ "$ace_root/build:reduce_eh_frame_config" ] 296 } 297 298 sources = [ 299 "$flutter_root/engine/flutter/flow/compositor_context.cc", 300 "$flutter_root/engine/flutter/flow/debug_print.cc", 301 "$flutter_root/engine/flutter/flow/embedded_views.cc", 302 "$flutter_root/engine/flutter/flow/instrumentation.cc", 303 "$flutter_root/engine/flutter/flow/layers/backdrop_filter_layer.cc", 304 "$flutter_root/engine/flutter/flow/layers/clip_path_layer.cc", 305 "$flutter_root/engine/flutter/flow/layers/clip_rect_layer.cc", 306 "$flutter_root/engine/flutter/flow/layers/clip_rrect_layer.cc", 307 "$flutter_root/engine/flutter/flow/layers/color_filter_layer.cc", 308 "$flutter_root/engine/flutter/flow/layers/container_layer.cc", 309 "$flutter_root/engine/flutter/flow/layers/filter_layer.cc", 310 "$flutter_root/engine/flutter/flow/layers/layer.cc", 311 "$flutter_root/engine/flutter/flow/layers/layer_tree.cc", 312 "$flutter_root/engine/flutter/flow/layers/mask_layer.cc", 313 "$flutter_root/engine/flutter/flow/layers/opacity_layer.cc", 314 "$flutter_root/engine/flutter/flow/layers/performance_overlay_layer.cc", 315 "$flutter_root/engine/flutter/flow/layers/physical_shape_layer.cc", 316 "$flutter_root/engine/flutter/flow/layers/picture_layer.cc", 317 "$flutter_root/engine/flutter/flow/layers/platform_view_layer.cc", 318 "$flutter_root/engine/flutter/flow/layers/shader_mask_layer.cc", 319 "$flutter_root/engine/flutter/flow/layers/texture_layer.cc", 320 "$flutter_root/engine/flutter/flow/layers/transform_layer.cc", 321 "$flutter_root/engine/flutter/flow/matrix_decomposition.cc", 322 "$flutter_root/engine/flutter/flow/paint_utils.cc", 323 "$flutter_root/engine/flutter/flow/raster_cache.cc", 324 "$flutter_root/engine/flutter/flow/raster_cache_key.cc", 325 "$flutter_root/engine/flutter/flow/skia_gpu_object.cc", 326 "$flutter_root/engine/flutter/flow/texture.cc", 327 ] 328 329 deps = [ 330 ":flutter_engine_fml_$platform", 331 "skia:ace_skia_$platform", 332 ] 333 } 334} 335 336foreach(item, ace_platforms) { 337 flutter_engine_flow("flutter_engine_flow_" + item.name) { 338 platform = item.name 339 defines = [] 340 cflags_cc = [] 341 config = { 342 } 343 344 if (defined(item.config)) { 345 config = item.config 346 } 347 348 if (defined(config.defines)) { 349 defines = config.defines 350 } 351 352 if (defined(config.cflags_cc)) { 353 cflags_cc = config.cflags_cc 354 } 355 } 356} 357 358# ------------------------------------------------ 359# Flutter flow config end 360# ------------------------------------------------ 361 362# ------------------------------------------------ 363# Flutter shell config begin 364# ------------------------------------------------ 365template("flutter_engine_shell") { 366 forward_variables_from(invoker, "*") 367 368 ohos_source_set(target_name) { 369 defines += invoker.defines 370 defines += [ 371 "FLUTTER_ENGINE_VERSION=\"cc88fa45dbf4c55bc23cecea17fb90f43bccf588\"", 372 "SKIA_VERSION=\"4b567cd679ab964b5f6281a67a96c694c950f597\"", 373 "DART_VERSION=\"fake version\"", 374 ] 375 cflags_cc += invoker.cflags_cc 376 377 configs = [ 378 ":flutter_config", 379 "icu:icu_config_$platform", 380 ] 381 if (platform == "android") { 382 configs += [ "$ace_root/build:reduce_eh_frame_config" ] 383 } 384 385 sources = [ 386 "$flutter_root/engine/flutter/shell/common/animator.cc", 387 "$flutter_root/engine/flutter/shell/common/persistent_cache.cc", 388 "$flutter_root/engine/flutter/shell/common/pipeline.cc", 389 "$flutter_root/engine/flutter/shell/common/rasterizer.cc", 390 "$flutter_root/engine/flutter/shell/common/shell_io_manager.cc", 391 "$flutter_root/engine/flutter/shell/common/surface.cc", 392 "$flutter_root/engine/flutter/shell/common/thread_host.cc", 393 "$flutter_root/engine/flutter/shell/common/vsync_waiter.cc", 394 "$flutter_root/engine/flutter/shell/common/vsync_waiter_fallback.cc", 395 396 # only support gl and software 397 "$flutter_root/engine/flutter/shell/gpu/gpu_surface_gl.cc", 398 "$flutter_root/engine/flutter/shell/gpu/gpu_surface_gl_delegate.cc", 399 "$flutter_root/engine/flutter/shell/gpu/gpu_surface_software.cc", 400 "$flutter_root/engine/flutter/shell/gpu/gpu_surface_software_delegate.cc", 401 "$flutter_root/engine/flutter/shell/version/version.cc", 402 403 # Ability Cross-platform Environment(ACE) override implementation 404 "$flutter_root/engine/flutter/runtime/ace_runtime_controller.cc", 405 "$flutter_root/engine/flutter/runtime/window_manager.cc", 406 "$flutter_root/engine/flutter/shell/common/ace_engine.cc", 407 "$flutter_root/engine/flutter/shell/common/ace_platform_view.cc", 408 "$flutter_root/engine/flutter/shell/common/ace_run_configuration.cc", 409 "$flutter_root/engine/flutter/shell/common/ace_shell.cc", 410 ] 411 412 if (defined(config.disable_gpu) && config.disable_gpu) { 413 sources -= [ "$flutter_root/engine/flutter/shell/gpu/gpu_surface_gl.cc" ] 414 } 415 416 deps = [ 417 ":flutter_engine_fml_$platform", 418 "skia:ace_skia_$platform", 419 ] 420 421 if (is_standard_system && platform == "ohos") { 422 include_dirs = [ 423 "//foundation/windowmanager/interfaces/innerkits", 424 "//utils/native/base/include", 425 ] 426 sources += [ 427 "$flutter_root/engine/flutter/shell/platform/ohos/ace_vsync_waiter_embedder.cc", 428 "$flutter_root/engine/flutter/shell/platform/ohos/ohos_shell_holder.cc", 429 "$flutter_root/engine/flutter/shell/platform/ohos/ohos_surface_software.cc", 430 "$flutter_root/engine/flutter/shell/platform/ohos/platform_task_runner.cc", 431 "$flutter_root/engine/flutter/shell/platform/ohos/platform_task_runner_adapter.cc", 432 "$flutter_root/engine/flutter/shell/platform/ohos/platform_view_ohos.cc", 433 ] 434 if ((!defined(config.disable_gpu) || !config.disable_gpu) && (!defined( 435 config.enable_rosen_backend) || !config.enable_rosen_backend)) { 436 sources += [ 437 "$flutter_root/engine/flutter/shell/platform/ohos/ohos_surface_gl.cc", 438 ] 439 440 public_deps = [ "//foundation/graphic/standard:libgl" ] 441 } 442 deps += [ 443 "//foundation/graphic/standard/rosen/modules/composer:libcomposer", 444 "//foundation/graphic/standard/rosen/modules/render_service_client:librender_service_client", 445 "//foundation/windowmanager/wm:libwm", 446 ] 447 external_deps = [ 448 "eventhandler:libeventhandler", 449 "ipc:ipc_core", 450 ] 451 } else if (platform == "ohos" || platform == "android") { 452 sources += [ 453 # Ability Cross-platform Environment(ACE) override implementation 454 "$flutter_root/engine/flutter/shell/common/ace_display_manager_jni.cc", 455 "$flutter_root/engine/flutter/shell/platform/android/ace_platform_view_android.cc", 456 "$flutter_root/engine/flutter/shell/platform/android/ace_vsync_waiter_android.cc", 457 "$flutter_root/engine/flutter/shell/platform/android/android_context_gl.cc", 458 "$flutter_root/engine/flutter/shell/platform/android/android_environment_gl.cc", 459 "$flutter_root/engine/flutter/shell/platform/android/android_external_texture_gl.cc", 460 "$flutter_root/engine/flutter/shell/platform/android/android_native_window.cc", 461 "$flutter_root/engine/flutter/shell/platform/android/android_shell_holder.cc", 462 "$flutter_root/engine/flutter/shell/platform/android/android_surface.cc", 463 "$flutter_root/engine/flutter/shell/platform/android/android_surface_gl.cc", 464 "$flutter_root/engine/flutter/shell/platform/android/android_surface_software.cc", 465 "$flutter_root/engine/flutter/shell/platform/android/apk_asset_provider.cc", 466 "$flutter_root/engine/flutter/shell/platform/android/platform_message_response_android.cc", 467 ] 468 469 aosp_deps = [ 470 "shared_library:libEGL", 471 "shared_library:libGLESv2", 472 ] 473 474 if (defined(config.use_agp_vsync) && config.use_agp_vsync) { 475 sources += [ "$flutter_root/engine/flutter/shell/platform/ohos/ace_vsync_waiter_embedder.cc" ] 476 external_deps = [ 477 "graphic:libagp", 478 "graphic:libagpcoreui", 479 "graphic:libagpcoreui_adapter", 480 "graphic:libagpwindow", 481 ] 482 } 483 } 484 } 485} 486 487foreach(item, ace_platforms) { 488 flutter_engine_shell("flutter_engine_shell_" + item.name) { 489 platform = item.name 490 defines = [] 491 cflags_cc = [] 492 config = { 493 } 494 495 if (defined(item.config)) { 496 config = item.config 497 } 498 499 if (defined(config.defines)) { 500 defines = config.defines 501 } 502 503 if (defined(config.cflags_cc)) { 504 cflags_cc = config.cflags_cc 505 } 506 } 507} 508 509# ------------------------------------------------ 510# Flutter shell config end 511# ------------------------------------------------ 512 513# ------------------------------------------------ 514# Flutter lib_ui config begin 515# ------------------------------------------------ 516template("flutter_engine_lib_ui") { 517 forward_variables_from(invoker, "*") 518 ohos_source_set(target_name) { 519 defines += invoker.defines 520 cflags_cc += invoker.cflags_cc 521 522 configs = [ 523 ":flutter_config", 524 "icu:icu_config_$platform", 525 ] 526 if (platform == "android") { 527 configs += [ "$ace_root/build:reduce_eh_frame_config" ] 528 } 529 530 sources = [ 531 "$flutter_root/engine/flutter/lib/ui/compositing/scene.cc", 532 "$flutter_root/engine/flutter/lib/ui/compositing/scene_builder.cc", 533 "$flutter_root/engine/flutter/lib/ui/painting/canvas.cc", 534 "$flutter_root/engine/flutter/lib/ui/painting/color_filter.cc", 535 "$flutter_root/engine/flutter/lib/ui/painting/engine_layer.cc", 536 "$flutter_root/engine/flutter/lib/ui/painting/gradient.cc", 537 "$flutter_root/engine/flutter/lib/ui/painting/image.cc", 538 "$flutter_root/engine/flutter/lib/ui/painting/image_filter.cc", 539 "$flutter_root/engine/flutter/lib/ui/painting/matrix.cc", 540 "$flutter_root/engine/flutter/lib/ui/painting/path.cc", 541 "$flutter_root/engine/flutter/lib/ui/painting/picture_recorder.cc", 542 "$flutter_root/engine/flutter/lib/ui/painting/shader.cc", 543 "$flutter_root/engine/flutter/lib/ui/painting/vertices.cc", 544 "$flutter_root/engine/flutter/lib/ui/window/platform_message.cc", 545 "$flutter_root/engine/flutter/lib/ui/window/platform_message_response.cc", 546 "$flutter_root/engine/flutter/lib/ui/window/pointer_data_packet.cc", 547 "$flutter_root/engine/flutter/lib/ui/window/viewport_metrics.cc", 548 549 # Ability Cross-platform Environment(ACE) override implementation 550 "$flutter_root/engine/flutter/lib/ui/painting/image_encoding.cc", 551 "$flutter_root/engine/flutter/lib/ui/painting/paint.cc", 552 "$flutter_root/engine/flutter/lib/ui/painting/picture.cc", 553 "$flutter_root/engine/flutter/lib/ui/text/font_collection.cc", 554 "$flutter_root/engine/flutter/lib/ui/text/text_box.cc", 555 "$flutter_root/engine/flutter/lib/ui/ui_dart_state.cc", 556 "$flutter_root/engine/flutter/lib/ui/window/window.cc", 557 ] 558 559 if (platform == "mac" || platform == "windows") { 560 sources += 561 [ "$flutter_root/engine/flutter/lib/ui/window/pointer_data.cc" ] 562 } 563 564 deps = [ 565 ":flutter_engine_fml_$platform", 566 "skia:ace_skia_$platform", 567 ] 568 } 569} 570 571foreach(item, ace_platforms) { 572 flutter_engine_lib_ui("flutter_engine_lib_ui_" + item.name) { 573 platform = item.name 574 defines = [] 575 cflags_cc = [] 576 config = { 577 } 578 579 if (defined(item.config)) { 580 config = item.config 581 } 582 583 if (defined(config.defines)) { 584 defines = config.defines 585 } 586 587 if (defined(config.cflags_cc)) { 588 cflags_cc = config.cflags_cc 589 } 590 } 591} 592# ------------------------------------------------ 593# Flutter lib_ui config end 594# ------------------------------------------------ 595