كيفية جعل CUDA عبر ترجمة مع CMake

أحاول تجميع ملف 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 ، أحصل على المترجم NVCC استدعى دون توجيه -ccbin وبدون CCFLAGS مشتقة من إعدادات المجمع ، الذي يعطيني مضيف قابل للتنفيذ ، وليس هدف قابل للتنفيذ. حاول أيضًا تعيين CUDA_HOST_COMPILER و CUDA_TOOLKIT_ROOT_DIR يدويًا ، ولكن لا يبدو أن هناك أي فرق.

0
يجب أن تكون قادرًا على إضافة خيار ccbin عبر CUDA_NVCC_FLAGS
وأضاف المؤلف talonmies, مصدر