Error: __float128 is not supported on this target

the error above is reported when CMake cannot detect clang as the cuda compiler. The issue can be worked around by -DCMAKE_CUDA_FLAGS=-std=c++17 because __float128 is a GNU extenstion coming from -std=gnu++17. The CMake developers say(here) that using GNU extensions is clang’s default and hence not their problem. My question is, should this not work “out of the box”, without me having to manually set the standard to disable GNU extensions? Is there a configure option when compiling clang to tell it not to use GNU extensions to the standard?

details:cmake 3.22.0, llvm-project from git on July 27 2023, cuda 12.0

CMake Error at /global/common/software/nersc/pm-2021q4/sw/cmake-3.22.0/share/cmake-3.22/Modules/CMakeDetermineCompilerId.cmake:726 (message):
  Compiling the CUDA compiler identification source file
  "CMakeCUDACompilerId.cu" failed.

  Compiler:
  /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/bin/clang++


  Build flags:

  Id flags:
  --cuda-path=/opt/nvidia/hpc_sdk/Linux_x86_64/23.1/cuda/12.0;--cuda-gpu-arch=sm_80
  -v

  

  The output was:

  1

  clang version 18.0.0 (https://github.com/llvm/llvm-project.git
  2f976b921071cf4349175554f690798a0d2b81f3)

  Target: x86_64-unknown-linux-gnu

  Thread model: posix

  InstalledDir:
  /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/bin

  Found candidate GCC installation: /usr/lib64/gcc/x86_64-suse-linux/7

  Selected GCC installation: /usr/lib64/gcc/x86_64-suse-linux/7

  Candidate multilib: .;@m64

  Selected multilib: .;@m64

  Found CUDA installation: /opt/nvidia/hpc_sdk/Linux_x86_64/23.1/cuda/12.0,
  version 12.0

  clang++: warning: CUDA version 12.0 is only partially supported
  [-Wunknown-cuda-version]

   "/global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/bin/clang-18" -cc1 -triple nvptx64-nvidia-cuda -aux-triple x86_64-unknown-linux-gnu -S -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCUDACompilerId.cu -mrelocation-model static -mframe-pointer=all -fno-rounding-math -no-integrated-as -aux-target-cpu x86-64 -fcuda-is-device -mllvm -enable-memcpyopt-without-libcalls -fcuda-allow-variadic-functions -mlink-builtin-bitcode /opt/nvidia/hpc_sdk/Linux_x86_64/23.1/cuda/12.0/nvvm/libdevice/libdevice.10.bc -target-sdk-version=12.0 -target-cpu sm_80 -target-feature +ptx80 -debugger-tuning=gdb -fno-dwarf-directory-asm -v -resource-dir /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18 -internal-isystem /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18/include/cuda_wrappers -include __clang_cuda_runtime_wrapper.h -I/opt/nvidia/hpc_sdk/Linux_x86_64/23.1/math_libs/12.0/include -I/opt/nvidia/hpc_sdk/Linux_x86_64/23.1/cuda/12.0/include -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7 -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/x86_64-suse-linux -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/backward -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7 -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/x86_64-suse-linux -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/backward -internal-isystem /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18/include -internal-isystem /usr/local/include -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -internal-isystem /opt/nvidia/hpc_sdk/Linux_x86_64/23.1/cuda/12.0/include -internal-isystem /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18/include -internal-isystem /usr/local/include -internal-isystem /usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fno-autolink -fdebug-compilation-dir=/pscratch/sd/l/loring/sensei-build-clang_cuda_omp/CMakeFiles/3.22.0/CompilerIdCUDA -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -cuid=8589b7722c49d3d4 -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/CMakeCUDACompilerId-sm_80-eb7a2e.s -x cuda CMakeCUDACompilerId.cu

  clang -cc1 version 18.0.0 based upon LLVM 18.0.0git default target
  x86_64-unknown-linux-gnu

  ignoring nonexistent directory "/include"

  ignoring nonexistent directory "/include"

  ignoring duplicate directory
  "/usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7"

  ignoring duplicate directory
  "/usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/x86_64-suse-linux"


  ignoring duplicate directory
  "/usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/backward"

  ignoring duplicate directory
  "/opt/nvidia/hpc_sdk/Linux_x86_64/23.1/cuda/12.0/include"

    as it is a non-system directory that duplicates a system directory

  ignoring duplicate directory
  "/global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18/include"


  ignoring duplicate directory "/usr/local/include"

  ignoring duplicate directory
  "/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/include"

  ignoring duplicate directory "/usr/include"

  #include "..." search starts here:

  #include <...> search starts here:

   /opt/nvidia/hpc_sdk/Linux_x86_64/23.1/math_libs/12.0/include
   /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18/include/cuda_wrappers
   /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7
   /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/x86_64-suse-linux
   /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/backward
   /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18/include
   /usr/local/include
   /usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/include
   /usr/include
   /opt/nvidia/hpc_sdk/Linux_x86_64/23.1/cuda/12.0/include

  End of search list.

  In file included from <built-in>:1:

  In file included from
  /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18/include/__clang_cuda_runtime_wrapper.h:41:


  In file included from
  /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18/include/cuda_wrappers/cmath:27:


  In file included from
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/cmath:47:

  
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/std_abs.h:102:7:
  error: __float128 is not supported on this target

    102 |   abs(__float128 __x)
        |       ^

  
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/std_abs.h:101:3:
  error: __float128 is not supported on this target

    101 |   __float128
        |   ^

  
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/std_abs.h:102:18:
  note: '__x' defined here

    102 |   abs(__float128 __x)
        |                  ^

  
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/std_abs.h:102:18:
  note: '__x' defined here

  
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/std_abs.h:102:18:
  note: '__x' defined here

  In file included from <built-in>:1:

  In file included from
  /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18/include/__clang_cuda_runtime_wrapper.h:41:


  In file included from
  /global/common/software/nersc/pm-stable/sw/clang/v17-July-27-2023/lib/clang/18/include/cuda_wrappers/cmath:27:


  In file included from
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/cmath:1914:

  In file included from
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/specfun.h:45:


  In file included from
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/stl_algobase.h:64:


  In file included from
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/stl_pair.h:59:


  In file included from
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/move.h:54:


  
  /usr/lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/type_traits:347:39:
  error: __float128 is not supported on this target

    347 |     struct __is_floating_point_helper<__float128>
        |                                       ^

  3 errors generated when compiling for sm_80.

  

  

Call Stack (most recent call first):
  /global/common/software/nersc/pm-2021q4/sw/cmake-3.22.0/share/cmake-3.22/Modules/CMakeDetermineCompilerId.cmake:6 (CMAKE_DETERMINE_COMPILER_ID_BUILD)
  /global/common/software/nersc/pm-2021q4/sw/cmake-3.22.0/share/cmake-3.22/Modules/CMakeDetermineCompilerId.cmake:48 (__determine_compiler_id_test)
  /global/common/software/nersc/pm-2021q4/sw/cmake-3.22.0/share/cmake-3.22/Modules/CMakeDetermineCUDACompiler.cmake:298 (CMAKE_DETERMINE_COMPILER_ID)
  CMake/cuda.cmake:17 (enable_language)
  CMakeLists.txt:7 (include)