diff options
author | Sitsofe Wheeler <sitsofe@yahoo.com> | 2020-07-25 08:46:15 +0100 |
---|---|---|
committer | Sitsofe Wheeler <sitsofe@yahoo.com> | 2020-07-25 17:20:43 +0100 |
commit | bb012314f734b9de3b2fc198db2c4e3e060db240 (patch) | |
tree | 877c3385a105da1f79d2449fdec5e387f09fd6ec /configure | |
parent | 1d458e5b8044d81b96cccfc82e3fd99cbb1eebf9 (diff) | |
download | fio-bb012314f734b9de3b2fc198db2c4e3e060db240.tar.gz fio-bb012314f734b9de3b2fc198db2c4e3e060db240.tar.bz2 |
configure: check for C11 atomics support
Since 3932f8be718fc4ca3b863c51c0d567821d75c003 ("arch/arch.h: Introduce
atomic_{load_acquire,store_release}()") fio has needed C11 atomic
support and this is only provided from gcc 4.9 / clang 3.6 onwards
(http://stdatomic.gforge.inria.fr/#sec-2 ). Make this clearer by
doing the following:
- Add configure check for C11 atomics support and bail out with a
(friendly) message pointing at compiler version if it's not there
- Remove the minimum compiler version check from compiler.h as it is now
redundant
I've avoided doing an explicit compiler version check because Apple's
clang can have a wildly different version to upstream
(https://stackoverflow.com/a/33614612 ).
Tested on:
- CentOS 7 with default gcc 4.8.5 (correctly errors with message)
- CentOS 7 docker container using llvm-toolset-7 to provide clang 5.0.1
(works)
- CentOS 7 docker container using devtool-toolset-7 to provide gcc 7.3.1
(works)
- Ubuntu 16.04 with clang-3.5 (correctly errors with message)
- Ubuntu 16.04 with clang-3.6 installed (works)
- macOS 10.14.6 with clang-1001.0.46.4 (works)
v2:
- Rebase
- Reword failure message and stop mentioning fio version number
Fixes: https://github.com/axboe/fio/issues/1047
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Diffstat (limited to 'configure')
-rwxr-xr-x | configure | 33 |
1 files changed, 19 insertions, 14 deletions
@@ -496,20 +496,6 @@ else fi ########################################## -# check compiler version - -cat > $TMPC <<EOF -#include "$(pwd)/compiler/compiler.h" -int main(void) -{ - return 0; -} -EOF -if ! compile_prog "" "" "compiler check"; then - fatal "Your compiler is too old, needs GCC 4.9 or higher" -fi - -########################################## # check endianness if test "$bigendian" != "yes" ; then bigendian="no" @@ -565,6 +551,25 @@ fi print_config "Static build" "$build_static" ########################################## +# check for C11 atomics support +cat > $TMPC <<EOF +#include <stdatomic.h> +int main(void) +{ + _Atomic unsigned v; + atomic_load(&v); + return 0; +} +EOF +if ! compile_prog "" "" "C11 atomics"; then + echo + echo "Your compiler doesn't support C11 atomics. gcc 4.9/clang 3.6 are the" + echo "minimum versions with it - perhaps your compiler is too old?" + fatal "C11 atomics support not found" +fi + + +########################################## # check for wordsize wordsize="0" cat > $TMPC <<EOF |