# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/rust/rustc_binary.gni")
import("//build/testing/environments.gni")
import("//src/sys/build/components.gni")

if (current_toolchain == host_toolchain) {
  rustc_binary("generator") {
    name = "generator"
    edition = "2018"
    deps = [
      "//src/sys/pkg/lib/fuchsia-archive",
      "//third_party/rust_crates:anyhow",
      "//third_party/rust_crates:argh",
    ]
    sources = [ "src/main.rs" ]
  }
}

compiled_action("generate-invalid-fars") {
  tool = ":generator"
  args = [
    "--output-dir",
    rebase_path(target_out_dir, root_build_dir),
  ]
  outputs = [
    "${target_out_dir}/invalid-magic-bytes.far",
    "${target_out_dir}/index-entries-length-not-a-multiple-of-24-bytes.far",
    "${target_out_dir}/directory-names-index-entry-before-directory-index-entry.far",
    "${target_out_dir}/two-directory-index-entries.far",
    "${target_out_dir}/two-directory-names-index-entries.far",
    "${target_out_dir}/no-directory-index-entry.far",
    "${target_out_dir}/no-directory-names-index-entry.far",
    "${target_out_dir}/directory-chunk-length-not-a-multiple-of-32-bytes.far",
    "${target_out_dir}/directory-chunk-not-tightly-packed.far",
    "${target_out_dir}/path-data-offset-too-large.far",
    "${target_out_dir}/path-data-length-too-large.far",
    "${target_out_dir}/directory-entries-not-sorted.far",
    "${target_out_dir}/directory-entries-with-same-name.far",
    "${target_out_dir}/directory-names-chunk-length-not-a-multiple-of-8-bytes.far",
    "${target_out_dir}/directory-names-chunk-not-tightly-packed.far",
    "${target_out_dir}/directory-names-chunk-before-directory-chunk.far",
    "${target_out_dir}/directory-names-chunk-overlaps-directory-chunk.far",
    "${target_out_dir}/zero-length-name.far",
    "${target_out_dir}/name-with-null-character.far",
    "${target_out_dir}/name-with-leading-slash.far",
    "${target_out_dir}/name-with-trailing-slash.far",
    "${target_out_dir}/name-with-empty-segment.far",
    "${target_out_dir}/name-with-dot-segment.far",
    "${target_out_dir}/name-with-dot-dot-segment.far",
    "${target_out_dir}/content-chunk-starts-early.far",
    "${target_out_dir}/content-chunk-starts-late.far",
    "${target_out_dir}/second-content-chunk-starts-early.far",
    "${target_out_dir}/second-content-chunk-starts-late.far",
    "${target_out_dir}/content-chunk-not-zero-padded.far",
    "${target_out_dir}/content-chunk-overlap.far",
    "${target_out_dir}/content-chunk-not-tightly-packed.far",
    "${target_out_dir}/content-chunk-offset-past-end-of-file.far",
  ]
}

resource("resource") {
  testonly = true
  deps = [ ":generate-invalid-fars" ]
  sources = get_target_outputs(":generate-invalid-fars")
  outputs = [ "data/invalid-fars/{{source_file_part}}" ]
}
