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