# 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 = []
      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 ]
    }
  },
]
