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