blob: a0d5ccb78eda83636434daed92e44cb8b00e5852 [file] [log] [blame]
# 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.
if (target_os == "") {
target_os = host_os
}
if (target_cpu == "") {
target_cpu = host_cpu
}
if (current_cpu == "") {
current_cpu = target_cpu
}
if (current_os == "") {
current_os = target_os
}
is_fuchsia = current_os == "fuchsia"
is_linux = current_os == "linux"
is_mac = current_os == "mac"
declare_args() {
is_debug = true
}
# Set the host_toolchain
declare_args() {
host_toolchain = ""
}
# ==============================================================================
# TOOLCHAIN SETUP
# ==============================================================================
#
# Here we set the default toolchain, as well as the variable host_toolchain
# which will identify the toolchain corresponding to the local system when
# doing cross-compiles. When not cross-compiling, this will be the same as the
# default toolchain.
#
# We do this before anything else to make sure we complain about any
# unsupported os/cpu combinations as early as possible.
if (host_toolchain == "") {
# This should only happen in the top-level context.
# In a specific toolchain context, the toolchain_args()
# block should have propagated a value down.
if (host_os == "linux") {
host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
} else if (host_os == "mac") {
host_toolchain = "//build/toolchain/mac:clang_$host_cpu"
} else {
assert(false, "Unsupported host_os: $host_os")
}
}
# Set toolchain based on target_os and target_cpu
_default_toolchain = ""
if (target_os == "linux") {
_default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
} else if (target_os == "mac") {
_default_toolchain = "//build/toolchain/mac:clang_$target_cpu"
} else if (target_os == "fuchsia") {
_default_toolchain = "//build/toolchain/fuchsia:$target_cpu"
} else {
assert(false, "Unsupported target_os: $target_os")
}
set_default_toolchain(_default_toolchain)
# Set compiler defaults
# Holds all configs used for running the compiler.
default_compiler_configs = [
"//build:compiler_defaults",
"//build/config/compiler:assembler_debug_dir",
"//build/config/compiler:compiler",
"//build/config/compiler:compiler_arm_fpu",
"//build/config/compiler:c++",
"//build/config/compiler:default_include_dirs",
"//build/config/compiler:default_optimization",
"//build/config/compiler:default_symbols",
"//build/config/compiler:no_exceptions",
"//build/config/compiler:no_rtti",
"//build/config/compiler:runtime_library",
"//build/config/compiler:extra_warnings",
"//build/config/compiler:symbol_visibility_hidden",
]
# Override the default usage of the system readelf binary to use the local llvm-readelf
# This is used in populate_build_id_dir.py and prepare_package_inputs.py which default to the system readelf
if (host_os == "linux") {
fuchsia_sdk_readelf_exec = "//buildtools/linux64/clang-linux-amd64/bin/llvm-readelf"
} else if (host_os == "mac") {
fuchsia_sdk_readelf_exec = "//buildtools/mac64/clang-mac-amd64/bin/llvm-readelf"
} else {
assert(defined(fuchsia_sdk_readelf_exec), "host_os is not linux or mac: " + host_os)
}
if (is_fuchsia) {
default_compiler_configs += [
"//third_party/fuchsia-sdk/build/config:compiler",
"//third_party/fuchsia-sdk/build/config:runtime_library",
]
# these are additional flags recommended
default_compiler_configs += [ "//build/config/compiler:default_stack_frames" ]
}
# Debug/release-related defines.
if (is_debug) {
default_compiler_configs += [ "//build/config:debug" ]
} else {
default_compiler_configs += [ "//build/config:release" ]
}
# Static libraries and source sets use only the compiler ones.
set_defaults("static_library") {
configs = default_compiler_configs
}
set_defaults("source_set") {
configs = default_compiler_configs
}
# Executable defaults.
default_executable_configs = default_compiler_configs + [
"//build:executable_ldconfig",
"//build/config:default_libs",
]
set_defaults("executable") {
configs = default_executable_configs
}
# Shared library and loadable module defaults (also for components in component
# mode).
default_shared_library_configs =
default_compiler_configs + [ "//build/config:default_libs" ]
set_defaults("shared_library") {
configs = default_shared_library_configs
}
set_defaults("loadable_module") {
configs = default_shared_library_configs
}
if (is_fuchsia) {
# Sets default dependencies for executable and shared_library targets.
#
# Variables
# no_default_deps: If true, no standard dependencies will be added.
foreach(_target_type,
[
"executable",
"shared_library",
]) {
template(_target_type) {
target(_target_type, target_name) {
forward_variables_from(invoker, "*", [ "no_default_deps" ])
if (!defined(deps)) {
deps = []
}
if (!defined(data_deps)) {
data_deps = []
}
if (!defined(invoker.no_default_deps) || !invoker.no_default_deps) {
data_deps += [ "//build/config/clang:c++-runtime-deps" ]
deps += [ "//third_party/fuchsia-sdk/build/config:runtime_library_group" ]
}
}
}
}
}