blob: a07732f17f4ed92cc7c9678aa90c4bf8d84fcf72 [file] [log] [blame]
# Copyright 2021 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("//build/cpp/library_headers.gni")
import("//build/toolchain/zircon/user_basic_redirect.gni")
is_elf = current_os != "mac" && current_os != "win"
has_fd = !is_kernel && toolchain_variant.tags + [ "standalone" ] -
[ "standalone" ] == toolchain_variant.tags
library_headers("headers") {
public_deps = [
"//sdk/lib/fit",
"//sdk/lib/stdcompat",
# <lib/elfldltl/memory.h> has #include <fbl/alloc_checker.h>.
"//zircon/system/ulib/fbl",
]
if (has_fd) {
public_deps += [
# <lib/elfldltl/mapped-fd-file.h> has #include <lib/fit/result.h>.
"//sdk/lib/fit",
]
}
if (is_fuchsia && !is_kernel) {
# Make sure that there's no transitive deps on libzircon, so header-only
# use of the library doesn't affect dynamic linking dependencies.
if (zircon_toolchain == false) {
_headers = ""
} else {
_headers = ":headers"
}
public_deps += [
# <lib/elfldltl/vmo.h> has #include <lib/zx/vmo.h>.
"//zircon/system/ulib/zx$_headers",
]
}
if (is_kernel) {
public_deps += [
"//zircon/kernel/lib/ktl",
"//zircon/kernel/lib/libc",
]
}
headers = [
"lib/elfldltl/abi-ptr.h",
"lib/elfldltl/abi-span.h",
"lib/elfldltl/alloc-checker-container.h",
"lib/elfldltl/compat-hash.h",
"lib/elfldltl/constants.h",
"lib/elfldltl/container.h",
"lib/elfldltl/diagnostics-ostream.h",
"lib/elfldltl/diagnostics.h",
"lib/elfldltl/dwarf/cfi-entry.h",
"lib/elfldltl/dwarf/eh-frame-hdr.h",
"lib/elfldltl/dwarf/encoding.h",
"lib/elfldltl/dwarf/section-data.h",
"lib/elfldltl/dynamic.h",
"lib/elfldltl/fd.h",
"lib/elfldltl/field.h",
"lib/elfldltl/file.h",
"lib/elfldltl/gnu-hash.h",
"lib/elfldltl/init-fini.h",
"lib/elfldltl/internal/const-string.h",
"lib/elfldltl/internal/diagnostics-printf.h",
"lib/elfldltl/internal/dynamic-tag-error.h",
"lib/elfldltl/internal/load-segment-types.h",
"lib/elfldltl/internal/phdr-error.h",
"lib/elfldltl/layout.h",
"lib/elfldltl/link.h",
"lib/elfldltl/load.h",
"lib/elfldltl/loadinfo-mapped-memory.h",
"lib/elfldltl/loadinfo-mutable-memory.h",
"lib/elfldltl/machine.h",
"lib/elfldltl/mapped-fd-file.h",
"lib/elfldltl/mapped-vmo-file.h",
"lib/elfldltl/memory.h",
"lib/elfldltl/mmap-loader.h",
"lib/elfldltl/note.h",
"lib/elfldltl/phdr.h",
"lib/elfldltl/posix.h",
"lib/elfldltl/preallocated-vector.h",
"lib/elfldltl/relocation.h",
"lib/elfldltl/relro.h",
"lib/elfldltl/resolve.h",
"lib/elfldltl/segment-with-vmo.h",
"lib/elfldltl/self.h",
"lib/elfldltl/static-pie-with-vdso.h",
"lib/elfldltl/static-pie.h",
"lib/elfldltl/static-vector.h",
"lib/elfldltl/svr4-abi.h",
"lib/elfldltl/symbol.h",
"lib/elfldltl/tls-layout.h",
"lib/elfldltl/vmar-loader.h",
"lib/elfldltl/vmo.h",
"lib/elfldltl/zircon.h",
]
}
static_library("elfldltl") {
public_deps = [ ":headers" ]
complete_static_lib = true
sources = [ "leb128.cc" ]
deps = []
if (is_elf) {
if (toolchain_base_environment == "user") {
deps += [ ":self.basic" ]
} else {
deps += [ ":self" ]
}
}
if (has_fd) {
sources += [ "mapped-fd-file.cc" ]
deps += [
"//sdk/lib/fit",
"//zircon/system/ulib/fbl",
]
}
if (is_fuchsia && !is_kernel) {
sources += [
"mapped-vmo-file.cc",
"vmar-loader.cc",
]
deps += [ "//zircon/system/ulib/zx" ]
}
if (is_linux) {
configs -= [ "//build/config/linux:implicit-host-libs" ]
}
}
if (is_elf) {
# When the elfldltl::Self<...> code is not fully inlined, it's still used in
# places where only the basic machine ABI is available.
if (toolchain_base_environment == "user") {
user_basic_redirect("self.basic") {
visibility = [ ":*" ]
public_deps = [ ":self" ]
}
}
source_set("self") {
visibility = [ ":*" ]
deps = [ ":headers" ]
sources = [ "self.cc" ]
libs = [ "./self-base.ld" ]
}
}
group("tests") {
testonly = true
deps = [ "test:tests" ]
}
group("boot_tests") {
testonly = true
deps = [ "test:boot_tests" ]
}