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("//arkcompiler/ets_frontend/es2panda/es2abc_config.gni") 15import("//build/ohos.gni") 16import("//foundation/arkui/ace_engine/ace_config.gni") 17import("//foundation/arkui/ace_engine/build/ace_ext.gni") 18import("//foundation/arkui/ace_engine/build/ace_gen_obj.gni") 19 20base_output_path = get_label_info(":gen_abc_proxyclass", "target_out_dir") 21abcproxyclass_obj_path = base_output_path + "/abc_proxy_class.o" 22abcenumstyle_obj_path = base_output_path + "/abc_enum_style.o" 23abcuicontext_obj_path = base_output_path + "/abc_uicontext.o" 24jsmocksystemplugin_obj_path = base_output_path + "/abc_js_mock_system_plugin.o" 25arkcomponent_obj_path = base_output_path + "/abc_ark_component.o" 26 27es2abc_gen_abc("gen_stateMgmt_abc") { 28 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 29 src_js = rebase_path( 30 "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js") 31 dst_file = rebase_path(base_output_path + "/stateMgmt.abc") 32 33 in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js" ] 34 out_puts = [ base_output_path + "/stateMgmt.abc" ] 35} 36 37es2abc_gen_abc("gen_jsEnumStyle_abc") { 38 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 39 src_js = rebase_path( 40 "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsEnumStyle.js") 41 dst_file = rebase_path(base_output_path + "/jsEnumStyle.abc") 42 43 in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsEnumStyle.js" ] 44 out_puts = [ base_output_path + "/jsEnumStyle.abc" ] 45} 46 47es2abc_gen_abc("gen_jsUIContext_abc") { 48 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 49 src_js = rebase_path( 50 "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsUIContext.js") 51 dst_file = rebase_path(base_output_path + "/jsUIContext.abc") 52 53 in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsUIContext.js" ] 54 out_puts = [ base_output_path + "/jsUIContext.abc" ] 55} 56 57es2abc_gen_abc("gen_arkComponent_abc") { 58 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 59 src_js = rebase_path( 60 "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/arkComponent.js") 61 dst_file = rebase_path(base_output_path + "/arkComponent.abc") 62 63 in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/arkComponent.js" ] 64 out_puts = [ base_output_path + "/arkComponent.abc" ] 65} 66 67if (!is_arkui_x) { 68 es2abc_gen_abc("gen_js_mock_system_plugin_abc") { 69 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 70 src_js = rebase_path( 71 "$root_out_dir/obj/ide/tools/previewer/automock/dist/jsMockSystemPlugin.js") 72 dst_file = rebase_path(base_output_path + "/jsMockSystemPlugin.abc") 73 74 in_puts = [ rebase_path( 75 "$root_out_dir/obj/ide/tools/previewer/automock/dist/jsMockSystemPlugin.js") ] 76 out_puts = [ base_output_path + "/jsMockSystemPlugin.abc" ] 77 extra_dependencies = 78 [ "//ide/tools/previewer/automock:gen_snapshot_jsmock" ] 79 } 80} 81 82gen_obj("abc_proxyclass") { 83 input = base_output_path + "/stateMgmt.abc" 84 if (use_mac || use_mingw_win || use_ios || use_linux) { 85 abcproxyclass_obj_path = base_output_path + "/js_proxy_class.c" 86 } 87 output = abcproxyclass_obj_path 88 snapshot_dep = [ ":gen_stateMgmt_abc" ] 89} 90 91gen_obj("abc_enum_style") { 92 input = base_output_path + "/jsEnumStyle.abc" 93 if (use_mac || use_mingw_win || use_linux || use_ios) { 94 abcenumstyle_obj_path = base_output_path + "/jsEnumStyle.c" 95 } 96 output = abcenumstyle_obj_path 97 snapshot_dep = [ ":gen_jsEnumStyle_abc" ] 98} 99 100gen_obj("abc_uicontext") { 101 input = base_output_path + "/jsUIContext.abc" 102 if (use_mac || use_mingw_win || use_linux || use_ios) { 103 abcuicontext_obj_path = base_output_path + "/jsUIContext.c" 104 } 105 output = abcuicontext_obj_path 106 snapshot_dep = [ ":gen_jsUIContext_abc" ] 107} 108 109gen_obj("abc_ark_component") { 110 input = base_output_path + "/arkComponent.abc" 111 if (use_mac || use_mingw_win || use_ios || use_linux) { 112 arkcomponent_obj_path = base_output_path + "/arkComponent.c" 113 } 114 output = arkcomponent_obj_path 115 snapshot_dep = [ ":gen_arkComponent_abc" ] 116} 117 118if (!is_arkui_x) { 119 gen_obj("abc_mock_system_plugin") { 120 input = base_output_path + "/jsMockSystemPlugin.abc" 121 if (use_mac || use_mingw_win || use_linux) { 122 jsmocksystemplugin_obj_path = 123 base_output_path + "/js_mock_system_plugin.c" 124 } 125 output = jsmocksystemplugin_obj_path 126 snapshot_dep = [ ":gen_js_mock_system_plugin_abc" ] 127 } 128} 129 130template("declarative_js_engine_ark") { 131 forward_variables_from(invoker, "*") 132 platform = invoker.platform 133 134 ohos_source_set(target_name) { 135 subsystem_name = ace_engine_subsystem 136 part_name = ace_engine_part 137 defines += invoker.defines 138 if (target_cpu == "arm64") { 139 defines += [ "APP_USE_ARM64" ] 140 } else if (target_cpu == "arm") { 141 defines += [ "APP_USE_ARM" ] 142 } 143 144 configs = [ "$ace_root:ace_config" ] 145 146 sources = [ 147 "js_converter.cpp", 148 "jsi_declarative_engine.cpp", 149 "jsi_declarative_group_js_bridge.cpp", 150 "jsi_object_template.cpp", 151 "jsi_types.cpp", 152 "jsi_view_register.cpp", 153 "modules/jsi_app_module.cpp", 154 "modules/jsi_context_module.cpp", 155 "modules/jsi_curves_module.cpp", 156 "modules/jsi_matrix4_module.cpp", 157 "modules/jsi_module_manager.cpp", 158 "modules/jsi_router_module.cpp", 159 "modules/jsi_syscap_module.cpp", 160 "modules/jsi_timer_module.cpp", 161 "nativeModule/arkts_native_alphabet_indexer_bridge.cpp", 162 "nativeModule/arkts_native_api_impl_bridge.cpp", 163 "nativeModule/arkts_native_blank_bridge.cpp", 164 "nativeModule/arkts_native_button_bridge.cpp", 165 "nativeModule/arkts_native_calendar_picker_bridge.cpp", 166 "nativeModule/arkts_native_checkbox_bridge.cpp", 167 "nativeModule/arkts_native_checkboxgroup_bridge.cpp", 168 "nativeModule/arkts_native_column_bridge.cpp", 169 "nativeModule/arkts_native_column_split_bridge.cpp", 170 "nativeModule/arkts_native_common_bridge.cpp", 171 "nativeModule/arkts_native_common_shape_bridge.cpp", 172 "nativeModule/arkts_native_counter_bridge.cpp", 173 "nativeModule/arkts_native_data_panel_bridge.cpp", 174 "nativeModule/arkts_native_date_picker_bridge.cpp", 175 "nativeModule/arkts_native_divider_bridge.cpp", 176 "nativeModule/arkts_native_gauge_bridge.cpp", 177 "nativeModule/arkts_native_grid_bridge.cpp", 178 "nativeModule/arkts_native_grid_col_bridge.cpp", 179 "nativeModule/arkts_native_grid_item_bridge.cpp", 180 "nativeModule/arkts_native_grid_row_bridge.cpp", 181 "nativeModule/arkts_native_hyperlink_bridge.cpp", 182 "nativeModule/arkts_native_image_animator_bridge.cpp", 183 "nativeModule/arkts_native_image_bridge.cpp", 184 "nativeModule/arkts_native_image_span_bridge.cpp", 185 "nativeModule/arkts_native_line_bridge.cpp", 186 "nativeModule/arkts_native_list_bridge.cpp", 187 "nativeModule/arkts_native_list_item_bridge.cpp", 188 "nativeModule/arkts_native_list_item_group_bridge.cpp", 189 "nativeModule/arkts_native_loading_progress_bridge.cpp", 190 "nativeModule/arkts_native_marquee_bridge.cpp", 191 "nativeModule/arkts_native_menu_bridge.cpp", 192 "nativeModule/arkts_native_menu_item_bridge.cpp", 193 "nativeModule/arkts_native_nav_destination_bridge.cpp", 194 "nativeModule/arkts_native_nav_router_bridge.cpp", 195 "nativeModule/arkts_native_navigation_bridge.cpp", 196 "nativeModule/arkts_native_navigator_bridge.cpp", 197 "nativeModule/arkts_native_node_container_bridge.cpp", 198 "nativeModule/arkts_native_panel_bridge.cpp", 199 "nativeModule/arkts_native_path_bridge.cpp", 200 "nativeModule/arkts_native_pattern_lock_bridge.cpp", 201 "nativeModule/arkts_native_polygon_bridge.cpp", 202 "nativeModule/arkts_native_polyline_bridge.cpp", 203 "nativeModule/arkts_native_progress_bridge.cpp", 204 "nativeModule/arkts_native_qrcode_bridge.cpp", 205 "nativeModule/arkts_native_radio_bridge.cpp", 206 "nativeModule/arkts_native_rating_bridge.cpp", 207 "nativeModule/arkts_native_rect_bridge.cpp", 208 "nativeModule/arkts_native_render_node_bridge.cpp", 209 "nativeModule/arkts_native_rich_editor_bridge.cpp", 210 "nativeModule/arkts_native_row_bridge.cpp", 211 "nativeModule/arkts_native_row_split_bridge.cpp", 212 "nativeModule/arkts_native_scroll_bridge.cpp", 213 "nativeModule/arkts_native_search_bridge.cpp", 214 "nativeModule/arkts_native_select_bridge.cpp", 215 "nativeModule/arkts_native_shape_bridge.cpp", 216 "nativeModule/arkts_native_side_bar_container_bridge.cpp", 217 "nativeModule/arkts_native_slider_bridge.cpp", 218 "nativeModule/arkts_native_span_bridge.cpp", 219 "nativeModule/arkts_native_stack_bridge.cpp", 220 "nativeModule/arkts_native_stepper_item_bridge.cpp", 221 "nativeModule/arkts_native_swiper_bridge.cpp", 222 "nativeModule/arkts_native_tabcontent_bridge.cpp", 223 "nativeModule/arkts_native_tabs_bridge.cpp", 224 "nativeModule/arkts_native_text_area_bridge.cpp", 225 "nativeModule/arkts_native_text_bridge.cpp", 226 "nativeModule/arkts_native_text_clock_bridge.cpp", 227 "nativeModule/arkts_native_text_input_bridge.cpp", 228 "nativeModule/arkts_native_text_timer_bridge.cpp", 229 "nativeModule/arkts_native_textpicker_bridge.cpp", 230 "nativeModule/arkts_native_timepicker_bridge.cpp", 231 "nativeModule/arkts_native_toggle_bridge.cpp", 232 "nativeModule/arkts_native_video_bridge.cpp", 233 "nativeModule/arkts_native_water_flow_bridge.cpp", 234 "nativeModule/arkts_utils.cpp", 235 ] 236 237 deps = [ "${ace_root}/frameworks/core/interfaces/native:ace_core_interfaces_native_node_$platform" ] 238 external_deps = [] 239 240 if (defined(config.xcomponent_components_support) && 241 config.xcomponent_components_support) { 242 sources += [ 243 "nativeModule/arkts_native_xcomponent_bridge.cpp", 244 "nativeModule/arkts_native_xcomponent_node_bridge.cpp", 245 ] 246 deps += [ "$ace_root/frameworks/core/components_ng/pattern/xcomponent:ace_core_components_xcomponent_pattern_ng_$platform" ] 247 if (is_ohos_standard_system) { 248 deps += [ "$ace_root/interfaces/inner_api/xcomponent_controller:ace_xcomponent_controller" ] 249 external_deps = [ 250 "c_utils:utils", 251 "graphic_2d:librender_service_client", 252 "hilog:libhilog", 253 ] 254 } 255 } 256 257 if (defined(config.form_components_support) && 258 config.form_components_support) { 259 sources += [ "nativeModule/arkts_native_form_component_bridge.cpp" ] 260 deps += [ "${ace_root}/frameworks/core/components_ng/pattern/form:ace_core_components_form_pattern_ng_$platform" ] 261 262 if (is_ohos_standard_system) { 263 external_deps += [ 264 "ability_base:want", 265 "ability_runtime:app_manager", 266 "bundle_framework:appexecfwk_core", 267 "form_fwk:fmskit_native", 268 "form_fwk:form_manager", 269 "graphic_2d:librender_service_client", 270 "input:libmmi-client", 271 "ipc:ipc_core", 272 ] 273 } 274 } 275 276 if (defined(config.plugin_components_support) && 277 config.plugin_components_support) { 278 sources += [ "nativeModule/arkts_native_plugin_bridge.cpp" ] 279 deps += [ 280 "${ace_root}/frameworks/core/components_ng/pattern/plugin:ace_core_components_plugin_pattern_ng_$platform", 281 "${ace_root}/interfaces/inner_api/ui_service_manager:ui_service_mgr", 282 ] 283 external_deps += [ 284 "ability_base:want", 285 "ability_runtime:app_manager", 286 "bundle_framework:appexecfwk_core", 287 "c_utils:utils", 288 "graphic_2d:librender_service_client", 289 "ipc:ipc_core", 290 ] 291 if (os_account_exists) { 292 external_deps += [ "os_account:os_account_innerkits" ] 293 } 294 } 295 296 include_dirs = [] 297 if (defined(vendor_configs.extra_view_register_sources)) { 298 include_dirs += vendor_configs.ace_advance_dirs 299 sources += vendor_configs.extra_view_register_sources 300 } else { 301 sources += [ "jsi_extra_view_register.cpp" ] 302 } 303 304 include_dirs += [ "${ace_root}/interfaces/inner_api/ace" ] 305 306 if (!is_arkui_x) { 307 deps += 308 [ "${ace_root}/interfaces/inner_api/ace:ace_forward_compatibility" ] 309 } 310 311 if (platform == "ohos_ng" || is_arkui_x) { 312 sources += [ 313 "jsi_animator_model_ng_build_impl.cpp", 314 "jsi_view_register_impl_ng.cpp", 315 ] 316 if (is_arkui_x) { 317 defines += [ "CROSS_PLATFORM" ] 318 } 319 } else { 320 sources += [ 321 "jsi_animator_model_ng_impl.cpp", 322 "jsi_view_register_impl.cpp", 323 ] 324 deps += [ "$ace_root/frameworks/core/components/theme:build_theme_code" ] 325 } 326 327 # add for cross_platfrom_build temporarily, shall be removed after external_deps is supported 328 if (is_arkui_x) { 329 configs += [ "$ark_ets_path:ark_jsruntime_public_config" ] 330 deps += [ "$ark_ets_path:libark_jsruntime_static" ] 331 public_deps = [ "//foundation/arkui/napi:ace_napi" ] 332 } else { 333 external_deps += [ 334 "ets_runtime:libark_jsruntime", 335 "napi:ace_napi", 336 ] 337 } 338 339 if (defined(config.build_for_preview) && config.build_for_preview) { 340 deps += [ ":gen_obj_src_abc_mock_system_plugin" ] 341 sources += [ "utils/jsi_module_searcher.cpp" ] 342 } else if (defined(config.use_build_in_js_engine) && 343 config.use_build_in_js_engine) { 344 if (platform == "ohos_ng" || is_arkui_x) { 345 sources += [ 346 "$ace_root/frameworks/bridge/js_frontend/engine/common/js_api_perf.cpp", 347 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.cpp", 348 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_value.cpp", 349 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/jsi_base_utils.cpp", 350 ] 351 } 352 } else { 353 sources += [ 354 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.cpp", 355 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_value.cpp", 356 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/jsi_base_utils.cpp", 357 ] 358 } 359 360 deps += [ 361 ":gen_obj_src_abc_ark_component", 362 ":gen_obj_src_abc_enum_style", 363 ":gen_obj_src_abc_proxyclass", 364 ":gen_obj_src_abc_uicontext", 365 ] 366 } 367} 368 369foreach(item, ace_platforms) { 370 platform = item.name 371 engine_config = { 372 } 373 engine_config = item.config 374 support_engines = [] 375 support_engines = engine_config.js_engines 376 foreach(engine, support_engines) { 377 if (engine.engine_name == "ark") { 378 declarative_js_engine_ark("declarative_js_engine_bridge_ark_$platform") { 379 defines = engine.engine_defines 380 config = { 381 } 382 383 if (defined(item.config)) { 384 config = item.config 385 } 386 if (defined(config.defines)) { 387 defines += config.defines 388 } 389 } 390 } 391 } 392} 393