15f9996aaSopenharmony_ci# Copyright (c) 2023 Huawei Device Co., Ltd. 25f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 35f9996aaSopenharmony_ci# you may not use this file except in compliance with the License. 45f9996aaSopenharmony_ci# You may obtain a copy of the License at 55f9996aaSopenharmony_ci# 65f9996aaSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 75f9996aaSopenharmony_ci# 85f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 95f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 105f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 115f9996aaSopenharmony_ci# See the License for the specific language governing permissions and 125f9996aaSopenharmony_ci# limitations under the License. 135f9996aaSopenharmony_ci 145f9996aaSopenharmony_ciimport("//build/config/components/ets_frontend/es2abc_config.gni") 155f9996aaSopenharmony_ciimport("//build/config/python.gni") 165f9996aaSopenharmony_ciimport("//build/ohos/notice/notice.gni") 175f9996aaSopenharmony_ciimport("//build/templates/common/collect_target.gni") 185f9996aaSopenharmony_ciimport("//build/templates/metadata/module_info.gni") 195f9996aaSopenharmony_ci 205f9996aaSopenharmony_ci# Generate .abc files from .ts files 215f9996aaSopenharmony_ci# 225f9996aaSopenharmony_ci# Variables 235f9996aaSopenharmony_ci# sources: Paths to .ts file to compile 245f9996aaSopenharmony_ci# 255f9996aaSopenharmony_ci# Example 265f9996aaSopenharmony_ci# ohos_abc("foo_abc") { 275f9996aaSopenharmony_ci# sources = [ "example.ts" ] 285f9996aaSopenharmony_ci# subsystem_name = "example" 295f9996aaSopenharmony_ci# part_name = "example" 305f9996aaSopenharmony_ci# } 315f9996aaSopenharmony_citemplate("ohos_abc") { 325f9996aaSopenharmony_ci assert(defined(invoker.subsystem_name), "subsystem_name is required") 335f9996aaSopenharmony_ci assert(defined(invoker.part_name), "part_name is required") 345f9996aaSopenharmony_ci 355f9996aaSopenharmony_ci _test_target = defined(invoker.testonly) && invoker.testonly 365f9996aaSopenharmony_ci subsystem_name = invoker.subsystem_name 375f9996aaSopenharmony_ci part_name = invoker.part_name 385f9996aaSopenharmony_ci 395f9996aaSopenharmony_ci if (is_use_check_deps && !_test_target) { 405f9996aaSopenharmony_ci _check_target = "${target_name}__check" 415f9996aaSopenharmony_ci target_path = get_label_info(":${target_name}", "label_no_toolchain") 425f9996aaSopenharmony_ci check_target(_check_target) { 435f9996aaSopenharmony_ci module_deps = [] 445f9996aaSopenharmony_ci if (defined(invoker.deps)) { 455f9996aaSopenharmony_ci module_deps += invoker.deps 465f9996aaSopenharmony_ci } 475f9996aaSopenharmony_ci if (defined(invoker.public_deps)) { 485f9996aaSopenharmony_ci module_deps += invoker.public_deps 495f9996aaSopenharmony_ci } 505f9996aaSopenharmony_ci if (defined(invoker.external_deps)) { 515f9996aaSopenharmony_ci module_ex_deps = invoker.external_deps 525f9996aaSopenharmony_ci } 535f9996aaSopenharmony_ci } 545f9996aaSopenharmony_ci } 555f9996aaSopenharmony_ci 565f9996aaSopenharmony_ci if (is_standard_system) { 575f9996aaSopenharmony_ci output_dir = "${root_out_dir}/${subsystem_name}/${part_name}" 585f9996aaSopenharmony_ci } else { 595f9996aaSopenharmony_ci output_dir = "${root_out_dir}" 605f9996aaSopenharmony_ci } 615f9996aaSopenharmony_ci 625f9996aaSopenharmony_ci target_label = get_label_info(":${target_name}", "label_with_toolchain") 635f9996aaSopenharmony_ci target_toolchain = get_label_info(target_label, "toolchain") 645f9996aaSopenharmony_ci 655f9996aaSopenharmony_ci if (target_toolchain == "${current_toolchain}") { 665f9996aaSopenharmony_ci ohos_abc_target = target_name 675f9996aaSopenharmony_ci module_info_target = "${target_name}_info" 685f9996aaSopenharmony_ci generate_module_info(module_info_target) { 695f9996aaSopenharmony_ci forward_variables_from(invoker, [ "testonly" ]) 705f9996aaSopenharmony_ci module_name = ohos_abc_target 715f9996aaSopenharmony_ci if (!defined(invoker.module_type)) { 725f9996aaSopenharmony_ci module_type = "unknown" 735f9996aaSopenharmony_ci } else { 745f9996aaSopenharmony_ci module_type = invoker.module_type 755f9996aaSopenharmony_ci } 765f9996aaSopenharmony_ci module_source_dir = "$root_out_dir" 775f9996aaSopenharmony_ci if (defined(output_dir)) { 785f9996aaSopenharmony_ci module_source_dir = output_dir 795f9996aaSopenharmony_ci } 805f9996aaSopenharmony_ci 815f9996aaSopenharmony_ci if (defined(invoker.symlink_target_name)) { 825f9996aaSopenharmony_ci symlink_target_name = invoker.symlink_target_name 835f9996aaSopenharmony_ci } 845f9996aaSopenharmony_ci 855f9996aaSopenharmony_ci module_install_name = "${ohos_abc_target}.abc" 865f9996aaSopenharmony_ci if (defined(invoker.output_name)) { 875f9996aaSopenharmony_ci module_install_name = "${invoker.output_name}.abc" 885f9996aaSopenharmony_ci } 895f9996aaSopenharmony_ci 905f9996aaSopenharmony_ci module_install_images = [ "system" ] 915f9996aaSopenharmony_ci if (defined(invoker.install_images)) { 925f9996aaSopenharmony_ci module_install_images = [] 935f9996aaSopenharmony_ci module_install_images += invoker.install_images 945f9996aaSopenharmony_ci } 955f9996aaSopenharmony_ci 965f9996aaSopenharmony_ci module_install_dir = "etc/abc" 975f9996aaSopenharmony_ci if (defined(invoker.module_install_dir)) { 985f9996aaSopenharmony_ci module_install_dir = invoker.module_install_dir 995f9996aaSopenharmony_ci } 1005f9996aaSopenharmony_ci 1015f9996aaSopenharmony_ci install_enable = true 1025f9996aaSopenharmony_ci if (defined(invoker.install_enable)) { 1035f9996aaSopenharmony_ci install_enable = invoker.install_enable 1045f9996aaSopenharmony_ci } 1055f9996aaSopenharmony_ci 1065f9996aaSopenharmony_ci if (defined(invoker.relative_install_dir)) { 1075f9996aaSopenharmony_ci relative_install_dir = invoker.relative_install_dir 1085f9996aaSopenharmony_ci } 1095f9996aaSopenharmony_ci 1105f9996aaSopenharmony_ci notice = "$target_out_dir/$ohos_abc_target.notice.txt" 1115f9996aaSopenharmony_ci } 1125f9996aaSopenharmony_ci } 1135f9996aaSopenharmony_ci 1145f9996aaSopenharmony_ci if (!_test_target) { 1155f9996aaSopenharmony_ci module_label = get_label_info(":${target_name}", "label_with_toolchain") 1165f9996aaSopenharmony_ci _collect_target = "${target_name}__collect" 1175f9996aaSopenharmony_ci collect_module_target(_collect_target) { 1185f9996aaSopenharmony_ci forward_variables_from(invoker, [ "install_images" ]) 1195f9996aaSopenharmony_ci } 1205f9996aaSopenharmony_ci 1215f9996aaSopenharmony_ci _notice_target = "${target_name}__notice" 1225f9996aaSopenharmony_ci ohos_abc_target = target_name 1235f9996aaSopenharmony_ci collect_notice(_notice_target) { 1245f9996aaSopenharmony_ci forward_variables_from(invoker, [ "testonly" ]) 1255f9996aaSopenharmony_ci if (defined(invoker.license_as_sources)) { 1265f9996aaSopenharmony_ci license_as_sources = invoker.license_as_sources 1275f9996aaSopenharmony_ci } 1285f9996aaSopenharmony_ci if (defined(invoker.license_file)) { 1295f9996aaSopenharmony_ci license_file = invoker.license_file 1305f9996aaSopenharmony_ci } 1315f9996aaSopenharmony_ci module_name = ohos_abc_target 1325f9996aaSopenharmony_ci module_source_dir = get_label_info(":${ohos_abc_target}", "dir") 1335f9996aaSopenharmony_ci } 1345f9996aaSopenharmony_ci } 1355f9996aaSopenharmony_ci 1365f9996aaSopenharmony_ci action_with_pydeps(target_name) { 1375f9996aaSopenharmony_ci forward_variables_from(invoker, [ "testonly" ]) 1385f9996aaSopenharmony_ci if (!defined(deps)) { 1395f9996aaSopenharmony_ci deps = [] 1405f9996aaSopenharmony_ci } 1415f9996aaSopenharmony_ci if (defined(invoker.deps)) { 1425f9996aaSopenharmony_ci deps += invoker.deps 1435f9996aaSopenharmony_ci } 1445f9996aaSopenharmony_ci deps += es2abc_build_deps 1455f9996aaSopenharmony_ci if (is_use_check_deps && !_test_target) { 1465f9996aaSopenharmony_ci deps += [ ":$_check_target" ] 1475f9996aaSopenharmony_ci } 1485f9996aaSopenharmony_ci if (target_toolchain == "${current_toolchain}") { 1495f9996aaSopenharmony_ci deps += [ ":$module_info_target" ] 1505f9996aaSopenharmony_ci } 1515f9996aaSopenharmony_ci if (!_test_target) { 1525f9996aaSopenharmony_ci deps += [ 1535f9996aaSopenharmony_ci ":${_collect_target}", 1545f9996aaSopenharmony_ci ":${_notice_target}", 1555f9996aaSopenharmony_ci ] 1565f9996aaSopenharmony_ci } 1575f9996aaSopenharmony_ci 1585f9996aaSopenharmony_ci if (defined(invoker.output_name)) { 1595f9996aaSopenharmony_ci output_file = "${output_dir}/${invoker.output_name}.abc" 1605f9996aaSopenharmony_ci } else { 1615f9996aaSopenharmony_ci output_file = "${output_dir}/${target_name}.abc" 1625f9996aaSopenharmony_ci } 1635f9996aaSopenharmony_ci script = "//build/scripts/ohos_abc.py" 1645f9996aaSopenharmony_ci sources = invoker.sources 1655f9996aaSopenharmony_ci args = [ 1665f9996aaSopenharmony_ci "--outputs", 1675f9996aaSopenharmony_ci rebase_path(output_file), 1685f9996aaSopenharmony_ci "--es2abc", 1695f9996aaSopenharmony_ci rebase_path(es2abc_build_path), 1705f9996aaSopenharmony_ci "--sources", 1715f9996aaSopenharmony_ci ] 1725f9996aaSopenharmony_ci args += rebase_path(sources, root_build_dir) 1735f9996aaSopenharmony_ci if (defined(invoker.merge_abc) && invoker.merge_abc) { 1745f9996aaSopenharmony_ci args += [ "--merge-abc" ] 1755f9996aaSopenharmony_ci } 1765f9996aaSopenharmony_ci if (defined(invoker.disable_module) && invoker.disable_module) { 1775f9996aaSopenharmony_ci args += [ "--module" ] 1785f9996aaSopenharmony_ci } 1795f9996aaSopenharmony_ci outputs = [ output_file ] 1805f9996aaSopenharmony_ci 1815f9996aaSopenharmony_ci install_module_info = { 1825f9996aaSopenharmony_ci module_def = target_label 1835f9996aaSopenharmony_ci module_info_file = 1845f9996aaSopenharmony_ci rebase_path(get_label_info(module_def, "target_out_dir"), 1855f9996aaSopenharmony_ci root_build_dir) + "/${target_name}_module_info.json" 1865f9996aaSopenharmony_ci toolchain = current_toolchain 1875f9996aaSopenharmony_ci toolchain_out_dir = rebase_path(root_out_dir, root_build_dir) 1885f9996aaSopenharmony_ci subsystem_name = subsystem_name 1895f9996aaSopenharmony_ci part_name = part_name 1905f9996aaSopenharmony_ci } 1915f9996aaSopenharmony_ci metadata = { 1925f9996aaSopenharmony_ci install_modules = [ install_module_info ] 1935f9996aaSopenharmony_ci } 1945f9996aaSopenharmony_ci } 1955f9996aaSopenharmony_ci} 196