summaryrefslogtreecommitdiffstats
path: root/chromium/build/config/c++
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-16 09:59:13 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-20 10:28:53 +0000
commit6c11fb357ec39bf087b8b632e2b1e375aef1b38b (patch)
treec8315530db18a8ee566521c39ab8a6af4f72bc03 /chromium/build/config/c++
parent3ffaed019d0772e59d6cdb2d0d32fe4834c31f72 (diff)
BASELINE: Update Chromium to 74.0.3729.159
Change-Id: I8d2497da544c275415aedd94dd25328d555de811 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/build/config/c++')
-rw-r--r--chromium/build/config/c++/BUILD.gn117
-rw-r--r--chromium/build/config/c++/c++.gni3
2 files changed, 119 insertions, 1 deletions
diff --git a/chromium/build/config/c++/BUILD.gn b/chromium/build/config/c++/BUILD.gn
new file mode 100644
index 00000000000..a596d58ae98
--- /dev/null
+++ b/chromium/build/config/c++/BUILD.gn
@@ -0,0 +1,117 @@
+import("//build/config/c++/c++.gni")
+import("//build/config/chrome_build.gni")
+import("//buildtools/deps_revisions.gni")
+
+assert(use_custom_libcxx, "should only be used if use_custom_libcxx is set")
+
+declare_args() {
+ # lldb pretty printing only works when libc++ is built in the __1 (or __ndk1)
+ # namespaces. For pretty printing to work out-of-the-box on Mac (where lldb
+ # is primarily used), this flag is set to false to build with the __1
+ # namespace (to maintain ABI compatibility, this implies building without
+ # _LIBCPP_ABI_UNSTABLE). This is not necessary on non-component builds
+ # because we leave the ABI version set to __1 in that case because libc++
+ # symbols are not exported.
+ # TODO(thomasanderson): Set this to true by default once rL352899 is available
+ # in MacOS's lldb.
+ libcxx_abi_unstable = !(is_mac && is_debug && is_component_build)
+}
+
+# TODO(xiaohuic): https://crbug/917533 Crashes on internal ChromeOS build.
+# Do unconditionally once the underlying problem is fixed.
+if (is_chromeos && is_chrome_branded) {
+ libcxx_abi_unstable = false
+}
+
+# This is included by reference in the //build/config/compiler:runtime_library
+# config that is applied to all targets. It is here to separate out the logic
+# that is specific to libc++. Please see that target for advice on what should
+# go in :runtime_library vs. :compiler.
+config("runtime_library") {
+ cflags = []
+ cflags_cc = []
+ defines = []
+ ldflags = []
+ libs = []
+
+ if (libcxx_abi_unstable) {
+ defines += [ "_LIBCPP_ABI_UNSTABLE" ]
+ }
+
+ if (is_component_build) {
+ # In component builds, symbols from libc++.so are exported for all DSOs to
+ # use. If the system libc++ gets loaded (indirectly through a system
+ # library), then it will conflict with our libc++.so. Add a custom ABI
+ # version if we're building with _LIBCPP_ABI_UNSTABLE to avoid conflicts.
+ #
+ # Windows doesn't need to set _LIBCPP_ABI_VERSION since there's no system
+ # C++ library we could conflict with.
+ if (libcxx_abi_unstable && !is_win) {
+ defines += [ "_LIBCPP_ABI_VERSION=Cr" ]
+ }
+ } else {
+ # Don't leak any symbols on a static build.
+ defines += [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ]
+ if (!export_libcxxabi_from_executables && !is_win) {
+ defines += [ "_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" ]
+ }
+ }
+
+ defines += [
+ "CR_LIBCXX_REVISION=$libcxx_svn_revision",
+ "CR_LIBCXXABI_REVISION=$libcxxabi_svn_revision",
+ "_LIBCPP_ENABLE_NODISCARD",
+ ]
+
+ if (is_win) {
+ # Intentionally not using libc++abi on Windows because libc++abi only
+ # implements the Itanium C++ ABI, and not the Microsoft ABI which we use on
+ # Windows (and we need to use in order to interoperate correctly with COM
+ # among other things).
+ assert(!export_libcxxabi_from_executables,
+ "Don't use libcxxabi on Windows.")
+
+ cflags_cc +=
+ [ "-I" + rebase_path("$libcxx_prefix/include", root_build_dir) ]
+
+ # Prevent libc++ from embedding linker flags to try to automatically link
+ # against its runtime library. This is unnecessary with our build system,
+ # and can also result in build failures if libc++'s name for a library
+ # does not match ours.
+ defines += [ "_LIBCPP_NO_AUTO_LINK" ]
+ } else {
+ cflags_cc += [
+ "-nostdinc++",
+ "-isystem" + rebase_path("$libcxx_prefix/include", root_build_dir),
+ "-isystem" + rebase_path("$libcxxabi_prefix/include", root_build_dir),
+ ]
+
+ # Make sure we don't link against the system libstdc++ or libc++.
+ if (is_clang) {
+ # //build/config/android:runtime_library adds -nostdlib, which suppresses
+ # linking against all system libraries. -nostdlib++ would be redundant,
+ # and would generate an unused warning in this case.
+ if (!is_android) {
+ ldflags += [ "-nostdlib++" ]
+ }
+ } else {
+ # Gcc has a built-in abs() definition with default visibility.
+ # If it was not disabled, it would conflict with libc++'s abs()
+ # with hidden visibility.
+ cflags += [ "-fno-builtin-abs" ]
+
+ ldflags += [ "-nodefaultlibs" ]
+
+ # Unfortunately, there's no way to disable linking against just libc++
+ # (gcc doesn't have -notstdlib++:
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83931); -nodefaultlibs
+ # removes all of the default libraries, so add back the ones that we need.
+ libs += [
+ "c",
+ "gcc_s",
+ "m",
+ "rt",
+ ]
+ }
+ }
+}
diff --git a/chromium/build/config/c++/c++.gni b/chromium/build/config/c++/c++.gni
index d7003bbd36e..61f07bc0804 100644
--- a/chromium/build/config/c++/c++.gni
+++ b/chromium/build/config/c++/c++.gni
@@ -31,7 +31,8 @@ use_custom_libcxx = use_custom_libcxx && !is_nacl
# libc++abi needs to be exported from executables to be picked up by shared
# libraries on certian instrumented builds.
export_libcxxabi_from_executables =
- use_custom_libcxx && !is_component_build && (is_asan || is_ubsan_vptr)
+ use_custom_libcxx && !is_win && !is_component_build &&
+ (is_asan || is_ubsan_vptr)
libcxx_is_shared = use_custom_libcxx && is_component_build
# On Android, many shared libraries get loaded from the context of a JRE. In