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/python.gni") 155f9996aaSopenharmony_ciimport("//build/ohos.gni") 165f9996aaSopenharmony_ciimport("//build/ohos/build_var.gni") 175f9996aaSopenharmony_ciimport("//build/ohos_var.gni") 185f9996aaSopenharmony_ci 195f9996aaSopenharmony_citemplate("check_abi_and_copy_deps") { 205f9996aaSopenharmony_ci action(target_name) { 215f9996aaSopenharmony_ci abidiff_target = "//third_party/libabigail/tools:abidiff($host_toolchain)" 225f9996aaSopenharmony_ci abidw_target = "//third_party/libabigail/tools:abidw($host_toolchain)" 235f9996aaSopenharmony_ci deps = invoker.sources 245f9996aaSopenharmony_ci deps += [ abidiff_target ] 255f9996aaSopenharmony_ci deps += [ abidw_target ] 265f9996aaSopenharmony_ci outputs = [] 275f9996aaSopenharmony_ci check_params = [] 285f9996aaSopenharmony_ci foreach(element, invoker.sources) { 295f9996aaSopenharmony_ci element_target_out_dir = get_label_info(element, "target_out_dir") 305f9996aaSopenharmony_ci element_name = get_label_info(element, "name") 315f9996aaSopenharmony_ci 325f9996aaSopenharmony_ci param_data = [] 335f9996aaSopenharmony_ci param_data = { 345f9996aaSopenharmony_ci type = invoker.type 355f9996aaSopenharmony_ci target_out_dir = rebase_path(element_target_out_dir, root_build_dir) 365f9996aaSopenharmony_ci target_name = element_name 375f9996aaSopenharmony_ci root_out_dir = rebase_path(invoker.root_out_dir, root_build_dir) 385f9996aaSopenharmony_ci } 395f9996aaSopenharmony_ci check_params += [ param_data ] 405f9996aaSopenharmony_ci 415f9996aaSopenharmony_ci outputs += [ "${element_target_out_dir}/${element_name}_abi_info.dump" ] 425f9996aaSopenharmony_ci } 435f9996aaSopenharmony_ci 445f9996aaSopenharmony_ci check_datas_file = 455f9996aaSopenharmony_ci "${target_out_dir}/${invoker.target_name}_check_datas.json" 465f9996aaSopenharmony_ci write_file(check_datas_file, check_params, "json") 475f9996aaSopenharmony_ci 485f9996aaSopenharmony_ci inputs = [ check_datas_file ] 495f9996aaSopenharmony_ci script = "//build/ohos/update/check_abi_and_copy_deps.py" 505f9996aaSopenharmony_ci 515f9996aaSopenharmony_ci args = [ 525f9996aaSopenharmony_ci "--clang-readelf", 535f9996aaSopenharmony_ci rebase_path("$clang_base_path/bin/llvm-readelf", root_build_dir), 545f9996aaSopenharmony_ci "--target-out-dir", 555f9996aaSopenharmony_ci rebase_path(target_out_dir, root_build_dir), 565f9996aaSopenharmony_ci "--check-datas-file", 575f9996aaSopenharmony_ci rebase_path(check_datas_file, root_build_dir), 585f9996aaSopenharmony_ci "--abidiff-target-name", 595f9996aaSopenharmony_ci get_label_info(abidiff_target, "name"), 605f9996aaSopenharmony_ci "--abidiff-target-out-dir", 615f9996aaSopenharmony_ci rebase_path(get_label_info(abidiff_target, "target_out_dir"), 625f9996aaSopenharmony_ci root_build_dir), 635f9996aaSopenharmony_ci "--abidw-target-name", 645f9996aaSopenharmony_ci get_label_info(abidw_target, "name"), 655f9996aaSopenharmony_ci "--abidw-target-out-dir", 665f9996aaSopenharmony_ci rebase_path(get_label_info(abidw_target, "target_out_dir"), 675f9996aaSopenharmony_ci root_build_dir), 685f9996aaSopenharmony_ci "--abi-dumps-path", 695f9996aaSopenharmony_ci rebase_path("//prebuilts/abi_dumps", root_build_dir), 705f9996aaSopenharmony_ci ] 715f9996aaSopenharmony_ci } 725f9996aaSopenharmony_ci} 735f9996aaSopenharmony_ci 745f9996aaSopenharmony_citemplate("ohos_module_package") { 755f9996aaSopenharmony_ci if (defined(invoker.subsystem_name) && defined(invoker.part_name)) { 765f9996aaSopenharmony_ci subsystem_name = invoker.subsystem_name 775f9996aaSopenharmony_ci part_name = invoker.part_name 785f9996aaSopenharmony_ci } else if (defined(invoker.part_name)) { 795f9996aaSopenharmony_ci part_name = invoker.part_name 805f9996aaSopenharmony_ci _part_subsystem_info_file = 815f9996aaSopenharmony_ci "$root_build_dir/build_configs/parts_info/part_subsystem.json" 825f9996aaSopenharmony_ci _arguments = [ 835f9996aaSopenharmony_ci "--part-name", 845f9996aaSopenharmony_ci part_name, 855f9996aaSopenharmony_ci "--part-subsystem-info-file", 865f9996aaSopenharmony_ci rebase_path(_part_subsystem_info_file, root_build_dir), 875f9996aaSopenharmony_ci ] 885f9996aaSopenharmony_ci get_subsystem_script = "//build/templates/common/get_subsystem_name.py" 895f9996aaSopenharmony_ci subsystem_name = 905f9996aaSopenharmony_ci exec_script(get_subsystem_script, _arguments, "trim string") 915f9996aaSopenharmony_ci } else if (defined(invoker.subsystem_name)) { 925f9996aaSopenharmony_ci subsystem_name = invoker.subsystem_name 935f9996aaSopenharmony_ci part_name = subsystem_name 945f9996aaSopenharmony_ci } else { 955f9996aaSopenharmony_ci subsystem_name = "build" 965f9996aaSopenharmony_ci part_name = "build_framework" 975f9996aaSopenharmony_ci } 985f9996aaSopenharmony_ci 995f9996aaSopenharmony_ci if (defined(invoker.zip_private_key)) { 1005f9996aaSopenharmony_ci zip_private_key = invoker.zip_private_key 1015f9996aaSopenharmony_ci } 1025f9996aaSopenharmony_ci 1035f9996aaSopenharmony_ci if (defined(invoker.sign_cert)) { 1045f9996aaSopenharmony_ci sign_cert = invoker.sign_cert 1055f9996aaSopenharmony_ci } 1065f9996aaSopenharmony_ci 1075f9996aaSopenharmony_ci if (defined(invoker.img_private_key)) { 1085f9996aaSopenharmony_ci img_private_key = invoker.img_private_key 1095f9996aaSopenharmony_ci } else { 1105f9996aaSopenharmony_ci img_private_key = "//base/startup/hvb/tools/vb_pub_key/test_priv.pem" 1115f9996aaSopenharmony_ci } 1125f9996aaSopenharmony_ci 1135f9996aaSopenharmony_ci if (defined(invoker.img_public_key)) { 1145f9996aaSopenharmony_ci img_public_key = invoker.img_public_key 1155f9996aaSopenharmony_ci img_output_dir = "sign_img_output" 1165f9996aaSopenharmony_ci } else { 1175f9996aaSopenharmony_ci img_public_key = "//base/startup/hvb/tools/vb_pub_key/test_pub.pem" 1185f9996aaSopenharmony_ci img_output_dir = "img_output" 1195f9996aaSopenharmony_ci } 1205f9996aaSopenharmony_ci 1215f9996aaSopenharmony_ci if (defined(invoker.libraries) && invoker.libraries != []) { 1225f9996aaSopenharmony_ci libraries = invoker.libraries 1235f9996aaSopenharmony_ci check_abi_and_copy_deps("${target_name}_libraries") { 1245f9996aaSopenharmony_ci sources = libraries 1255f9996aaSopenharmony_ci type = "shared_library" 1265f9996aaSopenharmony_ci } 1275f9996aaSopenharmony_ci } 1285f9996aaSopenharmony_ci 1295f9996aaSopenharmony_ci if (defined(invoker.prebuilts) && invoker.prebuilts != []) { 1305f9996aaSopenharmony_ci prebuilts = invoker.prebuilts 1315f9996aaSopenharmony_ci check_abi_and_copy_deps("${target_name}_prebuilts") { 1325f9996aaSopenharmony_ci sources = prebuilts 1335f9996aaSopenharmony_ci type = "prebuilt" 1345f9996aaSopenharmony_ci } 1355f9996aaSopenharmony_ci } 1365f9996aaSopenharmony_ci 1375f9996aaSopenharmony_ci if (defined(invoker.binaries) && invoker.binaries != []) { 1385f9996aaSopenharmony_ci binaries = invoker.binaries 1395f9996aaSopenharmony_ci check_abi_and_copy_deps("${target_name}_binaries") { 1405f9996aaSopenharmony_ci sources = binaries 1415f9996aaSopenharmony_ci type = "executable" 1425f9996aaSopenharmony_ci } 1435f9996aaSopenharmony_ci } 1445f9996aaSopenharmony_ci 1455f9996aaSopenharmony_ci if (defined(invoker.etc) && invoker.etc != []) { 1465f9996aaSopenharmony_ci etc = invoker.etc 1475f9996aaSopenharmony_ci check_abi_and_copy_deps("${target_name}_etc") { 1485f9996aaSopenharmony_ci sources = etc 1495f9996aaSopenharmony_ci type = "etc" 1505f9996aaSopenharmony_ci } 1515f9996aaSopenharmony_ci } 1525f9996aaSopenharmony_ci 1535f9996aaSopenharmony_ci if (defined(invoker.empty)) { 1545f9996aaSopenharmony_ci empty = invoker.empty 1555f9996aaSopenharmony_ci } else { 1565f9996aaSopenharmony_ci empty = false 1575f9996aaSopenharmony_ci } 1585f9996aaSopenharmony_ci 1595f9996aaSopenharmony_ci output_dir = "${target_out_dir}/" 1605f9996aaSopenharmony_ci package_name = target_name 1615f9996aaSopenharmony_ci 1625f9996aaSopenharmony_ci if (defined(invoker.module_config)) { 1635f9996aaSopenharmony_ci module_config = invoker.module_config 1645f9996aaSopenharmony_ci } 1655f9996aaSopenharmony_ci 1665f9996aaSopenharmony_ci assert(subsystem_name != "") 1675f9996aaSopenharmony_ci assert(part_name != "") 1685f9996aaSopenharmony_ci assert(zip_private_key != "") 1695f9996aaSopenharmony_ci assert(sign_cert != "") 1705f9996aaSopenharmony_ci assert(img_private_key != "") 1715f9996aaSopenharmony_ci assert(img_public_key != "") 1725f9996aaSopenharmony_ci assert(module_config != "") 1735f9996aaSopenharmony_ci 1745f9996aaSopenharmony_ci ohos_copy("module_config_inner") { 1755f9996aaSopenharmony_ci sources = [ "$module_config" ] 1765f9996aaSopenharmony_ci outputs = [ "$output_dir/module_package/img_input/{{source_file_part}}" ] 1775f9996aaSopenharmony_ci } 1785f9996aaSopenharmony_ci 1795f9996aaSopenharmony_ci action("build_image") { 1805f9996aaSopenharmony_ci script = "//base/update/packaging_tools/build_module_img.py" 1815f9996aaSopenharmony_ci 1825f9996aaSopenharmony_ci deps = [ 1835f9996aaSopenharmony_ci ":module_config_inner", 1845f9996aaSopenharmony_ci "//third_party/e2fsprogs:e2fsprogs_host_toolchain", 1855f9996aaSopenharmony_ci "//third_party/e2fsprogs:resize2fs($host_toolchain)", 1865f9996aaSopenharmony_ci ] 1875f9996aaSopenharmony_ci if (defined(invoker.etc) && etc != []) { 1885f9996aaSopenharmony_ci deps += [ ":${package_name}_etc" ] 1895f9996aaSopenharmony_ci } 1905f9996aaSopenharmony_ci if (defined(invoker.libraries) && libraries != []) { 1915f9996aaSopenharmony_ci deps += [ ":${package_name}_libraries" ] 1925f9996aaSopenharmony_ci } 1935f9996aaSopenharmony_ci if (defined(invoker.prebuilts) && prebuilts != []) { 1945f9996aaSopenharmony_ci deps += [ ":${package_name}_prebuilts" ] 1955f9996aaSopenharmony_ci } 1965f9996aaSopenharmony_ci if (defined(invoker.binaries) && binaries != []) { 1975f9996aaSopenharmony_ci deps += [ ":${package_name}_binaries" ] 1985f9996aaSopenharmony_ci } 1995f9996aaSopenharmony_ci 2005f9996aaSopenharmony_ci dac_config = "//build/ohos/images/mkimage/dac.txt" 2015f9996aaSopenharmony_ci file_context = 2025f9996aaSopenharmony_ci "$root_build_dir/obj/base/security/selinux_adapter/file_contexts.bin" 2035f9996aaSopenharmony_ci image_input_path = "$output_dir/module_package/img_input" 2045f9996aaSopenharmony_ci output_image_file = "$output_dir/module_package/img_output/module.img" 2055f9996aaSopenharmony_ci output_sign_image_file = 2065f9996aaSopenharmony_ci "$output_dir/module_package/sign_img_output/module.img" 2075f9996aaSopenharmony_ci build_image_tools_path = [ 2085f9996aaSopenharmony_ci "//${root_build_dir}/clang_x64/thirdparty/e2fsprogs", 2095f9996aaSopenharmony_ci "//${root_build_dir}/clang_x64/thirdparty/f2fs-tools", 2105f9996aaSopenharmony_ci "//third_party/e2fsprogs/prebuilt/host/bin", 2115f9996aaSopenharmony_ci "//build/ohos/images/mkimage", 2125f9996aaSopenharmony_ci "//base/startup/hvb/tools", 2135f9996aaSopenharmony_ci ] 2145f9996aaSopenharmony_ci 2155f9996aaSopenharmony_ci sources = [ dac_config ] 2165f9996aaSopenharmony_ci outputs = [ 2175f9996aaSopenharmony_ci output_image_file, 2185f9996aaSopenharmony_ci output_sign_image_file, 2195f9996aaSopenharmony_ci ] 2205f9996aaSopenharmony_ci args = [ 2215f9996aaSopenharmony_ci "--image-name", 2225f9996aaSopenharmony_ci "module", 2235f9996aaSopenharmony_ci "--input-path", 2245f9996aaSopenharmony_ci rebase_path(image_input_path, root_build_dir), 2255f9996aaSopenharmony_ci "--fs-type", 2265f9996aaSopenharmony_ci "ext4", 2275f9996aaSopenharmony_ci "--dac-config", 2285f9996aaSopenharmony_ci rebase_path(dac_config, root_build_dir), 2295f9996aaSopenharmony_ci "--file-context", 2305f9996aaSopenharmony_ci rebase_path(file_context, root_build_dir), 2315f9996aaSopenharmony_ci "--output-image", 2325f9996aaSopenharmony_ci rebase_path(output_image_file, root_build_dir), 2335f9996aaSopenharmony_ci "--target-cpu", 2345f9996aaSopenharmony_ci target_cpu, 2355f9996aaSopenharmony_ci "--build-image-tools-path", 2365f9996aaSopenharmony_ci ] 2375f9996aaSopenharmony_ci args += rebase_path(build_image_tools_path, root_build_dir) 2385f9996aaSopenharmony_ci if (defined(invoker.img_public_key)) { 2395f9996aaSopenharmony_ci args += [ 2405f9996aaSopenharmony_ci "--pubkey", 2415f9996aaSopenharmony_ci rebase_path(img_public_key, root_build_dir), 2425f9996aaSopenharmony_ci "--privkey", 2435f9996aaSopenharmony_ci rebase_path(img_private_key, root_build_dir), 2445f9996aaSopenharmony_ci "--output-sign-image-path", 2455f9996aaSopenharmony_ci rebase_path(output_sign_image_file, root_build_dir), 2465f9996aaSopenharmony_ci ] 2475f9996aaSopenharmony_ci } 2485f9996aaSopenharmony_ci } 2495f9996aaSopenharmony_ci 2505f9996aaSopenharmony_ci ohos_copy("module_config_outer") { 2515f9996aaSopenharmony_ci sources = [ "$module_config" ] 2525f9996aaSopenharmony_ci outputs = 2535f9996aaSopenharmony_ci [ "$output_dir/module_package/$img_output_dir/{{source_file_part}}" ] 2545f9996aaSopenharmony_ci } 2555f9996aaSopenharmony_ci 2565f9996aaSopenharmony_ci ohos_copy("pub_key_outer") { 2575f9996aaSopenharmony_ci sources = [ "$img_public_key" ] 2585f9996aaSopenharmony_ci outputs = [ "$output_dir/module_package/sign_img_output/pub_key.pem" ] 2595f9996aaSopenharmony_ci } 2605f9996aaSopenharmony_ci 2615f9996aaSopenharmony_ci action(target_name) { 2625f9996aaSopenharmony_ci script = "//base/update/packaging_tools/build_module_package.py" 2635f9996aaSopenharmony_ci deps = [ 2645f9996aaSopenharmony_ci ":module_config_outer", 2655f9996aaSopenharmony_ci "//base/update/sys_installer/tools/zipalign:zipalign", 2665f9996aaSopenharmony_ci ] 2675f9996aaSopenharmony_ci if (defined(invoker.img_public_key)) { 2685f9996aaSopenharmony_ci deps += [ ":pub_key_outer" ] 2695f9996aaSopenharmony_ci } 2705f9996aaSopenharmony_ci if (!empty) { 2715f9996aaSopenharmony_ci deps += [ ":build_image" ] 2725f9996aaSopenharmony_ci } 2735f9996aaSopenharmony_ci 2745f9996aaSopenharmony_ci source_dir = "$output_dir/module_package/$img_output_dir" 2755f9996aaSopenharmony_ci out_dir = "$output_dir/module_package/zip_output" 2765f9996aaSopenharmony_ci 2775f9996aaSopenharmony_ci sources = get_target_outputs(":module_config_outer") 2785f9996aaSopenharmony_ci outputs = [ "$out_dir/$package_name.zip" ] 2795f9996aaSopenharmony_ci 2805f9996aaSopenharmony_ci args = [ 2815f9996aaSopenharmony_ci "-pn", 2825f9996aaSopenharmony_ci package_name, 2835f9996aaSopenharmony_ci "-pk", 2845f9996aaSopenharmony_ci rebase_path(zip_private_key, root_build_dir), 2855f9996aaSopenharmony_ci "-sc", 2865f9996aaSopenharmony_ci rebase_path(sign_cert, root_build_dir), 2875f9996aaSopenharmony_ci rebase_path(source_dir, root_build_dir), 2885f9996aaSopenharmony_ci rebase_path(out_dir, root_build_dir), 2895f9996aaSopenharmony_ci ] 2905f9996aaSopenharmony_ci } 2915f9996aaSopenharmony_ci} 2925f9996aaSopenharmony_ci 2935f9996aaSopenharmony_citemplate("ohos_hmp") { 2945f9996aaSopenharmony_ci output_dir = "${root_out_dir}/" 2955f9996aaSopenharmony_ci 2965f9996aaSopenharmony_ci _deps = [] 2975f9996aaSopenharmony_ci module_packages = [] 2985f9996aaSopenharmony_ci if (defined(invoker.module_packages)) { 2995f9996aaSopenharmony_ci module_packages += invoker.module_packages 3005f9996aaSopenharmony_ci _deps += module_packages 3015f9996aaSopenharmony_ci } 3025f9996aaSopenharmony_ci 3035f9996aaSopenharmony_ci if (defined(invoker.pack_info)) { 3045f9996aaSopenharmony_ci pack_info = invoker.pack_info 3055f9996aaSopenharmony_ci } 3065f9996aaSopenharmony_ci 3075f9996aaSopenharmony_ci assert(module_packages != "") 3085f9996aaSopenharmony_ci assert(pack_info != "") 3095f9996aaSopenharmony_ci 3105f9996aaSopenharmony_ci package_name = target_name 3115f9996aaSopenharmony_ci 3125f9996aaSopenharmony_ci action("build_hmp") { 3135f9996aaSopenharmony_ci script = "//base/update/packaging_tools/build_hmp.py" 3145f9996aaSopenharmony_ci deps = _deps 3155f9996aaSopenharmony_ci 3165f9996aaSopenharmony_ci out_dir = "$output_dir/hmp" 3175f9996aaSopenharmony_ci 3185f9996aaSopenharmony_ci sources = [] 3195f9996aaSopenharmony_ci foreach(module_package, module_packages) { 3205f9996aaSopenharmony_ci module_name = get_label_info(module_package, "name") 3215f9996aaSopenharmony_ci module_out_dir = get_label_info(module_package, "target_out_dir") 3225f9996aaSopenharmony_ci sources += 3235f9996aaSopenharmony_ci [ "$module_out_dir/module_package/zip_output/$module_name.zip" ] 3245f9996aaSopenharmony_ci } 3255f9996aaSopenharmony_ci 3265f9996aaSopenharmony_ci outputs = [ "$out_dir/$package_name.zip" ] 3275f9996aaSopenharmony_ci 3285f9996aaSopenharmony_ci args = [ 3295f9996aaSopenharmony_ci "-pn", 3305f9996aaSopenharmony_ci package_name, 3315f9996aaSopenharmony_ci "-op", 3325f9996aaSopenharmony_ci rebase_path(out_dir, root_build_dir), 3335f9996aaSopenharmony_ci "-pi", 3345f9996aaSopenharmony_ci rebase_path(pack_info, root_build_dir), 3355f9996aaSopenharmony_ci "-mf", 3365f9996aaSopenharmony_ci ] 3375f9996aaSopenharmony_ci foreach(source, sources) { 3385f9996aaSopenharmony_ci source_path = rebase_path(source, root_build_dir) 3395f9996aaSopenharmony_ci args += [ source_path ] 3405f9996aaSopenharmony_ci } 3415f9996aaSopenharmony_ci } 3425f9996aaSopenharmony_ci 3435f9996aaSopenharmony_ci group(target_name) { 3445f9996aaSopenharmony_ci deps = [ ":build_hmp" ] 3455f9996aaSopenharmony_ci } 3465f9996aaSopenharmony_ci} 347