• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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