1# Copyright (c) 2021-2024 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" 24abcpreload_obj_path = base_output_path + "/abc_preload.o" 25jsmocksystemplugin_obj_path = base_output_path + "/abc_js_mock_system_plugin.o" 26arkTheme_obj_path = base_output_path + "/abc_ark_theme.o" 27arkcomponent_obj_path = base_output_path + "/abc_ark_component.o" 28 29es2abc_gen_abc("gen_stateMgmt_abc") { 30 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 31 src_js = rebase_path( 32 "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js") 33 dst_file = rebase_path(base_output_path + "/stateMgmt.abc") 34 35 in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js" ] 36 out_puts = [ base_output_path + "/stateMgmt.abc" ] 37} 38 39es2abc_gen_abc("gen_jsEnumStyle_abc") { 40 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 41 src_js = rebase_path( 42 "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsEnumStyle.js") 43 dst_file = rebase_path(base_output_path + "/jsEnumStyle.abc") 44 45 in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsEnumStyle.js" ] 46 out_puts = [ base_output_path + "/jsEnumStyle.abc" ] 47} 48 49es2abc_gen_abc("gen_arkTheme_abc") { 50 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 51 src_js = rebase_path( 52 "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/arkTheme.js") 53 dst_file = rebase_path(base_output_path + "/arkTheme.abc") 54 55 in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/arkTheme.js" ] 56 out_puts = [ base_output_path + "/arkTheme.abc" ] 57} 58 59es2abc_gen_abc("gen_jsUIContext_abc") { 60 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 61 src_js = rebase_path( 62 "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsUIContext.js") 63 dst_file = rebase_path(base_output_path + "/jsUIContext.abc") 64 65 in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsUIContext.js" ] 66 out_puts = [ base_output_path + "/jsUIContext.abc" ] 67} 68 69es2abc_gen_abc("gen_jsPreload_abc") { 70 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 71 src_js = rebase_path( 72 "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsPreload.js") 73 dst_file = rebase_path(base_output_path + "/jsPreload.abc") 74 75 in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/jsPreload.js" ] 76 out_puts = [ base_output_path + "/jsPreload.abc" ] 77} 78 79es2abc_gen_abc("gen_arkComponent_abc") { 80 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 81 src_js = rebase_path( 82 "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/arkComponent.js") 83 dst_file = rebase_path(base_output_path + "/arkComponent.abc") 84 85 in_puts = [ "//foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/arkComponent.js" ] 86 out_puts = [ base_output_path + "/arkComponent.abc" ] 87} 88 89if (!is_arkui_x) { 90 es2abc_gen_abc("gen_js_mock_system_plugin_abc") { 91 extra_visibility = [ ":*" ] # Only targets in this file can depend on this. 92 src_js = rebase_path( 93 "$root_out_dir/obj/ide/tools/previewer/automock/dist/jsMockSystemPlugin.js") 94 dst_file = rebase_path(base_output_path + "/jsMockSystemPlugin.abc") 95 96 in_puts = [ rebase_path( 97 "$root_out_dir/obj/ide/tools/previewer/automock/dist/jsMockSystemPlugin.js") ] 98 out_puts = [ base_output_path + "/jsMockSystemPlugin.abc" ] 99 extra_dependencies = 100 [ "//ide/tools/previewer/automock:gen_snapshot_jsmock" ] 101 } 102} 103 104gen_obj("abc_proxyclass") { 105 input = base_output_path + "/stateMgmt.abc" 106 if (use_mac || use_mingw_win || use_ios || use_linux) { 107 abcproxyclass_obj_path = base_output_path + "/js_proxy_class.c" 108 } 109 output = abcproxyclass_obj_path 110 snapshot_dep = [ ":gen_stateMgmt_abc" ] 111} 112 113gen_obj("abc_enum_style") { 114 input = base_output_path + "/jsEnumStyle.abc" 115 if (use_mac || use_mingw_win || use_linux || use_ios) { 116 abcenumstyle_obj_path = base_output_path + "/jsEnumStyle.c" 117 } 118 output = abcenumstyle_obj_path 119 snapshot_dep = [ ":gen_jsEnumStyle_abc" ] 120} 121 122gen_obj("abc_ark_theme") { 123 input = base_output_path + "/arkTheme.abc" 124 if (use_mac || use_mingw_win || use_ios || use_linux) { 125 arkTheme_obj_path = base_output_path + "/arkTheme.c" 126 } 127 output = arkTheme_obj_path 128 snapshot_dep = [ ":gen_arkTheme_abc" ] 129} 130 131gen_obj("abc_uicontext") { 132 input = base_output_path + "/jsUIContext.abc" 133 if (use_mac || use_mingw_win || use_linux || use_ios) { 134 abcuicontext_obj_path = base_output_path + "/jsUIContext.c" 135 } 136 output = abcuicontext_obj_path 137 snapshot_dep = [ ":gen_jsUIContext_abc" ] 138} 139 140gen_obj("abc_preload") { 141 input = base_output_path + "/jsPreload.abc" 142 if (use_mac || use_mingw_win || use_linux || use_ios) { 143 abcpreload_obj_path = base_output_path + "/jsPreload.c" 144 } 145 output = abcpreload_obj_path 146 snapshot_dep = [ ":gen_jsPreload_abc" ] 147} 148 149gen_obj("abc_ark_component") { 150 input = base_output_path + "/arkComponent.abc" 151 if (use_mac || use_mingw_win || use_ios || use_linux) { 152 arkcomponent_obj_path = base_output_path + "/arkComponent.c" 153 } 154 output = arkcomponent_obj_path 155 snapshot_dep = [ ":gen_arkComponent_abc" ] 156} 157 158if (!is_arkui_x) { 159 gen_obj("abc_mock_system_plugin") { 160 input = base_output_path + "/jsMockSystemPlugin.abc" 161 if (use_mac || use_mingw_win || use_linux) { 162 jsmocksystemplugin_obj_path = 163 base_output_path + "/js_mock_system_plugin.c" 164 } 165 output = jsmocksystemplugin_obj_path 166 snapshot_dep = [ ":gen_js_mock_system_plugin_abc" ] 167 } 168} 169 170if (!is_arkui_x) { 171 abc_sources = [ "stateMgmt" ] 172} else { 173 abc_sources = [] 174} 175 176foreach(item, abc_sources) { 177 ohos_prebuilt_etc("copy_" + item + "_abc") { 178 source = base_output_path + "/" + item + ".abc" 179 deps = [ ":gen_" + item + "_abc" ] 180 part_name = ace_engine_part 181 module_install_dir = "etc/abc/framework" 182 } 183} 184 185template("declarative_js_engine_ark") { 186 forward_variables_from(invoker, "*") 187 platform = invoker.platform 188 189 ohos_source_set(target_name) { 190 subsystem_name = ace_engine_subsystem 191 part_name = ace_engine_part 192 defines += invoker.defines 193 if (target_cpu == "arm64") { 194 defines += [ "APP_USE_ARM64" ] 195 } else if (target_cpu == "arm") { 196 defines += [ "APP_USE_ARM" ] 197 } 198 199 configs = [ "$ace_root:ace_config" ] 200 201 if (ace_engine_feature_enable_point_light) { 202 defines += [ "POINT_LIGHT_ENABLE" ] 203 } 204 205 sources = [ 206 "js_converter.cpp", 207 "jsi_declarative_engine.cpp", 208 "jsi_declarative_group_js_bridge.cpp", 209 "jsi_object_template.cpp", 210 "jsi_types.cpp", 211 "jsi_view_register.cpp", 212 "modules/jsi_app_module.cpp", 213 "modules/jsi_context_module.cpp", 214 "modules/jsi_curves_module.cpp", 215 "modules/jsi_matrix4_module.cpp", 216 "modules/jsi_module_manager.cpp", 217 "modules/jsi_router_module.cpp", 218 "modules/jsi_syscap_module.cpp", 219 "modules/jsi_timer_module.cpp", 220 "nativeModule/arkts_native_alphabet_indexer_bridge.cpp", 221 "nativeModule/arkts_native_api_impl_bridge.cpp", 222 "nativeModule/arkts_native_badge_bridge.cpp", 223 "nativeModule/arkts_native_blank_bridge.cpp", 224 "nativeModule/arkts_native_button_bridge.cpp", 225 "nativeModule/arkts_native_calendar_picker_bridge.cpp", 226 "nativeModule/arkts_native_checkbox_bridge.cpp", 227 "nativeModule/arkts_native_checkboxgroup_bridge.cpp", 228 "nativeModule/arkts_native_column_bridge.cpp", 229 "nativeModule/arkts_native_column_split_bridge.cpp", 230 "nativeModule/arkts_native_common_bridge.cpp", 231 "nativeModule/arkts_native_common_shape_bridge.cpp", 232 "nativeModule/arkts_native_container_span_bridge.cpp", 233 "nativeModule/arkts_native_counter_bridge.cpp", 234 "nativeModule/arkts_native_data_panel_bridge.cpp", 235 "nativeModule/arkts_native_date_picker_bridge.cpp", 236 "nativeModule/arkts_native_divider_bridge.cpp", 237 "nativeModule/arkts_native_flex_bridge.cpp", 238 "nativeModule/arkts_native_folder_stack_bridge.cpp", 239 "nativeModule/arkts_native_frame_node_bridge.cpp", 240 "nativeModule/arkts_native_gauge_bridge.cpp", 241 "nativeModule/arkts_native_grid_bridge.cpp", 242 "nativeModule/arkts_native_grid_col_bridge.cpp", 243 "nativeModule/arkts_native_grid_item_bridge.cpp", 244 "nativeModule/arkts_native_grid_row_bridge.cpp", 245 "nativeModule/arkts_native_hyperlink_bridge.cpp", 246 "nativeModule/arkts_native_image_animator_bridge.cpp", 247 "nativeModule/arkts_native_image_bridge.cpp", 248 "nativeModule/arkts_native_image_span_bridge.cpp", 249 "nativeModule/arkts_native_line_bridge.cpp", 250 "nativeModule/arkts_native_list_bridge.cpp", 251 "nativeModule/arkts_native_list_item_bridge.cpp", 252 "nativeModule/arkts_native_list_item_group_bridge.cpp", 253 "nativeModule/arkts_native_loading_progress_bridge.cpp", 254 "nativeModule/arkts_native_marquee_bridge.cpp", 255 "nativeModule/arkts_native_menu_bridge.cpp", 256 "nativeModule/arkts_native_menu_item_bridge.cpp", 257 "nativeModule/arkts_native_nav_destination_bridge.cpp", 258 "nativeModule/arkts_native_nav_router_bridge.cpp", 259 "nativeModule/arkts_native_navigation_bridge.cpp", 260 "nativeModule/arkts_native_navigation_utils.cpp", 261 "nativeModule/arkts_native_navigator_bridge.cpp", 262 "nativeModule/arkts_native_node_adapter_bridge.cpp", 263 "nativeModule/arkts_native_node_container_bridge.cpp", 264 "nativeModule/arkts_native_panel_bridge.cpp", 265 "nativeModule/arkts_native_particle_bridge.cpp", 266 "nativeModule/arkts_native_path_bridge.cpp", 267 "nativeModule/arkts_native_pattern_lock_bridge.cpp", 268 "nativeModule/arkts_native_polygon_bridge.cpp", 269 "nativeModule/arkts_native_polyline_bridge.cpp", 270 "nativeModule/arkts_native_progress_bridge.cpp", 271 "nativeModule/arkts_native_qrcode_bridge.cpp", 272 "nativeModule/arkts_native_radio_bridge.cpp", 273 "nativeModule/arkts_native_rating_bridge.cpp", 274 "nativeModule/arkts_native_rect_bridge.cpp", 275 "nativeModule/arkts_native_refresh_bridge.cpp", 276 "nativeModule/arkts_native_relative_container_bridge.cpp", 277 "nativeModule/arkts_native_render_node_bridge.cpp", 278 "nativeModule/arkts_native_resource_bridge.cpp", 279 "nativeModule/arkts_native_rich_editor_bridge.cpp", 280 "nativeModule/arkts_native_row_bridge.cpp", 281 "nativeModule/arkts_native_row_split_bridge.cpp", 282 "nativeModule/arkts_native_scroll_bridge.cpp", 283 "nativeModule/arkts_native_scrollable_bridge.cpp", 284 "nativeModule/arkts_native_scrollbar_bridge.cpp", 285 "nativeModule/arkts_native_search_bridge.cpp", 286 "nativeModule/arkts_native_select_bridge.cpp", 287 "nativeModule/arkts_native_shape_bridge.cpp", 288 "nativeModule/arkts_native_side_bar_container_bridge.cpp", 289 "nativeModule/arkts_native_slider_bridge.cpp", 290 "nativeModule/arkts_native_span_bridge.cpp", 291 "nativeModule/arkts_native_stack_bridge.cpp", 292 "nativeModule/arkts_native_stepper_item_bridge.cpp", 293 "nativeModule/arkts_native_swiper_bridge.cpp", 294 "nativeModule/arkts_native_symbol_glyph_bridge.cpp", 295 "nativeModule/arkts_native_symbol_span_bridge.cpp", 296 "nativeModule/arkts_native_tabcontent_bridge.cpp", 297 "nativeModule/arkts_native_tabs_bridge.cpp", 298 "nativeModule/arkts_native_text_area_bridge.cpp", 299 "nativeModule/arkts_native_text_bridge.cpp", 300 "nativeModule/arkts_native_text_clock_bridge.cpp", 301 "nativeModule/arkts_native_text_input_bridge.cpp", 302 "nativeModule/arkts_native_text_timer_bridge.cpp", 303 "nativeModule/arkts_native_textpicker_bridge.cpp", 304 "nativeModule/arkts_native_timepicker_bridge.cpp", 305 "nativeModule/arkts_native_toggle_bridge.cpp", 306 "nativeModule/arkts_native_utils_bridge.cpp", 307 "nativeModule/arkts_native_video_bridge.cpp", 308 "nativeModule/arkts_native_water_flow_bridge.cpp", 309 "nativeModule/arkts_utils.cpp", 310 "nativeModule/ui_context_helper.cpp", 311 ] 312 313 deps = [ "${ace_root}/frameworks/core/interfaces/native:ace_core_interfaces_native_node_$platform" ] 314 if (is_arkui_x) { 315 deps += [ "//foundation/graphic/graphic_2d/interfaces/kits/napi/graphic/drawing:drawing_napi_impl" ] 316 } 317 external_deps = [ "graphic_2d:drawing_napi_impl" ] 318 if (use_hilog) { 319 external_deps += [ "hilog:libhilog" ] 320 } 321 if (defined(config.xcomponent_components_support) && 322 config.xcomponent_components_support) { 323 sources += [ 324 "nativeModule/arkts_native_xcomponent_bridge.cpp", 325 "nativeModule/arkts_native_xcomponent_node_bridge.cpp", 326 ] 327 deps += [ "$ace_root/frameworks/core/components_ng/pattern/xcomponent:ace_core_components_xcomponent_pattern_ng_$platform" ] 328 if (is_ohos_standard_system) { 329 deps += [ "$ace_root/interfaces/inner_api/xcomponent_controller:ace_xcomponent_controller" ] 330 external_deps += [ 331 "c_utils:utils", 332 "graphic_2d:librender_service_client", 333 ] 334 } 335 } 336 337 if (defined(config.model_component_support) && 338 config.model_component_support) { 339 sources += [ "nativeModule/arkts_native_component3d_bridge.cpp" ] 340 deps += [ "$ace_root/frameworks/core/components_ng/pattern/model:ace_core_components_model_pattern_ng_$platform" ] 341 } 342 343 if (defined(config.form_components_support) && 344 config.form_components_support) { 345 sources += [ "nativeModule/arkts_native_form_component_bridge.cpp" ] 346 deps += [ "${ace_root}/frameworks/core/components_ng/pattern/form:ace_core_components_form_pattern_ng_$platform" ] 347 348 if (is_ohos_standard_system) { 349 external_deps += [ 350 "ability_base:want", 351 "ability_runtime:app_manager", 352 "bundle_framework:appexecfwk_core", 353 "form_fwk:fmskit_native", 354 "form_fwk:form_manager", 355 "graphic_2d:librender_service_client", 356 "input:libmmi-client", 357 "ipc:ipc_core", 358 ] 359 } 360 } 361 362 if (defined(config.plugin_components_support) && 363 config.plugin_components_support) { 364 sources += [ "nativeModule/arkts_native_plugin_bridge.cpp" ] 365 deps += [ 366 "${ace_root}/frameworks/core/components_ng/pattern/plugin:ace_core_components_plugin_pattern_ng_$platform", 367 "${ace_root}/interfaces/inner_api/ui_service_manager:ui_service_mgr", 368 ] 369 external_deps += [ 370 "ability_base:want", 371 "ability_runtime:app_manager", 372 "bundle_framework:appexecfwk_core", 373 "c_utils:utils", 374 "graphic_2d:librender_service_client", 375 "ipc:ipc_core", 376 ] 377 if (os_account_exists) { 378 external_deps += [ "os_account:os_account_innerkits" ] 379 } 380 } 381 382 include_dirs = [] 383 if (defined(vendor_configs.extra_view_register_sources)) { 384 include_dirs += vendor_configs.ace_advance_dirs 385 sources += vendor_configs.extra_view_register_sources 386 if (platform == "ohos_ng") { 387 sources += vendor_configs.ace_engine_advanced_jsview 388 } 389 } else { 390 sources += [ "jsi_extra_view_register.cpp" ] 391 } 392 393 include_dirs += [ "${ace_root}/interfaces/inner_api/ace" ] 394 395 if (!is_arkui_x) { 396 deps += 397 [ "${ace_root}/interfaces/inner_api/ace:ace_forward_compatibility" ] 398 } 399 400 if (platform == "ohos_ng" || is_arkui_x) { 401 sources += [ 402 "jsi_animator_model_ng_build_impl.cpp", 403 "jsi_view_register_impl_ng.cpp", 404 ] 405 if (is_arkui_x) { 406 defines += [ "CROSS_PLATFORM" ] 407 } 408 } else { 409 sources += [ 410 "jsi_animator_model_ng_impl.cpp", 411 "jsi_view_register_impl.cpp", 412 ] 413 deps += [ "$ace_root/frameworks/core/components/theme:build_theme_code" ] 414 } 415 416 # add for cross_platfrom_build temporarily, shall be removed after external_deps is supported 417 if (is_arkui_x) { 418 configs += [ "$ark_ets_path:ark_jsruntime_public_config" ] 419 deps += [ "$ark_ets_path:libark_jsruntime_static" ] 420 public_deps = [ "//foundation/arkui/napi:ace_napi" ] 421 } else { 422 external_deps += [ 423 "ets_runtime:libark_jsruntime", 424 "napi:ace_napi", 425 ] 426 } 427 428 if (defined(config.build_for_preview) && config.build_for_preview) { 429 deps += [ ":gen_obj_src_abc_mock_system_plugin" ] 430 sources += [ "utils/jsi_module_searcher.cpp" ] 431 } else if (defined(config.use_build_in_js_engine) && 432 config.use_build_in_js_engine) { 433 if (platform == "ohos_ng" || is_arkui_x) { 434 sources += [ 435 "$ace_root/frameworks/bridge/js_frontend/engine/common/js_api_perf.cpp", 436 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.cpp", 437 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_value.cpp", 438 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/jsi_base_utils.cpp", 439 ] 440 } 441 } else { 442 sources += [ 443 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_runtime.cpp", 444 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/ark_js_value.cpp", 445 "$ace_root/frameworks/bridge/js_frontend/engine/jsi/jsi_base_utils.cpp", 446 ] 447 } 448 449 deps += [ 450 ":gen_obj_src_abc_ark_component", 451 ":gen_obj_src_abc_ark_theme", 452 ":gen_obj_src_abc_enum_style", 453 ":gen_obj_src_abc_proxyclass", 454 ] 455 456 if (is_arkui_x) { 457 deps += [ ":gen_obj_src_abc_uicontext" ] 458 } else { 459 deps += [ ":gen_obj_src_abc_preload" ] 460 } 461 462 foreach(item, abc_sources) { 463 deps += [ ":copy_" + item + "_abc" ] 464 } 465 } 466} 467 468foreach(item, ace_platforms) { 469 platform = item.name 470 engine_config = { 471 } 472 engine_config = item.config 473 support_engines = [] 474 support_engines = engine_config.js_engines 475 foreach(engine, support_engines) { 476 if (engine.engine_name == "ark") { 477 declarative_js_engine_ark("declarative_js_engine_bridge_ark_$platform") { 478 defines = engine.engine_defines 479 config = { 480 } 481 482 if (defined(item.config)) { 483 config = item.config 484 } 485 if (defined(config.defines)) { 486 defines += config.defines 487 } 488 } 489 } 490 } 491} 492