• 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_ext.gni")
17import("//foundation/arkui/ace_engine/build/ace_gen_obj.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"
68jsuicontext_obj_path = base_output_path + "/jsUIContext.o"
69
70gen_obj("js_proxyclass") {
71  input = "engine/stateMgmt.js"
72  if (use_mac || use_mingw_win || use_linux || target_os == "ios") {
73    jsproxyclass_obj_path = base_output_path + "/js_proxy_class.c"
74  }
75  output = jsproxyclass_obj_path
76  snapshot_dep = []
77}
78
79gen_obj("js_enum_style") {
80  input = "engine/jsEnumStyle.js"
81  if (use_mac || use_mingw_win || use_linux || target_os == "ios") {
82    jsenumstyle_obj_path = base_output_path + "/js_enum_style.c"
83  }
84  output = jsenumstyle_obj_path
85  snapshot_dep = []
86}
87
88if (!is_arkui_x) {
89  gen_obj("js_mock_system_plugin") {
90    input = "$root_out_dir/obj/ide/tools/previewer/automock/dist/jsMockSystemPlugin.js"
91    if (use_mac || use_mingw_win || use_linux || target_os == "ios") {
92      jsmocksystemplugin_obj_path =
93          base_output_path + "/js_mock_system_plugin.c"
94    }
95    output = jsmocksystemplugin_obj_path
96    snapshot_dep = [ "//ide/tools/previewer/automock:gen_snapshot_jsmock" ]
97  }
98}
99
100gen_obj("js_uicontext") {
101  input = "engine/jsUIContext.js"
102  if (use_mac || use_mingw_win || use_linux || target_os == "ios") {
103    jsuicontext_obj_path = base_output_path + "/jsUIContext.c"
104  }
105  output = jsuicontext_obj_path
106  snapshot_dep = []
107}
108
109# build declarative javascript engine source
110template("declarative_js_engine") {
111  forward_variables_from(invoker, "*")
112
113  ohos_source_set(target_name) {
114    subsystem_name = ace_engine_subsystem
115    part_name = ace_engine_part
116    defines += invoker.defines
117    if (target_cpu == "arm64") {
118      if (!is_mingw) {
119        defines += [ "_ARM64_" ]
120      }
121    }
122    if (current_os == "ohos" && current_cpu == "x86_64") {
123      defines += [ "SIMULATOR_64" ]
124    }
125
126    deps = []
127    configs = [ "$ace_root:ace_config" ]
128
129    if (defined(config.model_component_support) &&
130        config.model_component_support) {
131      configs += [ "//foundation/graphic/graphic_3d/3d_widget_adapter:widget_adapter_config" ]
132    }
133
134    sources = [
135      "engine/bindings_implementation.cpp",
136      "engine/declarative_engine_loader.cpp",
137      "engine/functions/js_animator_function.cpp",
138      "engine/functions/js_click_function.cpp",
139      "engine/functions/js_clipboard_function.cpp",
140      "engine/functions/js_drag_function.cpp",
141      "engine/functions/js_focus_function.cpp",
142      "engine/functions/js_foreach_function.cpp",
143      "engine/functions/js_function.cpp",
144      "engine/functions/js_gesture_function.cpp",
145      "engine/functions/js_hover_function.cpp",
146      "engine/functions/js_key_function.cpp",
147      "engine/functions/js_mouse_function.cpp",
148      "engine/functions/js_on_area_change_function.cpp",
149      "engine/functions/js_page_transition_function.cpp",
150      "engine/functions/js_pan_function.cpp",
151      "engine/functions/js_swiper_function.cpp",
152      "engine/functions/js_touch_function.cpp",
153      "engine/functions/js_webview_function.cpp",
154      "engine/js_types.cpp",
155      "interfaces/profiler/js_profiler.cpp",
156      "jsview/action_sheet/js_action_sheet.cpp",
157      "jsview/dialog/js_alert_dialog.cpp",
158      "jsview/dialog/js_custom_dialog_controller.cpp",
159      "jsview/js_animator.cpp",
160      "jsview/js_badge.cpp",
161      "jsview/js_blank.cpp",
162      "jsview/js_button.cpp",
163      "jsview/js_calendar.cpp",
164      "jsview/js_calendar_controller.cpp",
165      "jsview/js_calendar_picker.cpp",
166      "jsview/js_canvas.cpp",
167      "jsview/js_canvas_gradient.cpp",
168      "jsview/js_canvas_image_data.cpp",
169      "jsview/js_canvas_path.cpp",
170      "jsview/js_canvas_pattern.cpp",
171      "jsview/js_canvas_renderer.cpp",
172      "jsview/js_checkbox.cpp",
173      "jsview/js_checkboxgroup.cpp",
174      "jsview/js_circle.cpp",
175      "jsview/js_clipboard.cpp",
176      "jsview/js_column.cpp",
177      "jsview/js_column_split.cpp",
178      "jsview/js_common_view.cpp",
179      "jsview/js_container_base.cpp",
180      "jsview/js_counter.cpp",
181      "jsview/js_data_panel.cpp",
182      "jsview/js_datepicker.cpp",
183      "jsview/js_divider.cpp",
184      "jsview/js_ellipse.cpp",
185      "jsview/js_environment.cpp",
186      "jsview/js_flex.cpp",
187      "jsview/js_flex_impl.cpp",
188      "jsview/js_foreach.cpp",
189      "jsview/js_form_link.cpp",
190      "jsview/js_gauge.cpp",
191      "jsview/js_gesture.cpp",
192      "jsview/js_grid.cpp",
193      "jsview/js_grid_col.cpp",
194      "jsview/js_grid_container.cpp",
195      "jsview/js_grid_item.cpp",
196      "jsview/js_grid_row.cpp",
197      "jsview/js_hyperlink.cpp",
198      "jsview/js_if_else.cpp",
199      "jsview/js_image.cpp",
200      "jsview/js_image_animator.cpp",
201      "jsview/js_image_span.cpp",
202      "jsview/js_indexer.cpp",
203      "jsview/js_interactable_view.cpp",
204      "jsview/js_lazy_foreach.cpp",
205      "jsview/js_line.cpp",
206      "jsview/js_linear_gradient.cpp",
207      "jsview/js_list.cpp",
208      "jsview/js_list_item.cpp",
209      "jsview/js_list_item_group.cpp",
210      "jsview/js_loading_progress.cpp",
211      "jsview/js_local_storage.cpp",
212      "jsview/js_location_button.cpp",
213      "jsview/js_marquee.cpp",
214      "jsview/js_matrix2d.cpp",
215      "jsview/js_menu.cpp",
216      "jsview/js_menu_item.cpp",
217      "jsview/js_menu_item_group.cpp",
218      "jsview/js_navdestination.cpp",
219      "jsview/js_navigation.cpp",
220      "jsview/js_navigation_stack.cpp",
221      "jsview/js_navigator.cpp",
222      "jsview/js_navrouter.cpp",
223      "jsview/js_offscreen_canvas.cpp",
224      "jsview/js_offscreen_rendering_context.cpp",
225      "jsview/js_page_transition.cpp",
226      "jsview/js_pan_handler.cpp",
227      "jsview/js_particle.cpp",
228      "jsview/js_paste_button.cpp",
229      "jsview/js_path.cpp",
230      "jsview/js_path2d.cpp",
231      "jsview/js_pattern_lock.cpp",
232      "jsview/js_persistent.cpp",
233      "jsview/js_polygon.cpp",
234      "jsview/js_polyline.cpp",
235      "jsview/js_progress.cpp",
236      "jsview/js_qrcode.cpp",
237      "jsview/js_radio.cpp",
238      "jsview/js_rect.cpp",
239      "jsview/js_recycle_view.cpp",
240      "jsview/js_refresh.cpp",
241      "jsview/js_relative_container.cpp",
242      "jsview/js_render_image.cpp",
243      "jsview/js_rendering_context.cpp",
244      "jsview/js_rendering_context_settings.cpp",
245      "jsview/js_richeditor.cpp",
246      "jsview/js_row.cpp",
247      "jsview/js_row_split.cpp",
248      "jsview/js_save_button.cpp",
249      "jsview/js_scope_util.cpp",
250      "jsview/js_scroll.cpp",
251      "jsview/js_scroller.cpp",
252      "jsview/js_search.cpp",
253      "jsview/js_sec_button_base.cpp",
254      "jsview/js_select.cpp",
255      "jsview/js_shape.cpp",
256      "jsview/js_shape_abstract.cpp",
257      "jsview/js_sheet.cpp",
258      "jsview/js_side_bar.cpp",
259      "jsview/js_slider.cpp",
260      "jsview/js_sliding_panel.cpp",
261      "jsview/js_span.cpp",
262      "jsview/js_stack.cpp",
263      "jsview/js_stepper.cpp",
264      "jsview/js_stepper_item.cpp",
265      "jsview/js_swiper.cpp",
266      "jsview/js_tab_content.cpp",
267      "jsview/js_tabs.cpp",
268      "jsview/js_tabs_controller.cpp",
269      "jsview/js_text.cpp",
270      "jsview/js_text_clock.cpp",
271      "jsview/js_textarea.cpp",
272      "jsview/js_textfield.cpp",
273      "jsview/js_textinput.cpp",
274      "jsview/js_textpicker.cpp",
275      "jsview/js_texttimer.cpp",
276      "jsview/js_toggle.cpp",
277      "jsview/js_touch_handler.cpp",
278      "jsview/js_utils.cpp",
279      "jsview/js_view.cpp",
280      "jsview/js_view_abstract.cpp",
281      "jsview/js_view_context.cpp",
282      "jsview/js_view_functions.cpp",
283      "jsview/js_view_measure_layout.cpp",
284      "jsview/js_view_stack_processor.cpp",
285      "jsview/js_water_flow.cpp",
286      "jsview/js_water_flow_item.cpp",
287      "jsview/menu/js_context_menu.cpp",
288      "jsview/scroll_bar/js_scroll_bar.cpp",
289      "sharedata/js_share_data.cpp",
290      "view_stack_processor.cpp",
291
292      # Models implemenations for classic fw
293      "jsview/models/action_sheet_model_impl.cpp",
294      "jsview/models/alert_dialog_model_impl.cpp",
295      "jsview/models/animator_model_impl.cpp",
296      "jsview/models/badge_model_impl.cpp",
297      "jsview/models/blank_model_impl.cpp",
298      "jsview/models/button_model_impl.cpp",
299      "jsview/models/calendar_controller_model_impl.cpp",
300      "jsview/models/calendar_model_impl.cpp",
301      "jsview/models/canvas_model_impl.cpp",
302      "jsview/models/canvas_renderer_model_impl.cpp",
303      "jsview/models/checkbox_model_impl.cpp",
304      "jsview/models/checkboxgroup_model_impl.cpp",
305      "jsview/models/circle_model_impl.cpp",
306      "jsview/models/column_model_impl.cpp",
307      "jsview/models/common_view_model_impl.cpp",
308      "jsview/models/counter_model_impl.cpp",
309      "jsview/models/custom_dialog_controller_model_impl.cpp",
310      "jsview/models/data_panel_model_impl.cpp",
311      "jsview/models/divider_model_impl.cpp",
312      "jsview/models/ellipse_model_impl.cpp",
313      "jsview/models/flex_model_impl.cpp",
314      "jsview/models/for_each_model_impl.cpp",
315      "jsview/models/gauge_model_impl.cpp",
316      "jsview/models/gesture_model_impl.cpp",
317      "jsview/models/grid_col_model_impl.cpp",
318      "jsview/models/grid_container_model_impl.cpp",
319      "jsview/models/grid_item_model_impl.cpp",
320      "jsview/models/grid_model_impl.cpp",
321      "jsview/models/grid_row_model_impl.cpp",
322      "jsview/models/hyperlink_model_impl.cpp",
323      "jsview/models/if_else_model_impl.cpp",
324      "jsview/models/image_animator_model_impl.cpp",
325      "jsview/models/image_model_impl.cpp",
326      "jsview/models/indexer_model_impl.cpp",
327      "jsview/models/lazy_for_each_model_impl.cpp",
328      "jsview/models/line_model_impl.cpp",
329      "jsview/models/linear_split_model_impl.cpp",
330      "jsview/models/list_item_group_model_impl.cpp",
331      "jsview/models/list_item_model_impl.cpp",
332      "jsview/models/list_model_impl.cpp",
333      "jsview/models/loading_progress_model_impl.cpp",
334      "jsview/models/marquee_model_impl.cpp",
335      "jsview/models/menu_item_model_impl.cpp",
336      "jsview/models/menu_model_impl.cpp",
337      "jsview/models/navigation_model_impl.cpp",
338      "jsview/models/navigator_model_impl.cpp",
339      "jsview/models/offscreen_context_model_impl.cpp",
340      "jsview/models/page_transition_model_impl.cpp",
341      "jsview/models/path_model_impl.cpp",
342      "jsview/models/patternlock_model_impl.cpp",
343      "jsview/models/picker_model_impl.cpp",
344      "jsview/models/polygon_model_impl.cpp",
345      "jsview/models/progress_model_impl.cpp",
346      "jsview/models/qrcode_model_impl.cpp",
347      "jsview/models/radio_model_impl.cpp",
348      "jsview/models/rect_model_impl.cpp",
349      "jsview/models/refresh_model_impl.cpp",
350      "jsview/models/rendering_context_model_impl.cpp",
351      "jsview/models/richeditor_model_impl.cpp",
352      "jsview/models/row_model_impl.cpp",
353      "jsview/models/scroll_bar_model_impl.cpp",
354      "jsview/models/scroll_model_impl.cpp",
355      "jsview/models/search_model_impl.cpp",
356      "jsview/models/select_model_impl.cpp",
357      "jsview/models/shape_abstract_model_impl.cpp",
358      "jsview/models/shape_model_impl.cpp",
359      "jsview/models/side_bar_container_model_impl.cpp",
360      "jsview/models/slider_model_impl.cpp",
361      "jsview/models/sliding_panel_model_impl.cpp",
362      "jsview/models/span_model_impl.cpp",
363      "jsview/models/stack_model_impl.cpp",
364      "jsview/models/stepper_item_model_impl.cpp",
365      "jsview/models/stepper_model_impl.cpp",
366      "jsview/models/swiper_model_impl.cpp",
367      "jsview/models/tab_content_model_impl.cpp",
368      "jsview/models/tabs_model_impl.cpp",
369      "jsview/models/text_clock_model_impl.cpp",
370      "jsview/models/text_field_model_impl.cpp",
371      "jsview/models/text_model_impl.cpp",
372      "jsview/models/text_timer_model_impl.cpp",
373      "jsview/models/textpicker_model_impl.cpp",
374      "jsview/models/timepicker_model_impl.cpp",
375      "jsview/models/toggle_model_impl.cpp",
376      "jsview/models/view_abstract_model_impl.cpp",
377      "jsview/models/view_context_model_impl.cpp",
378      "jsview/models/view_full_update_model_impl.cpp",
379      "jsview/models/view_partial_update_model_impl.cpp",
380      "jsview/models/water_flow_item_model_impl.cpp",
381      "jsview/models/water_flow_model_impl.cpp",
382    ]
383
384    if (defined(config.model_component_support) &&
385        config.model_component_support) {
386      sources += [ "jsview/models/model_view_impl.cpp" ]
387    }
388
389    external_deps = []
390    if (defined(config.enable_drag_framework) && config.enable_drag_framework &&
391        defined(global_parts_info.distributeddatamgr_udmf)) {
392      external_deps += [
393        "udmf:udmf_client",
394        "udmf:udmf_data_napi",
395      ]
396    }
397
398    # rich components needed by phone and TV. wearable like watch do not need them
399    if (defined(config.rich_components_support) &&
400        config.rich_components_support) {
401      sources += [
402        "jsview/js_camera.cpp",
403        "jsview/js_piece.cpp",
404        "jsview/js_rating.cpp",
405        "jsview/models/rating_model_impl.cpp",
406      ]
407      if (defined(config.video_components_support) &&
408          config.video_components_support) {
409        sources += [
410          "jsview/js_video.cpp",
411          "jsview/js_video_controller.cpp",
412          "jsview/models/video_model_impl.cpp",
413        ]
414      }
415      if (defined(config.video_support_jsstack) &&
416          config.video_support_jsstack) {
417        external_deps += [ "hiview:libxpower_event_js" ]
418      }
419    }
420
421    if (defined(vendor_configs.ace_engine_advanced)) {
422      sources += vendor_configs.ace_engine_advanced_jsview
423    }
424
425    if (defined(config.xcomponent_components_support) &&
426        config.xcomponent_components_support) {
427      sources += [
428        "jsview/js_xcomponent.cpp",
429        "jsview/js_xcomponent_controller.cpp",
430        "jsview/models/xcomponent_model_impl.cpp",
431      ]
432    }
433
434    if (defined(config.enable_ability_component) &&
435        config.enable_ability_component) {
436      sources += [
437        "jsview/js_ability_component.cpp",
438        "jsview/js_ability_component_controller.cpp",
439        "jsview/models/ability_component_model_impl.cpp",
440      ]
441
442      external_deps += [
443        "input:libmmi-client",
444        "window_manager:scene_session",
445      ]
446    }
447
448    if (defined(config.web_components_support) &&
449        config.web_components_support) {
450      if (is_arkui_x) {
451        sources += [
452          "jsview/js_web.cpp",
453          "jsview/models/web_model_impl.cpp",
454        ]
455      } else {
456        sources += [
457          "jsview/js_richtext.cpp",
458          "jsview/js_web.cpp",
459          "jsview/js_web_controller.cpp",
460          "jsview/models/richtext_model_impl.cpp",
461          "jsview/models/web_model_impl.cpp",
462        ]
463      }
464    }
465
466    if (defined(config.form_components_support) &&
467        config.form_components_support) {
468      sources += [
469        "jsview/js_form.cpp",
470        "jsview/models/form_model_impl.cpp",
471      ]
472    }
473
474    if (defined(config.remote_window_support) && config.remote_window_support) {
475      sources += [
476        "jsview/js_remote_window.cpp",
477        "jsview/models/remote_window_model_impl.cpp",
478      ]
479    }
480
481    if (defined(config.effect_component_support) &&
482        config.effect_component_support) {
483      sources += [
484        "jsview/js_effect_component.cpp",
485        "jsview/models/effect_component_model_impl.cpp",
486      ]
487    }
488
489    if (defined(config.plugin_components_support) &&
490        config.plugin_components_support) {
491      sources += [
492        "jsview/js_plugin.cpp",
493        "jsview/models/plugin_model_impl.cpp",
494      ]
495    }
496
497    if (defined(config.preview_support) && config.preview_support) {
498      sources += [ "jsview/js_previewer_mock.cpp" ]
499    }
500
501    if (defined(config.model_component_support) &&
502        config.model_component_support) {
503      sources += [ "jsview/js_sceneview.cpp" ]
504    }
505
506    if (defined(config.use_build_in_js_engine) &&
507        config.use_build_in_js_engine) {
508      deps += [ "$ace_root/frameworks/bridge:framework_bridge_$platform" ]
509      defines += [ "BUILT_IN_JS_ENGINE" ]
510    } else {
511      sources += [
512        "$ace_root/frameworks/bridge/js_frontend/engine/common/js_engine.cpp",
513      ]
514      deps += [ "$ace_root/build:libace" ]
515      if (defined(config.build_container_scope_lib) &&
516          config.build_container_scope_lib) {
517        if (is_arkui_x) {
518          deps += [ "$ace_napi:ace_container_scope_static" ]
519        } else {
520          deps += [ "$ace_napi:ace_container_scope" ]
521        }
522      }
523    }
524
525    deps += [ "engine/$engine_path:declarative_js_engine_bridge_${engine_name}_$platform" ]
526
527    deps += [
528      ":gen_obj_src_js_enum_style",
529      ":gen_obj_src_js_proxyclass",
530      ":gen_obj_src_js_uicontext",
531    ]
532
533    include_dirs = [ "//foundation/window/window_manager/interfaces/innerkits" ]
534
535    # add for cross_platfrom_build temporarily, shall be removed after external_deps is supported
536    if (is_arkui_x) {
537      configs += [ "$ark_ets_path:ark_jsruntime_public_config" ]
538      deps += [ "$ark_ets_path:libark_jsruntime_static" ]
539      if (defined(config.pixel_map_support) && config.pixel_map_support) {
540        configs += [ "//foundation/multimedia/image_framework/interfaces/innerkits:image_external_config" ]
541      }
542    } else {
543      external_deps += [
544        "ets_runtime:libark_jsruntime",
545        "napi:ace_napi",
546      ]
547    }
548
549    if (platform == "windows" || platform == "mac" || platform == "linux") {
550      deps += [ ":gen_obj_src_js_mock_system_plugin" ]
551    } else {
552      if (defined(config.plugin_components_support) &&
553          config.plugin_components_support) {
554        if (!use_mingw_win && !use_mac && !use_linux) {
555          external_deps += [
556            "image_framework:image",
557            "image_framework:image_native",
558          ]
559        }
560      } else {
561        external_deps += [
562          "image_framework:image",
563          "image_framework:image_native",
564        ]
565      }
566
567      if (defined(config.window_scene_support) && config.window_scene_support) {
568        sources += [
569          "jsview/js_ui_extension.cpp",
570          "jsview/window_scene/js_root_scene.cpp",
571          "jsview/window_scene/js_screen.cpp",
572          "jsview/window_scene/js_window_scene.cpp",
573        ]
574      }
575    }
576  }
577}
578
579# build ng declarative javascript engine source
580template("declarative_js_engine_ng") {
581  forward_variables_from(invoker, "*")
582
583  ohos_source_set(target_name) {
584    subsystem_name = ace_engine_subsystem
585    part_name = ace_engine_part
586    defines += invoker.defines
587    if (target_cpu == "arm64") {
588      if (!is_mingw) {
589        defines += [ "_ARM64_" ]
590      }
591    }
592    if (current_os == "ohos" && current_cpu == "x86_64") {
593      defines += [ "SIMULATOR_64" ]
594    }
595
596    deps = []
597    configs = [ "$ace_root:ace_config" ]
598
599    sources = [
600      "engine/bindings_implementation.cpp",
601      "engine/declarative_engine_loader.cpp",
602      "engine/functions/js_animator_function.cpp",
603      "engine/functions/js_click_function.cpp",
604      "engine/functions/js_clipboard_function.cpp",
605      "engine/functions/js_drag_function.cpp",
606      "engine/functions/js_focus_function.cpp",
607      "engine/functions/js_foreach_function.cpp",
608      "engine/functions/js_function.cpp",
609      "engine/functions/js_gesture_function.cpp",
610      "engine/functions/js_hover_function.cpp",
611      "engine/functions/js_key_function.cpp",
612      "engine/functions/js_mouse_function.cpp",
613      "engine/functions/js_on_area_change_function.cpp",
614      "engine/functions/js_page_transition_function.cpp",
615      "engine/functions/js_pan_function.cpp",
616      "engine/functions/js_swiper_function.cpp",
617      "engine/functions/js_touch_function.cpp",
618      "engine/functions/js_webview_function.cpp",
619      "engine/js_types.cpp",
620      "jsview/js_environment.cpp",
621      "jsview/js_local_storage.cpp",
622      "jsview/js_persistent.cpp",
623      "jsview/js_view_functions.cpp",
624      "jsview/js_view_measure_layout.cpp",
625      "jsview/js_view_stack_processor.cpp",
626      "sharedata/js_share_data.cpp",
627
628      # jsviews
629      "jsview/action_sheet/js_action_sheet.cpp",
630      "jsview/dialog/js_alert_dialog.cpp",
631      "jsview/dialog/js_custom_dialog_controller.cpp",
632      "jsview/js_animator.cpp",
633      "jsview/js_badge.cpp",
634      "jsview/js_blank.cpp",
635      "jsview/js_button.cpp",
636      "jsview/js_calendar.cpp",
637      "jsview/js_calendar_controller.cpp",
638      "jsview/js_calendar_picker.cpp",
639      "jsview/js_canvas.cpp",
640      "jsview/js_canvas_gradient.cpp",
641      "jsview/js_canvas_image_data.cpp",
642      "jsview/js_canvas_path.cpp",
643      "jsview/js_canvas_pattern.cpp",
644      "jsview/js_canvas_renderer.cpp",
645      "jsview/js_checkbox.cpp",
646      "jsview/js_checkboxgroup.cpp",
647      "jsview/js_circle.cpp",
648      "jsview/js_clipboard.cpp",
649      "jsview/js_column.cpp",
650      "jsview/js_column_split.cpp",
651      "jsview/js_common_view.cpp",
652      "jsview/js_container_base.cpp",
653      "jsview/js_counter.cpp",
654      "jsview/js_data_panel.cpp",
655      "jsview/js_datepicker.cpp",
656      "jsview/js_divider.cpp",
657      "jsview/js_ellipse.cpp",
658      "jsview/js_flex.cpp",
659      "jsview/js_flex_impl.cpp",
660      "jsview/js_foreach.cpp",
661      "jsview/js_form_link.cpp",
662      "jsview/js_gauge.cpp",
663      "jsview/js_gesture.cpp",
664      "jsview/js_grid.cpp",
665      "jsview/js_grid_col.cpp",
666      "jsview/js_grid_container.cpp",
667      "jsview/js_grid_item.cpp",
668      "jsview/js_grid_row.cpp",
669      "jsview/js_hyperlink.cpp",
670      "jsview/js_if_else.cpp",
671      "jsview/js_image.cpp",
672      "jsview/js_image_animator.cpp",
673      "jsview/js_image_span.cpp",
674      "jsview/js_indexer.cpp",
675      "jsview/js_interactable_view.cpp",
676      "jsview/js_lazy_foreach.cpp",
677      "jsview/js_line.cpp",
678      "jsview/js_linear_gradient.cpp",
679      "jsview/js_list.cpp",
680      "jsview/js_list_item.cpp",
681      "jsview/js_list_item_group.cpp",
682      "jsview/js_loading_progress.cpp",
683      "jsview/js_marquee.cpp",
684      "jsview/js_matrix2d.cpp",
685      "jsview/js_menu.cpp",
686      "jsview/js_menu_item.cpp",
687      "jsview/js_menu_item_group.cpp",
688      "jsview/js_navdestination.cpp",
689      "jsview/js_navigation.cpp",
690      "jsview/js_navigation_stack.cpp",
691      "jsview/js_navigator.cpp",
692      "jsview/js_navrouter.cpp",
693      "jsview/js_offscreen_canvas.cpp",
694      "jsview/js_offscreen_rendering_context.cpp",
695      "jsview/js_page_transition.cpp",
696      "jsview/js_path.cpp",
697      "jsview/js_path2d.cpp",
698      "jsview/js_polygon.cpp",
699      "jsview/js_polyline.cpp",
700      "jsview/js_progress.cpp",
701      "jsview/js_radio.cpp",
702      "jsview/js_rating.cpp",
703      "jsview/js_rect.cpp",
704      "jsview/js_recycle_view.cpp",
705      "jsview/js_refresh.cpp",
706      "jsview/js_render_image.cpp",
707      "jsview/js_rendering_context.cpp",
708      "jsview/js_rendering_context_settings.cpp",
709      "jsview/js_row.cpp",
710      "jsview/js_row_split.cpp",
711      "jsview/js_scope_util.cpp",
712      "jsview/js_scroll.cpp",
713      "jsview/js_scroller.cpp",
714      "jsview/js_search.cpp",
715      "jsview/js_select.cpp",
716      "jsview/js_shape.cpp",
717      "jsview/js_shape_abstract.cpp",
718      "jsview/js_side_bar.cpp",
719      "jsview/js_slider.cpp",
720      "jsview/js_sliding_panel.cpp",
721      "jsview/js_span.cpp",
722      "jsview/js_stack.cpp",
723      "jsview/js_stepper.cpp",
724      "jsview/js_stepper_item.cpp",
725      "jsview/js_swiper.cpp",
726      "jsview/js_tab_content.cpp",
727      "jsview/js_tabs.cpp",
728      "jsview/js_tabs_controller.cpp",
729      "jsview/js_text.cpp",
730      "jsview/js_text_clock.cpp",
731      "jsview/js_textarea.cpp",
732      "jsview/js_textfield.cpp",
733      "jsview/js_textinput.cpp",
734      "jsview/js_textpicker.cpp",
735      "jsview/js_texttimer.cpp",
736      "jsview/js_toggle.cpp",
737      "jsview/js_utils.cpp",
738      "jsview/js_view.cpp",
739      "jsview/js_view_abstract.cpp",
740      "jsview/js_view_context.cpp",
741      "jsview/js_water_flow.cpp",
742      "jsview/js_water_flow_item.cpp",
743      "jsview/scroll_bar/js_scroll_bar.cpp",
744    ]
745
746    sources += [
747      "$ace_root/frameworks/bridge/js_frontend/engine/common/js_engine.cpp",
748    ]
749
750    if (!defined(config.use_components_lib) || !config.use_components_lib) {
751      sources += [
752        "jsview/js_pattern_lock.cpp",
753        "jsview/js_qrcode.cpp",
754        "jsview/js_relative_container.cpp",
755      ]
756    }
757
758    if (defined(config.video_components_support) &&
759        config.video_components_support) {
760      sources += [
761        "jsview/js_video.cpp",
762        "jsview/js_video_controller.cpp",
763      ]
764    }
765
766    if (defined(config.window_scene_support) && config.window_scene_support) {
767      sources += [
768        "jsview/js_ui_extension.cpp",
769        "jsview/window_scene/js_root_scene.cpp",
770        "jsview/window_scene/js_screen.cpp",
771        "jsview/window_scene/js_window_scene.cpp",
772      ]
773    }
774
775    if (defined(config.enable_ability_component) &&
776        config.enable_ability_component) {
777      sources += [
778        "jsview/js_ability_component.cpp",
779        "jsview/js_ability_component_controller.cpp",
780      ]
781    }
782
783    if (defined(config.form_components_support) &&
784        config.form_components_support) {
785      sources += [ "jsview/js_form.cpp" ]
786    }
787
788    if (defined(config.plugin_components_support) &&
789        config.plugin_components_support) {
790      sources += [ "jsview/js_plugin.cpp" ]
791    }
792
793    if (defined(config.web_components_support) &&
794        config.web_components_support) {
795      if (!is_arkui_x) {
796        sources += [
797          "jsview/js_richtext.cpp",
798          "jsview/js_web.cpp",
799          "jsview/js_web_controller.cpp",
800        ]
801      } else {
802        sources += [ "jsview/js_web.cpp" ]
803      }
804    }
805
806    if (defined(config.remote_window_support) && config.remote_window_support) {
807      sources += [ "jsview/js_remote_window.cpp" ]
808    }
809
810    if (defined(config.xcomponent_components_support) &&
811        config.xcomponent_components_support) {
812      sources += [
813        "jsview/js_xcomponent.cpp",
814        "jsview/js_xcomponent_controller.cpp",
815      ]
816    }
817
818    if (defined(config.model_component_support) &&
819        config.model_component_support) {
820      sources += [ "jsview/js_sceneview.cpp" ]
821    }
822
823    if (defined(config.use_build_in_js_engine) &&
824        config.use_build_in_js_engine) {
825      deps += [ "$ace_root/frameworks/bridge:framework_bridge_ng_$platform" ]
826      defines += [ "BUILT_IN_JS_ENGINE" ]
827    } else {
828      deps += [ "$ace_root/build:libace" ]
829      if (defined(config.build_container_scope_lib) &&
830          config.build_container_scope_lib) {
831        deps += [ "$ace_napi:ace_container_scope" ]
832      }
833    }
834
835    # add for cross_platfrom_build temporarily, shall be removed after external_deps is supported
836    external_deps = []
837    if (is_arkui_x) {
838      configs += [ "$ark_ets_path:ark_jsruntime_public_config" ]
839      deps += [ "$ark_ets_path:libark_jsruntime_static" ]
840      if (defined(config.pixel_map_support) && config.pixel_map_support) {
841        configs += [ "//foundation/multimedia/image_framework/interfaces/innerkits:image_external_config" ]
842      }
843    } else {
844      external_deps += [
845        "ets_runtime:libark_jsruntime",
846        "napi:ace_napi",
847      ]
848    }
849
850    deps += [ "engine/$engine_path:declarative_js_engine_bridge_${engine_name}_$platform" ]
851
852    deps += [
853      ":gen_obj_src_js_enum_style",
854      ":gen_obj_src_js_proxyclass",
855      ":gen_obj_src_js_uicontext",
856    ]
857
858    if (defined(config.enable_drag_framework) && config.enable_drag_framework &&
859        defined(global_parts_info.distributeddatamgr_udmf)) {
860      external_deps += [
861        "udmf:udmf_client",
862        "udmf:udmf_data_napi",
863      ]
864    }
865  }
866}
867
868# dynamic generate js_engine targets
869foreach(item, ace_platforms) {
870  platform = item.name
871  engine_config = {
872  }
873  engine_config = item.config
874  support_engines = []
875  support_engines = engine_config.js_engines
876  foreach(engine, support_engines) {
877    declarative_js_engine(
878        "declarative_js_engine_${engine.engine_name}_$platform") {
879      platform = item.name
880      engine_name = engine.engine_name
881      engine_path = engine.engine_path
882      defines = engine.engine_defines
883
884      config = {
885      }
886      if (defined(item.config)) {
887        config = item.config
888      }
889      if (defined(config.defines)) {
890        defines += config.defines
891      }
892    }
893
894    declarative_js_engine_ng(
895        "declarative_js_engine_ng_${engine.engine_name}_$platform") {
896      platform = item.name
897      engine_name = engine.engine_name
898      engine_path = engine.engine_path
899      defines = engine.engine_defines
900
901      config = {
902      }
903      if (defined(item.config)) {
904        config = item.config
905      }
906      if (defined(config.defines)) {
907        defines += config.defines
908      }
909    }
910  }
911}
912