Search code examples
gcccmakeclion

Wrong compiler used in the target offload process in CLion during CUDA compilation


I'm trying to configure a very simple CUDA project in CLion 2020.1.

I'm on Fedora 31 (default gcc is 9.3), but compiled gcc 8.2 from source to use it with Cuda Toolkit 10.2.

The Cuda samples compile and run fine using the provided make, so the compiler is working and playing nicely with nvcc.

In CLion, I have googletest downloaded with Conan. The Conan profile specifies 8.2 as the gcc version to be used.

All references to GCC in CMakeOutput.log are to the correct bin file. And yet, I keep getting the compiler error because the wrong version is being used.

In my CMakeLists.txt, I have:

set(gcc82 /usr/local/gcc82/bin)
set(CMAKE_C_COMPILER ${gcc82}/gcc82)
set(CMAKE_CXX_COMPILER ${gcc82}/g++82)
set(CMAKE_CUDA_HOST_COMPILER ${gcc82}/g++82)

project(RBF-Interpolation-Tests CUDA CXX)

The CMake configuration step seems to be happy too:

/opt/clion-2018.3.4/bin/cmake/linux/bin/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=/usr/local/gcc82/bin/gcc82 -DCMAKE_CXX_COMPILER=/usr/local/gcc82/bin/g++82 -G "CodeBlocks - Unix Makefiles" /home/rafael/Projects/bitbucket/RBF-Interpolation-Tests
-- The CUDA compiler identification is NVIDIA 10.2.89
-- The CXX compiler identification is GNU 8.2.0
-- Check for working CUDA compiler: /usr/local/cuda/bin/nvcc
-- Check for working CUDA compiler: /usr/local/cuda/bin/nvcc -- works
-- Detecting CUDA compiler ABI info
-- Detecting CUDA compiler ABI info - done
-- Check for working CXX compiler: /usr/local/gcc82/bin/g++82
-- Check for working CXX compiler: /usr/local/gcc82/bin/g++82 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Conan: Adjusting output directories
-- Conan: Using cmake global configuration
-- Conan: Adjusting default RPATHs Conan policies
-- Conan: Adjusting language standard
-- Current conanbuildinfo.cmake directory: /home/rafael/Projects/bitbucket/RBF-Interpolation-Tests/build
-- Conan: Compiler GCC>=5, checking major version 8.2
-- Conan: Checking correct version: 8.2
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rafael/Projects/bitbucket/RBF-Interpolation-Tests/build

Despite the path to CLion on my machine, the version is the most recent:

CLion 2020.1
Build #CL-201.6668.126, built on April 9, 2020
Runtime version: 11.0.6+8-b765.25 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 5.5.17-200.fc31.x86_64
GC: ParNew, ConcurrentMarkSweep
Memory: 10227M
Cores: 12
Registry: run.processes.with.pty=TRUE
Non-Bundled Plugins: GLSL, com.jfrog.conan.clion, lermitage.intellij.extra.icons
Current Desktop: GNOME

The error I always get is:

Cannot get compiler information:
    Compiler exited with error code 1: gcc -xc++ -D__CUDA_ARCH__=300 -E -x c++ -DCUDA_DOUBLE_MATH_FUNCTIONS -D__CUDACC__ -D__NVCC__ -I/home/rafael/.conan/data/gtest/1.10.0/_/_/package/65eda67f91bbd445d66656724e8acbe2afb564b0/include -I/usr/local/cuda/bin/../targets/x86_64-linux/include -D__CUDACC_VER_MAJOR__=10 -D__CUDACC_VER_MINOR__=2 -D__CUDACC_VER_BUILD__=89 -include cuda_runtime.h -m64 -g -gdwarf-2 -fpch-preprocess -v -dD -E
    Using built-in specs.
    COLLECT_GCC=gcc
    OFFLOAD_TARGET_NAMES=nvptx-none
    OFFLOAD_TARGET_DEFAULT=1
    Target: x86_64-redhat-linux
    Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
    Thread model: posix
    gcc version 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC) 
    COLLECT_GCC_OPTIONS='-D' '__CUDA_ARCH__=300' '-E' '-D' 'CUDA_DOUBLE_MATH_FUNCTIONS' '-D' '__CUDACC__' '-D' '__NVCC__' '-I' '/home/rafael/.conan/data/gtest/1.10.0/_/_/package/65eda67f91bbd445d66656724e8acbe2afb564b0/include' '-I' '/usr/local/cuda/bin/../targets/x86_64-linux/include' '-D' '__CUDACC_VER_MAJOR__=10' '-D' '__CUDACC_VER_MINOR__=2' '-D' '__CUDACC_VER_BUILD__=89' '-include' 'cuda_runtime.h' '-m64' '-g' '-gdwarf-2' '-fpch-preprocess' '-v' '-dD' '-E' '-D' '___CIDR_DEFINITIONS_END' '-mtune=generic' '-march=x86-64'

which is definitely the wrong GCC version.

I've tried specifying the GCC version in Settings -> Cmake -> Environment with CC=/usr/local/gcc82/bin;CXX=/usr/local/gcc82/bin/g++82, and also in Settings -> Toolchains -> C and C++ Compiler, and the result is the same.

I have no idea why the target offloading process is not picking up the specified gcc version. Any ideas?


Solution

  • So, I filed a bug against CLion about this issue - the one @MaximBanaev pointed out:

    CPP-19089: Can't get CLion to use a non-default C++ compiler with CUDA

    CLion has simply not properly taken this issue into account in its toolchain mechanism. The issue is not even just the environment - there needs to be proper UI to set the "backing" C++ compiler for CUDA, in addition to CLion noticing the relevant settings when it comes up.

    This isn't the only "fundamental" bug I've encountered trying to use CLion with CUDA projects. The support is still rather half-baked IMHO. I wish they get it right, because I would like to this IDE out and for now, I can't.