diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-05-16 09:59:13 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-05-20 10:28:53 +0000 |
commit | 6c11fb357ec39bf087b8b632e2b1e375aef1b38b (patch) | |
tree | c8315530db18a8ee566521c39ab8a6af4f72bc03 /chromium/build/config/c++ | |
parent | 3ffaed019d0772e59d6cdb2d0d32fe4834c31f72 (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.gn | 117 | ||||
-rw-r--r-- | chromium/build/config/c++/c++.gni | 3 |
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 |