From ae07881baac552921f8808a584f222d0c78f8fda Mon Sep 17 00:00:00 2001 From: serge-sans-paille Date: Sat, 18 May 2024 07:10:57 +0000 Subject: [PATCH] Bug 1883940 - Replace MOZ_CXX11 autoconf macro by a moz.configure check r=glandium Differential Revision: https://phabricator.services.mozilla.com/D203781 --- build/autoconf/toolchain.m4 | 34 ------------------------ build/moz.configure/libraries.configure | 32 ++++++++++++++++++++++ js/src/build/moz.build | 3 +-- js/src/old-configure.in | 7 ----- media/ffvpx/libavutil/moz.build | 3 +-- memory/mozjemalloc_info/moz.build | 3 +-- memory/replace/logalloc/replay/moz.build | 3 +-- mfbt/moz.build | 3 +-- old-configure.in | 8 ------ toolkit/library/moz.build | 3 +-- 10 files changed, 38 insertions(+), 61 deletions(-) diff --git a/build/autoconf/toolchain.m4 b/build/autoconf/toolchain.m4 index 270738f4d5bd..13b3ee158e03 100644 --- a/build/autoconf/toolchain.m4 +++ b/build/autoconf/toolchain.m4 @@ -81,37 +81,3 @@ AC_PROG_CXX PATH=$_SAVE_PATH ]) - -AC_DEFUN([MOZ_CXX11], -[ -dnl Updates to the test below should be duplicated further below for the -dnl cross-compiling case. -AC_LANG_CPLUSPLUS -if test "$GNU_CXX"; then - AC_CACHE_CHECK([whether 64-bits std::atomic requires -latomic], - ac_cv_needs_atomic, - AC_TRY_LINK( - [#include - #include ], - [ std::atomic foo; foo = 1; ], - ac_cv_needs_atomic=no, - _SAVE_LIBS="$LIBS" - LIBS="$LIBS -latomic" - AC_TRY_LINK( - [#include - #include ], - [ std::atomic foo; foo = 1; ], - ac_cv_needs_atomic=yes, - ac_cv_needs_atomic="do not know; assuming no") - LIBS="$_SAVE_LIBS" - ) - ) - if test "$ac_cv_needs_atomic" = yes; then - MOZ_NEEDS_LIBATOMIC=1 - else - MOZ_NEEDS_LIBATOMIC= - fi - AC_SUBST(MOZ_NEEDS_LIBATOMIC) -fi -AC_LANG_C -]) diff --git a/build/moz.configure/libraries.configure b/build/moz.configure/libraries.configure index 1117c60d7fa3..450ecdd51f78 100644 --- a/build/moz.configure/libraries.configure +++ b/build/moz.configure/libraries.configure @@ -114,3 +114,35 @@ with only_when(moz_use_pthreads): compilation_flags.cxxflags.extend(pthread_flags.cflags) set_config("MOZ_USE_PTHREADS", True) + + +with only_when(building_with_gnu_cc): + + @template + def check_std_atomic_requirements(flag=None, when=None): + return try_link( + includes=["cstdint", "atomic"], + body="std::atomic foo; foo = 1;", + flags=flag or [], + when=when, + ) + + is_libatomic_optional = check_std_atomic_requirements() + is_libatomic_required = check_std_atomic_requirements( + flag="-latomic", when=~is_libatomic_optional + ) + + @depends(is_libatomic_optional, is_libatomic_required) + @checking("whether 64-bits std::atomic requires -latomic") + def checking_needs_libatomic(is_libatomic_optional, is_libatomic_required): + if is_libatomic_optional: + return False + if is_libatomic_required: + return True + return "do not know; assuming no" + + set_config( + "LIBATOMIC_LIBS", + ["-latomic"], + when=depends(checking_needs_libatomic)(lambda c: c is True), + ) diff --git a/js/src/build/moz.build b/js/src/build/moz.build index b38f848c7ad7..57b9ebd678c0 100644 --- a/js/src/build/moz.build +++ b/js/src/build/moz.build @@ -90,8 +90,7 @@ if CONFIG["OS_ARCH"] == "WINNT": "synchronization", ] -if CONFIG["MOZ_NEEDS_LIBATOMIC"]: - OS_LIBS += ["atomic"] +OS_LIBS += CONFIG["LIBATOMIC_LIBS"] if CONFIG["TARGET_OS"] == "iOS": OS_LIBS += ["-framework BrowserEngineCore"] diff --git a/js/src/old-configure.in b/js/src/old-configure.in index dc6a081894c6..c138686d117f 100644 --- a/js/src/old-configure.in +++ b/js/src/old-configure.in @@ -429,13 +429,6 @@ if test -n "$COMPILE_ENVIRONMENT"; then fi if test -z "$SKIP_COMPILER_CHECKS"; then -dnl Checks for typedefs, structures, and compiler characteristics. -dnl ======================================================== - -AC_LANG_CPLUSPLUS - -MOZ_CXX11 - dnl ======================================================== dnl Put your C++ language/feature checks below diff --git a/media/ffvpx/libavutil/moz.build b/media/ffvpx/libavutil/moz.build index c3b3a21fbee5..0d40b19c8e0b 100644 --- a/media/ffvpx/libavutil/moz.build +++ b/media/ffvpx/libavutil/moz.build @@ -90,7 +90,6 @@ OS_LIBS += CONFIG['REALTIME_LIBS'] if CONFIG['OS_TARGET'] != 'WINNT': OS_LIBS += ['m'] -if CONFIG['MOZ_NEEDS_LIBATOMIC']: - OS_LIBS += ['atomic'] +OS_LIBS += CONFIG["LIBATOMIC_LIBS"] include("../ffvpxcommon.mozbuild") diff --git a/memory/mozjemalloc_info/moz.build b/memory/mozjemalloc_info/moz.build index 76dd3c5001c3..ac4f8567cb31 100644 --- a/memory/mozjemalloc_info/moz.build +++ b/memory/mozjemalloc_info/moz.build @@ -21,8 +21,7 @@ USE_LIBS += [ # The memory library defines this, so it's needed here too. DEFINES["IMPL_MFBT"] = True -if CONFIG["MOZ_NEEDS_LIBATOMIC"]: - OS_LIBS += ["atomic"] +OS_LIBS += CONFIG["LIBATOMIC_LIBS"] UNIFIED_SOURCES += [ "/mfbt/double-conversion/double-conversion/bignum-dtoa.cc", diff --git a/memory/replace/logalloc/replay/moz.build b/memory/replace/logalloc/replay/moz.build index 9c04fa9f8612..fe8d1d65e4b0 100644 --- a/memory/replace/logalloc/replay/moz.build +++ b/memory/replace/logalloc/replay/moz.build @@ -79,8 +79,7 @@ USE_LIBS += [ # The memory library defines this, so it's needed here too. DEFINES["IMPL_MFBT"] = True -if CONFIG["MOZ_NEEDS_LIBATOMIC"]: - OS_LIBS += ["atomic"] +OS_LIBS += CONFIG["LIBATOMIC_LIBS"] OS_LIBS += CONFIG["DL_LIBS"] diff --git a/mfbt/moz.build b/mfbt/moz.build index f6fa41c89ecd..e3c036c20e2a 100644 --- a/mfbt/moz.build +++ b/mfbt/moz.build @@ -205,8 +205,7 @@ SOURCES["lz4/xxhash.c"].flags += ["-Wno-unused-function"] DisableStlWrapping() -if CONFIG["MOZ_NEEDS_LIBATOMIC"]: - OS_LIBS += ["atomic"] +OS_LIBS += CONFIG["LIBATOMIC_LIBS"] DEFINES["LZ4LIB_VISIBILITY"] = "" diff --git a/old-configure.in b/old-configure.in index 5fac71188e04..61d8e7bcb457 100644 --- a/old-configure.in +++ b/old-configure.in @@ -446,14 +446,6 @@ else fi # COMPILE_ENVIRONMENT if test -z "$SKIP_COMPILER_CHECKS"; then -dnl Checks for typedefs, structures, and compiler characteristics. -dnl ======================================================== -AC_LANG_CPLUSPLUS - -MOZ_CXX11 - -AC_LANG_C - dnl ======================================================== dnl Put your C++ language/feature checks below diff --git a/toolkit/library/moz.build b/toolkit/library/moz.build index 9fa86b386b61..6a5e5328e426 100644 --- a/toolkit/library/moz.build +++ b/toolkit/library/moz.build @@ -86,8 +86,7 @@ def Libxul(name, output_category=None): Libxul_defines() - if CONFIG["MOZ_NEEDS_LIBATOMIC"]: - OS_LIBS += ["atomic"] + OS_LIBS += CONFIG["LIBATOMIC_LIBS"] # TouchBar-related classes are only available in the 10.12.2 SDK and later. # We need to weak link these classes until we've upgraded our SDK to at