# 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("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") import("//build/ohos.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") base_output_path = get_label_info(":gen_abc_proxyclass", "target_out_dir") abcproxyclass_obj_path = base_output_path + "/abc_proxy_class.o" abcenumstyle_obj_path = base_output_path + "/abc_enum_style.o" abcuicontext_obj_path = base_output_path + "/abc_uicontext.o" abcpreload_obj_path = base_output_path + "/abc_preload.o" jsmocksystemplugin_obj_path = base_output_path + "/abc_js_mock_system_plugin.o" arkTheme_obj_path = base_output_path + "/abc_ark_theme.o" arkcomponent_obj_path = base_output_path + "/abc_ark_component.o" es2abc_gen_abc("gen_stateMgmt_abc") { extra_visibility = [ ":*" ] # Only targets in this file can depend on this. src_js = rebase_path( "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js") dst_file = rebase_path(base_output_path + "/stateMgmt.abc") in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js" ] out_puts = [ base_output_path + "/stateMgmt.abc" ] } es2abc_gen_abc("gen_jsEnumStyle_abc") { extra_visibility = [ ":*" ] # Only targets in this file can depend on this. src_js = rebase_path( "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsEnumStyle.js") dst_file = rebase_path(base_output_path + "/jsEnumStyle.abc") in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsEnumStyle.js" ] out_puts = [ base_output_path + "/jsEnumStyle.abc" ] } es2abc_gen_abc("gen_arkTheme_abc") { extra_visibility = [ ":*" ] # Only targets in this file can depend on this. src_js = rebase_path( "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/arkTheme.js") dst_file = rebase_path(base_output_path + "/arkTheme.abc") in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/arkTheme.js" ] out_puts = [ base_output_path + "/arkTheme.abc" ] } es2abc_gen_abc("gen_jsUIContext_abc") { extra_visibility = [ ":*" ] # Only targets in this file can depend on this. src_js = rebase_path( "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsUIContext.js") dst_file = rebase_path(base_output_path + "/jsUIContext.abc") in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsUIContext.js" ] out_puts = [ base_output_path + "/jsUIContext.abc" ] } es2abc_gen_abc("gen_jsPreload_abc") { extra_visibility = [ ":*" ] # Only targets in this file can depend on this. src_js = rebase_path( "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsPreload.js") dst_file = rebase_path(base_output_path + "/jsPreload.abc") in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsPreload.js" ] out_puts = [ base_output_path + "/jsPreload.abc" ] } es2abc_gen_abc("gen_arkComponent_abc") { extra_visibility = [ ":*" ] # Only targets in this file can depend on this. src_js = rebase_path( "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/arkComponent.js") dst_file = rebase_path(base_output_path + "/arkComponent.abc") in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/arkComponent.js" ] out_puts = [ base_output_path + "/arkComponent.abc" ] } if (!is_arkui_x) { es2abc_gen_abc("gen_js_mock_system_plugin_abc") { extra_visibility = [ ":*" ] # Only targets in this file can depend on this. src_js = rebase_path( "$root_out_dir/obj/ide/tools/previewer/automock/dist/jsMockSystemPlugin.js") dst_file = rebase_path(base_output_path + "/jsMockSystemPlugin.abc") in_puts = [ rebase_path( "$root_out_dir/obj/ide/tools/previewer/automock/dist/jsMockSystemPlugin.js") ] out_puts = [ base_output_path + "/jsMockSystemPlugin.abc" ] extra_dependencies = [ "//ide/tools/previewer/automock:gen_snapshot_jsmock" ] } } gen_obj("abc_proxyclass") { input = base_output_path + "/stateMgmt.abc" if (use_mac || use_mingw_win || use_ios || use_linux) { abcproxyclass_obj_path = base_output_path + "/js_proxy_class.c" } output = abcproxyclass_obj_path snapshot_dep = [ ":gen_stateMgmt_abc" ] } gen_obj("abc_enum_style") { input = base_output_path + "/jsEnumStyle.abc" if (use_mac || use_mingw_win || use_linux || use_ios) { abcenumstyle_obj_path = base_output_path + "/jsEnumStyle.c" } output = abcenumstyle_obj_path snapshot_dep = [ ":gen_jsEnumStyle_abc" ] } gen_obj("abc_ark_theme") { input = base_output_path + "/arkTheme.abc" if (use_mac || use_mingw_win || use_ios || use_linux) { arkTheme_obj_path = base_output_path + "/arkTheme.c" } output = arkTheme_obj_path snapshot_dep = [ ":gen_arkTheme_abc" ] } gen_obj("abc_uicontext") { input = base_output_path + "/jsUIContext.abc" if (use_mac || use_mingw_win || use_linux || use_ios) { abcuicontext_obj_path = base_output_path + "/jsUIContext.c" } output = abcuicontext_obj_path snapshot_dep = [ ":gen_jsUIContext_abc" ] } gen_obj("abc_preload") { input = base_output_path + "/jsPreload.abc" if (use_mac || use_mingw_win || use_linux || use_ios) { abcpreload_obj_path = base_output_path + "/jsPreload.c" } output = abcpreload_obj_path snapshot_dep = [ ":gen_jsPreload_abc" ] } gen_obj("abc_ark_component") { input = base_output_path + "/arkComponent.abc" if (use_mac || use_mingw_win || use_ios || use_linux) { arkcomponent_obj_path = base_output_path + "/arkComponent.c" } output = arkcomponent_obj_path snapshot_dep = [ ":gen_arkComponent_abc" ] } if (!is_arkui_x) { gen_obj("abc_mock_system_plugin") { input = base_output_path + "/jsMockSystemPlugin.abc" if (use_mac || use_mingw_win || use_linux) { jsmocksystemplugin_obj_path = base_output_path + "/js_mock_system_plugin.c" } output = jsmocksystemplugin_obj_path snapshot_dep = [ ":gen_js_mock_system_plugin_abc" ] } } if (!is_arkui_x) { abc_sources = [ "stateMgmt" ] } else { abc_sources = [] } foreach(item, abc_sources) { ohos_prebuilt_etc("copy_" + item + "_abc") { source = base_output_path + "/" + item + ".abc" deps = [ ":gen_" + item + "_abc" ] part_name = ace_engine_part module_install_dir = "etc/abc/framework" } } template("declarative_js_engine_ark") { 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 if (target_cpu == "arm64") { defines += [ "APP_USE_ARM64" ] } else if (target_cpu == "arm") { defines += [ "APP_USE_ARM" ] } configs = [ "$ace_root:ace_config" ] if (ace_engine_feature_enable_point_light) { defines += [ "POINT_LIGHT_ENABLE" ] } sources = [ "js_converter.cpp", "jsi_declarative_engine.cpp", "jsi_declarative_group_js_bridge.cpp", "jsi_object_template.cpp", "jsi_types.cpp", "jsi_view_register.cpp", "modules/jsi_app_module.cpp", "modules/jsi_context_module.cpp", "modules/jsi_curves_module.cpp", "modules/jsi_matrix4_module.cpp", "modules/jsi_module_manager.cpp", "modules/jsi_router_module.cpp", "modules/jsi_syscap_module.cpp", "modules/jsi_timer_module.cpp", "nativeModule/arkts_native_alphabet_indexer_bridge.cpp", "nativeModule/arkts_native_api_impl_bridge.cpp", "nativeModule/arkts_native_badge_bridge.cpp", "nativeModule/arkts_native_blank_bridge.cpp", "nativeModule/arkts_native_button_bridge.cpp", "nativeModule/arkts_native_calendar_picker_bridge.cpp", "nativeModule/arkts_native_checkbox_bridge.cpp", "nativeModule/arkts_native_checkboxgroup_bridge.cpp", "nativeModule/arkts_native_column_bridge.cpp", "nativeModule/arkts_native_column_split_bridge.cpp", "nativeModule/arkts_native_common_bridge.cpp", "nativeModule/arkts_native_common_shape_bridge.cpp", "nativeModule/arkts_native_container_span_bridge.cpp", "nativeModule/arkts_native_counter_bridge.cpp", "nativeModule/arkts_native_data_panel_bridge.cpp", "nativeModule/arkts_native_date_picker_bridge.cpp", "nativeModule/arkts_native_divider_bridge.cpp", "nativeModule/arkts_native_flex_bridge.cpp", "nativeModule/arkts_native_folder_stack_bridge.cpp", "nativeModule/arkts_native_frame_node_bridge.cpp", "nativeModule/arkts_native_gauge_bridge.cpp", "nativeModule/arkts_native_grid_bridge.cpp", "nativeModule/arkts_native_grid_col_bridge.cpp", "nativeModule/arkts_native_grid_item_bridge.cpp", "nativeModule/arkts_native_grid_row_bridge.cpp", "nativeModule/arkts_native_hyperlink_bridge.cpp", "nativeModule/arkts_native_image_animator_bridge.cpp", "nativeModule/arkts_native_image_bridge.cpp", "nativeModule/arkts_native_image_span_bridge.cpp", "nativeModule/arkts_native_line_bridge.cpp", "nativeModule/arkts_native_list_bridge.cpp", "nativeModule/arkts_native_list_item_bridge.cpp", "nativeModule/arkts_native_list_item_group_bridge.cpp", "nativeModule/arkts_native_loading_progress_bridge.cpp", "nativeModule/arkts_native_marquee_bridge.cpp", "nativeModule/arkts_native_menu_bridge.cpp", "nativeModule/arkts_native_menu_item_bridge.cpp", "nativeModule/arkts_native_nav_destination_bridge.cpp", "nativeModule/arkts_native_nav_router_bridge.cpp", "nativeModule/arkts_native_navigation_bridge.cpp", "nativeModule/arkts_native_navigation_utils.cpp", "nativeModule/arkts_native_navigator_bridge.cpp", "nativeModule/arkts_native_node_adapter_bridge.cpp", "nativeModule/arkts_native_node_container_bridge.cpp", "nativeModule/arkts_native_panel_bridge.cpp", "nativeModule/arkts_native_particle_bridge.cpp", "nativeModule/arkts_native_path_bridge.cpp", "nativeModule/arkts_native_pattern_lock_bridge.cpp", "nativeModule/arkts_native_polygon_bridge.cpp", "nativeModule/arkts_native_polyline_bridge.cpp", "nativeModule/arkts_native_progress_bridge.cpp", "nativeModule/arkts_native_qrcode_bridge.cpp", "nativeModule/arkts_native_radio_bridge.cpp", "nativeModule/arkts_native_rating_bridge.cpp", "nativeModule/arkts_native_rect_bridge.cpp", "nativeModule/arkts_native_refresh_bridge.cpp", "nativeModule/arkts_native_relative_container_bridge.cpp", "nativeModule/arkts_native_render_node_bridge.cpp", "nativeModule/arkts_native_resource_bridge.cpp", "nativeModule/arkts_native_rich_editor_bridge.cpp", "nativeModule/arkts_native_row_bridge.cpp", "nativeModule/arkts_native_row_split_bridge.cpp", "nativeModule/arkts_native_scroll_bridge.cpp", "nativeModule/arkts_native_scrollable_bridge.cpp", "nativeModule/arkts_native_scrollbar_bridge.cpp", "nativeModule/arkts_native_search_bridge.cpp", "nativeModule/arkts_native_select_bridge.cpp", "nativeModule/arkts_native_shape_bridge.cpp", "nativeModule/arkts_native_side_bar_container_bridge.cpp", "nativeModule/arkts_native_slider_bridge.cpp", "nativeModule/arkts_native_span_bridge.cpp", "nativeModule/arkts_native_stack_bridge.cpp", "nativeModule/arkts_native_stepper_item_bridge.cpp", "nativeModule/arkts_native_swiper_bridge.cpp", "nativeModule/arkts_native_symbol_glyph_bridge.cpp", "nativeModule/arkts_native_symbol_span_bridge.cpp", "nativeModule/arkts_native_tabcontent_bridge.cpp", "nativeModule/arkts_native_tabs_bridge.cpp", "nativeModule/arkts_native_text_area_bridge.cpp", "nativeModule/arkts_native_text_bridge.cpp", "nativeModule/arkts_native_text_clock_bridge.cpp", "nativeModule/arkts_native_text_input_bridge.cpp", "nativeModule/arkts_native_text_timer_bridge.cpp", "nativeModule/arkts_native_textpicker_bridge.cpp", "nativeModule/arkts_native_timepicker_bridge.cpp", "nativeModule/arkts_native_toggle_bridge.cpp", "nativeModule/arkts_native_utils_bridge.cpp", "nativeModule/arkts_native_video_bridge.cpp", "nativeModule/arkts_native_water_flow_bridge.cpp", "nativeModule/arkts_utils.cpp", "nativeModule/ui_context_helper.cpp", ] deps = [ "${ace_root}/frameworks/core/interfaces/native:ace_core_interfaces_native_node_$platform" ] if (is_arkui_x) { deps += [ "//foundation/graphic/graphic_2d/interfaces/kits/napi/graphic/drawing:drawing_napi_impl" ] } external_deps = [ "graphic_2d:drawing_napi_impl" ] if (use_hilog) { external_deps += [ "hilog:libhilog" ] } if (defined(config.xcomponent_components_support) && config.xcomponent_components_support) { sources += [ "nativeModule/arkts_native_xcomponent_bridge.cpp", "nativeModule/arkts_native_xcomponent_node_bridge.cpp", ] deps += [ "$ace_root/frameworks/core/components_ng/pattern/xcomponent:ace_core_components_xcomponent_pattern_ng_$platform" ] if (is_ohos_standard_system) { deps += [ "$ace_root/interfaces/inner_api/xcomponent_controller:ace_xcomponent_controller" ] external_deps += [ "c_utils:utils", "graphic_2d:librender_service_client", ] } } if (defined(config.model_component_support) && config.model_component_support) { sources += [ "nativeModule/arkts_native_component3d_bridge.cpp" ] deps += [ "$ace_root/frameworks/core/components_ng/pattern/model:ace_core_components_model_pattern_ng_$platform" ] } if (defined(config.form_components_support) && config.form_components_support) { sources += [ "nativeModule/arkts_native_form_component_bridge.cpp" ] deps += [ "${ace_root}/frameworks/core/components_ng/pattern/form:ace_core_components_form_pattern_ng_$platform" ] if (is_ohos_standard_system) { external_deps += [ "ability_base:want", "ability_runtime:app_manager", "bundle_framework:appexecfwk_core", "form_fwk:fmskit_native", "form_fwk:form_manager", "graphic_2d:librender_service_client", "input:libmmi-client", "ipc:ipc_core", ] } } if (defined(config.plugin_components_support) && config.plugin_components_support) { sources += [ "nativeModule/arkts_native_plugin_bridge.cpp" ] deps += [ "${ace_root}/frameworks/core/components_ng/pattern/plugin:ace_core_components_plugin_pattern_ng_$platform", "${ace_root}/interfaces/inner_api/ui_service_manager:ui_service_mgr", ] external_deps += [ "ability_base:want", "ability_runtime:app_manager", "bundle_framework:appexecfwk_core", "c_utils:utils", "graphic_2d:librender_service_client", "ipc:ipc_core", ] if (os_account_exists) { external_deps += [ "os_account:os_account_innerkits" ] } } include_dirs = [] if (defined(vendor_configs.extra_view_register_sources)) { include_dirs += vendor_configs.ace_advance_dirs sources += vendor_configs.extra_view_register_sources if (platform == "ohos_ng") { sources += vendor_configs.ace_engine_advanced_jsview } } else { sources += [ "jsi_extra_view_register.cpp" ] } include_dirs += [ "${ace_root}/interfaces/inner_api/ace" ] if (!is_arkui_x) { deps += [ "${ace_root}/interfaces/inner_api/ace:ace_forward_compatibility" ] } if (platform == "ohos_ng" || is_arkui_x) { sources += [ "jsi_animator_model_ng_build_impl.cpp", "jsi_view_register_impl_ng.cpp", ] if (is_arkui_x) { defines += [ "CROSS_PLATFORM" ] } } else { sources += [ "jsi_animator_model_ng_impl.cpp", "jsi_view_register_impl.cpp", ] deps += [ "$ace_root/frameworks/core/components/theme:build_theme_code" ] } # 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" ] public_deps = [ "//foundation/arkui/napi:ace_napi" ] } else { external_deps += [ "ets_runtime:libark_jsruntime", "napi:ace_napi", ] } if (defined(config.build_for_preview) && config.build_for_preview) { deps += [ ":gen_obj_src_abc_mock_system_plugin" ] sources += [ "utils/jsi_module_searcher.cpp" ] } else if (defined(config.use_build_in_js_engine) && config.use_build_in_js_engine) { if (platform == "ohos_ng" || is_arkui_x) { sources += [ "$ace_root/frameworks/bridge/js_frontend/engine/common/js_api_perf.cpp", "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.cpp", "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_value.cpp", "$ace_root/frameworks/bridge/js_frontend/engine/jsi/jsi_base_utils.cpp", ] } } else { sources += [ "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.cpp", "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_value.cpp", "$ace_root/frameworks/bridge/js_frontend/engine/jsi/jsi_base_utils.cpp", ] } deps += [ ":gen_obj_src_abc_ark_component", ":gen_obj_src_abc_ark_theme", ":gen_obj_src_abc_enum_style", ":gen_obj_src_abc_proxyclass", ] if (is_arkui_x) { deps += [ ":gen_obj_src_abc_uicontext" ] } else { deps += [ ":gen_obj_src_abc_preload" ] } foreach(item, abc_sources) { deps += [ ":copy_" + item + "_abc" ] } } } 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) { if (engine.engine_name == "ark") { declarative_js_engine_ark("declarative_js_engine_bridge_ark_$platform") { defines = engine.engine_defines config = { } if (defined(item.config)) { config = item.config } if (defined(config.defines)) { defines += config.defines } } } } }