<%include file="header.mako" />

import("//build/sdk/sdk_atom.gni")

_out_dir = get_label_info(":bogus", "target_out_dir")

<%def name="copy_target(path)">${"copy_%s" % path.replace('/', '_').replace('.', '_')}</%def>

% for path, file in sorted(data.files.iteritems()):
copy("${copy_target(path)}") {
  sources = [
    "${file}",
  ]

  outputs = [
    "$_out_dir/sysroot/${path}",
  ]
}

% endfor

group("sysroot") {
  deps = [
    % for path, file in sorted(data.files.iteritems()):
    ":${copy_target(path)}",
    % endfor
  ]
}

file_base = "arch/$target_cpu/sysroot"

version_content = {
  root = file_base

  include_dir = "$file_base/include"
  headers = []
  % for header in sorted(data.headers):
  headers += [ "$file_base/${header}" ]
  % endfor

  link_libs = []
  % for lib in sorted(data.link_libs):
  link_libs += [ "$file_base/${lib}" ]
  % endfor

  dist_libs = []
  % for lib in sorted(data.dist_libs):
  dist_libs += [ "$file_base/${lib}" ]
  % endfor
}
metadata = {
  type = "sysroot"
  name = "sysroot"
  root = "pkg/sysroot"
  versions = {}
  if (target_cpu == "arm64") {
    versions.arm64 = version_content
  } else if (target_cpu == "x64") {
    versions.x64 = version_content
  } else {
    assert(false, "Unknown CPU type: %target_cpu")
  }
}

base_meta_file = "$target_gen_dir/sysroot.base_meta.json"
write_file(base_meta_file, metadata, "json")
augmented_meta_file = "$target_gen_dir/sysroot.full_meta.json"
debug_mapping_file = "$target_gen_dir/sysroot.mapping.txt"

action("sysroot_meta") {
  script = "//build/zircon/add_sysroot_debug_data.py"

  inputs = [
    base_meta_file,
    % for lib in sorted(data.debug_source_libs):
    "${lib}",
    % endfor
  ]

  outputs = [
    augmented_meta_file,
  ]

  args = [
    "--base",
    rebase_path(base_meta_file),
    "--out",
    rebase_path(augmented_meta_file),
    "--debug-mapping",
    rebase_path(debug_mapping_file),
    % for lib in sorted(data.debug_source_libs):
    "--lib-debug-file",
    rebase_path("${lib}"),
    % endfor
  ]

  deps = [
    ":sysroot",
  ]
}

sdk_atom("sysroot_sdk") {
  id = "sdk://pkg/sysroot"
  category = "partner"

  meta = {
    dest = "pkg/sysroot/meta.json"
    schema = "sysroot"
    source = augmented_meta_file
  }

  files = [
    % for path, file in sorted(data.sdk_files.iteritems()):
    {
      source = "${file}"
      dest = "$file_base/${path}"
    },
    % endfor
  ]

  file_list = debug_mapping_file

  non_sdk_deps = [
    ":sysroot",
    ":sysroot_meta",
  ]
}
