diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index b484af16e..f8a8ff5c9 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -43,8 +43,21 @@ ADD_LIBRARY(JFJochLogger STATIC ) TARGET_LINK_LIBRARIES(JFJochLogger PUBLIC spdlog::spdlog JFJochVersion) +# NVTX v3 is header-only and architecture-neutral. CUDA::nvtx3 is no help here: it only points at +# CUDAToolkit_INCLUDE_DIRS, which in a cross build is the target tree (targets/sbsa-linux/include), +# and NVIDIA's cross-sbsa packages do not put nvtx3 there. So look in the target tree first and then +# in the toolkit's own include dir next to nvcc; where neither has it, the ranges compile out. IF (JFJOCH_CUDA_AVAILABLE) - TARGET_LINK_LIBRARIES(JFJochLogger PRIVATE CUDA::nvtx3) # header-only NVTX v3 + FIND_PATH(JFJOCH_NVTX3_INCLUDE_DIR nvtx3/nvToolsExt.h + HINTS ${CUDAToolkit_INCLUDE_DIRS} "${CUDAToolkit_BIN_DIR}/../include" + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + IF (JFJOCH_NVTX3_INCLUDE_DIR) + TARGET_INCLUDE_DIRECTORIES(JFJochLogger SYSTEM PRIVATE "${JFJOCH_NVTX3_INCLUDE_DIR}") + TARGET_LINK_LIBRARIES(JFJochLogger PRIVATE ${CMAKE_DL_LIBS}) # NVTX loads its injection library with dlopen + TARGET_COMPILE_DEFINITIONS(JFJochLogger PRIVATE JFJOCH_USE_NVTX) + ELSE() + MESSAGE(STATUS "NVTX3 headers not found - NVTX ranges compiled out") + ENDIF() ENDIF() ADD_LIBRARY(JFJochZMQ STATIC ZMQWrappers.cpp ZMQWrappers.h) diff --git a/common/Logger.cpp b/common/Logger.cpp index f84d357db..82cd01e62 100644 --- a/common/Logger.cpp +++ b/common/Logger.cpp @@ -9,7 +9,7 @@ #include "Logger.h" #include "GitInfo.h" -#ifdef JFJOCH_USE_CUDA +#ifdef JFJOCH_USE_NVTX #include uint64_t NvtxRangeStart(const std::string &name) {