| # 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. |
| # |
| # This implies two very different ways to handle this data in the Zircon |
| # and the Fuchsia build: |
| # |
| # - Before build unification, the Zircon build adds this content to the |
| # C library's metadata, which is later collected into the |
| # legacy_sysroot-$cpu.json file. |
| # |
| # The Fuchsia build then uses read_file() to read it, then later |
| # parses it (see //zircon/public/sysroot/BUILD.gn). |
| # |
| # - After build unification, this file will be imported directly by the |
| # Fuchsia build, and its content parsed from there instead |
| # (it might be written to a generated_file() target though to |
| # populate the sysroot directory properly though). |
| # |
| |
| 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/assert.h", |
| "zircon/analyzer.h", |
| "zircon/boot/bootfs.h", |
| "zircon/boot/crash-reason.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/errors.h", |
| "zircon/features.h", |
| "zircon/fidl.h", |
| "zircon/hw/debug/arm64.h", |
| "zircon/hw/debug/x86.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/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(fxbug.dev/7610,fxbug.dev/32355): 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/block.h", |
| "zircon/device/bt-hci.h", |
| "zircon/device/ethernet.h", |
| "zircon/device/intel-hda.h", |
| "zircon/device/network.h", |
| "zircon/device/usb-peripheral.h", |
| "zircon/device/usb-peripheral-test.h", |
| "zircon/device/vfs.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/lookup.h", |
| "zircon/sanitizer.h", |
| "zircon/threads.h", |
| "zircon/utc.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 = _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 = [] |
| foreach(variant, |
| [ |
| "", |
| "asan", |
| "asan-ubsan", |
| ]) { |
| 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. |
| _libprefix = "" |
| _libc_target = system_libc_target |
| _libc_stripped = system_libc_stripped |
| _libc_unstripped = system_libc_unstripped |
| } else { |
| _libprefix = "$variant/" |
| _libc_toolchain = "//zircon/system/ulib/c:user.libc_${current_cpu}-$variant" |
| _libc_target = "$sysroot_libc_label($_libc_toolchain)" |
| _libc_stripped = get_label_info(_libc_target, "root_out_dir") + "/libc.so" |
| _libc_unstripped = _libc_stripped + ".debug" |
| } |
| |
| 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 ] |
| } |
| }, |
| ] |