cuda-samples/cmake/toolchains/toolchain-aarch64-linux.cmake

60 lines
2.1 KiB
CMake

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
# Specify the cross-compilers
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_AR aarch64-linux-gnu-ar)
set(CMAKE_RANLIB aarch64-linux-gnu-ranlib)
# Indicate cross-compiling.
set(CMAKE_CROSSCOMPILING TRUE)
# Set CUDA compiler flags
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -ccbin ${CMAKE_CXX_COMPILER}" CACHE STRING "" FORCE)
# Use a local sysroot copy
if(DEFINED TARGET_FS)
set(CMAKE_SYSROOT "${TARGET_FS}")
list(APPEND CMAKE_FIND_ROOT_PATH
"/usr/local/cuda/targets/aarch64-linux"
)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler --sysroot=${TARGET_FS}")
set(LIB_PATHS
"${TARGET_FS}/usr/lib/"
"${TARGET_FS}/usr/lib/aarch64-linux-gnu"
"${TARGET_FS}/usr/lib/aarch64-linux-gnu/nvidia"
)
# Add rpath-link flags for all library paths
foreach(lib_path ${LIB_PATHS})
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath-link,${lib_path}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath-link,${lib_path}")
endforeach()
# Add the real path of CUDA installation on TARGET_FS for nvvm
find_program(TARGET_CUDA_NVCC_PATH nvcc
PATH "${TARGET_FS}/usr/local/cuda/bin"
NO_DEFAULT_PATH
NO_CMAKE_PATH
)
if(TARGET_CUDA_NVCC_PATH)
# Get the real path of CUDA installation on TARGET_FS
get_filename_component(TARGET_CUDA_PATH "${TARGET_CUDA_NVCC_PATH}" REALPATH)
get_filename_component(TARGET_CUDA_ROOT "${TARGET_CUDA_PATH}" DIRECTORY)
get_filename_component(TARGET_CUDA_ROOT "${TARGET_CUDA_ROOT}" DIRECTORY)
endif()
if (DEFINED TARGET_CUDA_ROOT)
list(APPEND CMAKE_LIBRARY_PATH "${TARGET_CUDA_ROOT}/targets/aarch64-linux/lib")
# Define NVVM paths for build and runtime
set(ENV{LIBNVVM_HOME} "${TARGET_CUDA_ROOT}")
set(RUNTIME_LIBNVVM_PATH "${TARGET_CUDA_ROOT}/nvvm/lib64")
endif()
endif()