mirror of
https://github.com/NVIDIA/cuda-samples.git
synced 2025-08-23 15:10:31 +08:00
Bug 5133216: Add QNX tooltrain and cross build support
This commit is contained in:
parent
9c0d5aaae6
commit
49307463b5
@ -19,6 +19,12 @@ endif()
|
||||
# Include directories and libraries
|
||||
include_directories(../../../Common)
|
||||
|
||||
# This sample is not supported on QNX
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
message(STATUS "Will not build sample ${PROJECT_NAME} - not supported on QNX")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Source file
|
||||
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||
find_package(OpenMP REQUIRED C CXX)
|
||||
|
@ -46,6 +46,14 @@ foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
|
||||
list(APPEND GENCODE_FLAGS "-gencode=arch=compute_${arch},code=sm_${arch}")
|
||||
endforeach()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
set(INCLUDES_LIST)
|
||||
foreach(dir ${CUDAToolkit_INCLUDE_DIRS})
|
||||
list(APPEND INCLUDES_LIST "-I${dir}")
|
||||
endforeach()
|
||||
string(JOIN " " INCLUDES "${INCLUDES_LIST}")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CUDA_FATBIN_FILE}
|
||||
COMMAND ${CMAKE_CUDA_COMPILER} ${INCLUDES} ${ALL_CCFLAGS} -Wno-deprecated-gpu-targets ${GENCODE_FLAGS} -o ${CUDA_FATBIN_FILE} -fatbin ${CUDA_KERNEL_SOURCE}
|
||||
|
@ -37,6 +37,6 @@ target_link_libraries(matrixMulDynlinkJIT PUBLIC
|
||||
CUDA::cuda_driver
|
||||
)
|
||||
|
||||
if(UNIX)
|
||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
target_link_libraries(matrixMulDynlinkJIT PUBLIC dl)
|
||||
endif()
|
||||
|
@ -48,6 +48,14 @@ foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
|
||||
list(APPEND GENCODE_FLAGS "-gencode=arch=compute_${arch},code=sm_${arch}")
|
||||
endforeach()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
set(INCLUDES_LIST)
|
||||
foreach(dir ${CUDAToolkit_INCLUDE_DIRS})
|
||||
list(APPEND INCLUDES_LIST "-I${dir}")
|
||||
endforeach()
|
||||
string(JOIN " " INCLUDES "${INCLUDES_LIST}")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CUDA_FATBIN_FILE}
|
||||
COMMAND ${CMAKE_CUDA_COMPILER} ${INCLUDES} ${ALL_CCFLAGS} -Wno-deprecated-gpu-targets ${GENCODE_FLAGS} -o ${CUDA_FATBIN_FILE} -fatbin ${CUDA_KERNEL_SOURCE}
|
||||
|
@ -45,6 +45,14 @@ foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
|
||||
list(APPEND GENCODE_FLAGS "-gencode=arch=compute_${arch},code=sm_${arch}")
|
||||
endforeach()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
set(INCLUDES_LIST)
|
||||
foreach(dir ${CUDAToolkit_INCLUDE_DIRS})
|
||||
list(APPEND INCLUDES_LIST "-I${dir}")
|
||||
endforeach()
|
||||
string(JOIN " " INCLUDES "${INCLUDES_LIST}")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CUDA_FATBIN_FILE}
|
||||
COMMAND ${CMAKE_CUDA_COMPILER} ${INCLUDES} ${ALL_CCFLAGS} -Wno-deprecated-gpu-targets ${GENCODE_FLAGS} -o ${CUDA_FATBIN_FILE} -fatbin ${CUDA_KERNEL_SOURCE}
|
||||
|
@ -45,6 +45,14 @@ foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
|
||||
list(APPEND GENCODE_FLAGS "-gencode=arch=compute_${arch},code=sm_${arch}")
|
||||
endforeach()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
set(INCLUDES_LIST)
|
||||
foreach(dir ${CUDAToolkit_INCLUDE_DIRS})
|
||||
list(APPEND INCLUDES_LIST "-I${dir}")
|
||||
endforeach()
|
||||
string(JOIN " " INCLUDES "${INCLUDES_LIST}")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CUDA_FATBIN_FILE}
|
||||
COMMAND ${CMAKE_CUDA_COMPILER} ${INCLUDES} ${ALL_CCFLAGS} -Wno-deprecated-gpu-targets ${GENCODE_FLAGS} -o ${CUDA_FATBIN_FILE} -fatbin ${CUDA_KERNEL_SOURCE}
|
||||
|
@ -50,6 +50,14 @@ foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
|
||||
list(APPEND GENCODE_FLAGS "-gencode=arch=compute_${arch},code=sm_${arch}")
|
||||
endforeach()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
set(INCLUDES_LIST)
|
||||
foreach(dir ${CUDAToolkit_INCLUDE_DIRS})
|
||||
list(APPEND INCLUDES_LIST "-I${dir}")
|
||||
endforeach()
|
||||
string(JOIN " " INCLUDES "${INCLUDES_LIST}")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CUDA_FATBIN_FILE}
|
||||
COMMAND ${CMAKE_CUDA_COMPILER} ${INCLUDES} ${ALL_CCFLAGS} -Wno-deprecated-gpu-targets ${GENCODE_FLAGS} -o ${CUDA_FATBIN_FILE} -fatbin ${CUDA_KERNEL_SOURCE}
|
||||
|
@ -18,6 +18,12 @@ endif()
|
||||
# Include directories and libraries
|
||||
include_directories(../../../Common)
|
||||
|
||||
# This sample is not supported on QNX
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
message(STATUS "Will not build sample ${PROJECT_NAME} - not supported on QNX")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Source file
|
||||
# Add target for bf16TensorCoreGemm
|
||||
add_executable(bf16TensorCoreGemm bf16TensorCoreGemm.cu)
|
||||
|
@ -17,6 +17,12 @@ else()
|
||||
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -lineinfo") # add line information to all builds for debug tools (exclusive to -G option)
|
||||
endif()
|
||||
|
||||
# This sample is not supported on QNX
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
message(STATUS "Will not build sample ${PROJECT_NAME} - not supported on QNX")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Include directories and libraries
|
||||
include_directories(../../../Common)
|
||||
|
||||
|
@ -20,6 +20,12 @@ endif()
|
||||
# Include directories and libraries
|
||||
include_directories(../../../Common)
|
||||
|
||||
# This sample is not supported on QNX
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
message(STATUS "Will not build sample ${PROJECT_NAME} - not supported on QNX")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Source file
|
||||
# Add target for globalToShmemAsyncCopy
|
||||
add_executable(globalToShmemAsyncCopy globalToShmemAsyncCopy.cu)
|
||||
|
@ -20,6 +20,12 @@ endif()
|
||||
# Include directories and libraries
|
||||
include_directories(../../../Common)
|
||||
|
||||
# This sample is not supported on QNX
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
message(STATUS "Will not build sample ${PROJECT_NAME} - not supported on QNX")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Source file
|
||||
# Add target for tf32TensorCoreGemm
|
||||
add_executable(tf32TensorCoreGemm tf32TensorCoreGemm.cu)
|
||||
|
@ -21,6 +21,12 @@ endif()
|
||||
# Include directories and libraries
|
||||
include_directories(../../../Common)
|
||||
|
||||
# This sample is not supported on QNX
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
message(STATUS "Will not build sample ${PROJECT_NAME} - not supported on QNX")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Source file
|
||||
# Add target for conjugateGradientMultiBlockCG
|
||||
add_executable(conjugateGradientMultiBlockCG conjugateGradientMultiBlockCG.cu)
|
||||
|
@ -20,6 +20,12 @@ endif()
|
||||
# Include directories and libraries
|
||||
include_directories(../../../Common)
|
||||
|
||||
# This sample is not supported on QNX
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
message(STATUS "Will not build sample ${PROJECT_NAME} - not supported on QNX")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Source file
|
||||
# Add target for conjugateGradientMultiDeviceCG
|
||||
add_executable(conjugateGradientMultiDeviceCG conjugateGradientMultiDeviceCG.cu)
|
||||
|
@ -19,6 +19,12 @@ endif()
|
||||
# Include directories and libraries
|
||||
include_directories(../../../Common)
|
||||
|
||||
# This sample is not supported on QNX
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
message(STATUS "Will not build sample ${PROJECT_NAME} - not supported on QNX")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Source file
|
||||
# Add target for jitLto
|
||||
add_executable(jitLto jitLto.cpp)
|
||||
|
@ -19,6 +19,12 @@ endif()
|
||||
# Include directories and libraries
|
||||
include_directories(../../../Common)
|
||||
|
||||
# This sample is not supported on QNX
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
message(STATUS "Will not build sample ${PROJECT_NAME} - not supported on QNX")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Source file
|
||||
# Add target for watershedSegmentationNPP
|
||||
add_executable(watershedSegmentationNPP watershedSegmentationNPP.cpp)
|
||||
|
@ -1,80 +1,27 @@
|
||||
#==============================================================================
|
||||
# Toolchain file for cross-compiling to aarch64 QNX
|
||||
#==============================================================================
|
||||
|
||||
# Cross-compiling, so tell CMake that we are not building for the host system
|
||||
set(CMAKE_SYSTEM_NAME QNX)
|
||||
|
||||
# Target processor architecture
|
||||
set(CMAKE_SYSTEM_PROCESSOR aarch64)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# QNX host and target come from environment
|
||||
# Adjust these or hard-code paths as needed:
|
||||
#
|
||||
# set(QNX_HOST "/path/to/qnx/host") # e.g. /qnx/qnx710/host/linux/x86_64
|
||||
# set(QNX_TARGET "/path/to/qnx/target") # e.g. /qnx/qnx710/target/qnx7
|
||||
#
|
||||
# You can also pass them on the cmake command line:
|
||||
# cmake -D QNX_HOST=/path/to/qnx/host \
|
||||
# -D QNX_TARGET=/path/to/qnx/target \
|
||||
# -DCMAKE_TOOLCHAIN_FILE=toolchain-aarch64-qnx.cmake ..
|
||||
#------------------------------------------------------------------------------
|
||||
set(QNX_HOST $ENV{QNX_HOST})
|
||||
set(QNX_TARGET $ENV{QNX_TARGET})
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# C/C++ Compilers from QNX
|
||||
#----------------------------------------------------------------------------
|
||||
find_program(QNX_QCC NAMES qcc PATHS "${QNX_HOST}/usr/bin")
|
||||
find_program(QNX_QPLUS NAMES q++ PATHS "${QNX_HOST}/usr/bin")
|
||||
message(STATUS "QNX_HOST = ${QNX_HOST}")
|
||||
message(STATUS "QNX_TARGET = ${QNX_TARGET}")
|
||||
|
||||
if(NOT QNX_QCC OR NOT QNX_QPLUS)
|
||||
message(FATAL_ERROR "Could not find qcc or q++ in QNX_HOST=${QNX_HOST}/usr/bin")
|
||||
endif()
|
||||
set(CMAKE_C_COMPILER ${QNX_HOST}/usr/bin/qcc)
|
||||
set(CMAKE_CXX_COMPILER ${QNX_HOST}/usr/bin/q++)
|
||||
|
||||
set(CMAKE_C_COMPILER "${QNX_QCC}")
|
||||
set(CMAKE_CXX_COMPILER "${QNX_QPLUS}")
|
||||
set(CMAKE_C_COMPILER_TARGET aarch64)
|
||||
set(CMAKE_CXX_COMPILER_TARGET aarch64)
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Sysroot (if you want CMake to know the default sysroot)
|
||||
#----------------------------------------------------------------------------
|
||||
# This is optional, but convenient if the QNX headers/libraries must be found:
|
||||
#----------------------------------------------------------------------------
|
||||
if(DEFINED QNX_TARGET)
|
||||
set(CMAKE_SYSROOT "${QNX_TARGET}")
|
||||
endif()
|
||||
set(CMAKE_CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER} CACHE STRING "" FORCE)
|
||||
set(CMAKE_CUDA_COMPILER_ID_TEST_FLAGS_FIRST "-nodlink -L${CUDA_ROOT}/lib64 -L${CUDA_ROOT}/lib -I${CUDA_ROOT}/include")
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Additional preprocessor definitions & include paths
|
||||
#----------------------------------------------------------------------------
|
||||
add_compile_options(
|
||||
-D_QNX_SOURCE
|
||||
-DWIN_INTERFACE_CUSTOM
|
||||
)
|
||||
set(CMAKE_C_FLAGS " \"-V${__qnx_gcc_ver},gcc_ntoaarch64le\"")
|
||||
set(CMAKE_CXX_FLAGS " \"-V${__qnx_gcc_ver},gcc_ntoaarch64le\"")
|
||||
set(CMAKE_CUDA_FLAGS " --qpp-config=${__qnx_gcc_ver},gcc_ntoaarch64le")
|
||||
set(AUTOMAGIC_NVCC_FLAGS --qpp-config=${__qnx_gcc_ver},gcc_ntoaarch64le CACHE STRING "automagic feature detection flags for cross build")
|
||||
add_link_options("-V${__qnx_gcc_ver},gcc_ntoaarch64le")
|
||||
|
||||
# Add an include path to /usr/include/aarch64-qnx-gnu:
|
||||
include_directories("/usr/include/aarch64-qnx-gnu")
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Linker flags
|
||||
#----------------------------------------------------------------------------
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/lib/aarch64-qnx-gnu")
|
||||
|
||||
# Because the Makefile also adds -Wl,-rpath-link,/usr/lib/aarch64-qnx-gnu:
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath-link,/usr/lib/aarch64-qnx-gnu")
|
||||
|
||||
# If you have a “target filesystem” (TARGET_FS) to link with:
|
||||
# -L$(TARGET_FS)/usr/lib
|
||||
# -L$(TARGET_FS)/usr/libnvidia
|
||||
# etc., you can optionally extend the link flags. For example:
|
||||
#
|
||||
# if(DEFINED TARGET_FS)
|
||||
# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} \
|
||||
# -L${TARGET_FS}/usr/lib -Wl,-rpath-link,${TARGET_FS}/usr/lib \
|
||||
# -L${TARGET_FS}/usr/libnvidia -Wl,-rpath-link,${TARGET_FS}/usr/libnvidia")
|
||||
# include_directories("${TARGET_FS}/../include")
|
||||
# endif()
|
||||
|
||||
# If you need to link additional libraries, e.g. -lslog2 under certain conditions:
|
||||
# list(APPEND EXTRA_LIBS "slog2")
|
||||
# ...
|
||||
#----------------------------------------------------------------------------
|
||||
set(CROSS_COMPILE_FOR_QNX ON CACHE BOOL "Cross compiling for QNX platforms")
|
||||
string(APPEND CMAKE_CXX_FLAGS " -D_QNX_SOURCE")
|
||||
string(APPEND CMAKE_CUDA_FLAGS " -D_QNX_SOURCE")
|
||||
|
Loading…
x
Reference in New Issue
Block a user