15f9996aaSopenharmony_ci# Copyright (c) 2021 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/kits/kits_check.gni") 165f9996aaSopenharmony_ciimport("//build/ohos_var.gni") 175f9996aaSopenharmony_ci 185f9996aaSopenharmony_ci# Defines subsystem_sdk 195f9996aaSopenharmony_ci# 205f9996aaSopenharmony_ci# example: 215f9996aaSopenharmony_ci# 225f9996aaSopenharmony_ci# subsystem_sdk("examples_sdk") { 235f9996aaSopenharmony_ci# sdk_libs = [ 245f9996aaSopenharmony_ci# { 255f9996aaSopenharmony_ci# type = "so" 265f9996aaSopenharmony_ci# name = "interfaces/innerkits/{module_name}:{module_name}" 275f9996aaSopenharmony_ci# header = { 285f9996aaSopenharmony_ci# header_files = [ 295f9996aaSopenharmony_ci# "calculator.h", 305f9996aaSopenharmony_ci# "abc/a.h", 315f9996aaSopenharmony_ci# "abc/xyz/b.h" 325f9996aaSopenharmony_ci# ] 335f9996aaSopenharmony_ci# header_base = "interfaces/innerkits/{module_name}/include/" 345f9996aaSopenharmony_ci# } 355f9996aaSopenharmony_ci# }, 365f9996aaSopenharmony_ci# { 375f9996aaSopenharmony_ci# type = "jar" 385f9996aaSopenharmony_ci# name = "interfaces/innerkits/{module_name}:{module_name}" 395f9996aaSopenharmony_ci# header = { 405f9996aaSopenharmony_ci# header_files = [] 415f9996aaSopenharmony_ci# } 425f9996aaSopenharmony_ci# }, 435f9996aaSopenharmony_ci# ] 445f9996aaSopenharmony_ci# subsystem_name = "subsystem_examples" 455f9996aaSopenharmony_ci# } 465f9996aaSopenharmony_ci 475f9996aaSopenharmony_cideclare_args() { 485f9996aaSopenharmony_ci check_innerkits_path = "" 495f9996aaSopenharmony_ci} 505f9996aaSopenharmony_ci 515f9996aaSopenharmony_citemplate("_ohos_subsystem_sdk") { 525f9996aaSopenharmony_ci assert(defined(invoker.sdk_libs), "sdk_libs is required.") 535f9996aaSopenharmony_ci assert(invoker.variant != "") 545f9996aaSopenharmony_ci assert(invoker.origin_name != "") 555f9996aaSopenharmony_ci 565f9996aaSopenharmony_ci part_name = "build_framework" 575f9996aaSopenharmony_ci if (defined(invoker.part_name)) { 585f9996aaSopenharmony_ci part_name = invoker.part_name 595f9996aaSopenharmony_ci } 605f9996aaSopenharmony_ci if (defined(invoker.subsystem_name)) { 615f9996aaSopenharmony_ci subsystem_name = invoker.subsystem_name 625f9996aaSopenharmony_ci } else { 635f9996aaSopenharmony_ci subsystem_name = part_name 645f9996aaSopenharmony_ci } 655f9996aaSopenharmony_ci 665f9996aaSopenharmony_ci sdk_manifest = [] 675f9996aaSopenharmony_ci _deps = [] 685f9996aaSopenharmony_ci _libs_deps = [] 695f9996aaSopenharmony_ci if (invoker.sdk_libs != [] && check_innerkits_path != "") { 705f9996aaSopenharmony_ci allow_list_info = read_file(rebase_path(check_innerkits_path), "json") 715f9996aaSopenharmony_ci } 725f9996aaSopenharmony_ci foreach(sdk_lib, invoker.sdk_libs) { 735f9996aaSopenharmony_ci no_toolchain_deps_label = get_label_info(sdk_lib.name, "label_no_toolchain") 745f9996aaSopenharmony_ci if (check_innerkits_path == "" || 755f9996aaSopenharmony_ci filter_include(allow_list_info.allow_list_name, 765f9996aaSopenharmony_ci [ no_toolchain_deps_label ]) != []) { 775f9996aaSopenharmony_ci lib_label = get_label_info(sdk_lib.name, "label_with_toolchain") 785f9996aaSopenharmony_ci _libs_deps += [ lib_label ] 795f9996aaSopenharmony_ci 805f9996aaSopenharmony_ci lib_type = "so" 815f9996aaSopenharmony_ci if (defined(sdk_lib.type)) { 825f9996aaSopenharmony_ci lib_type = sdk_lib.type 835f9996aaSopenharmony_ci } 845f9996aaSopenharmony_ci 855f9996aaSopenharmony_ci module_out_dir = get_label_info(lib_label, "target_out_dir") 865f9996aaSopenharmony_ci module_name = get_label_info(lib_label, "name") 875f9996aaSopenharmony_ci module_info_file = "${module_out_dir}/${module_name}_module_info.json" 885f9996aaSopenharmony_ci 895f9996aaSopenharmony_ci lib_header_files = [] 905f9996aaSopenharmony_ci lib_header_base = "interfaces/innerkits/${module_name}/include/" 915f9996aaSopenharmony_ci 925f9996aaSopenharmony_ci if (defined(sdk_lib.headers)) { 935f9996aaSopenharmony_ci if (defined(sdk_lib.header_base)) { 945f9996aaSopenharmony_ci lib_header_base = sdk_lib.header_base 955f9996aaSopenharmony_ci } 965f9996aaSopenharmony_ci foreach(file, sdk_lib.headers) { 975f9996aaSopenharmony_ci lib_header_files += [ string_replace(file, lib_header_base, "") ] 985f9996aaSopenharmony_ci } 995f9996aaSopenharmony_ci } else if (defined(sdk_lib.header)) { 1005f9996aaSopenharmony_ci header = { 1015f9996aaSopenharmony_ci } 1025f9996aaSopenharmony_ci header = sdk_lib.header 1035f9996aaSopenharmony_ci if (defined(header.header_base)) { 1045f9996aaSopenharmony_ci lib_header_base = header.header_base 1055f9996aaSopenharmony_ci } 1065f9996aaSopenharmony_ci lib_header_files = header.header_files 1075f9996aaSopenharmony_ci } 1085f9996aaSopenharmony_ci 1095f9996aaSopenharmony_ci lib_prebuilt_enable = false 1105f9996aaSopenharmony_ci lib_prebuilt_source = "" 1115f9996aaSopenharmony_ci if (defined(sdk_lib.prebuilt_source)) { 1125f9996aaSopenharmony_ci lib_prebuilt_enable = true 1135f9996aaSopenharmony_ci lib_prebuilt_source = sdk_lib.prebuilt_source 1145f9996aaSopenharmony_ci } 1155f9996aaSopenharmony_ci 1165f9996aaSopenharmony_ci sdk_manifest += [ 1175f9996aaSopenharmony_ci { 1185f9996aaSopenharmony_ci label = lib_label 1195f9996aaSopenharmony_ci name = module_name 1205f9996aaSopenharmony_ci type = lib_type 1215f9996aaSopenharmony_ci header_files = lib_header_files 1225f9996aaSopenharmony_ci header_base = rebase_path(lib_header_base, "$root_build_dir") 1235f9996aaSopenharmony_ci source_info = rebase_path(module_info_file, "$root_build_dir") 1245f9996aaSopenharmony_ci prebuilt_enable = lib_prebuilt_enable 1255f9996aaSopenharmony_ci prebuilt_source = lib_prebuilt_source 1265f9996aaSopenharmony_ci subsystem_name = subsystem_name 1275f9996aaSopenharmony_ci part_name = part_name 1285f9996aaSopenharmony_ci origin_name = invoker.origin_name 1295f9996aaSopenharmony_ci current_toolchain = current_toolchain 1305f9996aaSopenharmony_ci current_toolchain_dir = rebase_path(root_out_dir, root_build_dir) 1315f9996aaSopenharmony_ci }, 1325f9996aaSopenharmony_ci ] 1335f9996aaSopenharmony_ci } 1345f9996aaSopenharmony_ci } 1355f9996aaSopenharmony_ci _deps += _libs_deps 1365f9996aaSopenharmony_ci 1375f9996aaSopenharmony_ci if (_deps != []) { 1385f9996aaSopenharmony_ci not_needed([ "no_toolchain_deps_label" ]) 1395f9996aaSopenharmony_ci 1405f9996aaSopenharmony_ci subsystem_sdk_desc_file = 1415f9996aaSopenharmony_ci "${target_out_dir}/${subsystem_name}_sdk_desc.json" 1425f9996aaSopenharmony_ci write_file(subsystem_sdk_desc_file, sdk_manifest, "json") 1435f9996aaSopenharmony_ci 1445f9996aaSopenharmony_ci if (check_innersdk_interface && !gen_innersdk_interface_signature) { 1455f9996aaSopenharmony_ci kits_check_remove("${part_name}_innerkit_remove_check_so") { 1465f9996aaSopenharmony_ci subsystem_name = part_name 1475f9996aaSopenharmony_ci if (invoker.variant != "phone") { 1485f9996aaSopenharmony_ci subsystem_name = invoker.origin_name 1495f9996aaSopenharmony_ci } 1505f9996aaSopenharmony_ci sign_file_root_dir = "//interface/innersdk/native" 1515f9996aaSopenharmony_ci sdk_libs_name = [] 1525f9996aaSopenharmony_ci foreach(_sdk_lib, sdk_manifest) { 1535f9996aaSopenharmony_ci if (_sdk_lib.type == "so") { 1545f9996aaSopenharmony_ci sdk_libs_name += [ _sdk_lib.name ] 1555f9996aaSopenharmony_ci } 1565f9996aaSopenharmony_ci } 1575f9996aaSopenharmony_ci output_file = "${target_gen_dir}/innerkit_remove_check_so" 1585f9996aaSopenharmony_ci sdk_type = "so" 1595f9996aaSopenharmony_ci } 1605f9996aaSopenharmony_ci _deps += [ ":${part_name}_innerkit_remove_check_so" ] 1615f9996aaSopenharmony_ci } 1625f9996aaSopenharmony_ci 1635f9996aaSopenharmony_ci # gen sdk install modules 1645f9996aaSopenharmony_ci sdk_install_moudles_file = 1655f9996aaSopenharmony_ci "${target_gen_dir}/${subsystem_name}_sdk_install_modules.json" 1665f9996aaSopenharmony_ci generated_file("${subsystem_name}_sdk_info") { 1675f9996aaSopenharmony_ci outputs = [ sdk_install_moudles_file ] 1685f9996aaSopenharmony_ci data_keys = [ "install_modules" ] 1695f9996aaSopenharmony_ci output_conversion = "json" 1705f9996aaSopenharmony_ci deps = _libs_deps 1715f9996aaSopenharmony_ci } 1725f9996aaSopenharmony_ci 1735f9996aaSopenharmony_ci sdk_out_dir = "${root_build_dir}/${innersdk_build_out_dir}/" 1745f9996aaSopenharmony_ci sdk_build_file = "${sdk_out_dir}/${subsystem_name}/BUILD.gn" 1755f9996aaSopenharmony_ci sdk_info_file = "${sdk_out_dir}/${subsystem_name}/sdk_info.json" 1765f9996aaSopenharmony_ci 1775f9996aaSopenharmony_ci action_with_pydeps(target_name) { 1785f9996aaSopenharmony_ci deps = _deps 1795f9996aaSopenharmony_ci deps += [ ":${subsystem_name}_sdk_info" ] 1805f9996aaSopenharmony_ci script = "//build/scripts/gen_sdk_build_file.py" 1815f9996aaSopenharmony_ci sources = [ subsystem_sdk_desc_file ] 1825f9996aaSopenharmony_ci outputs = [ 1835f9996aaSopenharmony_ci sdk_build_file, 1845f9996aaSopenharmony_ci sdk_info_file, 1855f9996aaSopenharmony_ci ] 1865f9996aaSopenharmony_ci args = [ 1875f9996aaSopenharmony_ci "--input-file", 1885f9996aaSopenharmony_ci rebase_path(subsystem_sdk_desc_file, root_build_dir), 1895f9996aaSopenharmony_ci "--sdk-out-dir", 1905f9996aaSopenharmony_ci rebase_path("${sdk_out_dir}/${subsystem_name}", root_build_dir), 1915f9996aaSopenharmony_ci "--output-build-file", 1925f9996aaSopenharmony_ci rebase_path(sdk_build_file, root_build_dir), 1935f9996aaSopenharmony_ci "--sdk-info-file", 1945f9996aaSopenharmony_ci rebase_path(sdk_info_file, root_build_dir), 1955f9996aaSopenharmony_ci ] 1965f9996aaSopenharmony_ci 1975f9996aaSopenharmony_ci if (check_innersdk_interface && !gen_innersdk_interface_signature) { 1985f9996aaSopenharmony_ci innersdk_interface_checkfile_dir = "//interface/innersdk/native" 1995f9996aaSopenharmony_ci args += [ 2005f9996aaSopenharmony_ci "--signature-file-check-dir", 2015f9996aaSopenharmony_ci rebase_path(innersdk_interface_checkfile_dir, root_build_dir), 2025f9996aaSopenharmony_ci ] 2035f9996aaSopenharmony_ci } else if (gen_innersdk_interface_signature) { 2045f9996aaSopenharmony_ci args += [ 2055f9996aaSopenharmony_ci "--generate-sig", 2065f9996aaSopenharmony_ci "--signature-file-gen-dir", 2075f9996aaSopenharmony_ci rebase_path( 2085f9996aaSopenharmony_ci "${root_build_dir}/innersdk_interface/native/${subsystem_name}", 2095f9996aaSopenharmony_ci root_build_dir), 2105f9996aaSopenharmony_ci ] 2115f9996aaSopenharmony_ci } 2125f9996aaSopenharmony_ci } 2135f9996aaSopenharmony_ci } else { 2145f9996aaSopenharmony_ci group(target_name) { 2155f9996aaSopenharmony_ci not_needed(invoker, "*") 2165f9996aaSopenharmony_ci not_needed([ 2175f9996aaSopenharmony_ci "subsystem_name", 2185f9996aaSopenharmony_ci "sdk_manifest", 2195f9996aaSopenharmony_ci ]) 2205f9996aaSopenharmony_ci } 2215f9996aaSopenharmony_ci } 2225f9996aaSopenharmony_ci} 2235f9996aaSopenharmony_ci 2245f9996aaSopenharmony_citemplate("ohos_inner_kits") { 2255f9996aaSopenharmony_ci _ohos_subsystem_sdk(target_name) { 2265f9996aaSopenharmony_ci part_name = invoker.part_name 2275f9996aaSopenharmony_ci sdk_libs = invoker.sdk_libs 2285f9996aaSopenharmony_ci variant = invoker.variant 2295f9996aaSopenharmony_ci origin_name = invoker.origin_name 2305f9996aaSopenharmony_ci } 2315f9996aaSopenharmony_ci} 232