cmake_minimum_required (VERSION 3.18) project (vksc_samples) message("Current platform: ${CMAKE_SYSTEM_PROCESSOR}") option(HOST_BUILD "Enable host build(_host will be generated)" OFF) if (NOT HOST_BUILD) # Select the build platform is host or target if ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") message("Using cross compile") set(CROSS_COMPILE "ON") elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64") message("Using target build") # PDK_ROOT is set in toolchain cmake file when using cross-compile, # but if build on target, no toolchain cmake file needs to be specified, # so just set the PDK_ROOT here. set(PDK_ROOT "${CMAKE_SOURCE_DIR}/../../..") set(TARGET_OS "Linux") endif() if (NOT HOST_BUILD AND NOT PDK_ROOT) message(FATAL_ERROR "PDK_ROOT is not specified!") endif() # Set the pdk source root [pdk/drive-linux or pdk/drive-qnx] if (TARGET_OS STREQUAL "Linux") set(PDK_SOURCE_ROOT "${PDK_ROOT}/drive-linux") elseif (TARGET_OS STREQUAL "QNX") set(PDK_SOURCE_ROOT "${PDK_ROOT}/drive-qnx") # For QNX, also need to add bsp libs into the searching path set(TARGET_LIB_PATH "${PDK_SOURCE_ROOT}/nvidia-bsp/aarch64le/usr/lib") else() message(FATAL_ERROR "Only Linux and QNX are supported!") endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") set(VULKAN_HEADER_PATH "${PDK_SOURCE_ROOT}/include") set(VULKANSC_HEADER_PATH "${PDK_SOURCE_ROOT}/include/VulkanSC") set(NVSCI_HEADER_PATH "${PDK_SOURCE_ROOT}/include") list(APPEND TARGET_LIB_PATH "${PDK_SOURCE_ROOT}/lib-target") message("Vulkan header DIR: ${VULKAN_HEADER_PATH}") message("VulkanSC header DIR: ${VULKANSC_HEADER_PATH}") message("NvSci header DIR: ${VULKANSC_HEADER_PATH}") endif() set(EXTERNAL_LIBS_PATH "${CMAKE_SOURCE_DIR}/external") set(EXTERNAL_HEADERS_PATH "${CMAKE_SOURCE_DIR}/external" "${CMAKE_SOURCE_DIR}/external/ktx/include") set(COMMON_HEADERS_PATH "${CMAKE_SOURCE_DIR}/common") set(OUTPUT_BINARY_DIR "${CMAKE_BINARY_DIR}/bin") if (HOST_BUILD) # Build target on host, so user can run the binary on host to generate the # json file. In this build path, we won't build VulkanSC binary, as cmake # doesn't support switching toolchain in one CMakeLists file. # run cmake with `-DHOST_BUILD` to enable host build find_package(PkgConfig) pkg_check_modules(PKG_VULKAN REQUIRED vulkan) find_path(VULKAN_HEADER_PATH NAMES vulkan.h HINTS ${PKG_VULKAN_INCLUDEDIR} ${PKG_VULKAN_INCLUDEDIR}/vulkan REQUIRED) find_path(VULKAN_LIB_PATH NAMES libvulkan.so HINTS ${PKG_VULKAN_LIBRARY_DIRS} REQUIRED) elseif (CROSS_COMPILE) # Build vk_01tri on target platform, so user can run the binary # on target to generate the json file. set(VULKAN_LIB_PATH "${TARGET_LIB_PATH}") message("Vulkan lib DIR: ${VULKAN_LIB_PATH}") # vulkansc driver lib should be in the same dir with vulkan lib set(VULKANSC_LIB_PATH "${TARGET_LIB_PATH}") message("VulkanSC lib DIR: ${VULKAN_LIB_PATH}") else() # For target build, need to override header path and lib path # TODO: No vulkan headers packaged to target_rootfs set(VULKAN_HEADER_PATH "/usr/include") message("Vulkan header DIR: ${VULKAN_HEADER_PATH}") set(VULKANSC_HEADER_PATH "/usr/include/VulkanSC") message("VulkanSC header DIR: ${VULKANSC_HEADER_PATH}") set(TARGET_LIB_PATH "/usr/lib/aarch64-linux-gnu;/usr/lib;/usr/lib/aarch64-linux-gnu/tegra") set(VULKAN_LIB_PATH "${TARGET_LIB_PATH}") message("Vulkan lib DIR: ${VULKAN_LIB_PATH}") # vulkansc driver lib should be in the same dir with vulkan lib set(VULKANSC_LIB_PATH "${TARGET_LIB_PATH}") message("VulkanSC lib DIR: ${VULKANSC_LIB_PATH}") endif() if (NOT TARGET_OS STREQUAL "QNX") # Search for vulkan loader library libvulkan.so, but we don't need vulkan loader on QNX # as we don't support json generation layer on QNX target find_library(VULKAN_LIB NAMES libvulkan.so libvulkan.so.1 HINTS ${VULKAN_LIB_PATH} REQUIRED) endif() # We don't build VulkanSC binary for host build. if (NOT HOST_BUILD) find_library(OPENWFD_LIBS NAMES libtegrawfd.so HINTS ${TARGET_LIB_PATH} REQUIRED) find_package(VulkanSCLibs) endif() file(COPY "data" DESTINATION ${OUTPUT_BINARY_DIR}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_BINARY_DIR}) # Vulkan SC driver, NvSci and OpenWFD has lots of dependencies, in cross-compile, gcc nneds to # resolve those symbols, add this flag to defer the resolution during run-time, so we don't need # to add all those libraries here in the cmake file. set (CMAKE_EXE_LINKER_FLAGS "-Wl,-unresolved-symbols=ignore-in-shared-libs") add_subdirectory(vksc_01tri) add_subdirectory(vulkanscinfo) add_subdirectory(computeparticles)