| # 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. |
| |
| # 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("//build/config/sysroot.gni") |
| import("//sdk/lib/c/include/libc_headers.gni") |
| import("//sdk/lib/c/libc_toolchain.gni") |
| import("//zircon/vdso/vdso.gni") |
| |
| # 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 = [ |
| { |
| sdk = { |
| include_dir = "//zircon/system/public" |
| headers = [ |
| "zircon/analyzer.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 = "//sdk/lib/zircon-assert" |
| headers = [ "zircon/assert.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 = { |
| link = "lib/libc.so" |
| deps = [ "//sdk/lib/c:c.stub" ] |
| source = |
| rebase_path(get_label_info(deps[0], "target_out_dir") + "/libc.so", |
| root_build_dir) |
| } |
| }, |
| |
| { |
| sdk = { |
| link = "lib/Scrt1.o" |
| |
| # The build-internal sysroot is the most convenient known path and direct |
| # deps label to use it as an input. |
| deps = [ "//sdk/lib/c/startup:startfiles($variant_base_toolchain)" ] |
| source = rebase_path( |
| get_label_info("//zircon/public/sysroot($variant_base_toolchain)", |
| "target_gen_dir") + "/$link", |
| root_build_dir) |
| } |
| }, |
| ] |
| |
| # libc_headers.gni provides the entries for libc's headers. |
| sysroot_uninstrumented_libc_entries += libc_headers.sysroot_entries |
| |
| sysroot_stub_libs = [ |
| "libdl.so", |
| "libm.so", |
| "libpthread.so", |
| "librt.so", |
| ] |
| |
| foreach(lib, sysroot_stub_libs) { |
| 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 = "//sdk/lib/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 ] |
| } |
| }, |
| ] |
| } |