diff --git a/Samples/0_Introduction/UnifiedMemoryStreams/CMakeLists.txt b/Samples/0_Introduction/UnifiedMemoryStreams/CMakeLists.txt index be358957..d92baee3 100644 --- a/Samples/0_Introduction/UnifiedMemoryStreams/CMakeLists.txt +++ b/Samples/0_Introduction/UnifiedMemoryStreams/CMakeLists.txt @@ -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) diff --git a/Samples/0_Introduction/matrixMulDrv/CMakeLists.txt b/Samples/0_Introduction/matrixMulDrv/CMakeLists.txt index aa2df62a..5cdb581c 100644 --- a/Samples/0_Introduction/matrixMulDrv/CMakeLists.txt +++ b/Samples/0_Introduction/matrixMulDrv/CMakeLists.txt @@ -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} diff --git a/Samples/0_Introduction/matrixMulDynlinkJIT/CMakeLists.txt b/Samples/0_Introduction/matrixMulDynlinkJIT/CMakeLists.txt index 3f3322f4..70296afc 100644 --- a/Samples/0_Introduction/matrixMulDynlinkJIT/CMakeLists.txt +++ b/Samples/0_Introduction/matrixMulDynlinkJIT/CMakeLists.txt @@ -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() diff --git a/Samples/0_Introduction/simpleDrvRuntime/CMakeLists.txt b/Samples/0_Introduction/simpleDrvRuntime/CMakeLists.txt index 487eb8dd..04684da2 100644 --- a/Samples/0_Introduction/simpleDrvRuntime/CMakeLists.txt +++ b/Samples/0_Introduction/simpleDrvRuntime/CMakeLists.txt @@ -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} diff --git a/Samples/0_Introduction/simpleTextureDrv/CMakeLists.txt b/Samples/0_Introduction/simpleTextureDrv/CMakeLists.txt index ecd71b1d..befbfd05 100644 --- a/Samples/0_Introduction/simpleTextureDrv/CMakeLists.txt +++ b/Samples/0_Introduction/simpleTextureDrv/CMakeLists.txt @@ -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} diff --git a/Samples/0_Introduction/vectorAddDrv/CMakeLists.txt b/Samples/0_Introduction/vectorAddDrv/CMakeLists.txt index 664fce2f..abbef92e 100644 --- a/Samples/0_Introduction/vectorAddDrv/CMakeLists.txt +++ b/Samples/0_Introduction/vectorAddDrv/CMakeLists.txt @@ -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} diff --git a/Samples/2_Concepts_and_Techniques/threadMigration/CMakeLists.txt b/Samples/2_Concepts_and_Techniques/threadMigration/CMakeLists.txt index ff7ec77c..9603b6c6 100644 --- a/Samples/2_Concepts_and_Techniques/threadMigration/CMakeLists.txt +++ b/Samples/2_Concepts_and_Techniques/threadMigration/CMakeLists.txt @@ -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} diff --git a/Samples/3_CUDA_Features/bf16TensorCoreGemm/CMakeLists.txt b/Samples/3_CUDA_Features/bf16TensorCoreGemm/CMakeLists.txt index c395548b..3e949ec6 100644 --- a/Samples/3_CUDA_Features/bf16TensorCoreGemm/CMakeLists.txt +++ b/Samples/3_CUDA_Features/bf16TensorCoreGemm/CMakeLists.txt @@ -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) diff --git a/Samples/3_CUDA_Features/dmmaTensorCoreGemm/CMakeLists.txt b/Samples/3_CUDA_Features/dmmaTensorCoreGemm/CMakeLists.txt index a48c1c6b..cb94a68b 100644 --- a/Samples/3_CUDA_Features/dmmaTensorCoreGemm/CMakeLists.txt +++ b/Samples/3_CUDA_Features/dmmaTensorCoreGemm/CMakeLists.txt @@ -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) diff --git a/Samples/3_CUDA_Features/globalToShmemAsyncCopy/CMakeLists.txt b/Samples/3_CUDA_Features/globalToShmemAsyncCopy/CMakeLists.txt index e2a790ed..caf971b0 100644 --- a/Samples/3_CUDA_Features/globalToShmemAsyncCopy/CMakeLists.txt +++ b/Samples/3_CUDA_Features/globalToShmemAsyncCopy/CMakeLists.txt @@ -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) diff --git a/Samples/3_CUDA_Features/tf32TensorCoreGemm/CMakeLists.txt b/Samples/3_CUDA_Features/tf32TensorCoreGemm/CMakeLists.txt index 139b63a7..084d52f5 100644 --- a/Samples/3_CUDA_Features/tf32TensorCoreGemm/CMakeLists.txt +++ b/Samples/3_CUDA_Features/tf32TensorCoreGemm/CMakeLists.txt @@ -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) diff --git a/Samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/CMakeLists.txt b/Samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/CMakeLists.txt index 924e640f..3d67e92c 100644 --- a/Samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/CMakeLists.txt @@ -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) diff --git a/Samples/4_CUDA_Libraries/conjugateGradientMultiDeviceCG/CMakeLists.txt b/Samples/4_CUDA_Libraries/conjugateGradientMultiDeviceCG/CMakeLists.txt index 3d02538d..ccf76ee7 100644 --- a/Samples/4_CUDA_Libraries/conjugateGradientMultiDeviceCG/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/conjugateGradientMultiDeviceCG/CMakeLists.txt @@ -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) diff --git a/Samples/4_CUDA_Libraries/jitLto/CMakeLists.txt b/Samples/4_CUDA_Libraries/jitLto/CMakeLists.txt index 42520c7d..23c33291 100644 --- a/Samples/4_CUDA_Libraries/jitLto/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/jitLto/CMakeLists.txt @@ -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) diff --git a/Samples/4_CUDA_Libraries/watershedSegmentationNPP/CMakeLists.txt b/Samples/4_CUDA_Libraries/watershedSegmentationNPP/CMakeLists.txt index cd38056a..d9116f36 100644 --- a/Samples/4_CUDA_Libraries/watershedSegmentationNPP/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/watershedSegmentationNPP/CMakeLists.txt @@ -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) diff --git a/cmake/toolchains/toolchain-aarch64-qnx.cmake b/cmake/toolchains/toolchain-aarch64-qnx.cmake index 98e6f3d0..55cf5fbe 100644 --- a/cmake/toolchains/toolchain-aarch64-qnx.cmake +++ b/cmake/toolchains/toolchain-aarch64-qnx.cmake @@ -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")