我正在尝试将CUDA文件交叉编译为AARCH64。我有一个完全正常工作的gcc工具链,以及安装了所有必要库的CUDA工具包9.1。手动运行(nvcc -ccbin ...)非常有效。 现在,我想让它与CMake一起使用。 首先,我创建了一个toolchain.cmake文件,用于设置必要的交叉工具:
set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR aarch64 )
set( CMAKE_C_COMPILER /home/avishay/projects/test-sdk/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gcc )
set( CMAKE_CXX_COMPILER /home/avishay/projects/test-sdk/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-g++ )
set( CMAKE_ASM_COMPILER /home/avishay/projects/test-sdk/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-gcc )
set( CMAKE_AR /home/avishay/projects/test-sdk/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-ar CACHE FILEPATH "Archiver" )
set( CMAKE_C_FLAGS "--sysroot=/home/avishay/projects/test-sdk/sysroots/aarch64-poky-linux -O2 -pipe -g" CACHE STRING "CFLAGS" )
set( CMAKE_CXX_FLAGS "--sysroot=/home/avishay/projects/test-sdk/sysroots/aarch64-poky-linux -O2 -pipe -g" CACHE STRING "CXXFLAGS" )
set( CMAKE_ASM_FLAGS "--sysroot=/home/avishay/projects/test-sdk/sysroots/aarch64-poky-linux -O2 -pipe -g" CACHE STRING "CXXFLAGS" )
set( CMAKE_C_FLAGS_RELEASE "-DNDEBUG" CACHE STRING "Additional CFLAGS for release" )
set( CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG" CACHE STRING "Additional CXXFLAGS for release" )
set( CMAKE_ASM_FLAGS_RELEASE "-DNDEBUG" CACHE STRING "Additional ASM FLAGS for release" )
set( CMAKE_C_LINK_FLAGS "--sysroot=/home/avishay/projects/test-sdk/sysroots/aarch64-poky-linux -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed" CACHE STRING "LDFLAGS" )
set( CMAKE_CXX_LINK_FLAGS "--sysroot=/home/avishay/projects/test-sdk/sysroots/aarch64-poky-linux -O2 -pipe -g -fvisibility-inlines-hidden -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed" CACHE STRING "LDFLAGS" )
set( CMAKE_FIND_ROOT_PATH /home/avishay/projects/test-sdk/sysroots/aarch64-poky-linux)
使用此文件,我可以成功地为目标交叉编译C / C ++文件。 现在,我添加了以下行:
set( CMAKE_CUDA_COMPILER /usr/local/cuda-9.1/bin/nvcc)
有了这个,当我尝试编译.cu文件时,我在没有-ccbin指令的情况下调用NVCC编译器,并且没有从编译器设置派生的CCFLAGS,这给了我一个主机可执行文件,而不是目标可执行文件。 还尝试手动设置CUDA_HOST_COMPILER和CUDA_TOOLKIT_ROOT_DIR,但似乎没有任何区别。