Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0cafcaac authored by Sonny Sasaka's avatar Sonny Sasaka Committed by Abhishek Pandit-Subedi
Browse files

Fix packetgen outputs

This changes action_foreach() to action() to be able to control the
outputs field correctly.

Tag: #floss
Bug: 176846220
Test: atest --host bluetooth_test_gd
Change-Id: I3cc9613e5c33aa3610a542107e97c7b4667e06c4
parent 26a771ff
Loading
Loading
Loading
Loading
+79 −101
Original line number Diff line number Diff line
@@ -24,14 +24,14 @@
#                      Default = 0. Max = 10.
template("packetgen_py") {
  action_name = "${target_name}_gen"
  action_foreach(action_name) {
    forward_variables_from(invoker,
                           [
                             "sources",
                             "include",
                             "shards",
                             "source_root",
                           ])

  all_dependent_config_name = "_${target_name}_all_dependent_config"
  config(all_dependent_config_name) {
    include_dirs = [ "${root_gen_dir}" ]
  }

  action(action_name) {
    forward_variables_from(invoker, [ "sources", "include", "shards", "source_root" ])
    assert(defined(sources), "sources must be set")
    assert(defined(include), "include must be set")
    assert(defined(source_root), "source root must be set")
@@ -41,36 +41,30 @@ template("packetgen_py") {

    # Set shards cmd
    shards_cmd = ""
    outputs = [ "${outdir}/{{source_name_part}}_python3.cc" ]
    outputs = []
    source_args = []
    if (defined(shards)) {
      shards_list = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
      foreach (source, sources) {
        rel_source = rebase_path(source, ".")
        source_args += [ rebase_path(source, source_root) ]
        shards_cmd = "--num_shards=${shards}"

        # TODO - GN reference doesn't explain how to programatically create
        # a range (i.e. range(shards)) so we use a fixed list and foreach loop to
        # work around it.
        assert(shards <= 10, "Maximum supported shards is 10.")
      shards_list = [
        "0",
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
      ]
        index = 0
        outputs += [ string_replace("${outdir}/${rel_source}_python3.cc", ".pdl", "") ]
        foreach(num, shards_list) {
          if (index < shards) {
          outputs +=
              [ "${outdir}/{{source_name_part}}_python3_shard_${num}.cc" ]
              outputs += [ string_replace("${outdir}/${rel_source}_python3_shard_${num}.cc", ".pdl", "") ]
          }

          index = index + 1
        }
      }
    }

    script = "//common-mk/file_generator_wrapper.py"
    binfile = "${root_out_dir}/bluetooth_packetgen"
@@ -80,28 +74,21 @@ template("packetgen_py") {
      "--out=${outdir}",
      "--source_root=${source_root}",
      shards_cmd,
      "{{source_root_relative_dir}}/{{source_file_part}}",
    ]
    ] + source_args
  }

  all_dependent_config_name = "_${target_name}_all_dependent_config"
  config(all_dependent_config_name) {
    include_dirs = [ "${root_gen_dir}" ]
  }

  source_set(target_name) {
    sources = get_target_outputs(":${action_name}")
    deps = [ ":${action_name}" ]

    all_dependent_configs = [ ":${all_dependent_config_name}" ]
    if (defined(invoker.all_dependent_configs)) {
      all_dependent_configs += invoker.all_dependent_configs
    }

    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
  }
  # TODO: Make building with python-dev work.
  # source_set(target_name) {
  #   sources = get_target_outputs(":${action_name}")
  #   deps = [":${action_name}"]
  #   all_dependent_configs = [":${all_dependent_config_name}"]
  #   if (defined(invoker.all_dependent_configs)) {
  #     all_dependent_configs += invoker.all_dependent_configs
  #   }
  #   if (defined(invoker.configs)) {
  #     configs += invoker.configs
  #   }
  # }
}

# Generate single c++ headers for each pdl
@@ -111,14 +98,13 @@ template("packetgen_py") {
#   source_root: Root of source relative to current BUILD.gn
#   sources: PDL files to use for generation.
template("packetgen_headers") {
  action_name = "${target_name}_gen"
  action_foreach(action_name) {
    forward_variables_from(invoker,
                           [
                             "include",
                             "sources",
                             "source_root",
                           ])
  all_dependent_config_name = "_${target_name}_all_dependent_config"
  config(all_dependent_config_name) {
    include_dirs = [ "${root_gen_dir}" ]
  }

  action(target_name) {
    forward_variables_from(invoker, [ "include", "sources", "source_root" ])
    assert(defined(sources), "sources must be set")
    assert(defined(include), "include must be set")
    assert(defined(source_root), "source root must be set")
@@ -126,8 +112,6 @@ template("packetgen_headers") {
    outdir = rebase_path(root_gen_dir)
    source_root = rebase_path(source_root)

    outputs = [ "${outdir}/{{source_name_part}}.h" ]

    script = "//common-mk/file_generator_wrapper.py"
    binfile = "${root_out_dir}/bluetooth_packetgen"
    args = [
@@ -135,19 +119,15 @@ template("packetgen_headers") {
      "--include=${include}",
      "--out=${outdir}",
      "--source_root=${source_root}",
      "{{source_root_relative_dir}}/{{source_file_part}}",
    ]
  }

  all_dependent_config_name = "_${target_name}_all_dependent_config"
  config(all_dependent_config_name) {
    include_dirs = [ "${root_gen_dir}" ]
    outputs = []
    foreach (source, sources) {
      rel_source = rebase_path(source, ".")
      args += [ rebase_path(source, source_root) ]
      outputs += [ string_replace("${outdir}/${rel_source}.h", ".pdl", "") ]
    }

  source_set(target_name) {
    sources = get_target_outputs(":${action_name}")
    deps = [ ":${action_name}" ]

    all_dependent_configs = [ ":${all_dependent_config_name}" ]
    if (defined(invoker.all_dependent_configs)) {
      all_dependent_configs += invoker.all_dependent_configs
@@ -167,13 +147,13 @@ template("packetgen_headers") {
#   sources: PDL files to use for generation.
template("packetgen_rust") {
  action_name = "${target_name}_gen"
  action_foreach(action_name) {
    forward_variables_from(invoker,
                           [
                             "include",
                             "sources",
                             "source_root",
                           ])
  all_dependent_config_name = "_${target_name}_all_dependent_config"
  config(all_dependent_config_name) {
    include_dirs = [ "${root_gen_dir}" ]
  }

  action(action_name) {
    forward_variables_from(invoker, [ "include", "sources", "source_root" ])
    assert(defined(sources), "sources must be set")
    assert(defined(include), "include must be set")
    assert(defined(source_root), "source root must be set")
@@ -181,8 +161,6 @@ template("packetgen_rust") {
    outdir = rebase_path(root_gen_dir)
    source_root = rebase_path(source_root)

    outputs = [ "${outdir}/{{source_name_part}}.rs" ]

    script = "//common-mk/file_generator_wrapper.py"
    binfile = "${root_out_dir}/bluetooth_packetgen"
    args = [
@@ -191,26 +169,26 @@ template("packetgen_rust") {
      "--out=${outdir}",
      "--source_root=${source_root}",
      "--rust",
      "{{source_root_relative_dir}}/{{source_file_part}}",
    ]
  }

  all_dependent_config_name = "_${target_name}_all_dependent_config"
  config(all_dependent_config_name) {
    include_dirs = [ "${root_gen_dir}" ]
  }

  source_set(target_name) {
    sources = get_target_outputs(":${action_name}")
    deps = [ ":${action_name}" ]

    all_dependent_configs = [ ":${all_dependent_config_name}" ]
    if (defined(invoker.all_dependent_configs)) {
      all_dependent_configs += invoker.all_dependent_configs
    }

    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
  }
    outputs = []
    foreach (source, sources) {
      rel_source = rebase_path(source, ".")
      args += [ rebase_path(source, source_root) ]
      outputs += [ string_replace("${outdir}/${rel_source}.rs", ".pdl", "") ]
    }
  }

  # TODO: Rust source_set is not supported by gn.
  # source_set(target_name) {
  #   sources = get_target_outputs(":${action_name}")
  #   deps = [ ":${action_name}" ]
  #   all_dependent_configs = [":${all_dependent_config_name}"]
  #   if (defined(invoker.all_dependent_configs)) {
  #     all_dependent_configs += invoker.all_dependent_configs
  #   }
  #   if (defined(invoker.configs)) {
  #     configs += invoker.configs
  #   }
  # }
}