mirror of
https://github.com/NVIDIA/cuda-samples.git
synced 2026-10-25 22:28:17 +08:00
Bug 5133197: Add cmake toolchain and and update the CMakeList of some sample for tegra linux cross build
This commit is contained in:
@@ -4,7 +4,7 @@ find_path(FreeImage_INCLUDE_DIR
|
||||
)
|
||||
|
||||
find_library(FreeImage_LIBRARY
|
||||
NAMES freeimage
|
||||
NAMES freeimage FreeImage
|
||||
PATHS /usr/lib /usr/local/lib
|
||||
)
|
||||
|
||||
|
||||
61
cmake/Modules/FindNVSCI.cmake
Normal file
61
cmake/Modules/FindNVSCI.cmake
Normal file
@@ -0,0 +1,61 @@
|
||||
# Find the NVSCI libraries and headers
|
||||
#
|
||||
# This module defines the following variables:
|
||||
# NVSCI_FOUND - True if NVSCI was found
|
||||
# NVSCI_INCLUDE_DIRS - NVSCI include directories
|
||||
# NVSCI_LIBRARIES - NVSCI libraries
|
||||
# NVSCIBUF_LIBRARY - NVSCI buffer library
|
||||
# NVSCISYNC_LIBRARY - NVSCI sync library
|
||||
|
||||
# Find the libraries
|
||||
find_library(NVSCIBUF_LIBRARY
|
||||
NAMES nvscibuf libnvscibuf
|
||||
PATHS
|
||||
/usr/lib
|
||||
/usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu
|
||||
PATH_SUFFIXES nvidia
|
||||
)
|
||||
|
||||
find_library(NVSCISYNC_LIBRARY
|
||||
NAMES nvscisync libnvscisync
|
||||
PATHS
|
||||
$/usr/lib
|
||||
$/usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu
|
||||
PATH_SUFFIXES nvidia
|
||||
)
|
||||
|
||||
# Find the header files
|
||||
find_path(NVSCIBUF_INCLUDE_DIR
|
||||
NAMES nvscibuf.h
|
||||
PATHS
|
||||
/usr/include
|
||||
/usr/local/include
|
||||
)
|
||||
|
||||
find_path(NVSCISYNC_INCLUDE_DIR
|
||||
NAMES nvscisync.h
|
||||
PATHS
|
||||
/usr/include
|
||||
/usr/local/include
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(NVSCI
|
||||
REQUIRED_VARS
|
||||
NVSCIBUF_LIBRARY
|
||||
NVSCISYNC_LIBRARY
|
||||
NVSCIBUF_INCLUDE_DIR
|
||||
NVSCISYNC_INCLUDE_DIR
|
||||
)
|
||||
|
||||
if(NVSCI_FOUND)
|
||||
set(NVSCI_LIBRARIES ${NVSCIBUF_LIBRARY} ${NVSCISYNC_LIBRARY})
|
||||
set(NVSCI_INCLUDE_DIRS ${NVSCIBUF_INCLUDE_DIR} ${NVSCISYNC_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
mark_as_advanced(
|
||||
NVSCIBUF_LIBRARY
|
||||
NVSCISYNC_LIBRARY
|
||||
NVSCIBUF_INCLUDE_DIR
|
||||
NVSCISYNC_INCLUDE_DIR
|
||||
)
|
||||
59
cmake/toolchains/toolchain-aarch64-linux.cmake
Normal file
59
cmake/toolchains/toolchain-aarch64-linux.cmake
Normal file
@@ -0,0 +1,59 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user