# 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("//zircon/vdso/vdso.gni")

# This file defines the sysroot entries corresponding to the Zircon VDSO
# (a.k.a. libzircon.so). More details about how these are used are in
# //zircon/system/ulib/c/sysroot_entries.gni.

_vdso_generated_headers_dep = "//zircon/vdso:public($default_toolchain)"
_gen_include_dir = zircon_public_header_include_dir

_rebased_include_dir =
    rebase_path("//src/zircon/lib/zircon/include", root_build_dir)
_rebased_gen_include_dir = rebase_path(_gen_include_dir, root_build_dir)

_vdso_link_label = "//src/zircon/lib/zircon:zircon.stub($default_toolchain)"
_vdso_link =
    get_label_info(_vdso_link_label, "target_out_dir") + "/libzircon.so"

sysroot_vdso_entries = [
  {
    vdso = _vdso_link
  },
  {
    include_dirs = []
    include_dirs = [
      _rebased_include_dir,
      _rebased_gen_include_dir,
    ]
  },
  {
    sdk = {
      include_dir = _rebased_gen_include_dir
      headers = [
        "zircon/syscalls/internal/cdecls.inc",
        # Note not included in SDK: "zircon/syscalls/definitions.rs",
      ]
      deps = [ _vdso_generated_headers_dep ]
    }
  },
  {
    sdk = {
      include_dir = _rebased_gen_include_dir
      no_export = true  # Never export these to the SDK.
      headers = [ "zircon/syscalls/internal/cdecls-next.inc" ]
      if (!exclude_testonly_syscalls) {
        headers += [ "zircon/syscalls/internal/testonly-cdecls.inc" ]
      }
    }
  },
  {
    sdk = {
      include_dir = _rebased_include_dir
      headers = [ "zircon/status.h" ]
    }
  },
  {
    sdk = {
      include_dir = _rebased_include_dir
      headers = [ "zircon/exception.h" ]
    }
  },
  {
    sdk = {
      source = _vdso_link
      link = "lib/libzircon.so"
      deps = [ _vdso_link_label ]
    }
  },
]
