• 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("//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