# 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",

            "../../vdso/alias_workarounds.fidl",
            "../../vdso/bti.fidl",
            "../../vdso/cache.fidl",
            "../../vdso/channel.fidl",
            "../../vdso/clock.fidl",
            "../../vdso/cprng.fidl",
            "../../vdso/debuglog.fidl",
            "../../vdso/debug.fidl",
            "../../vdso/eventpair.fidl",
            "../../vdso/event.fidl",
            "../../vdso/exception.fidl",
            "../../vdso/fifo.fidl",
            "../../vdso/framebuffer.fidl",
            "../../vdso/futex.fidl",
            "../../vdso/guest.fidl",
            "../../vdso/handle.fidl",
            "../../vdso/interrupt.fidl",
            "../../vdso/iommu.fidl",
            "../../vdso/ioports.fidl",
            "../../vdso/job.fidl",
            "../../vdso/ktrace.fidl",
            "../../vdso/misc.fidl",
            "../../vdso/mtrace.fidl",
            "../../vdso/object.fidl",
            "../../vdso/pager.fidl",
            "../../vdso/pci.fidl",
            "../../vdso/pc.fidl",
            "../../vdso/pmt.fidl",
            "../../vdso/port.fidl",
            "../../vdso/process.fidl",
            "../../vdso/profile.fidl",
            "../../vdso/resource.fidl",
            "../../vdso/rights.fidl",
            "../../vdso/smc.fidl",
            "../../vdso/socket.fidl",
            "../../vdso/stream.fidl",
            "../../vdso/syscall.fidl",
            "../../vdso/system.fidl",
            "../../vdso/task.fidl",
            "../../vdso/thread.fidl",
            "../../vdso/timer.fidl",
            "../../vdso/vcpu.fidl",
            "../../vdso/vmar.fidl",
            "../../vdso/vmo.fidl",
            "../../vdso/zx.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"
        }
      },
    ]
  }
}
