# Copyright (c) 2021 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import("//build/config/python.gni") import("//build/ohos/build_var.gni") import("//build/ohos_var.gni") # sa info config file template # support for configuring multiple files. template("ohos_sa_profile") { assert(defined(invoker.sources)) assert(defined(invoker.subsystem_name) || defined(invoker.part_name)) if (defined(invoker.part_name)) { part_name = invoker.part_name } else { part_name = invoker.subsystem_name } inputs_output_dir = "${root_out_dir}/sa_profile/inputs" copy("${target_name}_copy") { deps = [] if (defined(invoker.deps)) { deps += invoker.deps } sources = invoker.sources outputs = [ "${target_out_dir}/profiles/{{source_file_part}}" ] } action_with_pydeps(target_name) { deps = [ ":${target_name}_copy" ] _output_dir = "${inputs_output_dir}/${part_name}" _output_info_file = "${_output_dir}/${target_name}_info.json" sources = get_target_outputs(":${target_name}_copy") outputs = [ _output_info_file ] script = "//build/ohos/sa_profile/sa_profile.py" args = [ "--sa-input-files" ] args += rebase_path(sources, root_build_dir) args += [ "--target-label", get_label_info(":${target_name}", "label_with_toolchain"), "--output-module-info-file", rebase_path(_output_info_file, root_build_dir), "--part-name", part_name, ] sa_install_info = { label = get_label_info(":$target_name", "label_with_toolchain") install_info_file = rebase_path(_output_info_file, root_build_dir) part_name = part_name toolchain = current_toolchain type = "sa" } metadata = { sa_install_info = [ sa_install_info ] } } sources_output = [] foreach(source, invoker.sources) { sources_output += [ rebase_path("${target_out_dir}/profiles/${source}", root_build_dir) ] } module_label = get_label_info(":${target_name}", "label_with_toolchain") target_deps_data = { label = module_label type = "etc" prebuilt = true output_path = sources_output } write_file("${target_out_dir}/${target_name}_deps_data.json", target_deps_data, "json") } # merge sa profile insall files and generate sa profile install info template("ohos_sa_install_info") { assert(defined(invoker.system_install_info_file)) assert(defined(invoker.sa_install_info_file)) assert(defined(invoker.current_platform)) assert(defined(invoker.current_platform_dir)) forward_variables_from(invoker, [ "current_platform", "current_platform_dir", "system_install_info_file", "sa_install_info_file", "merged_sa_profile_dir", "merged_sa_profile_zipfile", ]) _deps = [] if (defined(invoker.deps)) { _deps += invoker.deps } _sa_info_out_dir = "${current_platform_dir}/sa_profile" binary_output_dir = "${_sa_info_out_dir}/binaries" sa_profile_install_dir = "profile" archive_info_file_name = "sa_modules_info.json" sa_profile_archive_dir = "//${dist_dir_name}/sa_profiles" sa_profile_archive_info_file = "${sa_profile_archive_dir}/${archive_info_file_name}" src_sa_install_info_file = "${_sa_info_out_dir}/src_sa_install_info.json" action_with_pydeps("sa_profile_src_${current_platform}") { deps = [ "//build/ohos/sa_profile:src_sa_infos_process" ] deps += _deps script = "//build/ohos/sa_profile/sa_profile_source.py" src_sa_infos_file = "${product_output_dir}/src_sa_infos.json" sources = [ src_sa_infos_file, system_install_info_file, ] outputs = [ src_sa_install_info_file ] args = [ "--src-sa-info-file", rebase_path(src_sa_infos_file, root_build_dir), "--system-install-info-file", rebase_path(system_install_info_file, root_build_dir), "--src-sa-install-info-file", rebase_path(src_sa_install_info_file, root_build_dir), ] } _sa_profile_binary_target = "sa_profile_binary_${current_platform}" _binary_sa_output = "${_sa_info_out_dir}/${_sa_profile_binary_target}.zip" action_with_pydeps(_sa_profile_binary_target) { deps = _deps deps += [ ":sa_profile_src_${current_platform}" ] script = "//build/ohos/sa_profile/sa_profile_binary.py" inputs = [ system_install_info_file ] outputs = [ _binary_sa_output ] depfile = "$target_gen_dir/$target_name.d" args = [ "--system-install-info-file", rebase_path(system_install_info_file, root_build_dir), "--sa-output-dir", rebase_path(binary_output_dir, root_build_dir), "--sa-output-zipfile", rebase_path(_binary_sa_output, root_build_dir), "--depfile", rebase_path(depfile, root_build_dir), ] # Check if sa archive info file exists _file_exists_script = "//build/ohos/file_exists.py" _process_args = [ "--filename", rebase_path(sa_profile_archive_info_file, root_build_dir), ] _result = exec_script(_file_exists_script, _process_args, "string") if (_result == "True") { inputs += [ sa_profile_archive_info_file ] args += [ "--sa-profile-archive-info-file", rebase_path(sa_profile_archive_info_file, root_build_dir), ] } } action_with_pydeps(target_name) { deps = [ ":sa_profile_binary_${current_platform}", ":sa_profile_src_${current_platform}", ] script = "//build/ohos/sa_profile/sa_profile_merge.py" sources = [ _binary_sa_output, src_sa_install_info_file, ] outputs = [ sa_install_info_file, merged_sa_profile_zipfile, ] depfile = "$target_gen_dir/$target_name.d" args = [ "--src-sa-install-info-file", rebase_path(src_sa_install_info_file, root_build_dir), "--no-src-sa-install-info-file", rebase_path(_binary_sa_output, root_build_dir), "--sa-output-dir", rebase_path(merged_sa_profile_dir, root_build_dir), "--merged-sa-profile", rebase_path(merged_sa_profile_zipfile, root_build_dir), "--sa-install-info-file", rebase_path(sa_install_info_file, root_build_dir), "--sa-info-install-dest-dir", "${system_base_dir}/${sa_profile_install_dir}", "--target-cpu", target_cpu, "--depfile", rebase_path(depfile, root_build_dir), ] } } template("ohos_sa_info_archive") { archive_info_file_name = "sa_modules_info.json" _deps = [ "//build/ohos/sa_profile:src_sa_infos_process" ] sa_profile_src_infos_file = "${product_output_dir}/src_sa_infos.json" action_with_pydeps(target_name) { deps = _deps if (defined(invoker.deps)) { deps += invoker.deps } inputs = [ sa_profile_src_infos_file ] depfile = "$target_gen_dir/$target_name.d" sa_archive_output_dir = "${dist_build_out_dir}/sa_profiles" sa_archive_info_file = "${sa_archive_output_dir}/${archive_info_file_name}" outputs = [ sa_archive_info_file, sa_archive_output_dir, ] script = "//build/ohos/sa_profile/sa_profile_archive.py" args = [ "--src-sa-install-info-file", rebase_path(sa_profile_src_infos_file, root_build_dir), "--sa-archive-output-dir", rebase_path(sa_archive_output_dir, root_build_dir), "--sa-archive-info-file", rebase_path(sa_archive_info_file, root_build_dir), "--depfile", rebase_path(depfile, root_build_dir), ] } }