blob: 5a78c990c0a0c4c17de25cb4ce64762530654249 [file] [log] [blame]
# 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 ]
}
},
]