# 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 =
    get_label_info(_vdso_generated_headers_dep, "root_gen_dir") + "/include"

_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, "root_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 ]
    }
  },
]
