Skip to content
  • Thomas Petazzoni's avatar
    configure.ac: rework -latomic check · 54bbe600
    Thomas Petazzoni authored and Matt Turner's avatar Matt Turner committed
    The configure.ac logic added in commit
    2ef7f238
    
     ("configure: check if
    -latomic is needed for __atomic_*") makes the assumption that if a
    64-bit atomic intrinsic test program fails to link without -latomic,
    it is because we must use -latomic.
    
    Unfortunately, this is not completely correct: libatomic only appeared
    in gcc 4.8, and therefore gcc versions before that will not have
    libatomic, and therefore don't provide atomic intrinsics for all
    architectures. This issue was for example encountered on PowerPC with
    a gcc 4.7 toolchain, where the build fails with:
    
    powerpc-ctng_e500v2-linux-gnuspe/bin/ld: cannot find -latomic
    
    This commit aims at fixing that, by not assuming -latomic is
    available. The commit re-organizes the atomic intrinsics detection as
    follows:
    
     (1) Test if a program using 64-bit atomic intrinsics links properly,
         without -latomic. If this is the case, we have atomic intrinsics,
         and we're good to go.
    
     (2) If (1) has failed, then test to link the same program, but this
         time with -latomic in LDFLAGS. If this is the case, then we have
         atomic intrinsics, provided we link with -latomic.
    
    This has been tested in three situations:
    
     - On x86-64, where atomic instrinsics are all built-in, with no need
       for libatomic. In this case, config.log contains:
    
       GCC_ATOMIC_BUILTINS_SUPPORTED_FALSE='#'
       GCC_ATOMIC_BUILTINS_SUPPORTED_TRUE=''
       LIBATOMIC_LIBS=''
    
       This means: atomic intrinsics are available, and we don't need to
       link with libatomic.
    
     - On NIOS2, where atomic intrinsics are available, but some of them
       (64-bit ones) require using libatomic. In this case, config.log
       contains:
    
       GCC_ATOMIC_BUILTINS_SUPPORTED_FALSE='#'
       GCC_ATOMIC_BUILTINS_SUPPORTED_TRUE=''
       LIBATOMIC_LIBS='-latomic'
    
       This means: atomic intrinsics are available, and we need to link
       with libatomic.
    
     - On PowerPC with an old gcc 4.7 toolchain, where 32-bit atomic
       instrinsics are available, but not 64-bit atomic instrinsics, and
       there is no libatomic. In this case, config.log contains:
    
       GCC_ATOMIC_BUILTINS_SUPPORTED_FALSE=''
       GCC_ATOMIC_BUILTINS_SUPPORTED_TRUE='#'
    
       With means that atomic intrinsics are not usable.
    
    Reviewed-by: default avatarMatt Turner <mattst88@gmail.com>
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@bootlin.com>
    54bbe600