15f9996aaSopenharmony_ci#!/usr/bin/env python 25f9996aaSopenharmony_ci# -*- coding: utf-8 -*- 35f9996aaSopenharmony_ci# Copyright (c) 2024 Huawei Device Co., Ltd. 45f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 55f9996aaSopenharmony_ci# you may not use this file except in compliance with the License. 65f9996aaSopenharmony_ci# You may obtain a copy of the License at 75f9996aaSopenharmony_ci# 85f9996aaSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 95f9996aaSopenharmony_ci# 105f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 115f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 125f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135f9996aaSopenharmony_ci# See the License for the specific language governing permissions and 145f9996aaSopenharmony_ci# limitations under the License. 155f9996aaSopenharmony_ci 165f9996aaSopenharmony_citemplate("hc_gen") { 175f9996aaSopenharmony_ci assert(defined(invoker.sources), "sources are must") 185f9996aaSopenharmony_ci if (defined(invoker.outputs)) { 195f9996aaSopenharmony_ci foreach(o, invoker.outputs) { 205f9996aaSopenharmony_ci if (o == string_replace(o, "{{", "")) { 215f9996aaSopenharmony_ci specified_output_name = true 225f9996aaSopenharmony_ci } 235f9996aaSopenharmony_ci } 245f9996aaSopenharmony_ci } 255f9996aaSopenharmony_ci if (defined(specified_output_name) && specified_output_name) { 265f9996aaSopenharmony_ci target_type = "action" 275f9996aaSopenharmony_ci } else { 285f9996aaSopenharmony_ci target_type = "action_foreach" 295f9996aaSopenharmony_ci } 305f9996aaSopenharmony_ci 315f9996aaSopenharmony_ci # get all hcs file by sources 325f9996aaSopenharmony_ci hcs_inputs = exec_script("//build/config/components/hc_gen/hcs_build_info.py", 335f9996aaSopenharmony_ci rebase_path(invoker.sources), 345f9996aaSopenharmony_ci "list lines") 355f9996aaSopenharmony_ci 365f9996aaSopenharmony_ci target(target_type, target_name) { 375f9996aaSopenharmony_ci script = "/usr/bin/env" 385f9996aaSopenharmony_ci if (defined(ohos_lite)) { 395f9996aaSopenharmony_ci script = "//build/lite/run_shell_cmd.py" 405f9996aaSopenharmony_ci } 415f9996aaSopenharmony_ci inputs = hcs_inputs 425f9996aaSopenharmony_ci sources = invoker.sources 435f9996aaSopenharmony_ci if (defined(invoker.hc_gen_hex) && invoker.hc_gen_hex) { 445f9996aaSopenharmony_ci hc_flags = [ 455f9996aaSopenharmony_ci "-b", 465f9996aaSopenharmony_ci "-i", 475f9996aaSopenharmony_ci "-a", 485f9996aaSopenharmony_ci ] 495f9996aaSopenharmony_ci output_suffix = "_hex.c" 505f9996aaSopenharmony_ci output_suffix2 = ".hcb" 515f9996aaSopenharmony_ci } else if (defined(invoker.hc_gen_c) && invoker.hc_gen_c) { 525f9996aaSopenharmony_ci hc_flags = [ "-t" ] 535f9996aaSopenharmony_ci output_suffix = ".c" 545f9996aaSopenharmony_ci output_suffix2 = ".h" 555f9996aaSopenharmony_ci } else if (defined(invoker.hc_gen_macro) && invoker.hc_gen_macro) { 565f9996aaSopenharmony_ci hc_flags = [ "-m" ] 575f9996aaSopenharmony_ci output_suffix = ".h" 585f9996aaSopenharmony_ci } else if (defined(invoker.hc_gen_start_cfg) && invoker.hc_gen_start_cfg) { 595f9996aaSopenharmony_ci hc_flags = [ "-s" ] 605f9996aaSopenharmony_ci output_suffix = ".cfg" 615f9996aaSopenharmony_ci } else { 625f9996aaSopenharmony_ci hc_flags = [] 635f9996aaSopenharmony_ci output_suffix = ".hcb" 645f9996aaSopenharmony_ci } 655f9996aaSopenharmony_ci 665f9996aaSopenharmony_ci if (defined(invoker.outputs)) { 675f9996aaSopenharmony_ci outputs = invoker.outputs 685f9996aaSopenharmony_ci } else { 695f9996aaSopenharmony_ci outputs = [ "$target_gen_dir/{{source_name_part}}$output_suffix" ] 705f9996aaSopenharmony_ci } 715f9996aaSopenharmony_ci if (defined(output_suffix2)) { 725f9996aaSopenharmony_ci outputs += [ string_replace(outputs[0], output_suffix, output_suffix2) ] 735f9996aaSopenharmony_ci } 745f9996aaSopenharmony_ci if (target_type == "action") { 755f9996aaSopenharmony_ci src = rebase_path(sources[0], root_build_dir) 765f9996aaSopenharmony_ci } else { 775f9996aaSopenharmony_ci src = "{{source}}" 785f9996aaSopenharmony_ci } 795f9996aaSopenharmony_ci 805f9996aaSopenharmony_ci args = [ rebase_path("//prebuilts/hc_gen/hc-gen") ] 815f9996aaSopenharmony_ci args += hc_flags 825f9996aaSopenharmony_ci args += [ 835f9996aaSopenharmony_ci "-o", 845f9996aaSopenharmony_ci rebase_path(string_replace(outputs[0], output_suffix, "")), 855f9996aaSopenharmony_ci src, 865f9996aaSopenharmony_ci ] 875f9996aaSopenharmony_ci } 885f9996aaSopenharmony_ci} 895f9996aaSopenharmony_ci 905f9996aaSopenharmony_citemplate("hc_gen_c") { 915f9996aaSopenharmony_ci hc_gen_c = true 925f9996aaSopenharmony_ci hc_gen(target_name) { 935f9996aaSopenharmony_ci forward_variables_from(invoker, "*") 945f9996aaSopenharmony_ci } 955f9996aaSopenharmony_ci} 965f9996aaSopenharmony_ci 975f9996aaSopenharmony_citemplate("hc_gen_hex") { 985f9996aaSopenharmony_ci hc_gen_hex = true 995f9996aaSopenharmony_ci hc_gen(target_name) { 1005f9996aaSopenharmony_ci forward_variables_from(invoker, "*") 1015f9996aaSopenharmony_ci } 1025f9996aaSopenharmony_ci} 1035f9996aaSopenharmony_ci 1045f9996aaSopenharmony_citemplate("hc_gen_macro") { 1055f9996aaSopenharmony_ci hc_gen_macro = true 1065f9996aaSopenharmony_ci hc_gen(target_name) { 1075f9996aaSopenharmony_ci forward_variables_from(invoker, "*") 1085f9996aaSopenharmony_ci } 1095f9996aaSopenharmony_ci} 1105f9996aaSopenharmony_ci 1115f9996aaSopenharmony_citemplate("hc_gen_start_cfg") { 1125f9996aaSopenharmony_ci hc_gen_start_cfg = true 1135f9996aaSopenharmony_ci hc_gen(target_name) { 1145f9996aaSopenharmony_ci forward_variables_from(invoker, "*") 1155f9996aaSopenharmony_ci } 1165f9996aaSopenharmony_ci} 117