# 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 is used to describe the sysroot entries contributed by the
# C library. For historical reasons, it currently includes some Zircon
# headers as well.
#
# To properly expose dependencies, this content must be parsed during the
# `gn gen` phase of the Fuchsia build, i.e. it is not possible to write
# it to a generated_file() target and later process it with a build-time
# script.

import("//zircon/system/ulib/c/libc_toolchain.gni")

_rebased_libc_stripped = rebase_path(sysroot_libc_stripped, root_build_dir)
_rebased_libc_unstripped = rebase_path(sysroot_libc_unstripped, root_build_dir)

sysroot_libc_deps = [ sysroot_libc_target ]

# This describes the sysroot entries contributed by the C library
# built without any binaries that may be affected by instrumentation.
# In the Zircon build, this will be added to the metadata of the
# base (i.e. non-instrumented) version of the C library.
#
# All versions then get sysroot_instrumented_libc_entries as well.
#
# For historical reason, this includes Zircon headers as well.
sysroot_uninstrumented_libc_entries = [
  {
    libc = _rebased_libc_unstripped
  },
  {
    libc_dist = _rebased_libc_stripped
  },
  {
    include_dirs = [
      "//src/zircon/lib/zircon/include",
      "//zircon/system/public",
      "//zircon/third_party/ulib/musl/include",
    ]
  },
  {
    sdk = {
      include_dir = "//zircon/system/public"
      headers = [
        "zircon/analyzer.h",
        "zircon/assert.h",
        "zircon/availability.h",
        "zircon/availability_levels.inc",
        "zircon/boot/crash-reason.h",
        "zircon/compiler.h",
        "zircon/errors.h",
        "zircon/features.h",
        "zircon/fidl.h",
        "zircon/hw/debug/arm64.h",
        "zircon/hw/debug/x86.h",
        "zircon/hw/gpt.h",
        "zircon/hw/pci.h",
        "zircon/limits.h",
        "zircon/listnode.h",
        "zircon/process.h",
        "zircon/processargs.h",
        "zircon/rights.h",
        "zircon/string_view.h",
        "zircon/syscalls-next.h",
        "zircon/syscalls.h",
        "zircon/syscalls/clock.h",
        "zircon/syscalls/debug.h",
        "zircon/syscalls/exception.h",
        "zircon/syscalls/hypervisor.h",
        "zircon/syscalls/iob.h",
        "zircon/syscalls/iommu.h",
        "zircon/syscalls/log.h",
        "zircon/syscalls/object.h",
        "zircon/syscalls/pci.h",
        "zircon/syscalls/policy.h",
        "zircon/syscalls/port.h",
        "zircon/syscalls/profile.h",
        "zircon/syscalls/resource.h",
        "zircon/syscalls/scheduler.h",
        "zircon/syscalls/smc.h",
        "zircon/syscalls/system.h",
        "zircon/syscalls/types.h",
        "zircon/time.h",
        "zircon/tls.h",
        "zircon/types.h",

        # Note: Most of zircon/device is excluded from SDKs.
        # TODO(https://fxbug.dev/42155967,https://fxbug.dev/42107431): remove this allowlist.
        "zircon/device/audio.h",
      ]

      if (!exclude_testonly_syscalls) {
        headers += [ "zircon/testonly-syscalls.h" ]
      }
    }
  },
  {
    sdk = {
      include_dir = "//zircon/system/public"
      no_export = true
      headers = [
        # "zircon/device/audio.h",  (see above)
        "zircon/device/bt-hci.h",
        "zircon/device/intel-hda.h",
      ]
    }
  },
  {
    sdk = {
      include_dir = "//zircon/third_party/ulib/musl/include"
      headers = [
        "alloca.h",
        "ar.h",
        "arpa/ftp.h",
        "arpa/inet.h",
        "arpa/nameser.h",
        "arpa/nameser_compat.h",
        "arpa/telnet.h",
        "arpa/tftp.h",
        "assert.h",
        "bits/aarch64/fenv.h",
        "bits/aarch64/setjmp.h",
        "bits/alltypes.h",
        "bits/errno.h",
        "bits/fenv.h",
        "bits/io.h",
        "bits/ioctl.h",
        "bits/ipc.h",
        "bits/limits.h",
        "bits/null.h",
        "bits/poll.h",
        "bits/posix.h",
        "bits/resource.h",
        "bits/riscv64/fenv.h",
        "bits/riscv64/setjmp.h",
        "bits/setjmp.h",
        "bits/signal.h",
        "bits/stat.h",
        "bits/statfs.h",
        "bits/termios.h",
        "bits/x86_64/fenv.h",
        "bits/x86_64/io.h",
        "bits/x86_64/setjmp.h",
        "byteswap.h",
        "complex.h",
        "cpio.h",
        "ctype.h",
        "dirent.h",
        "dlfcn.h",
        "elf.h",
        "endian.h",
        "err.h",
        "errno.h",
        "fcntl.h",
        "features.h",
        "fenv.h",
        "fnmatch.h",
        "getopt.h",
        "glob.h",
        "grp.h",
        "iconv.h",
        "ifaddrs.h",
        "inttypes.h",
        "iso646.h",
        "langinfo.h",
        "libgen.h",
        "limits.h",
        "link.h",
        "locale.h",
        "malloc.h",
        "math.h",
        "memory.h",
        "monetary.h",
        "net/ethernet.h",
        "net/if.h",
        "net/if_arp.h",
        "net/route.h",
        "netdb.h",
        "netinet/ether.h",
        "netinet/icmp6.h",
        "netinet/if_ether.h",
        "netinet/igmp.h",
        "netinet/in.h",
        "netinet/in_systm.h",
        "netinet/ip.h",
        "netinet/ip6.h",
        "netinet/ip_icmp.h",
        "netinet/tcp.h",
        "netinet/udp.h",
        "netpacket/packet.h",
        "nl_types.h",
        "paths.h",
        "poll.h",
        "pthread.h",
        "pwd.h",
        "regex.h",
        "resolv.h",
        "sched.h",
        "semaphore.h",
        "setjmp.h",
        "signal.h",
        "spawn.h",
        "stdio.h",
        "stdlib.h",
        "string.h",
        "strings.h",
        "stropts.h",
        "sys/acct.h",
        "sys/auxv.h",
        "sys/dir.h",
        "sys/errno.h",
        "sys/eventfd.h",
        "sys/fcntl.h",
        "sys/file.h",
        "sys/inotify.h",
        "sys/io.h",
        "sys/ioctl.h",
        "sys/ipc.h",
        "sys/mman.h",
        "sys/mount.h",
        "sys/msg.h",
        "sys/mtio.h",
        "sys/param.h",
        "sys/poll.h",
        "sys/random.h",
        "sys/select.h",
        "sys/sem.h",
        "sys/shm.h",
        "sys/signal.h",
        "sys/socket.h",
        "sys/stat.h",
        "sys/statfs.h",
        "sys/statvfs.h",
        "sys/stropts.h",
        "sys/syslog.h",
        "sys/termios.h",
        "sys/time.h",
        "sys/timeb.h",
        "sys/timerfd.h",
        "sys/times.h",
        "sys/ttydefaults.h",
        "sys/types.h",
        "sys/ucontext.h",
        "sys/uio.h",
        "sys/un.h",
        "sys/utsname.h",
        "sys/vfs.h",
        "sys/wait.h",
        "sysexits.h",
        "syslog.h",
        "tar.h",
        "termios.h",
        "threads.h",
        "time.h",
        "uchar.h",
        "ucontext.h",
        "unistd.h",
        "utime.h",
        "values.h",
        "wait.h",
        "wchar.h",
        "wctype.h",
        "wordexp.h",
        "zircon/dlfcn.h",
        "zircon/lookup.h",
        "zircon/sanitizer.h",
        "zircon/threads.h",
        "zircon/utc.h",
      ]
    }
  },
  {
    sdk = {
      # TODO(https://fxbug.dev/42101682): The stripped binary doesn't even have section
      # headers, so the linker can't handle it.  Eventually we'll have
      # linker stubs.  For now, just use the unstripped library to link
      # against.  This matches what library() gives the SDK via
      # zircon_library().
      source = _rebased_libc_unstripped
      link = "lib/libc.so"
      deps = [ sysroot_libc_target ]
    }
  },
]

foreach(lib,
        [
          "libdl.so",
          "libm.so",
          "libpthread.so",
          "librt.so",
        ]) {
  sysroot_uninstrumented_libc_entries += [
    {
      sdk = {
        source =
            rebase_path("//zircon/third_party/ulib/musl/lib.ld", root_build_dir)
        link = "lib/$lib"
      }
    },
  ]
}

# This corresponds to the metadata that will go into each instrumented
# (and non-instrumented) version of the C library.

sysroot_instrumented_libc_entries = []
sysroot_variants = [
  "",
  "asan",
]

if (target_cpu == "arm64") {
  # TODO(https://fxbug.dev/327442322): Support hwasan for x64 and riscv64.
  sysroot_variants += [ "hwasan" ]
}

foreach(variant, sysroot_variants) {
  if (variant == "") {
    # Ensure that the non-instrumented version of libc.so distributed with
    # the SDK is the same as the system one (i.e. potentially built with
    # non instrumented toolchains like "gcc" or "thinlto"). This avoids
    # conflicts later when creating Fuchsia packages which contains binaries
    # who indirectly depend on the core SDK.
    #
    # IMPORTANT: KEEP THIS IN SYNC WITH THE toolchain_variant.libprefix computation
    # in //build/config/BUILDCONFIG.gni
    #
    _libprefix = ""
    _libc_target = system_libc_target
    _libc_stripped = system_libc_stripped
    _libc_unstripped = system_libc_unstripped
  } else {
    _libprefix = string_replace(variant, "-fuzzer", "") + "/"
    _libc_toolchain = "//zircon/system/ulib/c:user.libc_${current_cpu}-$variant"
    _libc_target = "$sysroot_libc_label:libc($_libc_toolchain)"
    _libc_stripped = get_label_info(_libc_target, "root_out_dir") + "/libc.so"
    _libc_unstripped = _libc_stripped + ".debug"
  }

  # TODO(https://fxbug.dev/42052732): Correctly set link, debug, dist and deps here.
  sysroot_instrumented_libc_entries += [
    {
      sdk = {
        source = rebase_path(_libc_unstripped, root_build_dir)
        debug = "debug/${_libprefix}libc.so"
        deps = [ _libc_target ]
      }
    },
    {
      sdk = {
        source = rebase_path(_libc_stripped, root_build_dir)
        dist = "dist/lib/${_libprefix}ld.so.1"
        deps = [ _libc_target ]
      }
    },
  ]
}

# The C runtime startup object file (a.k.a. 'crt1', or 'Scrt1.o').
sysroot_crt1_entries = [
  {
    crt1 = rebase_path(sysroot_crt1_obj, root_build_dir)
    sdk = {
      source = crt1
      link = "lib/Scrt1.o"
      deps = [ sysroot_crt1_target ]
    }
  },
]
