# Copyright 2019 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("$zx/vdso/vdso.gni")

zx_library("c") {
  shared = true
  static = false

  # At link time and in DT_SONAME, musl is known as libc.so.  But the
  # (only) place it needs to be installed at runtime is where the
  # PT_INTERP strings embedded in executables point, which is ld.so.1.
  install_path = "lib/${toolchain.libprefix}ld.so.1"

  public_configs = [ "$zx/third_party/ulib/musl:headers" ]

  # The code comes from musl, where a source_set is defined.
  sources = []

  deps = [
    ":exit",
    "$zx/system/ulib/zx-panic-libc:as_source",
    "$zx/third_party/ulib/musl",
    "sanitizers",
    "setjmp",
    "zircon",
  ]

  # Suppress the ${toolchain.implicit_deps} that points back to here.
  no_implicit_deps = true

  # Don't link against the shared libc++.
  configs += [ "$zx/public/gn/config:static-libc++" ]

  metadata = {
    # This library is on the allowlist for driver() shared library deps.
    # It doesn't cause driver-denylist-check.sh to fail, and it prunes the
    # metadata walk here so our own deps are not subject to the check.
    driver_shlib_denylist = []
    driver_shlib_denylist_barrier = []

    # TODO(BLD-353): temporary kludges; see //zircon/public/sysroot
    legacy_sysroot = [
      {
        libc = rebase_path("$target_out_dir/libc.so.debug", root_build_dir)
      },
      {
        libc_dist = rebase_path("$target_out_dir/libc.so", root_build_dir)
      },
      {
        include_dirs = [
          "//zircon/system/public",
          "//zircon/system/ulib/zircon/include",
          "//zircon/third_party/ulib/musl/include",
        ]
      },
      {
        sdk = {
          include_dir = "//zircon/system/public"
          headers = [
            "zircon/assert.h",
            "zircon/boot/driver-config.h",
            "zircon/boot/e820.h",
            "zircon/boot/image.h",
            "zircon/boot/multiboot.h",
            "zircon/boot/netboot.h",
            "zircon/boot/sysconfig.h",
            "zircon/compiler.h",
            "zircon/driver/binding.h",
            "zircon/errors.h",
            "zircon/features.h",
            "zircon/fidl.h",
            "zircon/hw/gpt.h",
            "zircon/hw/i2c.h",
            "zircon/hw/pci.h",
            "zircon/hw/usb.h",
            "zircon/hw/usb/audio.h",
            "zircon/hw/usb/cdc.h",
            "zircon/hw/usb/dfu.h",
            "zircon/hw/usb/hid.h",
            "zircon/hw/usb/hub.h",
            "zircon/hw/usb/ums.h",
            "zircon/hw/usb/video.h",
            "zircon/limits.h",
            "zircon/listnode.h",
            "zircon/pixelformat.h",
            "zircon/process.h",
            "zircon/processargs.h",
            "zircon/rights.h",
            "zircon/string_view.h",
            "zircon/syscalls.h",
            "zircon/syscalls/clock.h",
            "zircon/syscalls/debug.h",
            "zircon/syscalls/exception.h",
            "zircon/syscalls/hypervisor.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(FIDL-273,ZX-2503): remove this allowlist.
            "zircon/device/audio.h",
          ]

          foreach(fidl, all_syscall_fidl_files) {
            headers += [ "../../vdso/" + fidl ]
          }

          if (!exclude_testonly_syscalls) {
            headers += [ "zircon/testonly-syscalls.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/endian.h",
            "bits/aarch64/fenv.h",
            "bits/aarch64/io.h",
            "bits/aarch64/ioctl.h",
            "bits/aarch64/ipc.h",
            "bits/aarch64/reg.h",
            "bits/aarch64/setjmp.h",
            "bits/aarch64/signal.h",
            "bits/aarch64/stat.h",
            "bits/alltypes.h",
            "bits/endian.h",
            "bits/errno.h",
            "bits/fcntl.h",
            "bits/fenv.h",
            "bits/io.h",
            "bits/ioctl.h",
            "bits/ipc.h",
            "bits/limits.h",
            "bits/msg.h",
            "bits/null.h",
            "bits/poll.h",
            "bits/posix.h",
            "bits/reg.h",
            "bits/resource.h",
            "bits/sem.h",
            "bits/setjmp.h",
            "bits/shm.h",
            "bits/signal.h",
            "bits/socket.h",
            "bits/stat.h",
            "bits/statfs.h",
            "bits/termios.h",
            "bits/x86_64/endian.h",
            "bits/x86_64/fenv.h",
            "bits/x86_64/io.h",
            "bits/x86_64/ioctl.h",
            "bits/x86_64/ipc.h",
            "bits/x86_64/reg.h",
            "bits/x86_64/setjmp.h",
            "bits/x86_64/signal.h",
            "bits/x86_64/stat.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",
            "fmtmsg.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",
            "search.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/fsuid.h",
            "sys/io.h",
            "sys/ioctl.h",
            "sys/ipc.h",
            "sys/klog.h",
            "sys/mman.h",
            "sys/mount.h",
            "sys/msg.h",
            "sys/mtio.h",
            "sys/param.h",
            "sys/personality.h",
            "sys/poll.h",
            "sys/quota.h",
            "sys/random.h",
            "sys/reboot.h",
            "sys/reg.h",
            "sys/select.h",
            "sys/sem.h",
            "sys/shm.h",
            "sys/signal.h",
            "sys/signalfd.h",
            "sys/socket.h",
            "sys/stat.h",
            "sys/statfs.h",
            "sys/statvfs.h",
            "sys/stropts.h",
            "sys/swap.h",
            "sys/syslog.h",
            "sys/termios.h",
            "sys/time.h",
            "sys/timeb.h",
            "sys/timerfd.h",
            "sys/times.h",
            "sys/timex.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/sanitizer.h",
            "zircon/threads.h",
          ]
        }
      },
      {
        sdk = {
          # TODO(TC-446): 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 = rebase_path("$target_out_dir/libc.so.debug", root_build_dir)
          link = "lib/libc.so"
        }
      },
      {
        sdk = {
          source = rebase_path("$target_out_dir/libc.so.debug", root_build_dir)
          debug = "debug/libc.so"
        }
      },
      {
        sdk = {
          source = rebase_path("$target_out_dir/libc.so", root_build_dir)
          dist = "dist/lib/ld.so.1"
        }
      },
    ]
    foreach(lib,
            [
              "libdl.so",
              "libm.so",
              "libpthread.so",
              "librt.so",
            ]) {
      legacy_sysroot += [
        {
          sdk = {
            source =
                rebase_path("$zx/third_party/ulib/musl/lib.ld", root_build_dir)
            link = "lib/$lib"
          }
        },
      ]
    }
  }
}

source_set("exit") {
  sources = [ "_Exit.cc" ]
  deps = [ "$zx/third_party/ulib/musl:musl_internal" ]
}

source_set("crt1") {
  sources = [ "Scrt1.cc" ]

  # This runs before all runtime setup.
  configs += [ "$zx/public/gn/config:no_sanitizers" ]

  # Minimize the code.  Even if there were lazy PLT resolution, it's never
  # worthwhile to have PLT entries for main or __libc_start_main, since
  # they are always used eagerly anyway.
  cflags = [ "-fno-plt" ]

  # TODO(BLD-353): temporary kludges
  metadata = {
    legacy_sysroot = [
      {
        crt1 = rebase_path("$target_out_dir/crt1.Scrt1.cc.o", root_build_dir)
        sdk = {
          source = crt1
          link = "lib/Scrt1.o"
        }
      },
    ]
  }
}
