# Copyright 2017 The Chromium 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/config/sanitizers/sanitizers.gni") declare_args() { # Use libc++ (buildtools/third_party/libc++ and # buildtools/third_party/libc++abi) instead of stdlibc++ as standard # library. # Don't check in changes that set this to false for more platforms; doing so # is not supported. use_custom_libcxx = is_msan || is_fuchsia || (is_linux && is_clang && (!is_chromeos || default_toolchain != "//build/toolchain/cros:target")) # Use libc++ instead of stdlibc++ when using the host_cpu toolchain, even if # use_custom_libcxx is false. This is useful for cross-compiles where a custom # toolchain for the target_cpu has been set as the default toolchain, but # use_custom_libcxx should still be true when building for the host. The # expected usage is to set use_custom_libcxx=false and # use_custom_libcxx_for_host=true in the passed in buildargs. use_custom_libcxx_for_host = false # ASan, MSan and TSan builds need to override operator new, operator delete, # and some exception handling symbols, so libc++ must be a shared library to # prevent duplicate symbol errors when linking. # Additionally, -fsanitize=vptr requires libc++ to be a shared library # because the ubsan runtime library that implements -fsanitize=vptr calls # dynamic_cast with the ABI type info classes, which won't return the right # answer if each DSO has its own copy of the ABI classes. libcpp_is_static = !is_component_build && !is_asan && !is_msan && !is_tsan && !is_ubsan && !is_ubsan_security && !is_ubsan_vptr } use_custom_libcxx = use_custom_libcxx || (use_custom_libcxx_for_host && current_cpu == host_cpu) libcxx_prefix = "//buildtools/third_party/libc++/trunk" libcxxabi_prefix = "//buildtools/third_party/libc++abi/trunk" libunwind_prefix = "//buildtools/third_party/libunwind/trunk"