# Copyright (c) 2021-2024 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import("//build/ohos.gni") import("//build/templates/abc/ohos_abc.gni") import("//foundation/arkui/ace_engine/ace_config.gni") import("//foundation/arkui/ace_engine/build/ace_ext.gni") import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") # declarative frontend source template("declarative_frontend") { forward_variables_from(invoker, "*") platform = invoker.platform ohos_source_set(target_name) { subsystem_name = ace_engine_subsystem part_name = ace_engine_part defines += invoker.defines defines += [ "USE_ARK_ENGINE" ] configs = [ "$ace_root:ace_config" ] include_dirs = [ "$ace_napi_frameworks/bridge/declarative_frontend/engine/jsi" ] if (platform == "ohos_ng" || is_arkui_x) { sources = [ "ng/declarative_frontend_ng.cpp", "ng/frontend_delegate_declarative_ng.cpp", "ng/page_router_manager.cpp", ] } else { sources = [ "declarative_frontend.cpp", "frontend_delegate_declarative.cpp", "ng/page_router_manager.cpp", ] } if (ace_engine_feature_enable_split_mode && defined(vendor_configs.ace_engine_advanced_split_mode_dirs)) { include_dirs += vendor_configs.ace_engine_advanced_split_mode_dirs } if (ace_engine_feature_enable_split_mode && defined(vendor_configs.ace_engine_advanced_split_mode_bridge)) { sources += vendor_configs.ace_engine_advanced_split_mode_bridge } else { sources += [ "ng/page_router_manager_factory.cpp" ] } deps = [ "$ace_root/frameworks/core/components/theme:build_theme_code" ] if (is_arkui_x) { deps += [ "//arkcompiler/ets_runtime:libark_jsruntime_static", "//foundation/arkui/napi:ace_napi", ] } external_deps = [ "ets_runtime:libark_jsruntime", "napi:ace_napi", ] if (use_hilog) { external_deps += [ "hilog:libhilog" ] } } } foreach(item, ace_platforms) { platform = item.name declarative_frontend("declarative_frontend_" + item.name) { defines = [] config = { } if (defined(item.config)) { config = item.config } if (defined(config.defines)) { defines = config.defines } } } # js resources objects base_output_path = get_label_info(":gen_js_proxyclass", "target_out_dir") jsproxyclass_obj_path = base_output_path + "/js_proxy_class.o" jsenumstyle_obj_path = base_output_path + "/js_enum_style.o" jsmocksystemplugin_obj_path = base_output_path + "/js_mock_system_plugin.o" ark_theme_obj_path = base_output_path + "/arkTheme.o" jsuicontext_obj_path = base_output_path + "/jsUIContext.o" arkcomponent_obj_path = base_output_path + "/arkComponent.o" gen_obj("js_proxyclass") { input = "engine/stateMgmt.js" if (use_mac || use_mingw_win || use_linux || target_os == "ios") { jsproxyclass_obj_path = base_output_path + "/js_proxy_class.c" } output = jsproxyclass_obj_path snapshot_dep = [] } gen_obj("js_enum_style") { input = "engine/jsEnumStyle.js" if (use_mac || use_mingw_win || use_linux || target_os == "ios") { jsenumstyle_obj_path = base_output_path + "/js_enum_style.c" } output = jsenumstyle_obj_path snapshot_dep = [] } gen_obj("ark_theme") { input = "engine/arkTheme.js" if (use_mac || use_mingw_win || use_linux || target_os == "ios") { ark_theme_obj_path = base_output_path + "/ark_theme.c" } output = ark_theme_obj_path snapshot_dep = [] } gen_obj("ark_component") { input = "engine/arkComponent.js" if (use_mac || use_mingw_win || use_linux || target_os == "ios") { arkcomponent_obj_path = base_output_path + "/ark_component.c" } output = arkcomponent_obj_path snapshot_dep = [] } if (!is_arkui_x) { gen_obj("js_mock_system_plugin") { input = "$root_out_dir/obj/ide/tools/previewer/automock/dist/jsMockSystemPlugin.js" if (use_mac || use_mingw_win || use_linux || target_os == "ios") { jsmocksystemplugin_obj_path = base_output_path + "/js_mock_system_plugin.c" } output = jsmocksystemplugin_obj_path snapshot_dep = [ "//ide/tools/previewer/automock:gen_snapshot_jsmock" ] } } gen_obj("js_uicontext") { input = "engine/jsUIContext.js" if (use_mac || use_mingw_win || use_linux || target_os == "ios") { jsuicontext_obj_path = base_output_path + "/jsUIContext.c" } output = jsuicontext_obj_path snapshot_dep = [] } # build declarative javascript engine source template("declarative_js_engine") { forward_variables_from(invoker, "*") ohos_source_set(target_name) { subsystem_name = ace_engine_subsystem part_name = ace_engine_part defines += invoker.defines if (target_cpu == "arm64") { if (!is_mingw) { defines += [ "_ARM64_" ] } } if (current_os == "ohos" && current_cpu == "x86_64") { defines += [ "SIMULATOR_64" ] } deps = [ ":ark_modifier", ":ark_theme_control", ":gen_obj_src_ark_component", ":gen_obj_src_ark_theme", ":gen_obj_src_js_enum_style", ":gen_obj_src_js_proxyclass", ":mock", ":prefetcher", ":statemanagement", ":x_node", "engine/$engine_path:declarative_js_engine_bridge_${engine_name}_$platform", ] if (!is_arkui_x) { deps += [ ":uicontext" ] } else { deps += [ ":gen_obj_src_js_uicontext" ] } configs = [ "$ace_root:ace_config" ] if (ace_engine_feature_enable_point_light) { defines += [ "POINT_LIGHT_ENABLE" ] } sources = [ "engine/bindings_implementation.cpp", "engine/declarative_engine_loader.cpp", "engine/functions/js_animator_function.cpp", "engine/functions/js_click_function.cpp", "engine/functions/js_clipboard_function.cpp", "engine/functions/js_drag_function.cpp", "engine/functions/js_focus_function.cpp", "engine/functions/js_foreach_function.cpp", "engine/functions/js_function.cpp", "engine/functions/js_gesture_function.cpp", "engine/functions/js_gesture_judge_function.cpp", "engine/functions/js_hover_function.cpp", "engine/functions/js_key_function.cpp", "engine/functions/js_mouse_function.cpp", "engine/functions/js_navigation_function.cpp", "engine/functions/js_on_area_change_function.cpp", "engine/functions/js_on_child_touch_test_function.cpp", "engine/functions/js_on_size_change_function.cpp", "engine/functions/js_page_transition_function.cpp", "engine/functions/js_pan_function.cpp", "engine/functions/js_should_built_in_recognizer_parallel_with_function.cpp", "engine/functions/js_swiper_function.cpp", "engine/functions/js_tabs_function.cpp", "engine/functions/js_touch_function.cpp", "engine/functions/js_touch_intercept_function.cpp", "engine/functions/js_webview_function.cpp", "engine/js_types.cpp", "interfaces/profiler/js_profiler.cpp", "jsview/action_sheet/js_action_sheet.cpp", "jsview/canvas/js_canvas.cpp", "jsview/canvas/js_canvas_gradient.cpp", "jsview/canvas/js_canvas_image_data.cpp", "jsview/canvas/js_canvas_path.cpp", "jsview/canvas/js_canvas_pattern.cpp", "jsview/canvas/js_canvas_renderer.cpp", "jsview/canvas/js_drawing_rendering_context.cpp", "jsview/canvas/js_matrix2d.cpp", "jsview/canvas/js_offscreen_canvas.cpp", "jsview/canvas/js_offscreen_rendering_context.cpp", "jsview/canvas/js_path2d.cpp", "jsview/canvas/js_render_image.cpp", "jsview/canvas/js_rendering_context.cpp", "jsview/canvas/js_rendering_context_settings.cpp", "jsview/dialog/js_alert_dialog.cpp", "jsview/dialog/js_custom_dialog_controller.cpp", "jsview/js_animator.cpp", "jsview/js_badge.cpp", "jsview/js_base_node.cpp", "jsview/js_blank.cpp", "jsview/js_button.cpp", "jsview/js_calendar.cpp", "jsview/js_calendar_controller.cpp", "jsview/js_calendar_picker.cpp", "jsview/js_checkbox.cpp", "jsview/js_checkboxgroup.cpp", "jsview/js_circle.cpp", "jsview/js_circle_shape.cpp", "jsview/js_clipboard.cpp", "jsview/js_column.cpp", "jsview/js_column_split.cpp", "jsview/js_common_view.cpp", "jsview/js_container_base.cpp", "jsview/js_container_span.cpp", "jsview/js_content_slot.cpp", "jsview/js_counter.cpp", "jsview/js_data_panel.cpp", "jsview/js_datepicker.cpp", "jsview/js_divider.cpp", "jsview/js_dump_log.cpp", "jsview/js_ellipse.cpp", "jsview/js_ellipse_shape.cpp", "jsview/js_environment.cpp", "jsview/js_flex.cpp", "jsview/js_flex_impl.cpp", "jsview/js_folder_stack.cpp", "jsview/js_foreach.cpp", "jsview/js_form_link.cpp", "jsview/js_gauge.cpp", "jsview/js_gesture.cpp", "jsview/js_grid.cpp", "jsview/js_grid_col.cpp", "jsview/js_grid_container.cpp", "jsview/js_grid_item.cpp", "jsview/js_grid_row.cpp", "jsview/js_hyperlink.cpp", "jsview/js_if_else.cpp", "jsview/js_image.cpp", "jsview/js_image_animator.cpp", "jsview/js_image_span.cpp", "jsview/js_indexer.cpp", "jsview/js_interactable_view.cpp", "jsview/js_keyboard_avoid.cpp", "jsview/js_layout_manager.cpp", "jsview/js_lazy_foreach.cpp", "jsview/js_line.cpp", "jsview/js_linear_gradient.cpp", "jsview/js_list.cpp", "jsview/js_list_item.cpp", "jsview/js_list_item_group.cpp", "jsview/js_loading_progress.cpp", "jsview/js_local_storage.cpp", "jsview/js_location_button.cpp", "jsview/js_marquee.cpp", "jsview/js_menu.cpp", "jsview/js_menu_item.cpp", "jsview/js_menu_item_group.cpp", "jsview/js_mock.cpp", "jsview/js_nav_path_stack.cpp", "jsview/js_navdestination.cpp", "jsview/js_navdestination_context.cpp", "jsview/js_navdestination_scrollable_processor.cpp", "jsview/js_navigation.cpp", "jsview/js_navigation_stack.cpp", "jsview/js_navigation_utils.cpp", "jsview/js_navigator.cpp", "jsview/js_navrouter.cpp", "jsview/js_node_container.cpp", "jsview/js_page_transition.cpp", "jsview/js_pan_handler.cpp", "jsview/js_particle.cpp", "jsview/js_paste_button.cpp", "jsview/js_path.cpp", "jsview/js_path_shape.cpp", "jsview/js_pattern_lock.cpp", "jsview/js_persistent.cpp", "jsview/js_polygon.cpp", "jsview/js_polyline.cpp", "jsview/js_progress.cpp", "jsview/js_qrcode.cpp", "jsview/js_radio.cpp", "jsview/js_rect.cpp", "jsview/js_rect_shape.cpp", "jsview/js_recycle_view.cpp", "jsview/js_refresh.cpp", "jsview/js_relative_container.cpp", "jsview/js_repeat.cpp", "jsview/js_repeat_virtual_scroll.cpp", "jsview/js_richeditor.cpp", "jsview/js_row.cpp", "jsview/js_row_split.cpp", "jsview/js_save_button.cpp", "jsview/js_scope_util.cpp", "jsview/js_scroll.cpp", "jsview/js_scrollable.cpp", "jsview/js_scrollable_base.cpp", "jsview/js_scroller.cpp", "jsview/js_search.cpp", "jsview/js_sec_button_base.cpp", "jsview/js_select.cpp", "jsview/js_shape.cpp", "jsview/js_shape_abstract.cpp", "jsview/js_sheet.cpp", "jsview/js_side_bar.cpp", "jsview/js_slider.cpp", "jsview/js_sliding_panel.cpp", "jsview/js_span.cpp", "jsview/js_stack.cpp", "jsview/js_state_mgmt_profiler.cpp", "jsview/js_stepper.cpp", "jsview/js_stepper_item.cpp", "jsview/js_swiper.cpp", "jsview/js_symbol.cpp", "jsview/js_symbol_span.cpp", "jsview/js_tab_content.cpp", "jsview/js_tabs.cpp", "jsview/js_tabs_controller.cpp", "jsview/js_tabs_feature.cpp", "jsview/js_text.cpp", "jsview/js_text_clock.cpp", "jsview/js_text_editable_controller.cpp", "jsview/js_textarea.cpp", "jsview/js_textfield.cpp", "jsview/js_textinput.cpp", "jsview/js_textpicker.cpp", "jsview/js_texttimer.cpp", "jsview/js_toggle.cpp", "jsview/js_touch_handler.cpp", "jsview/js_utils.cpp", "jsview/js_view.cpp", "jsview/js_view_abstract.cpp", "jsview/js_view_context.cpp", "jsview/js_view_functions.cpp", "jsview/js_view_measure_layout.cpp", "jsview/js_view_stack_processor.cpp", "jsview/js_water_flow.cpp", "jsview/js_water_flow_item.cpp", "jsview/js_water_flow_sections.cpp", "jsview/menu/js_context_menu.cpp", "jsview/scroll_bar/js_scroll_bar.cpp", "sharedata/js_share_data.cpp", "style_string/js_span_object.cpp", "style_string/js_span_string.cpp", "view_stack_processor.cpp", # ark_theme "ark_theme/theme_apply/js_with_theme.cpp", # Models implemenations for classic fw "jsview/models/action_sheet_model_impl.cpp", "jsview/models/alert_dialog_model_impl.cpp", "jsview/models/animator_model_impl.cpp", "jsview/models/badge_model_impl.cpp", "jsview/models/blank_model_impl.cpp", "jsview/models/button_model_impl.cpp", "jsview/models/calendar_controller_model_impl.cpp", "jsview/models/calendar_model_impl.cpp", "jsview/models/canvas/canvas_model_impl.cpp", "jsview/models/canvas/canvas_rendering_context_2d_model_impl.cpp", "jsview/models/canvas/offscreen_canvas_rendering_context_2d_model_impl.cpp", "jsview/models/checkbox_model_impl.cpp", "jsview/models/checkboxgroup_model_impl.cpp", "jsview/models/circle_model_impl.cpp", "jsview/models/column_model_impl.cpp", "jsview/models/common_view_model_impl.cpp", "jsview/models/counter_model_impl.cpp", "jsview/models/custom_dialog_controller_model_impl.cpp", "jsview/models/data_panel_model_impl.cpp", "jsview/models/divider_model_impl.cpp", "jsview/models/ellipse_model_impl.cpp", "jsview/models/flex_model_impl.cpp", "jsview/models/for_each_model_impl.cpp", "jsview/models/gauge_model_impl.cpp", "jsview/models/gesture_model_impl.cpp", "jsview/models/grid_col_model_impl.cpp", "jsview/models/grid_container_model_impl.cpp", "jsview/models/grid_item_model_impl.cpp", "jsview/models/grid_model_impl.cpp", "jsview/models/grid_row_model_impl.cpp", "jsview/models/hyperlink_model_impl.cpp", "jsview/models/if_else_model_impl.cpp", "jsview/models/image_animator_model_impl.cpp", "jsview/models/image_model_impl.cpp", "jsview/models/indexer_model_impl.cpp", "jsview/models/lazy_for_each_model_impl.cpp", "jsview/models/line_model_impl.cpp", "jsview/models/linear_split_model_impl.cpp", "jsview/models/list_item_group_model_impl.cpp", "jsview/models/list_item_model_impl.cpp", "jsview/models/list_model_impl.cpp", "jsview/models/loading_progress_model_impl.cpp", "jsview/models/marquee_model_impl.cpp", "jsview/models/menu_item_model_impl.cpp", "jsview/models/menu_model_impl.cpp", "jsview/models/navigation_model_impl.cpp", "jsview/models/navigator_model_impl.cpp", "jsview/models/page_transition_model_impl.cpp", "jsview/models/path_model_impl.cpp", "jsview/models/patternlock_model_impl.cpp", "jsview/models/picker_model_impl.cpp", "jsview/models/polygon_model_impl.cpp", "jsview/models/progress_model_impl.cpp", "jsview/models/qrcode_model_impl.cpp", "jsview/models/radio_model_impl.cpp", "jsview/models/rect_model_impl.cpp", "jsview/models/refresh_model_impl.cpp", "jsview/models/relative_container_model_impl.cpp", "jsview/models/richeditor_model_impl.cpp", "jsview/models/row_model_impl.cpp", "jsview/models/scroll_bar_model_impl.cpp", "jsview/models/scroll_model_impl.cpp", "jsview/models/search_model_impl.cpp", "jsview/models/select_model_impl.cpp", "jsview/models/shape_abstract_model_impl.cpp", "jsview/models/shape_model_impl.cpp", "jsview/models/side_bar_container_model_impl.cpp", "jsview/models/slider_model_impl.cpp", "jsview/models/sliding_panel_model_impl.cpp", "jsview/models/span_model_impl.cpp", "jsview/models/stack_model_impl.cpp", "jsview/models/stepper_item_model_impl.cpp", "jsview/models/stepper_model_impl.cpp", "jsview/models/swiper_model_impl.cpp", "jsview/models/tab_content_model_impl.cpp", "jsview/models/tabs_model_impl.cpp", "jsview/models/text_clock_model_impl.cpp", "jsview/models/text_field_model_impl.cpp", "jsview/models/text_model_impl.cpp", "jsview/models/text_timer_model_impl.cpp", "jsview/models/textpicker_model_impl.cpp", "jsview/models/timepicker_model_impl.cpp", "jsview/models/toggle_model_impl.cpp", "jsview/models/view_abstract_model_impl.cpp", "jsview/models/view_context_model_impl.cpp", "jsview/models/view_full_update_model_impl.cpp", "jsview/models/view_partial_update_model_impl.cpp", "jsview/models/water_flow_item_model_impl.cpp", "jsview/models/water_flow_model_impl.cpp", ] external_deps = [ "graphic_2d:drawing_napi_impl" ] if (use_hilog) { external_deps += [ "hilog:libhilog" ] } if (defined(config.enable_drag_framework) && config.enable_drag_framework && defined(global_parts_info.distributeddatamgr_udmf)) { external_deps += [ "udmf:udmf_client", "udmf:udmf_data_napi", ] } # rich components needed by phone and TV. wearable like watch do not need them if (defined(config.rich_components_support) && config.rich_components_support) { sources += [ "jsview/js_camera.cpp", "jsview/js_piece.cpp", "jsview/js_rating.cpp", "jsview/models/rating_model_impl.cpp", ] if (defined(config.video_components_support) && config.video_components_support) { sources += [ "jsview/js_video.cpp", "jsview/js_video_controller.cpp", "jsview/models/video_model_impl.cpp", ] } if (defined(config.video_support_jsstack) && config.video_support_jsstack) { external_deps += [ "hiview:libxpower_event_js" ] } } include_dirs = [] if (defined(vendor_configs.ace_engine_advanced)) { include_dirs += vendor_configs.ace_advance_dirs sources += vendor_configs.ace_engine_advanced_jsview } else { sources += [ "jsview/js_cached_image.cpp" ] } if (defined(config.xcomponent_components_support) && config.xcomponent_components_support) { sources += [ "jsview/js_xcomponent.cpp", "jsview/js_xcomponent_controller.cpp", "jsview/models/xcomponent_model_impl.cpp", ] } if (defined(config.enable_ability_component) && config.enable_ability_component) { sources += [ "jsview/js_ability_component.cpp", "jsview/js_ability_component_controller.cpp", "jsview/models/ability_component_model_impl.cpp", ] external_deps += [ "input:libmmi-client", "window_manager:scene_session", ] } if (defined(config.web_components_support) && config.web_components_support) { if (is_arkui_x) { sources += [ "jsview/js_web.cpp", "jsview/models/web_model_impl.cpp", ] } else { sources += [ "jsview/js_richtext.cpp", "jsview/js_web.cpp", "jsview/js_web_controller.cpp", "jsview/models/richtext_model_impl.cpp", "jsview/models/web_model_impl.cpp", ] } } if (defined(config.form_components_support) && config.form_components_support) { sources += [ "jsview/js_form.cpp", "jsview/js_form_menu_item.cpp", "jsview/models/form_model_impl.cpp", ] } if (defined(config.remote_window_support) && config.remote_window_support) { sources += [ "jsview/js_remote_window.cpp", "jsview/models/remote_window_model_impl.cpp", ] } if (defined(config.effect_component_support) && config.effect_component_support) { sources += [ "jsview/js_effect_component.cpp", "jsview/models/effect_component_model_impl.cpp", ] } if (defined(config.plugin_components_support) && config.plugin_components_support) { sources += [ "jsview/js_plugin.cpp", "jsview/models/plugin_model_impl.cpp", ] } if (defined(config.preview_support) && config.preview_support) { sources += [ "jsview/js_previewer_mock.cpp" ] } if (defined(config.model_component_support) && config.model_component_support) { sources += [ "jsview/js_sceneview.cpp" ] external_deps += [ "graphic_3d:3dWidgetAdapterInterface" ] } if (defined(config.use_build_in_js_engine) && config.use_build_in_js_engine) { deps += [ "$ace_root/frameworks/bridge:framework_bridge_$platform" ] defines += [ "BUILT_IN_JS_ENGINE" ] } else { sources += [ "$ace_root/frameworks/bridge/js_frontend/engine/common/js_engine.cpp", ] deps += [ "$ace_root/build:libace_compatible" ] if (defined(config.build_container_scope_lib) && config.build_container_scope_lib) { if (is_arkui_x) { deps += [ "$ace_napi:ace_container_scope_static" ] } else { external_deps += [ "napi:ace_container_scope" ] } } } deps += [ ":shape" ] # add for cross_platfrom_build temporarily, shall be removed after external_deps is supported if (is_arkui_x) { configs += [ "$ark_ets_path:ark_jsruntime_public_config" ] deps += [ "$ark_ets_path:libark_jsruntime_static" ] if (defined(config.pixel_map_support) && config.pixel_map_support) { configs += [ "//foundation/multimedia/image_framework/interfaces/innerkits:image_external_config" ] } } else { external_deps += [ "ets_runtime:libark_jsruntime", "napi:ace_napi", ] } if (platform == "windows" || platform == "mac" || platform == "linux") { deps += [ ":gen_obj_src_js_mock_system_plugin" ] } else { if (defined(config.plugin_components_support) && config.plugin_components_support) { if (!use_mingw_win && !use_mac && !use_linux) { external_deps += [ "image_framework:image", "image_framework:image_native", ] } } else { external_deps += [ "image_framework:image", "image_framework:image_native", ] } if (defined(config.window_scene_support) && config.window_scene_support) { sources += [ "jsview/js_embedded_component.cpp", "jsview/js_security_ui_extension.cpp", "jsview/js_ui_extension.cpp", "jsview/window_scene/js_root_scene.cpp", "jsview/window_scene/js_screen.cpp", "jsview/window_scene/js_window_scene.cpp", ] if (defined(config.dynamic_component_support) && config.dynamic_component_support && !build_ohos_sdk) { external_deps += [ "ets_utils:worker" ] sources += [ "jsview/js_dynamic_component.cpp", "jsview/js_isolated_component.cpp", ] } } } } } # build ng declarative javascript engine source template("declarative_js_engine_ng") { forward_variables_from(invoker, "*") ohos_source_set(target_name) { subsystem_name = ace_engine_subsystem part_name = ace_engine_part defines += invoker.defines if (target_cpu == "arm64") { if (!is_mingw) { defines += [ "_ARM64_" ] } } if (current_os == "ohos" && current_cpu == "x86_64") { defines += [ "SIMULATOR_64" ] } deps = [ ":ark_modifier", ":ark_theme_control", ":gen_obj_src_ark_component", ":gen_obj_src_ark_theme", ":gen_obj_src_js_enum_style", ":gen_obj_src_js_proxyclass", ":mock", ":prefetcher", ":statemanagement", ":x_node", "engine/$engine_path:declarative_js_engine_bridge_${engine_name}_$platform", ] if (!is_arkui_x) { deps += [ ":uicontext" ] } else { deps += [ ":gen_obj_src_js_uicontext" ] } configs = [ "$ace_root:ace_config" ] sources = [ "engine/bindings_implementation.cpp", "engine/declarative_engine_loader.cpp", "engine/functions/js_animator_function.cpp", "engine/functions/js_click_function.cpp", "engine/functions/js_clipboard_function.cpp", "engine/functions/js_drag_function.cpp", "engine/functions/js_focus_function.cpp", "engine/functions/js_foreach_function.cpp", "engine/functions/js_function.cpp", "engine/functions/js_gesture_function.cpp", "engine/functions/js_gesture_judge_function.cpp", "engine/functions/js_hover_function.cpp", "engine/functions/js_key_function.cpp", "engine/functions/js_mouse_function.cpp", "engine/functions/js_navigation_function.cpp", "engine/functions/js_on_area_change_function.cpp", "engine/functions/js_on_child_touch_test_function.cpp", "engine/functions/js_on_size_change_function.cpp", "engine/functions/js_page_transition_function.cpp", "engine/functions/js_pan_function.cpp", "engine/functions/js_should_built_in_recognizer_parallel_with_function.cpp", "engine/functions/js_swiper_function.cpp", "engine/functions/js_tabs_function.cpp", "engine/functions/js_touch_function.cpp", "engine/functions/js_touch_intercept_function.cpp", "engine/functions/js_webview_function.cpp", "engine/js_types.cpp", "jsview/js_dump_log.cpp", "jsview/js_environment.cpp", "jsview/js_local_storage.cpp", "jsview/js_persistent.cpp", "jsview/js_state_mgmt_profiler.cpp", "jsview/js_view_functions.cpp", "jsview/js_view_measure_layout.cpp", "jsview/js_view_stack_processor.cpp", "sharedata/js_share_data.cpp", "view_stack_processor.cpp", # jsviews "interfaces/profiler/js_profiler.cpp", "jsview/action_sheet/js_action_sheet.cpp", "jsview/canvas/js_canvas.cpp", "jsview/canvas/js_canvas_gradient.cpp", "jsview/canvas/js_canvas_image_data.cpp", "jsview/canvas/js_canvas_path.cpp", "jsview/canvas/js_canvas_pattern.cpp", "jsview/canvas/js_canvas_renderer.cpp", "jsview/canvas/js_drawing_rendering_context.cpp", "jsview/canvas/js_matrix2d.cpp", "jsview/canvas/js_offscreen_canvas.cpp", "jsview/canvas/js_offscreen_rendering_context.cpp", "jsview/canvas/js_path2d.cpp", "jsview/canvas/js_render_image.cpp", "jsview/canvas/js_rendering_context.cpp", "jsview/canvas/js_rendering_context_settings.cpp", "jsview/dialog/js_alert_dialog.cpp", "jsview/dialog/js_custom_dialog_controller.cpp", "jsview/js_animator.cpp", "jsview/js_badge.cpp", "jsview/js_base_node.cpp", "jsview/js_blank.cpp", "jsview/js_button.cpp", "jsview/js_calendar.cpp", "jsview/js_calendar_controller.cpp", "jsview/js_calendar_picker.cpp", "jsview/js_checkbox.cpp", "jsview/js_checkboxgroup.cpp", "jsview/js_circle.cpp", "jsview/js_circle_shape.cpp", "jsview/js_clipboard.cpp", "jsview/js_column.cpp", "jsview/js_column_split.cpp", "jsview/js_common_view.cpp", "jsview/js_container_base.cpp", "jsview/js_container_span.cpp", "jsview/js_content_slot.cpp", "jsview/js_counter.cpp", "jsview/js_data_panel.cpp", "jsview/js_datepicker.cpp", "jsview/js_divider.cpp", "jsview/js_ellipse.cpp", "jsview/js_ellipse_shape.cpp", "jsview/js_flex.cpp", "jsview/js_flex_impl.cpp", "jsview/js_folder_stack.cpp", "jsview/js_foreach.cpp", "jsview/js_form_link.cpp", "jsview/js_gauge.cpp", "jsview/js_gesture.cpp", "jsview/js_grid.cpp", "jsview/js_grid_col.cpp", "jsview/js_grid_container.cpp", "jsview/js_grid_item.cpp", "jsview/js_grid_row.cpp", "jsview/js_hyperlink.cpp", "jsview/js_if_else.cpp", "jsview/js_image.cpp", "jsview/js_image_animator.cpp", "jsview/js_image_span.cpp", "jsview/js_indexer.cpp", "jsview/js_interactable_view.cpp", "jsview/js_keyboard_avoid.cpp", "jsview/js_layout_manager.cpp", "jsview/js_lazy_foreach.cpp", "jsview/js_line.cpp", "jsview/js_linear_gradient.cpp", "jsview/js_list.cpp", "jsview/js_list_item.cpp", "jsview/js_list_item_group.cpp", "jsview/js_loading_progress.cpp", "jsview/js_location_button.cpp", "jsview/js_marquee.cpp", "jsview/js_menu.cpp", "jsview/js_menu_item.cpp", "jsview/js_menu_item_group.cpp", "jsview/js_mock.cpp", "jsview/js_nav_path_stack.cpp", "jsview/js_navdestination.cpp", "jsview/js_navdestination_context.cpp", "jsview/js_navdestination_scrollable_processor.cpp", "jsview/js_navigation.cpp", "jsview/js_navigation_stack.cpp", "jsview/js_navigation_utils.cpp", "jsview/js_navigator.cpp", "jsview/js_navrouter.cpp", "jsview/js_node_container.cpp", "jsview/js_page_transition.cpp", "jsview/js_paste_button.cpp", "jsview/js_path.cpp", "jsview/js_path_shape.cpp", "jsview/js_polygon.cpp", "jsview/js_polyline.cpp", "jsview/js_progress.cpp", "jsview/js_radio.cpp", "jsview/js_rating.cpp", "jsview/js_rect.cpp", "jsview/js_rect_shape.cpp", "jsview/js_recycle_view.cpp", "jsview/js_refresh.cpp", "jsview/js_repeat.cpp", "jsview/js_repeat_virtual_scroll.cpp", "jsview/js_richeditor.cpp", "jsview/js_row.cpp", "jsview/js_row_split.cpp", "jsview/js_save_button.cpp", "jsview/js_scope_util.cpp", "jsview/js_scroll.cpp", "jsview/js_scrollable.cpp", "jsview/js_scrollable_base.cpp", "jsview/js_scroller.cpp", "jsview/js_search.cpp", "jsview/js_sec_button_base.cpp", "jsview/js_select.cpp", "jsview/js_shape.cpp", "jsview/js_shape_abstract.cpp", "jsview/js_side_bar.cpp", "jsview/js_slider.cpp", "jsview/js_sliding_panel.cpp", "jsview/js_span.cpp", "jsview/js_stack.cpp", "jsview/js_stepper.cpp", "jsview/js_stepper_item.cpp", "jsview/js_swiper.cpp", "jsview/js_symbol.cpp", "jsview/js_symbol_span.cpp", "jsview/js_tab_content.cpp", "jsview/js_tabs.cpp", "jsview/js_tabs_controller.cpp", "jsview/js_tabs_feature.cpp", "jsview/js_text.cpp", "jsview/js_text_clock.cpp", "jsview/js_text_editable_controller.cpp", "jsview/js_textarea.cpp", "jsview/js_textfield.cpp", "jsview/js_textinput.cpp", "jsview/js_textpicker.cpp", "jsview/js_texttimer.cpp", "jsview/js_toggle.cpp", "jsview/js_utils.cpp", "jsview/js_view.cpp", "jsview/js_view_abstract.cpp", "jsview/js_view_context.cpp", "jsview/js_water_flow.cpp", "jsview/js_water_flow_item.cpp", "jsview/js_water_flow_sections.cpp", "jsview/menu/js_context_menu.cpp", "jsview/scroll_bar/js_scroll_bar.cpp", "style_string/js_span_object.cpp", "style_string/js_span_string.cpp", # ark_theme "ark_theme/theme_apply/js_with_theme.cpp", ] sources += [ "$ace_root/frameworks/bridge/js_frontend/engine/common/js_engine.cpp", ] external_deps = [ "graphic_2d:drawing_napi_impl" ] if (use_hilog) { external_deps += [ "hilog:libhilog" ] } if (!defined(config.use_components_lib) || !config.use_components_lib) { sources += [ "jsview/js_pattern_lock.cpp", "jsview/js_qrcode.cpp", "jsview/js_relative_container.cpp", ] } if (defined(config.video_components_support) && config.video_components_support) { sources += [ "jsview/js_video.cpp", "jsview/js_video_controller.cpp", ] if (defined(config.video_support_jsstack) && config.video_support_jsstack) { external_deps += [ "hiview:libxpower_event_js" ] } } if (defined(config.window_scene_support) && config.window_scene_support) { sources += [ "jsview/js_embedded_component.cpp", "jsview/js_security_ui_extension.cpp", "jsview/js_ui_extension.cpp", "jsview/window_scene/js_root_scene.cpp", "jsview/window_scene/js_screen.cpp", "jsview/window_scene/js_window_scene.cpp", ] if (defined(config.dynamic_component_support) && config.dynamic_component_support && !build_ohos_sdk) { external_deps += [ "ets_utils:worker" ] sources += [ "jsview/js_dynamic_component.cpp", "jsview/js_isolated_component.cpp", ] } } if (defined(config.enable_ability_component) && config.enable_ability_component) { sources += [ "jsview/js_ability_component.cpp", "jsview/js_ability_component_controller.cpp", ] external_deps += [ "input:libmmi-client", "window_manager:scene_session", ] } if (defined(config.form_components_support) && config.form_components_support) { sources += [ "jsview/js_form.cpp" ] } if (defined(config.plugin_components_support) && config.plugin_components_support) { sources += [ "jsview/js_plugin.cpp" ] } if (defined(config.web_components_support) && config.web_components_support) { sources += [ "jsview/js_richtext.cpp", "jsview/js_web.cpp", "jsview/js_web_controller.cpp", ] } if (defined(config.remote_window_support) && config.remote_window_support) { sources += [ "jsview/js_remote_window.cpp" ] } if (!defined(vendor_configs.ace_engine_advanced)) { sources += [ "jsview/js_cached_image.cpp" ] } if (defined(config.xcomponent_components_support) && config.xcomponent_components_support) { sources += [ "jsview/js_xcomponent.cpp", "jsview/js_xcomponent_controller.cpp", ] } if (defined(config.effect_component_support) && config.effect_component_support) { sources += [ "jsview/js_effect_component.cpp", #"jsview/models/effect_component_model_impl.cpp", ] } if (defined(config.model_component_support) && config.model_component_support) { sources += [ "jsview/js_sceneview.cpp" ] external_deps += [ "graphic_3d:3dWidgetAdapterInterface" ] } if (defined(config.use_build_in_js_engine) && config.use_build_in_js_engine) { deps += [ "$ace_root/frameworks/bridge:framework_bridge_ng_$platform" ] defines += [ "BUILT_IN_JS_ENGINE" ] } else { if (is_asan || !ace_engine_feature_enable_libace) { deps += [ "$ace_root/build:libace_compatible" ] } else { deps += [ "$ace_root/build:libace" ] } if (defined(config.build_container_scope_lib) && config.build_container_scope_lib) { external_deps += [ "napi:ace_container_scope" ] } } include_dirs = [] # add for cross_platfrom_build temporarily, shall be removed after external_deps is supported if (is_arkui_x) { sources -= [ "interfaces/profiler/js_profiler.cpp", "jsview/js_location_button.cpp", "jsview/js_paste_button.cpp", "jsview/js_save_button.cpp", "jsview/js_sec_button_base.cpp", "jsview/menu/js_context_menu.cpp", ] include_dirs += [ "//commonlibrary/c_utils/base/include" ] configs += [ "$ark_ets_path:ark_jsruntime_public_config" ] deps += [ "$ark_ets_path:libark_jsruntime_static", "//foundation/graphic/graphic_2d/interfaces/kits/napi/graphic/drawing:drawing_napi_impl", ] if (defined(config.pixel_map_support) && config.pixel_map_support) { configs += [ "//foundation/multimedia/image_framework/interfaces/innerkits:image_external_config" ] } } else { external_deps += [ "ets_runtime:libark_jsruntime", "napi:ace_napi", ] } deps += [ ":shape" ] if (defined(config.enable_drag_framework) && config.enable_drag_framework && defined(global_parts_info.distributeddatamgr_udmf)) { external_deps += [ "udmf:udmf_client", "udmf:udmf_data_napi", ] } if (!use_mingw_win && !use_mac && !use_linux) { external_deps += [ "image_framework:image", "image_framework:image_native", ] } } } # dynamic generate js_engine targets foreach(item, ace_platforms) { platform = item.name engine_config = { } engine_config = item.config support_engines = [] support_engines = engine_config.js_engines foreach(engine, support_engines) { declarative_js_engine( "declarative_js_engine_${engine.engine_name}_$platform") { platform = item.name engine_name = engine.engine_name engine_path = engine.engine_path defines = engine.engine_defines config = { } if (defined(item.config)) { config = item.config } if (defined(config.defines)) { defines += config.defines } } declarative_js_engine_ng( "declarative_js_engine_ng_${engine.engine_name}_$platform") { platform = item.name engine_name = engine.engine_name engine_path = engine.engine_path defines = engine.engine_defines config = { } if (defined(item.config)) { config = item.config } if (defined(config.defines)) { defines += config.defines } } } } ohos_abc("statemanagement") { sources = [ "engine/jsStateManagement.js" ] output_name = "statemanagement" install_images = [ "system" ] module_install_dir = "etc/abc/arkui" subsystem_name = ace_engine_subsystem part_name = ace_engine_part } ohos_abc("mock") { sources = [ "engine/jsMock.js" ] output_name = "mock" install_images = [ "system" ] module_install_dir = "etc/abc/arkui" subsystem_name = ace_engine_subsystem part_name = ace_engine_part } ohos_abc("x_node") { sources = [ "engine/jsXNode.js" ] output_name = "node" install_images = [ "system" ] module_install_dir = "etc/abc/arkui" subsystem_name = ace_engine_subsystem part_name = ace_engine_part } ohos_abc("prefetcher") { sources = [ "engine/jsPrefetcher.js" ] output_name = "prefetcher" install_images = [ "system" ] module_install_dir = "etc/abc/arkui" subsystem_name = ace_engine_subsystem part_name = ace_engine_part } action("gen_uicontext_ohos") { script = "$ace_root/build/tools/gen_uicontext_ohos.py" inputs = [ "$ace_root/frameworks/bridge/declarative_frontend/engine/jsUIContext.js", ] outputs = [ "$base_output_path/jsUIContext_ohos.js" ] args = [ rebase_path(inputs[0]), rebase_path(outputs[0]), ] } ohos_abc("uicontext") { sources = [ "$base_output_path/jsUIContext_ohos.js" ] output_name = "uicontext" deps = [ ":gen_uicontext_ohos" ] install_images = [ "system" ] module_install_dir = "etc/abc/arkui" subsystem_name = ace_engine_subsystem part_name = ace_engine_part } ohos_abc("ark_theme_control") { sources = [ "engine/arkThemeControl.js" ] output_name = "theme" install_images = [ "system" ] module_install_dir = "etc/abc/arkui" subsystem_name = ace_engine_subsystem part_name = ace_engine_part } ohos_abc("ark_modifier") { sources = [ "engine/arkModifier.js" ] output_name = "modifier" install_images = [ "system" ] module_install_dir = "etc/abc/arkui" subsystem_name = ace_engine_subsystem part_name = ace_engine_part } ohos_abc("shape") { sources = [ "engine/jsShape.js" ] output_name = "shape" install_images = [ "system" ] module_install_dir = "etc/abc/arkui" subsystem_name = ace_engine_subsystem part_name = ace_engine_part }