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