• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2023 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/arkui/ace_engine/ace_config.gni")
16import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni")
17import("../../../build/uicast.gni")
18
19# declarative frontend source
20template("declarative_frontend") {
21  forward_variables_from(invoker, "*")
22
23  ohos_source_set(target_name) {
24    subsystem_name = ace_engine_subsystem
25    part_name = ace_engine_part
26    defines += invoker.defines
27    configs = [ "$ace_root:ace_config" ]
28
29    if (enable_ng_build) {
30      sources = [
31        "ng/declarative_frontend_ng.cpp",
32        "ng/frontend_delegate_declarative_ng.cpp",
33        "ng/page_router_manager.cpp",
34      ]
35    } else {
36      sources = [
37        "declarative_frontend.cpp",
38        "frontend_delegate_declarative.cpp",
39        "ng/page_router_manager.cpp",
40      ]
41    }
42
43    deps = [ "$ace_root/frameworks/core/components/theme:build_theme_code" ]
44  }
45}
46
47foreach(item, ace_platforms) {
48  declarative_frontend("declarative_frontend_" + item.name) {
49    defines = []
50    config = {
51    }
52
53    if (defined(item.config)) {
54      config = item.config
55    }
56
57    if (defined(config.defines)) {
58      defines = config.defines
59    }
60  }
61}
62
63# js resources objects
64base_output_path = get_label_info(":gen_js_proxyclass", "target_out_dir")
65jsproxyclass_obj_path = base_output_path + "/js_proxy_class.o"
66jsenumstyle_obj_path = base_output_path + "/js_enum_style.o"
67jsmocksystemplugin_obj_path = base_output_path + "/js_mock_system_plugin.o"
68
69gen_obj("js_proxyclass") {
70  input = "engine/stateMgmt.js"
71  if (use_mac || use_mingw_win || use_linux || target_os == "ios") {
72    jsproxyclass_obj_path = base_output_path + "/js_proxy_class.c"
73  }
74  output = jsproxyclass_obj_path
75  snapshot_dep = []
76}
77
78gen_obj("js_enum_style") {
79  input = "engine/jsEnumStyle.js"
80  if (use_mac || use_mingw_win || use_linux || target_os == "ios") {
81    jsenumstyle_obj_path = base_output_path + "/js_enum_style.c"
82  }
83  output = jsenumstyle_obj_path
84  snapshot_dep = []
85}
86
87gen_obj("js_mock_system_plugin") {
88  input = "$root_out_dir/obj/third_party/jsframework/dist/jsMockSystemPlugin.js"
89  if (use_mac || use_mingw_win || use_linux || target_os == "ios") {
90    jsmocksystemplugin_obj_path = base_output_path + "/js_mock_system_plugin.c"
91  }
92  output = jsmocksystemplugin_obj_path
93  snapshot_dep = [ "//third_party/jsframework:gen_snapshot" ]
94}
95
96# build declarative javascript engine source
97template("declarative_js_engine") {
98  forward_variables_from(invoker, "*")
99
100  ohos_source_set(target_name) {
101    subsystem_name = ace_engine_subsystem
102    part_name = ace_engine_part
103    defines += invoker.defines
104    if (target_cpu == "arm64") {
105      if (!is_mingw) {
106        defines += [ "_ARM64_" ]
107      }
108    }
109    if (current_os == "ohos" && current_cpu == "x86_64") {
110      defines += [ "SIMULATOR_64" ]
111    }
112
113    deps = []
114    configs = [ "$ace_root:ace_config" ]
115
116    sources = [
117      "engine/bindings_implementation.cpp",
118      "engine/declarative_engine_loader.cpp",
119      "engine/functions/js_animator_function.cpp",
120      "engine/functions/js_click_function.cpp",
121      "engine/functions/js_clipboard_function.cpp",
122      "engine/functions/js_drag_function.cpp",
123      "engine/functions/js_focus_function.cpp",
124      "engine/functions/js_foreach_function.cpp",
125      "engine/functions/js_function.cpp",
126      "engine/functions/js_gesture_function.cpp",
127      "engine/functions/js_hover_function.cpp",
128      "engine/functions/js_key_function.cpp",
129      "engine/functions/js_mouse_function.cpp",
130      "engine/functions/js_on_area_change_function.cpp",
131      "engine/functions/js_page_transition_function.cpp",
132      "engine/functions/js_pan_function.cpp",
133      "engine/functions/js_touch_function.cpp",
134      "engine/functions/js_webview_function.cpp",
135      "engine/js_types.cpp",
136      "interfaces/profiler/js_profiler.cpp",
137      "jsview/action_sheet/js_action_sheet.cpp",
138      "jsview/dialog/js_alert_dialog.cpp",
139      "jsview/dialog/js_custom_dialog_controller.cpp",
140      "jsview/js_animator.cpp",
141      "jsview/js_badge.cpp",
142      "jsview/js_blank.cpp",
143      "jsview/js_button.cpp",
144      "jsview/js_calendar.cpp",
145      "jsview/js_calendar_controller.cpp",
146      "jsview/js_canvas.cpp",
147      "jsview/js_canvas_gradient.cpp",
148      "jsview/js_canvas_image_data.cpp",
149      "jsview/js_canvas_path.cpp",
150      "jsview/js_canvas_renderer.cpp",
151      "jsview/js_checkbox.cpp",
152      "jsview/js_checkboxgroup.cpp",
153      "jsview/js_circle.cpp",
154      "jsview/js_clipboard.cpp",
155      "jsview/js_column.cpp",
156      "jsview/js_column_split.cpp",
157      "jsview/js_common_view.cpp",
158      "jsview/js_container_base.cpp",
159      "jsview/js_counter.cpp",
160      "jsview/js_data_panel.cpp",
161      "jsview/js_datepicker.cpp",
162      "jsview/js_distributed.cpp",
163      "jsview/js_divider.cpp",
164      "jsview/js_ellipse.cpp",
165      "jsview/js_environment.cpp",
166      "jsview/js_flex.cpp",
167      "jsview/js_flex_impl.cpp",
168      "jsview/js_foreach.cpp",
169      "jsview/js_gauge.cpp",
170      "jsview/js_gesture.cpp",
171      "jsview/js_grid.cpp",
172      "jsview/js_grid_col.cpp",
173      "jsview/js_grid_container.cpp",
174      "jsview/js_grid_item.cpp",
175      "jsview/js_grid_row.cpp",
176      "jsview/js_hyperlink.cpp",
177      "jsview/js_if_else.cpp",
178      "jsview/js_image.cpp",
179      "jsview/js_image_animator.cpp",
180      "jsview/js_indexer.cpp",
181      "jsview/js_interactable_view.cpp",
182      "jsview/js_lazy_foreach.cpp",
183      "jsview/js_line.cpp",
184      "jsview/js_list.cpp",
185      "jsview/js_list_item.cpp",
186      "jsview/js_list_item_group.cpp",
187      "jsview/js_loading_progress.cpp",
188      "jsview/js_local_storage.cpp",
189      "jsview/js_marquee.cpp",
190      "jsview/js_matrix2d.cpp",
191      "jsview/js_menu.cpp",
192      "jsview/js_menu_item.cpp",
193      "jsview/js_menu_item_group.cpp",
194      "jsview/js_navdestination.cpp",
195      "jsview/js_navigation.cpp",
196      "jsview/js_navigator.cpp",
197      "jsview/js_navrouter.cpp",
198      "jsview/js_offscreen_canvas.cpp",
199      "jsview/js_offscreen_rendering_context.cpp",
200      "jsview/js_page_transition.cpp",
201      "jsview/js_pan_handler.cpp",
202      "jsview/js_path.cpp",
203      "jsview/js_path2d.cpp",
204      "jsview/js_pattern_lock.cpp",
205      "jsview/js_persistent.cpp",
206      "jsview/js_polygon.cpp",
207      "jsview/js_polyline.cpp",
208      "jsview/js_progress.cpp",
209      "jsview/js_qrcode.cpp",
210      "jsview/js_radio.cpp",
211      "jsview/js_rect.cpp",
212      "jsview/js_refresh.cpp",
213      "jsview/js_relative_container.cpp",
214      "jsview/js_render_image.cpp",
215      "jsview/js_rendering_context.cpp",
216      "jsview/js_rendering_context_settings.cpp",
217      "jsview/js_row.cpp",
218      "jsview/js_row_split.cpp",
219      "jsview/js_scroll.cpp",
220      "jsview/js_scroller.cpp",
221      "jsview/js_search.cpp",
222      "jsview/js_select.cpp",
223      "jsview/js_shape.cpp",
224      "jsview/js_shape_abstract.cpp",
225      "jsview/js_sheet.cpp",
226      "jsview/js_side_bar.cpp",
227      "jsview/js_slider.cpp",
228      "jsview/js_sliding_panel.cpp",
229      "jsview/js_span.cpp",
230      "jsview/js_stack.cpp",
231      "jsview/js_stepper.cpp",
232      "jsview/js_stepper_item.cpp",
233      "jsview/js_swiper.cpp",
234      "jsview/js_tab_content.cpp",
235      "jsview/js_tabs.cpp",
236      "jsview/js_tabs_controller.cpp",
237      "jsview/js_text.cpp",
238      "jsview/js_text_clock.cpp",
239      "jsview/js_textarea.cpp",
240      "jsview/js_textfield.cpp",
241      "jsview/js_textinput.cpp",
242      "jsview/js_textpicker.cpp",
243      "jsview/js_texttimer.cpp",
244      "jsview/js_toggle.cpp",
245      "jsview/js_touch_handler.cpp",
246      "jsview/js_utils.cpp",
247      "jsview/js_view.cpp",
248      "jsview/js_view_abstract.cpp",
249      "jsview/js_view_context.cpp",
250      "jsview/js_view_functions.cpp",
251      "jsview/js_view_measure_layout.cpp",
252      "jsview/js_view_stack_processor.cpp",
253      "jsview/js_water_flow.cpp",
254      "jsview/js_water_flow_item.cpp",
255      "jsview/menu/js_context_menu.cpp",
256      "jsview/scroll_bar/js_scroll_bar.cpp",
257      "sharedata/js_share_data.cpp",
258      "view_stack_processor.cpp",
259
260      # Models implemenations for classic fw
261      "jsview/models/animator_model_impl.cpp",
262      "jsview/models/checkbox_model_impl.cpp",
263      "jsview/models/checkboxgroup_model_impl.cpp",
264      "jsview/models/circle_model_impl.cpp",
265      "jsview/models/column_model_impl.cpp",
266      "jsview/models/counter_model_impl.cpp",
267      "jsview/models/data_panel_model_impl.cpp",
268      "jsview/models/divider_model_impl.cpp",
269      "jsview/models/ellipse_model_impl.cpp",
270      "jsview/models/flex_model_impl.cpp",
271      "jsview/models/for_each_model_impl.cpp",
272      "jsview/models/gauge_model_impl.cpp",
273      "jsview/models/grid_col_model_impl.cpp",
274      "jsview/models/grid_container_model_impl.cpp",
275      "jsview/models/grid_item_model_impl.cpp",
276      "jsview/models/grid_model_impl.cpp",
277      "jsview/models/grid_row_model_impl.cpp",
278      "jsview/models/hyperlink_model_impl.cpp",
279      "jsview/models/if_else_model_impl.cpp",
280      "jsview/models/image_model_impl.cpp",
281      "jsview/models/lazy_for_each_model_impl.cpp",
282      "jsview/models/line_model_impl.cpp",
283      "jsview/models/linear_split_model_impl.cpp",
284      "jsview/models/list_item_group_model_impl.cpp",
285      "jsview/models/list_item_model_impl.cpp",
286      "jsview/models/list_model_impl.cpp",
287      "jsview/models/loading_progress_model_impl.cpp",
288      "jsview/models/marquee_model_impl.cpp",
289      "jsview/models/navigator_model_impl.cpp",
290      "jsview/models/page_transition_model_impl.cpp",
291      "jsview/models/path_model_impl.cpp",
292      "jsview/models/patternlock_model_impl.cpp",
293      "jsview/models/picker_model_impl.cpp",
294      "jsview/models/polygon_model_impl.cpp",
295      "jsview/models/progress_model_impl.cpp",
296      "jsview/models/qrcode_model_impl.cpp",
297      "jsview/models/radio_model_impl.cpp",
298      "jsview/models/rect_model_impl.cpp",
299      "jsview/models/refresh_model_impl.cpp",
300      "jsview/models/row_model_impl.cpp",
301      "jsview/models/scroll_model_impl.cpp",
302      "jsview/models/search_model_impl.cpp",
303      "jsview/models/shape_abstract_model_impl.cpp",
304      "jsview/models/shape_model_impl.cpp",
305      "jsview/models/slider_model_impl.cpp",
306      "jsview/models/sliding_panel_model_impl.cpp",
307      "jsview/models/span_model_impl.cpp",
308      "jsview/models/stack_model_impl.cpp",
309      "jsview/models/stepper_item_model_impl.cpp",
310      "jsview/models/stepper_model_impl.cpp",
311      "jsview/models/swiper_model_impl.cpp",
312      "jsview/models/tab_content_model_impl.cpp",
313      "jsview/models/tabs_model_impl.cpp",
314      "jsview/models/text_clock_model_impl.cpp",
315      "jsview/models/text_field_model_impl.cpp",
316      "jsview/models/text_model_impl.cpp",
317      "jsview/models/text_timer_model_impl.cpp",
318      "jsview/models/textpicker_model_impl.cpp",
319      "jsview/models/timepicker_model_impl.cpp",
320      "jsview/models/toggle_model_impl.cpp",
321      "jsview/models/view_abstract_model_impl.cpp",
322      "jsview/models/view_full_update_model_impl.cpp",
323      "jsview/models/view_partial_update_model_impl.cpp",
324      "jsview/models/water_flow_item_model_impl.cpp",
325      "jsview/models/water_flow_model_impl.cpp",
326    ]
327
328    defines += uicast_configs.uicast_defines
329    sources += uicast_configs.uicast_frontend_sources
330
331    # rich components needed by phone and TV. wearable like watch do not need them
332    if (defined(config.rich_components_support) &&
333        config.rich_components_support) {
334      sources += [
335        "jsview/js_camera.cpp",
336        "jsview/js_piece.cpp",
337        "jsview/js_rating.cpp",
338        "jsview/models/rating_model_impl.cpp",
339      ]
340      if (defined(config.video_components_support) &&
341          config.video_components_support) {
342        sources += [
343          "jsview/js_video.cpp",
344          "jsview/js_video_controller.cpp",
345          "jsview/models/video_model_impl.cpp",
346        ]
347      }
348    }
349
350    if (defined(config.xcomponent_components_support) &&
351        config.xcomponent_components_support) {
352      sources += [
353        "jsview/js_xcomponent.cpp",
354        "jsview/js_xcomponent_controller.cpp",
355        "jsview/models/xcomponent_model_impl.cpp",
356      ]
357    }
358
359    if (defined(config.enable_ability_component) &&
360        config.enable_ability_component) {
361      sources += [
362        "jsview/js_ability_component.cpp",
363        "jsview/js_ability_component_controller.cpp",
364        "jsview/models/ability_component_model_impl.cpp",
365      ]
366    }
367
368    if (defined(config.web_components_support) &&
369        config.web_components_support) {
370      sources += [
371        "jsview/js_richtext.cpp",
372        "jsview/js_web.cpp",
373        "jsview/js_web_controller.cpp",
374      ]
375    }
376
377    if (defined(config.form_components_support) &&
378        config.form_components_support) {
379      sources += [ "jsview/js_form.cpp" ]
380    }
381
382    if (defined(config.remote_window_support) && config.remote_window_support) {
383      sources += [ "jsview/js_remote_window.cpp" ]
384    }
385
386    if (defined(config.plugin_components_support) &&
387        config.plugin_components_support) {
388      deps +=
389          [ "$ace_flutter_engine_root:third_party_flutter_engine_$platform" ]
390      sources += [ "jsview/js_plugin.cpp" ]
391    }
392
393    if (defined(config.preview_support) && config.preview_support) {
394      sources += [ "jsview/js_previewer_mock.cpp" ]
395    }
396
397    if (defined(config.use_build_in_js_engine) &&
398        config.use_build_in_js_engine) {
399      deps += [ "$ace_root/frameworks/bridge:framework_bridge_$platform" ]
400      defines += [ "BUILT_IN_JS_ENGINE" ]
401    } else {
402      sources += [
403        "$ace_root/frameworks/bridge/js_frontend/engine/common/js_engine.cpp",
404      ]
405      deps += [ "$ace_root/build:libace" ]
406      if (defined(config.build_container_scope_lib) &&
407          config.build_container_scope_lib) {
408        deps += [ "$ace_napi:ace_container_scope" ]
409      }
410    }
411
412    deps += [ "engine/$engine_path:declarative_js_engine_bridge_${engine_name}_$platform" ]
413
414    deps += [
415      ":gen_obj_src_js_enum_style",
416      ":gen_obj_src_js_proxyclass",
417    ]
418
419    deps += uicast_configs.uicast_root_deps
420
421    include_dirs = [ "//foundation/window/window_manager/interfaces/innerkits" ]
422    include_dirs += uicast_configs.uicast_root_include
423
424    if (platform == "windows" || platform == "mac" || platform == "linux") {
425      deps += [ ":gen_obj_src_js_mock_system_plugin" ]
426    } else {
427      if (defined(config.plugin_components_support) &&
428          config.plugin_components_support) {
429        if (!use_mingw_win && !use_mac && !use_linux) {
430          external_deps = [
431            "multimedia_image_framework:image",
432            "multimedia_image_framework:image_native",
433          ]
434        }
435      } else {
436        external_deps = [
437          "multimedia_image_framework:image",
438          "multimedia_image_framework:image_native",
439        ]
440      }
441    }
442  }
443}
444
445# build ng declarative javascript engine source
446template("declarative_js_engine_ng") {
447  forward_variables_from(invoker, "*")
448
449  ohos_source_set(target_name) {
450    subsystem_name = ace_engine_subsystem
451    part_name = ace_engine_part
452    defines += invoker.defines
453    if (target_cpu == "arm64") {
454      if (!is_mingw) {
455        defines += [ "_ARM64_" ]
456      }
457    }
458    if (current_os == "ohos" && current_cpu == "x86_64") {
459      defines += [ "SIMULATOR_64" ]
460    }
461
462    deps = []
463    configs = [ "$ace_root:ace_config" ]
464
465    sources = [
466      "engine/bindings_implementation.cpp",
467      "engine/declarative_engine_loader.cpp",
468      "engine/functions/js_animator_function.cpp",
469      "engine/functions/js_click_function.cpp",
470      "engine/functions/js_clipboard_function.cpp",
471      "engine/functions/js_drag_function.cpp",
472      "engine/functions/js_focus_function.cpp",
473      "engine/functions/js_foreach_function.cpp",
474      "engine/functions/js_function.cpp",
475      "engine/functions/js_gesture_function.cpp",
476      "engine/functions/js_hover_function.cpp",
477      "engine/functions/js_key_function.cpp",
478      "engine/functions/js_mouse_function.cpp",
479      "engine/functions/js_on_area_change_function.cpp",
480      "engine/functions/js_page_transition_function.cpp",
481      "engine/functions/js_pan_function.cpp",
482      "engine/functions/js_touch_function.cpp",
483      "engine/functions/js_webview_function.cpp",
484      "engine/js_types.cpp",
485      "jsview/js_environment.cpp",
486      "jsview/js_local_storage.cpp",
487      "jsview/js_persistent.cpp",
488      "jsview/js_view_functions.cpp",
489      "jsview/js_view_measure_layout.cpp",
490      "sharedata/js_share_data.cpp",
491
492      # jsviews
493      "jsview/js_column.cpp",
494      "jsview/js_container_base.cpp",
495      "jsview/js_flex.cpp",
496      "jsview/js_grid_container.cpp",
497      "jsview/js_image.cpp",
498      "jsview/js_interactable_view.cpp",
499      "jsview/js_lazy_foreach.cpp",
500      "jsview/js_list.cpp",
501      "jsview/js_list_item.cpp",
502      "jsview/js_row.cpp",
503      "jsview/js_stack.cpp",
504      "jsview/js_text.cpp",
505      "jsview/js_view.cpp",
506      "jsview/js_view_abstract.cpp",
507    ]
508
509    sources += [
510      "$ace_root/frameworks/bridge/js_frontend/engine/common/js_engine.cpp",
511    ]
512
513    if (defined(config.video_components_support) &&
514        config.video_components_support) {
515      sources += [ "jsview/js_video.cpp" ]
516    }
517
518    if (defined(config.use_build_in_js_engine) &&
519        config.use_build_in_js_engine) {
520      deps += [ "$ace_root/frameworks/bridge:framework_bridge_ng_$platform" ]
521      defines += [ "BUILT_IN_JS_ENGINE" ]
522    } else {
523      deps += [ "$ace_root/build:libace" ]
524      if (defined(config.build_container_scope_lib) &&
525          config.build_container_scope_lib) {
526        deps += [ "$ace_napi:ace_container_scope" ]
527      }
528    }
529
530    deps += [ "engine/$engine_path:declarative_js_engine_bridge_${engine_name}_$platform" ]
531
532    deps += [
533      ":gen_obj_src_js_enum_style",
534      ":gen_obj_src_js_proxyclass",
535    ]
536  }
537}
538
539# dynamic generate js_engine targets
540foreach(item, ace_platforms) {
541  platform = item.name
542  engine_config = {
543  }
544  engine_config = item.config
545  support_engines = []
546  support_engines = engine_config.js_engines
547  foreach(engine, support_engines) {
548    declarative_js_engine(
549        "declarative_js_engine_${engine.engine_name}_$platform") {
550      platform = item.name
551      engine_name = engine.engine_name
552      engine_path = engine.engine_path
553      defines = engine.engine_defines
554
555      config = {
556      }
557      if (defined(item.config)) {
558        config = item.config
559      }
560      if (defined(config.defines)) {
561        defines += config.defines
562      }
563    }
564
565    declarative_js_engine_ng(
566        "declarative_js_engine_ng_${engine.engine_name}_$platform") {
567      platform = item.name
568      engine_name = engine.engine_name
569      engine_path = engine.engine_path
570      defines = engine.engine_defines
571
572      config = {
573      }
574      if (defined(item.config)) {
575        config = item.config
576      }
577      if (defined(config.defines)) {
578        defines += config.defines
579      }
580    }
581  }
582}
583