From b7d5aefaed0a8473fdeedf42739dd939028b4f94 Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Thu, 29 Jun 2023 08:36:36 +0300 Subject: [PATCH 01/26] fix --- python/python/jetson/utils/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/python/jetson/utils/__init__.py b/python/python/jetson/utils/__init__.py index baa596e9..a9fc23c3 100644 --- a/python/python/jetson/utils/__init__.py +++ b/python/python/jetson/utils/__init__.py @@ -1,5 +1,5 @@ -#print("jetson.utils.__init__.py") +#print("Jetson.Utils.__init__.py") from jetson_utils_python import * From 3f9ea12237767edb79d7af2ba150d90d71516fcb Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Thu, 29 Jun 2023 08:37:14 +0300 Subject: [PATCH 02/26] first update --- CMakeLists.txt | 278 +++++++++++++++++++----------- cmake/jetson-utilsConfig.cmake.in | 12 ++ 2 files changed, 186 insertions(+), 104 deletions(-) create mode 100644 cmake/jetson-utilsConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 0711823d..00ad1811 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,136 +1,206 @@ - +# jetson-utils -- CMakeLists.txt cmake_minimum_required(VERSION 2.8) -# determine if jetson-utils is being built as a submodule inside another repo, -# or if it's being build standalone (if the later, we need to do some configuration) -get_directory_property(hasParent PARENT_DIRECTORY) +# CMP0048: The project() command manages VERSION variables +# @ref https://cmake.org/cmake/help/latest/policy/CMP0048.html +cmake_policy(SET CMP0048 NEW) -if(hasParent) - message("-- jetson-utils: building as submodule, ${hasParent}") -else() - message("-- jetson-utils: building as standalone") - - # standalone project - project(jetson-utils) - - # -std=gnu++11 - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-write-strings") - - # setup CUDA - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cuda") - find_package(CUDA) - message("-- CUDA version: ${CUDA_VERSION}") - - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -O3) - - if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") - message("-- CUDA ${CUDA_VERSION} detected (${CMAKE_SYSTEM_PROCESSOR}), enabling SM_53 SM_62") - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_53,code=sm_53 -gencode arch=compute_62,code=sm_62) - - if(CUDA_VERSION_MAJOR GREATER 9) - message("-- CUDA ${CUDA_VERSION} detected (${CMAKE_SYSTEM_PROCESSOR}), enabling SM_72") - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_72,code=sm_72) - endif() - - if(CUDA_VERSION_MAJOR GREATER 10) - message("-- CUDA ${CUDA_VERSION} detected (${CMAKE_SYSTEM_PROCESSOR}), enabling SM_87") - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_87,code=sm_87) - endif() - endif() - - # setup project output paths - set(PROJECT_OUTPUT_DIR ${PROJECT_BINARY_DIR}/${CMAKE_SYSTEM_PROCESSOR}) - set(PROJECT_INCLUDE_DIR ${PROJECT_OUTPUT_DIR}/include) - - file(MAKE_DIRECTORY ${PROJECT_INCLUDE_DIR}) - file(MAKE_DIRECTORY ${PROJECT_OUTPUT_DIR}/bin) - - message("-- system arch: ${CMAKE_SYSTEM_PROCESSOR}") - message("-- output path: ${PROJECT_OUTPUT_DIR}") - - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_OUTPUT_DIR}/bin) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_OUTPUT_DIR}/lib) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_OUTPUT_DIR}/lib) - - # detect distro version - find_program(LSB_RELEASE_EXEC lsb_release) - - execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --id OUTPUT_VARIABLE LSB_RELEASE_ID OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --release OUTPUT_VARIABLE LSB_RELEASE_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --codename OUTPUT_VARIABLE LSB_RELEASE_CODENAME OUTPUT_STRIP_TRAILING_WHITESPACE) - - message("-- distro ID: ${LSB_RELEASE_ID}") - message("-- distro version: ${LSB_RELEASE_VERSION}") - message("-- distro codename: ${LSB_RELEASE_CODENAME}") - - # build C/C++ interface - include_directories(${PROJECT_INCLUDE_DIR}) - #include_directories(/usr/include/gstreamer-1.0 /usr/lib/aarch64-linux-gnu/gstreamer-1.0/include /usr/include/glib-2.0 /usr/include/libxml2 /usr/lib/aarch64-linux-gnu/glib-2.0/include/) +# Set name of the project +# @ref https://cmake.org/cmake/help/latest/command/project.html +project(jetson-utils LANGUAGES CXX VERSION 1.0.0) + +# Include "GNUInstallDirs" module which defines GNU standard installation directories +# @ref https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html +include(GNUInstallDirs) + +# Include "CMakePackageConfigHelpers" module which creates package config files for "find_package" command +# @ref https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html +include(CMakePackageConfigHelpers) + +# Set install directory +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(JU_INSTALL_DIR ${PROJECT_BINARY_DIR}/install/${CMAKE_SYSTEM_PROCESSOR} CACHE PATH "jetson-utils install directory") + set(CMAKE_INSTALL_PREFIX ${JU_INSTALL_DIR}) +endif() +message(STATUS "jetson-utils: install directory ${CMAKE_INSTALL_PREFIX}") + +# Detect distro version +find_program(LSB_RELEASE_EXEC lsb_release /usr/bin) + +if(NOT DEFINED LSB_RELEASE_EXEC) + message(FATAL_ERROR "-- jetson-utils: Cannot find 'lsb_release' executable. Please install it via 'apt install lsb_release'.") +endif() + +execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --id OUTPUT_VARIABLE LSB_RELEASE_ID OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --release OUTPUT_VARIABLE LSB_RELEASE_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --codename OUTPUT_VARIABLE LSB_RELEASE_CODENAME OUTPUT_STRIP_TRAILING_WHITESPACE) + +message(STATUS "jetson-utils: distro ID ${LSB_RELEASE_ID}") +message(STATUS "jetson-utils: distro version ${LSB_RELEASE_VERSION}") +message(STATUS "jetson-utils: distro codename ${LSB_RELEASE_CODENAME}") + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") + include_directories(/usr/src/jetson_multimedia_api/include) + link_directories(/usr/lib/aarch64-linux-gnu/tegra) +endif() + +# Use C++11 standard if no standard defined +if(NOT DEFINED CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_EXTENSIONS OFF) +endif() +message(STATUS "jetson-utils: using C++ standard ${CMAKE_CXX_STANDARD}") + +# Setup CUDA +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cuda") +find_package(CUDA) +message(STATUS "jetson-utils: CUDA version ${CUDA_VERSION}") +set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -O3) + +if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") + message(STATUS "jetson-utils: CUDA ${CUDA_VERSION} detected (${CMAKE_SYSTEM_PROCESSOR}), enabling SM_53 SM_62") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_53,code=sm_53 -gencode arch=compute_62,code=sm_62) + + if(CUDA_VERSION_MAJOR GREATER 9) + message(STATUS "jetson-utils: CUDA ${CUDA_VERSION} detected (${CMAKE_SYSTEM_PROCESSOR}), enabling SM_72") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_72,code=sm_72) + endif() + + if(CUDA_VERSION_MAJOR GREATER 10) + message(STATUS "jetson-utils: CUDA ${CUDA_VERSION} detected (${CMAKE_SYSTEM_PROCESSOR}), enabling SM_87") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_87,code=sm_87) + endif() endif() -# option for enabling/disabling NVMM memory in multimedia stack +# Option for enabling/disabling NVMM memory in multimedia stack find_library(NVBUF_UTILS NAMES nvbuf_utils PATHS /usr/lib/aarch64-linux-gnu/tegra) -message("-- nvbuf_utils: ${NVBUF_UTILS}") +message(STATUS "jetson-utils: nvbuf_utils ${NVBUF_UTILS}") if(NVBUF_UTILS) - set(ENABLE_NVMM_DEFAULT ON) + set(ENABLE_NVMM_DEFAULT ON) else() - set(ENABLE_NVMM_DEFAULT OFF) + set(ENABLE_NVMM_DEFAULT OFF) endif() option(ENABLE_NVMM "Enable use of NVMM zero-copy memory in video and camera streaming" ${ENABLE_NVMM_DEFAULT}) -message("-- NVMM zero-copy memory: ENABLE_NVMM=${ENABLE_NVMM}") +message(STATUS "jetson-utils: NVMM zero-copy memory: ENABLE_NVMM=${ENABLE_NVMM}") if(ENABLE_NVMM) - add_definitions(-DENABLE_NVMM) -endif() - -# additional paths for includes and libraries -include_directories(${PROJECT_INCLUDE_DIR}/jetson-utils) -include_directories(/usr/include/gstreamer-1.0 /usr/include/glib-2.0 /usr/include/libxml2 /usr/include/json-glib-1.0 /usr/include/libsoup-2.4 /usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/gstreamer-1.0/include /usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/glib-2.0/include/) - -if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") - include_directories(/usr/src/jetson_multimedia_api/include) - link_directories(/usr/lib/aarch64-linux-gnu/tegra) + add_definitions(-DENABLE_NVMM) endif() -# build library +# CMP0072: FindOpenGL prefers GLVND by default when available +# @ref https://cmake.org/cmake/help/latest/policy/CMP0072.html +cmake_policy(SET CMP0072 OLD) # TODO: test it with NEW + +# Find OpenGL and related packages +find_package(OpenGL REQUIRED) +find_package(GLEW REQUIRED) + +# Find other dependent packages +find_package(PkgConfig REQUIRED) +pkg_search_module(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GSTREAMER REQUIRED IMPORTED_TARGET gstreamer-1.0) +pkg_check_modules(GSTREAMER_APP REQUIRED IMPORTED_TARGET gstreamer-app-1.0) +pkg_check_modules(GSTREAMER_VIDEO REQUIRED IMPORTED_TARGET gstreamer-video-1.0) +pkg_check_modules(GSTREAMER_PBUTILS REQUIRED IMPORTED_TARGET gstreamer-pbutils-1.0) +pkg_check_modules(GSTREAMER_WEBRTC REQUIRED IMPORTED_TARGET gstreamer-webrtc-1.0) +pkg_check_modules(GSTREAMER_SDP REQUIRED IMPORTED_TARGET gstreamer-sdp-1.0) +pkg_check_modules(GSTREAMER_RTSP_SERVER REQUIRED IMPORTED_TARGET gstreamer-rtsp-server-1.0) +pkg_check_modules(JSON_GLIB REQUIRED IMPORTED_TARGET json-glib-1.0) +pkg_check_modules(SOUP REQUIRED IMPORTED_TARGET libsoup-2.4) + +# Setup source and header files file(GLOB jetsonUtilitySources *.cpp camera/*.cpp codec/*.cpp cuda/*.cu cuda/*.cpp display/*.cpp image/*.cpp input/*.cpp network/*.cpp threads/*.cpp video/*.cpp) file(GLOB jetsonUtilityIncludes *.h *.hpp camera/*.h codec/*.h cuda/*.h cuda/*.cuh display/*.h image/*.h image/*.inl input/*.h network/*.h threads/*.h threads/*.inl video/*.h) -cuda_add_library(jetson-utils SHARED ${jetsonUtilitySources}) -target_link_libraries(jetson-utils GL GLU GLEW gstreamer-1.0 gstapp-1.0 gstpbutils-1.0 gstwebrtc-1.0 gstsdp-1.0 gstrtspserver-1.0 json-glib-1.0 soup-2.4 ${CUDA_nppicc_LIBRARY}) - -if(NVBUF_UTILS) - target_link_libraries(jetson-utils nvbuf_utils) +# Create the library +cuda_add_library(${PROJECT_NAME} SHARED ${jetsonUtilitySources}) +target_link_libraries(${PROJECT_NAME} + GLEW::GLEW + OpenGL::GL + OpenGL::GLU + PkgConfig::GLIB + PkgConfig::GSTREAMER + PkgConfig::GSTREAMER_APP + PkgConfig::GSTREAMER_PBUTILS + PkgConfig::GSTREAMER_WEBRTC + PkgConfig::GSTREAMER_SDP + PkgConfig::GSTREAMER_RTSP_SERVER + PkgConfig::JSON_GLIB + PkgConfig::SOUP + ${CUDA_nppicc_LIBRARY} +) + +if(DEFINED NVBUF_UTILS) + add_library(nvbufutils SHARED IMPORTED) + set_target_properties(nvbufutils PROPERTIES IMPORTED_LOCATION ${NVBUF_UTILS}) + target_link_libraries(${PROJECT_NAME} nvbufutils) endif() -# transfer all headers to the include directory -file(MAKE_DIRECTORY ${PROJECT_INCLUDE_DIR}/jetson-utils) - +target_include_directories(${PROJECT_NAME} + PUBLIC + $ + $ +) +set_target_properties(${PROJECT_NAME} + PROPERTIES + PUBLIC_HEADER "${jetsonUtilityIncludes}" +) + +# Copy all headers to the include directory +file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/include/${PROJECT_NAME}) foreach(include ${jetsonUtilityIncludes}) - message("-- Copying ${include}") - configure_file(${include} ${PROJECT_INCLUDE_DIR}/jetson-utils COPYONLY) + message(STATUS "Copying ${include}") + configure_file(${include} ${PROJECT_BINARY_DIR}/include/jetson-utils COPYONLY) endforeach() - -# install headers -foreach(include ${jetsonUtilityIncludes}) - install(FILES "${include}" DESTINATION include/jetson-utils) -endforeach() - -# install the shared library -install(TARGETS jetson-utils DESTINATION lib EXPORT jetson-utilsConfig) -# install the cmake project, for importing -install(EXPORT jetson-utilsConfig DESTINATION share/jetson-utils/cmake) +# Install the library and headers while exporting the targets +install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}Targets + PUBLIC_HEADER + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} +) + +# Install exported targets with a namespace +install(EXPORT ${PROJECT_NAME}Targets + FILE ${PROJECT_NAME}Targets.cmake + NAMESPACE "JetsonUtils::" + DESTINATION + ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}-${PROJECT_VERSION} +) + +# Configure package config files using a template +configure_package_config_file( + ${CMAKE_CURRENT_LIST_DIR}/cmake/${PROJECT_NAME}Config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION + ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}-${PROJECT_VERSION} +) + +# Generate package config files +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) + +# Install package config files +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + DESTINATION + ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}-${PROJECT_VERSION} +) # build python bindings + samples -add_subdirectory(python) -add_subdirectory(video/video-viewer) +#add_subdirectory(python) +#add_subdirectory(video/video-viewer) #add_subdirectory(camera/camera-viewer) #add_subdirectory(display/gl-display-test) #add_subdirectory(network/webrtc-server) #add_subdirectory(network/rtsp-server) - diff --git a/cmake/jetson-utilsConfig.cmake.in b/cmake/jetson-utilsConfig.cmake.in new file mode 100644 index 00000000..318f9684 --- /dev/null +++ b/cmake/jetson-utilsConfig.cmake.in @@ -0,0 +1,12 @@ +# jetson-utils -- jetson-utilsConfig.cmake.in +@PACKAGE_INIT@ + +# Find dependencies +include(CMakeFindDependencyMacro) +#find_dependency(XYZ) + +# Include targets +include(${CMAKE_CURRENT_LIST_DIR}/jetson-utilsTargets.cmake) + +# Check required components +check_required_components(jetson-utils) From 1fe77b00cede7dc614e11593c97a91db8dc82be9 Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:36:24 +0300 Subject: [PATCH 03/26] move FindCUDA to /cmake --- {cuda => cmake}/FindCUDA.cmake | 0 {cuda => cmake}/FindCUDA/make2cmake.cmake | 0 {cuda => cmake}/FindCUDA/parse_cubin.cmake | 0 {cuda => cmake}/FindCUDA/run_nvcc.cmake | 0 {cuda => cmake}/FindCUDA/select_compute_arch.cmake | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {cuda => cmake}/FindCUDA.cmake (100%) rename {cuda => cmake}/FindCUDA/make2cmake.cmake (100%) rename {cuda => cmake}/FindCUDA/parse_cubin.cmake (100%) rename {cuda => cmake}/FindCUDA/run_nvcc.cmake (100%) rename {cuda => cmake}/FindCUDA/select_compute_arch.cmake (100%) diff --git a/cuda/FindCUDA.cmake b/cmake/FindCUDA.cmake similarity index 100% rename from cuda/FindCUDA.cmake rename to cmake/FindCUDA.cmake diff --git a/cuda/FindCUDA/make2cmake.cmake b/cmake/FindCUDA/make2cmake.cmake similarity index 100% rename from cuda/FindCUDA/make2cmake.cmake rename to cmake/FindCUDA/make2cmake.cmake diff --git a/cuda/FindCUDA/parse_cubin.cmake b/cmake/FindCUDA/parse_cubin.cmake similarity index 100% rename from cuda/FindCUDA/parse_cubin.cmake rename to cmake/FindCUDA/parse_cubin.cmake diff --git a/cuda/FindCUDA/run_nvcc.cmake b/cmake/FindCUDA/run_nvcc.cmake similarity index 100% rename from cuda/FindCUDA/run_nvcc.cmake rename to cmake/FindCUDA/run_nvcc.cmake diff --git a/cuda/FindCUDA/select_compute_arch.cmake b/cmake/FindCUDA/select_compute_arch.cmake similarity index 100% rename from cuda/FindCUDA/select_compute_arch.cmake rename to cmake/FindCUDA/select_compute_arch.cmake From f3605c5f475d406c4db500893b92027a1b003dee Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:36:51 +0300 Subject: [PATCH 04/26] update message on FindCUDA.cmake --- cmake/FindCUDA.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/FindCUDA.cmake b/cmake/FindCUDA.cmake index a1c5795f..15ed5acc 100644 --- a/cmake/FindCUDA.cmake +++ b/cmake/FindCUDA.cmake @@ -405,7 +405,7 @@ ############################################################################### # FindCUDA.cmake -message("-- using patched FindCUDA.cmake") +message(STATUS "jetson-utils: using patched FindCUDA.cmake") # This macro helps us find the location of helper files we will need the full path to macro(CUDA_FIND_HELPER_FILE _name _extension) From 478ddf3bc6c2faf5b1b54530eaf42daf486c770a Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:37:09 +0300 Subject: [PATCH 05/26] add FindNVBUF_UTILS module --- cmake/FindNVBUF_UTILS.cmake | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 cmake/FindNVBUF_UTILS.cmake diff --git a/cmake/FindNVBUF_UTILS.cmake b/cmake/FindNVBUF_UTILS.cmake new file mode 100644 index 00000000..bcca3849 --- /dev/null +++ b/cmake/FindNVBUF_UTILS.cmake @@ -0,0 +1,26 @@ +# FindNVBUF_UTILS.cmake + +find_library(NVBUF_UTILS_LIBRARY + NAMES nvbuf_utils + PATHS /usr/lib/aarch64-linux-gnu/tegra +) + +find_path( + NVBUF_UTILS_INCLUDE_DIR + NAMES include/nvbuf_utils.h + PATHS /usr/src/jetson_multimedia_api +) + +if(NVBUF_UTILS_FOUND) + mark_as_advanced(NVBUF_UTILS_INCLUDE_DIR) + mark_as_advanced(NVBUF_UTILS_LIBRARY) +endif() + +if (NVBUF_UTILS_FOUND AND NOT TARGET JetsonUtils::NVBUF_UTILS) + add_library(JetsonUtils::NVBUF_UTILSIMPORTED) + set_property(TARGET JetsonUtils::NVBUF_UTILS PROPERTY IMPORTED_LOCATION ${NVBUF_UTILS_LIBRARY}) + target_include_directories(JetsonUtils::NVBUF_UTILS INTERFACE ${NVBUF_UTILS_INCLUDE_DIR}) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(NVBUF_UTILS REQUIRED_VARS NVBUF_UTILS_LIBRARY NVBUF_UTILS_INCLUDE_DIR) From 80682d9fee81ae1435b8c6034c50881ec6c952c6 Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:40:07 +0300 Subject: [PATCH 06/26] minor cleaning and updates --- CMakeLists.txt | 43 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 00ad1811..99df2991 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,9 @@ include(GNUInstallDirs) # @ref https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html include(CMakePackageConfigHelpers) +# Set CMake module path +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}/cmake) + # Set install directory if(NOT DEFINED CMAKE_INSTALL_PREFIX) set(JU_INSTALL_DIR ${PROJECT_BINARY_DIR}/install/${CMAKE_SYSTEM_PROCESSOR} CACHE PATH "jetson-utils install directory") @@ -39,11 +42,6 @@ message(STATUS "jetson-utils: distro ID ${LSB_RELEASE_ID}") message(STATUS "jetson-utils: distro version ${LSB_RELEASE_VERSION}") message(STATUS "jetson-utils: distro codename ${LSB_RELEASE_CODENAME}") -if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") - include_directories(/usr/src/jetson_multimedia_api/include) - link_directories(/usr/lib/aarch64-linux-gnu/tegra) -endif() - # Use C++11 standard if no standard defined if(NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 11) @@ -53,7 +51,6 @@ endif() message(STATUS "jetson-utils: using C++ standard ${CMAKE_CXX_STANDARD}") # Setup CUDA -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cuda") find_package(CUDA) message(STATUS "jetson-utils: CUDA version ${CUDA_VERSION}") @@ -75,17 +72,15 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") endif() # Option for enabling/disabling NVMM memory in multimedia stack -find_library(NVBUF_UTILS NAMES nvbuf_utils PATHS /usr/lib/aarch64-linux-gnu/tegra) -message(STATUS "jetson-utils: nvbuf_utils ${NVBUF_UTILS}") - -if(NVBUF_UTILS) - set(ENABLE_NVMM_DEFAULT ON) +find_package(NVBUF_UTILS REQUIRED) +if(NVBUF_UTILS_FOUND) + set(ENABLE_NVMM_DEFAULT ON) else() - set(ENABLE_NVMM_DEFAULT OFF) + set(ENABLE_NVMM_DEFAULT OFF) endif() option(ENABLE_NVMM "Enable use of NVMM zero-copy memory in video and camera streaming" ${ENABLE_NVMM_DEFAULT}) -message(STATUS "jetson-utils: NVMM zero-copy memory: ENABLE_NVMM=${ENABLE_NVMM}") +message(STATUS "jetson-utils: Enable NVMM zero-copy memory (ENABLE_NVMM): ${ENABLE_NVMM}") if(ENABLE_NVMM) add_definitions(-DENABLE_NVMM) @@ -116,8 +111,15 @@ pkg_check_modules(SOUP REQUIRED IMPORTED_TARGET libsoup-2.4) file(GLOB jetsonUtilitySources *.cpp camera/*.cpp codec/*.cpp cuda/*.cu cuda/*.cpp display/*.cpp image/*.cpp input/*.cpp network/*.cpp threads/*.cpp video/*.cpp) file(GLOB jetsonUtilityIncludes *.h *.hpp camera/*.h codec/*.h cuda/*.h cuda/*.cuh display/*.h image/*.h image/*.inl input/*.h network/*.h threads/*.h threads/*.inl video/*.h) +# Copy all headers to the include directory +file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/include/${PROJECT_NAME}) +foreach(include ${jetsonUtilityIncludes}) + message(STATUS "Copying ${include}") + configure_file(${include} ${PROJECT_BINARY_DIR}/include/jetson-utils COPYONLY) +endforeach() + # Create the library -cuda_add_library(${PROJECT_NAME} SHARED ${jetsonUtilitySources}) +cuda_add_library(${PROJECT_NAME} SHARED ${jetsonUtilitySources} ${jetsonUtilityIncludes}) target_link_libraries(${PROJECT_NAME} GLEW::GLEW OpenGL::GL @@ -134,10 +136,8 @@ target_link_libraries(${PROJECT_NAME} ${CUDA_nppicc_LIBRARY} ) -if(DEFINED NVBUF_UTILS) - add_library(nvbufutils SHARED IMPORTED) - set_target_properties(nvbufutils PROPERTIES IMPORTED_LOCATION ${NVBUF_UTILS}) - target_link_libraries(${PROJECT_NAME} nvbufutils) +if(NVBUF_UTILS_FOUND) + target_link_libraries(${PROJECT_NAME} JetsonUtils::NVBUF_UTILS) endif() target_include_directories(${PROJECT_NAME} @@ -150,13 +150,6 @@ set_target_properties(${PROJECT_NAME} PUBLIC_HEADER "${jetsonUtilityIncludes}" ) -# Copy all headers to the include directory -file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/include/${PROJECT_NAME}) -foreach(include ${jetsonUtilityIncludes}) - message(STATUS "Copying ${include}") - configure_file(${include} ${PROJECT_BINARY_DIR}/include/jetson-utils COPYONLY) -endforeach() - # Install the library and headers while exporting the targets install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets From 315c7d787bc6d247ee477cbd8b9f1ef91ab9b42b Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Thu, 29 Jun 2023 17:37:45 +0300 Subject: [PATCH 07/26] NVBUF_UTILS find module fixes --- cmake/FindNVBUF_UTILS.cmake | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cmake/FindNVBUF_UTILS.cmake b/cmake/FindNVBUF_UTILS.cmake index bcca3849..c08b0ee6 100644 --- a/cmake/FindNVBUF_UTILS.cmake +++ b/cmake/FindNVBUF_UTILS.cmake @@ -16,11 +16,14 @@ if(NVBUF_UTILS_FOUND) mark_as_advanced(NVBUF_UTILS_LIBRARY) endif() -if (NVBUF_UTILS_FOUND AND NOT TARGET JetsonUtils::NVBUF_UTILS) - add_library(JetsonUtils::NVBUF_UTILSIMPORTED) +if(NVBUF_UTILS_FOUND AND NOT TARGET JetsonUtils::NVBUF_UTILS) + add_library(JetsonUtils::NVBUF_UTILS IMPORTED) set_property(TARGET JetsonUtils::NVBUF_UTILS PROPERTY IMPORTED_LOCATION ${NVBUF_UTILS_LIBRARY}) target_include_directories(JetsonUtils::NVBUF_UTILS INTERFACE ${NVBUF_UTILS_INCLUDE_DIR}) endif() include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(NVBUF_UTILS REQUIRED_VARS NVBUF_UTILS_LIBRARY NVBUF_UTILS_INCLUDE_DIR) +find_package_handle_standard_args(NVBUF_UTILS + REQUIRED_VARS + NVBUF_UTILS_LIBRARY NVBUF_UTILS_INCLUDE_DIR +) From 8980c8bb0ead9a29010af3ff9533c10bdcd43927 Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Thu, 29 Jun 2023 17:38:22 +0300 Subject: [PATCH 08/26] imported targets fail to work for some reason --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99df2991..72ab6f2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -137,7 +137,7 @@ target_link_libraries(${PROJECT_NAME} ) if(NVBUF_UTILS_FOUND) - target_link_libraries(${PROJECT_NAME} JetsonUtils::NVBUF_UTILS) + target_link_libraries(${PROJECT_NAME} ${NVBUF_UTILS_LIBRARY}) endif() target_include_directories(${PROJECT_NAME} From 3588cf1e0bf2cf47a3cf6a2e653236c5d4606021 Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Thu, 29 Jun 2023 17:38:42 +0300 Subject: [PATCH 09/26] remove some warnings coming from CUDA find module --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 72ab6f2e..77fa5a78 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,10 @@ cmake_minimum_required(VERSION 2.8) # @ref https://cmake.org/cmake/help/latest/policy/CMP0048.html cmake_policy(SET CMP0048 NEW) +# CMP0028: Double colon in target name means ALIAS or IMPORTED target +# @ref https://cmake.org/cmake/help/latest/policy/CMP0028.html +cmake_policy(SET CMP0028 NEW) + # Set name of the project # @ref https://cmake.org/cmake/help/latest/command/project.html project(jetson-utils LANGUAGES CXX VERSION 1.0.0) From cc0959b84a8a89914cdf46d6fdc6bf7972b2c215 Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Wed, 5 Jul 2023 09:49:24 +0300 Subject: [PATCH 10/26] Update nvbuf_utils find module --- cmake/FindNVBUF_UTILS.cmake | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/cmake/FindNVBUF_UTILS.cmake b/cmake/FindNVBUF_UTILS.cmake index c08b0ee6..76d8bb63 100644 --- a/cmake/FindNVBUF_UTILS.cmake +++ b/cmake/FindNVBUF_UTILS.cmake @@ -1,14 +1,19 @@ # FindNVBUF_UTILS.cmake find_library(NVBUF_UTILS_LIBRARY - NAMES nvbuf_utils - PATHS /usr/lib/aarch64-linux-gnu/tegra + NAMES + nvbuf_utils + PATHS + /usr/lib/aarch64-linux-gnu/tegra ) find_path( NVBUF_UTILS_INCLUDE_DIR - NAMES include/nvbuf_utils.h - PATHS /usr/src/jetson_multimedia_api + NAMES + nvbuf_utils.h + PATHS + /usr/src/jetson_multimedia_api/include + ${CMAKE_CURRENT_LIST_DIR}/codec ) if(NVBUF_UTILS_FOUND) From 2c627ff37e2554bf725c102b5a6b5173e695fd59 Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Wed, 5 Jul 2023 23:01:28 +0300 Subject: [PATCH 11/26] find local nvbuf utils correctly --- cmake/FindNVBUF_UTILS.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/FindNVBUF_UTILS.cmake b/cmake/FindNVBUF_UTILS.cmake index 76d8bb63..c968d9e2 100644 --- a/cmake/FindNVBUF_UTILS.cmake +++ b/cmake/FindNVBUF_UTILS.cmake @@ -13,7 +13,7 @@ find_path( nvbuf_utils.h PATHS /usr/src/jetson_multimedia_api/include - ${CMAKE_CURRENT_LIST_DIR}/codec + ${PROJECT_SOURCE_DIR}/codec ) if(NVBUF_UTILS_FOUND) From 094ee087f883106d979a305c741607e30a49b6a2 Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Wed, 5 Jul 2023 23:46:00 +0300 Subject: [PATCH 12/26] update default install path --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 77fa5a78..bb34c257 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}/cmake) # Set install directory if(NOT DEFINED CMAKE_INSTALL_PREFIX) - set(JU_INSTALL_DIR ${PROJECT_BINARY_DIR}/install/${CMAKE_SYSTEM_PROCESSOR} CACHE PATH "jetson-utils install directory") + set(JU_INSTALL_DIR ${PROJECT_BINARY_DIR}/install CACHE PATH "jetson-utils install directory") set(CMAKE_INSTALL_PREFIX ${JU_INSTALL_DIR}) endif() message(STATUS "jetson-utils: install directory ${CMAKE_INSTALL_PREFIX}") From 50f1983d1ac3452a42fd51c638be0b206d07950a Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Wed, 5 Jul 2023 23:46:24 +0300 Subject: [PATCH 13/26] update app cmakelists --- CMakeLists.txt | 49 +++++++++++++++++++++----- camera/camera-viewer/CMakeLists.txt | 25 +++++++++++-- camera/v4l2-console/CMakeLists.txt | 25 +++++++++++-- camera/v4l2-display/CMakeLists.txt | 25 +++++++++++-- display/gl-display-test/CMakeLists.txt | 25 +++++++++++-- network/rtsp-server/CMakeLists.txt | 25 +++++++++++-- network/webrtc-server/CMakeLists.txt | 25 +++++++++++-- video/video-viewer/CMakeLists.txt | 25 +++++++++++-- 8 files changed, 197 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bb34c257..b572f202 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,11 +193,44 @@ install( ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}-${PROJECT_VERSION} ) -# build python bindings + samples -#add_subdirectory(python) -#add_subdirectory(video/video-viewer) - -#add_subdirectory(camera/camera-viewer) -#add_subdirectory(display/gl-display-test) -#add_subdirectory(network/webrtc-server) -#add_subdirectory(network/rtsp-server) +# Enable/disable python bindings +set(JU_ENABLE_PYTHON_BINDINGS OFF CACHE BOOL "Enable jetson-utils python bindings") +if(${JU_ENABLE_PYTHON_BINDINGS}) + add_subdirectory(python) +endif() + +# Enable/disable apps +set(JU_ENABLE_CAMERA_VIEWER OFF CACHE BOOL "Enable jetson-utils camera viewer app") +if(${JU_ENABLE_CAMERA_VIEWER}) + add_subdirectory(camera/camera-viewer) +endif() + +set(JU_ENABLE_V4L2_DISPLAY OFF CACHE BOOL "Enable jetson-utils v4l2 display app") +if(${JU_ENABLE_V4L2_DISPLAY}) + add_subdirectory(camera/v4l2-display) +endif() + +set(JU_ENABLE_V4L2_CONSOLE OFF CACHE BOOL "Enable jetson-utils v4l2 console app") +if(${JU_ENABLE_V4L2_CONSOLE}) + add_subdirectory(camera/v4l2-console) +endif() + +set(JU_ENABLE_VIDEO_VIEWER OFF CACHE BOOL "Enable jetson-utils video viewer app") +if(${JU_ENABLE_VIDEO_VIEWER}) + add_subdirectory(video/video-viewer) +endif() + +set(JU_ENABLE_GL_DISPLAY_TEST OFF CACHE BOOL "Enable jetson-utils gl display test app") +if(${JU_ENABLE_GL_DISPLAY_TEST}) + add_subdirectory(display/gl-display-test) +endif() + +set(JU_ENABLE_WEBRTC_SERVER OFF CACHE BOOL "Enable jetson-utils webrtc server app") +if(${JU_ENABLE_WEBRTC_SERVER}) + add_subdirectory(network/webrtc-server) +endif() + +set(JU_ENABLE_RTSP_SERVER OFF CACHE BOOL "Enable jetson-utils rtsp server app") +if(${JU_ENABLE_RTSP_SERVER}) + add_subdirectory(network/rtsp-server) +endif() diff --git a/camera/camera-viewer/CMakeLists.txt b/camera/camera-viewer/CMakeLists.txt index aa644360..4408a300 100644 --- a/camera/camera-viewer/CMakeLists.txt +++ b/camera/camera-viewer/CMakeLists.txt @@ -1,8 +1,27 @@ +# jetson-utils::camera-viewer -- CMakeLists.txt +cmake_minimum_required(VERSION 2.8) +# CMP0048: The project() command manages VERSION variables +cmake_policy(SET CMP0048 NEW) + +# CMP0028: Double colon in target name means ALIAS or IMPORTED target +cmake_policy(SET CMP0028 NEW) + +# Set name of the project +project(camera-viewer LANGUAGES CXX VERSION 1.0.0) + +# Find source and header files file(GLOB gstCameraSources *.cpp) file(GLOB gstCameraIncludes *.h ) -add_executable(camera-viewer ${gstCameraSources}) -target_link_libraries(camera-viewer jetson-utils) +# Create the executable +add_executable(${PROJECT_NAME} ${gstCameraSources} ${gstCameraIncludes}) +target_link_libraries(${PROJECT_NAME} + jetson-utils +) -install(TARGETS camera-viewer DESTINATION bin) +# Install the executable +install(TARGETS ${PROJECT_NAME} + DESTINATION + ${CMAKE_INSTALL_BINDIR} +) diff --git a/camera/v4l2-console/CMakeLists.txt b/camera/v4l2-console/CMakeLists.txt index c9601897..77bd0fdc 100644 --- a/camera/v4l2-console/CMakeLists.txt +++ b/camera/v4l2-console/CMakeLists.txt @@ -1,6 +1,27 @@ +# jetson-utils::v4l2-console -- CMakeLists.txt +cmake_minimum_required(VERSION 2.8) +# CMP0048: The project() command manages VERSION variables +cmake_policy(SET CMP0048 NEW) + +# CMP0028: Double colon in target name means ALIAS or IMPORTED target +cmake_policy(SET CMP0028 NEW) + +# Set name of the project +project(v4l2-console LANGUAGES CXX VERSION 1.0.0) + +# Find source and header files file(GLOB v4l2ConsoleSources *.cpp) file(GLOB v4l2ConsoleIncludes *.h ) -add_executable(v4l2-console ${v4l2ConsoleSources}) -target_link_libraries(v4l2-console jetson-utils) +# Create the executable +add_executable(${PROJECT_NAME} ${v4l2ConsoleSources} ${v4l2ConsoleIncludes}) +target_link_libraries(${PROJECT_NAME} + jetson-utils +) + +# Install the executable +install(TARGETS ${PROJECT_NAME} + DESTINATION + ${CMAKE_INSTALL_BINDIR} +) diff --git a/camera/v4l2-display/CMakeLists.txt b/camera/v4l2-display/CMakeLists.txt index edc9492f..089a64f8 100644 --- a/camera/v4l2-display/CMakeLists.txt +++ b/camera/v4l2-display/CMakeLists.txt @@ -1,6 +1,27 @@ +# jetson-utils::v4l2-display -- CMakeLists.txt +cmake_minimum_required(VERSION 2.8) +# CMP0048: The project() command manages VERSION variables +cmake_policy(SET CMP0048 NEW) + +# CMP0028: Double colon in target name means ALIAS or IMPORTED target +cmake_policy(SET CMP0028 NEW) + +# Set name of the project +project(v4l2-display LANGUAGES CXX VERSION 1.0.0) + +# Find source and header files file(GLOB v4l2DisplaySources *.cpp) file(GLOB v4l2DisplayIncludes *.h ) -add_executable(v4l2-display ${v4l2DisplaySources}) -target_link_libraries(v4l2-display jetson-utils) +# Create the executable +add_executable(${PROJECT_NAME} ${v4l2DisplaySources} ${v4l2DisplayIncludes}) +target_link_libraries(${PROJECT_NAME} + jetson-utils +) + +# Install the executable +install(TARGETS ${PROJECT_NAME} + DESTINATION + ${CMAKE_INSTALL_BINDIR} +) diff --git a/display/gl-display-test/CMakeLists.txt b/display/gl-display-test/CMakeLists.txt index 46d4163d..534b0ec9 100644 --- a/display/gl-display-test/CMakeLists.txt +++ b/display/gl-display-test/CMakeLists.txt @@ -1,8 +1,27 @@ +# jetson-utils::gl-display-test -- CMakeLists.txt +cmake_minimum_required(VERSION 2.8) +# CMP0048: The project() command manages VERSION variables +cmake_policy(SET CMP0048 NEW) + +# CMP0028: Double colon in target name means ALIAS or IMPORTED target +cmake_policy(SET CMP0028 NEW) + +# Set name of the project +project(gl-display-test LANGUAGES CXX VERSION 1.0.0) + +# Find source and header files file(GLOB glDisplayTestSources *.cpp *.cu) file(GLOB glDisplayTestIncludes *.h ) -cuda_add_executable(gl-display-test ${glDisplayTestSources}) -target_link_libraries(gl-display-test jetson-utils) +# Create the executable +cuda_add_executable(${PROJECT_NAME} ${glDisplayTestSources} ${glDisplayTestIncludes}) +target_link_libraries(${PROJECT_NAME} + jetson-utils +) -install(TARGETS gl-display-test DESTINATION bin) +# Install the executable +install(TARGETS ${PROJECT_NAME} + DESTINATION + ${CMAKE_INSTALL_BINDIR} +) diff --git a/network/rtsp-server/CMakeLists.txt b/network/rtsp-server/CMakeLists.txt index ec13aad4..884ac32e 100644 --- a/network/rtsp-server/CMakeLists.txt +++ b/network/rtsp-server/CMakeLists.txt @@ -1,8 +1,27 @@ +# jetson-utils::rtsp-server -- CMakeLists.txt +cmake_minimum_required(VERSION 2.8) +# CMP0048: The project() command manages VERSION variables +cmake_policy(SET CMP0048 NEW) + +# CMP0028: Double colon in target name means ALIAS or IMPORTED target +cmake_policy(SET CMP0028 NEW) + +# Set name of the project +project(rtsp-server LANGUAGES CXX VERSION 1.0.0) + +# Find source and header files file(GLOB rtspServerSources *.cpp) file(GLOB rtspServerIncludes *.h ) -add_executable(rtsp-server ${rtspServerSources}) -target_link_libraries(rtsp-server jetson-utils) +# Create the executable +add_executable(${PROJECT_NAME} ${rtspServerSources} ${rtspServerIncludes}) +target_link_libraries(${PROJECT_NAME} + jetson-utils +) -install(TARGETS rtsp-server DESTINATION bin) +# Install the executable +install(TARGETS ${PROJECT_NAME} + DESTINATION + ${CMAKE_INSTALL_BINDIR} +) diff --git a/network/webrtc-server/CMakeLists.txt b/network/webrtc-server/CMakeLists.txt index 4f3f3632..a59b08bd 100644 --- a/network/webrtc-server/CMakeLists.txt +++ b/network/webrtc-server/CMakeLists.txt @@ -1,8 +1,27 @@ +# jetson-utils::webrtc-server -- CMakeLists.txt +cmake_minimum_required(VERSION 2.8) +# CMP0048: The project() command manages VERSION variables +cmake_policy(SET CMP0048 NEW) + +# CMP0028: Double colon in target name means ALIAS or IMPORTED target +cmake_policy(SET CMP0028 NEW) + +# Set name of the project +project(webrtc-server LANGUAGES CXX VERSION 1.0.0) + +# Find source and header files file(GLOB WebRTCServerSources *.cpp) file(GLOB WebRTCServerIncludes *.h ) -add_executable(webrtc-server ${WebRTCServerSources}) -target_link_libraries(webrtc-server jetson-utils) +# Create the executable +add_executable(${PROJECT_NAME} ${WebRTCServerSources} ${WebRTCServerIncludes}) +target_link_libraries(${PROJECT_NAME} + jetson-utils +) -install(TARGETS webrtc-server DESTINATION bin) +# Install the executable +install(TARGETS ${PROJECT_NAME} + DESTINATION + ${CMAKE_INSTALL_BINDIR} +) diff --git a/video/video-viewer/CMakeLists.txt b/video/video-viewer/CMakeLists.txt index a414fb2d..dc364978 100644 --- a/video/video-viewer/CMakeLists.txt +++ b/video/video-viewer/CMakeLists.txt @@ -1,8 +1,27 @@ +# jetson-utils::v4l2-display -- CMakeLists.txt +cmake_minimum_required(VERSION 2.8) +# CMP0048: The project() command manages VERSION variables +cmake_policy(SET CMP0048 NEW) + +# CMP0028: Double colon in target name means ALIAS or IMPORTED target +cmake_policy(SET CMP0028 NEW) + +# Set name of the project +project(video-viewer LANGUAGES CXX VERSION 1.0.0) + +# Find source and header files file(GLOB videoViewerSources *.cpp) file(GLOB videoViewerIncludes *.h ) -add_executable(video-viewer ${videoViewerSources}) -target_link_libraries(video-viewer jetson-utils) +# Create the executable +add_executable(${PROJECT_NAME} ${videoViewerSources} ${videoViewerIncludes}) +target_link_libraries(${PROJECT_NAME} + jetson-utils +) -install(TARGETS video-viewer DESTINATION bin) +# Install the executable +install(TARGETS ${PROJECT_NAME} + DESTINATION + ${CMAKE_INSTALL_BINDIR} +) From 7d120a3532bc0eeadfe9aac1396f743a2df7818b Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Thu, 6 Jul 2023 00:00:03 +0300 Subject: [PATCH 14/26] install to /usr/local by default --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b572f202..9197a170 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,8 +26,8 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}/cmake) # Set install directory if(NOT DEFINED CMAKE_INSTALL_PREFIX) - set(JU_INSTALL_DIR ${PROJECT_BINARY_DIR}/install CACHE PATH "jetson-utils install directory") - set(CMAKE_INSTALL_PREFIX ${JU_INSTALL_DIR}) + #set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/install) + set(CMAKE_INSTALL_PREFIX /usr/local) endif() message(STATUS "jetson-utils: install directory ${CMAKE_INSTALL_PREFIX}") From 7ece4cee244f875ff2a89169ae9fb1550c9fc2d7 Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Fri, 7 Jul 2023 20:17:48 +0300 Subject: [PATCH 15/26] move numpy find module to common cmake module path --- {python/bindings => cmake}/FindNumPy.cmake | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {python/bindings => cmake}/FindNumPy.cmake (100%) diff --git a/python/bindings/FindNumPy.cmake b/cmake/FindNumPy.cmake similarity index 100% rename from python/bindings/FindNumPy.cmake rename to cmake/FindNumPy.cmake From 678e417d4cb3cb897be72a8fc67f58e73e2d9450 Mon Sep 17 00:00:00 2001 From: Onur Bingol <61478203+onurbingol@users.noreply.github.com> Date: Fri, 7 Jul 2023 20:19:29 +0300 Subject: [PATCH 16/26] upgrade minimum cmake to 3.5 * Ubuntu 16.04 LTS comes with CMake v3.5.1 * NVIDIA Jetpack v4.x supports Ubuntu 16.04 and 18.04 --- CMakeLists.txt | 2 +- camera/camera-viewer/CMakeLists.txt | 2 +- camera/v4l2-console/CMakeLists.txt | 2 +- camera/v4l2-display/CMakeLists.txt | 2 +- display/gl-display-test/CMakeLists.txt | 2 +- network/rtsp-server/CMakeLists.txt | 2 +- network/webrtc-server/CMakeLists.txt | 2 +- video/video-viewer/CMakeLists.txt | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9197a170..c060e372 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ # jetson-utils -- CMakeLists.txt -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.5) # CMP0048: The project() command manages VERSION variables # @ref https://cmake.org/cmake/help/latest/policy/CMP0048.html diff --git a/camera/camera-viewer/CMakeLists.txt b/camera/camera-viewer/CMakeLists.txt index 4408a300..08bbd71d 100644 --- a/camera/camera-viewer/CMakeLists.txt +++ b/camera/camera-viewer/CMakeLists.txt @@ -1,5 +1,5 @@ # jetson-utils::camera-viewer -- CMakeLists.txt -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.5) # CMP0048: The project() command manages VERSION variables cmake_policy(SET CMP0048 NEW) diff --git a/camera/v4l2-console/CMakeLists.txt b/camera/v4l2-console/CMakeLists.txt index 77bd0fdc..f8da44d9 100644 --- a/camera/v4l2-console/CMakeLists.txt +++ b/camera/v4l2-console/CMakeLists.txt @@ -1,5 +1,5 @@ # jetson-utils::v4l2-console -- CMakeLists.txt -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.5) # CMP0048: The project() command manages VERSION variables cmake_policy(SET CMP0048 NEW) diff --git a/camera/v4l2-display/CMakeLists.txt b/camera/v4l2-display/CMakeLists.txt index 089a64f8..c1b6139b 100644 --- a/camera/v4l2-display/CMakeLists.txt +++ b/camera/v4l2-display/CMakeLists.txt @@ -1,5 +1,5 @@ # jetson-utils::v4l2-display -- CMakeLists.txt -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.5) # CMP0048: The project() command manages VERSION variables cmake_policy(SET CMP0048 NEW) diff --git a/display/gl-display-test/CMakeLists.txt b/display/gl-display-test/CMakeLists.txt index 534b0ec9..c0f5841f 100644 --- a/display/gl-display-test/CMakeLists.txt +++ b/display/gl-display-test/CMakeLists.txt @@ -1,5 +1,5 @@ # jetson-utils::gl-display-test -- CMakeLists.txt -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.5) # CMP0048: The project() command manages VERSION variables cmake_policy(SET CMP0048 NEW) diff --git a/network/rtsp-server/CMakeLists.txt b/network/rtsp-server/CMakeLists.txt index 884ac32e..967d8104 100644 --- a/network/rtsp-server/CMakeLists.txt +++ b/network/rtsp-server/CMakeLists.txt @@ -1,5 +1,5 @@ # jetson-utils::rtsp-server -- CMakeLists.txt -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.5) # CMP0048: The project() command manages VERSION variables cmake_policy(SET CMP0048 NEW) diff --git a/network/webrtc-server/CMakeLists.txt b/network/webrtc-server/CMakeLists.txt index a59b08bd..1b6e5d89 100644 --- a/network/webrtc-server/CMakeLists.txt +++ b/network/webrtc-server/CMakeLists.txt @@ -1,5 +1,5 @@ # jetson-utils::webrtc-server -- CMakeLists.txt -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.5) # CMP0048: The project() command manages VERSION variables cmake_policy(SET CMP0048 NEW) diff --git a/video/video-viewer/CMakeLists.txt b/video/video-viewer/CMakeLists.txt index dc364978..8b66ea17 100644 --- a/video/video-viewer/CMakeLists.txt +++ b/video/video-viewer/CMakeLists.txt @@ -1,5 +1,5 @@ # jetson-utils::v4l2-display -- CMakeLists.txt -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.5) # CMP0048: The project() command manages VERSION variables cmake_policy(SET CMP0048 NEW) From dfac497b2a69b89e79af9a1537edb327573903bc Mon Sep 17 00:00:00 2001 From: Onur Bingol Date: Fri, 4 Aug 2023 18:21:08 -0700 Subject: [PATCH 17/26] Add install dir --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c060e372..7df93477 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -159,6 +159,8 @@ install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} + LIBRARY + DESTINATION ${CMAKE_INSTALL_LIBDIR} ) # Install exported targets with a namespace From f176a0c2b0bed882cf4c07abb699303ae28ff342 Mon Sep 17 00:00:00 2001 From: Onur Bingol Date: Fri, 4 Aug 2023 18:21:42 -0700 Subject: [PATCH 18/26] FindOpenGL compatibility updates --- CMakeLists.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7df93477..6f0ec4c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,6 +54,13 @@ if(NOT DEFINED CMAKE_CXX_STANDARD) endif() message(STATUS "jetson-utils: using C++ standard ${CMAKE_CXX_STANDARD}") +# CMP0072: FindOpenGL prefers GLVND by default when available +# @ref https://cmake.org/cmake/help/latest/policy/CMP0072.html +if(POLICY CMP0072) + # TODO: test it with "NEW" + cmake_policy(SET CMP0072 OLD) +endif() + # Setup CUDA find_package(CUDA) message(STATUS "jetson-utils: CUDA version ${CUDA_VERSION}") @@ -90,10 +97,6 @@ if(ENABLE_NVMM) add_definitions(-DENABLE_NVMM) endif() -# CMP0072: FindOpenGL prefers GLVND by default when available -# @ref https://cmake.org/cmake/help/latest/policy/CMP0072.html -cmake_policy(SET CMP0072 OLD) # TODO: test it with NEW - # Find OpenGL and related packages find_package(OpenGL REQUIRED) find_package(GLEW REQUIRED) From b0a6fee385be338777a7554fad0c9a861f24398f Mon Sep 17 00:00:00 2001 From: Onur Bingol Date: Fri, 4 Aug 2023 18:22:01 -0700 Subject: [PATCH 19/26] Add uninstall target --- CMakeLists.txt | 16 ++++++++++++++++ cmake_uninstall.cmake.in | 22 ++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 cmake_uninstall.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f0ec4c9..612573cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -239,3 +239,19 @@ set(JU_ENABLE_RTSP_SERVER OFF CACHE BOOL "Enable jetson-utils rtsp server app") if(${JU_ENABLE_RTSP_SERVER}) add_subdirectory(network/rtsp-server) endif() + +# Add uninstall target only if this project is the topmost level +# @ref https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake +if(PROJECT_IS_TOP_LEVEL) + if(NOT TARGET uninstall) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY + ) + + add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake + ) + endif() +endif() diff --git a/cmake_uninstall.cmake.in b/cmake_uninstall.cmake.in new file mode 100644 index 00000000..929d65e0 --- /dev/null +++ b/cmake_uninstall.cmake.in @@ -0,0 +1,22 @@ +# @ref https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake +if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") +endif() + +file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif() + else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif() +endforeach() From 426a00095541ec20c95e448dada29c6adf466bc8 Mon Sep 17 00:00:00 2001 From: Onur Bingol Date: Fri, 4 Aug 2023 18:22:21 -0700 Subject: [PATCH 20/26] minor fixes --- CMakeLists.txt | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 612573cd..31bebfff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,23 @@ include(GNUInstallDirs) # @ref https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html include(CMakePackageConfigHelpers) +# Include "CheckCXXCompilerFlag" module which checks if the CXX compiler supports a given flag +# @ref https://cmake.org/cmake/help/latest/module/CheckCXXCompilerFlag.html +include(CheckCXXCompilerFlag) + +# Disable "ISO C++ forbids converting a string constant to ‘char*’" warnings +# @ref https://stackoverflow.com/a/67299165 +check_cxx_compiler_flag(-Wwrite-strings HAVE_WRITE_STRINGS) + +# Define PROJECT_IS_TOP_LEVEL variable if necessary +# @ref https://www.scivision.dev/cmake-project-is-top-level/ +if(CMAKE_VERSION VERSION_LESS 3.21) + get_property(not_top DIRECTORY PROPERTY PARENT_DIRECTORY) + if(NOT not_top) + set(PROJECT_IS_TOP_LEVEL true) + endif() +endif() + # Set CMake module path set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}/cmake) @@ -72,13 +89,13 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_53,code=sm_53 -gencode arch=compute_62,code=sm_62) if(CUDA_VERSION_MAJOR GREATER 9) - message(STATUS "jetson-utils: CUDA ${CUDA_VERSION} detected (${CMAKE_SYSTEM_PROCESSOR}), enabling SM_72") - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_72,code=sm_72) + message(STATUS "jetson-utils: CUDA ${CUDA_VERSION} detected (${CMAKE_SYSTEM_PROCESSOR}), enabling SM_72") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_72,code=sm_72) endif() if(CUDA_VERSION_MAJOR GREATER 10) - message(STATUS "jetson-utils: CUDA ${CUDA_VERSION} detected (${CMAKE_SYSTEM_PROCESSOR}), enabling SM_87") - set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_87,code=sm_87) + message(STATUS "jetson-utils: CUDA ${CUDA_VERSION} detected (${CMAKE_SYSTEM_PROCESSOR}), enabling SM_87") + set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -gencode arch=compute_87,code=sm_87) endif() endif() @@ -94,7 +111,7 @@ option(ENABLE_NVMM "Enable use of NVMM zero-copy memory in video and camera stre message(STATUS "jetson-utils: Enable NVMM zero-copy memory (ENABLE_NVMM): ${ENABLE_NVMM}") if(ENABLE_NVMM) - add_definitions(-DENABLE_NVMM) + add_definitions(-DENABLE_NVMM) endif() # Find OpenGL and related packages From d358066385073345ccd242eb4d77716a356af138 Mon Sep 17 00:00:00 2001 From: Onur Bingol Date: Fri, 4 Aug 2023 18:22:53 -0700 Subject: [PATCH 21/26] refactor CMakeLists for the python bindings --- python/CMakeLists.txt | 63 +++++---- python/bindings/CMakeLists.txt | 120 +++++++++++------- .../jetson_utils/__init__.py => init.py.in} | 3 - .../__init__.py => init_deprecated.py.in} | 3 - .../Jetson/__init__.py => init_empty.py.in} | 0 python/python/jetson/__init__.py | 0 python/python/jetson/utils/__init__.py | 8 -- 7 files changed, 116 insertions(+), 81 deletions(-) rename python/{python/jetson_utils/__init__.py => init.py.in} (58%) rename python/{python/Jetson/Utils/__init__.py => init_deprecated.py.in} (80%) rename python/{python/Jetson/__init__.py => init_empty.py.in} (100%) delete mode 100644 python/python/jetson/__init__.py delete mode 100644 python/python/jetson/utils/__init__.py diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 7c5ebb74..41d7d1b3 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -1,30 +1,49 @@ +# jetson-utils::python -- CMakeLists.txt +cmake_minimum_required(VERSION 3.5) -# -# This list contains the versions of Python that will be detected -# and the bindings built against (if that version is installed). -# -# If you want to support another version of Python, add it here. -# -if(LSB_RELEASE_CODENAME MATCHES "focal") - set(PYTHON_BINDING_VERSIONS 3.8) +# CMP0048: The project() command manages VERSION variables +cmake_policy(SET CMP0048 NEW) + +# CMP0028: Double colon in target name means ALIAS or IMPORTED target +cmake_policy(SET CMP0028 NEW) + +# Set name of the project +project(jetson-utils-python LANGUAGES CXX VERSION 1.0.0) + +# Find Python versions or use the user-defined version +if(NOT DEFINED JU_PYTHON_BINDING_VERSION) + if(DEFINED LSB_RELEASE_CODENAME) + if(LSB_RELEASE_CODENAME MATCHES "focal") + set(PYTHON_BINDING_VERSIONS 3.8) + else() + set(PYTHON_BINDING_VERSIONS 2.7 3.6 3.7) + endif() + endif() + + if(NOT DEFINED PYTHON_BINDING_VERSIONS) + message(WARNING "jetson-utils: LSB_RELEASE_CODENAME is not defined. Identifying Python versions from OS default CMake version") + if(CMAKE_VERSION VERSION_GREATER "3.10.3") + set(PYTHON_BINDING_VERSIONS 3.8) + else() + set(PYTHON_BINDING_VERSIONS 2.7 3.6 3.7) + endif() + endif() else() - set(PYTHON_BINDING_VERSIONS 2.7 3.6 3.7) + set(PYTHON_BINDING_VERSIONS ${JU_PYTHON_BINDING_VERSION}) endif() -message("-- trying to build Python bindings for Python versions: ${PYTHON_BINDING_VERSIONS}") - +# Build Python bindings +message(STATUS "jetson-utils: Building jetson-utils bindings for Python versions: ${PYTHON_BINDING_VERSIONS}") foreach(PYTHON_BINDING_VERSION ${PYTHON_BINDING_VERSIONS}) - add_subdirectory(bindings bindings_python_${PYTHON_BINDING_VERSION}) + add_subdirectory(bindings ${CMAKE_CURRENT_BINARY_DIR}/bindings_python_${PYTHON_BINDING_VERSION}) endforeach() +# Install Python examples +install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/examples + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/examples +) -# -# install Python examples -# -file(GLOB pyUtilExamples examples/*.py examples/*.sh) - -foreach(pyExample ${pyUtilExamples}) - message("-- Copying ${pyExample}") - file(COPY ${pyExample} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - install(FILES "${pyExample}" DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) -endforeach() +# Configure Python module __init__.py files +configure_file(${CMAKE_CURRENT_LIST_DIR}/init_empty.py.in ${CMAKE_CURRENT_BINARY_DIR}/module/__init__.py COPYONLY) +configure_file(${CMAKE_CURRENT_LIST_DIR}/init_deprecated.py.in ${CMAKE_CURRENT_BINARY_DIR}/module/deprecated/__init__.py COPYONLY) +configure_file(${CMAKE_CURRENT_LIST_DIR}/init.py.in ${CMAKE_CURRENT_BINARY_DIR}/module/utils/__init__.py COPYONLY) diff --git a/python/bindings/CMakeLists.txt b/python/bindings/CMakeLists.txt index b37ffa85..c91c7045 100644 --- a/python/bindings/CMakeLists.txt +++ b/python/bindings/CMakeLists.txt @@ -1,83 +1,113 @@ -# clear CMakeCache of Python version +# Clear CMakeCache of Python version unset(PYTHONINTERP_FOUND CACHE) unset(PYTHON_EXECUTABLE CACHE) unset(PYTHON_VERSION_STRING CACHE) unset(PYTHON_VERSION_MAJOR CACHE) unset(PYTHON_VERSION_MINOR CACHE) unset(PYTHON_VERSION_PATCH CACHE) - -unset(PYTHON_INCLUDE_PATH CACHE) -unset(PYTHON_INCLUDE_DIRS CACHE) -unset(PYTHON_INCLUDE_DIR CACHE) +# @ref https://github.com/opencv/opencv/blob/master/cmake/OpenCVDetectPython.cmake +unset(PYTHONLIBS_FOUND) +unset(PYTHON_LIBRARIES) +unset(PYTHON_INCLUDE_PATH) +unset(PYTHON_INCLUDE_DIRS) +unset(PYTHON_DEBUG_LIBRARIES) +unset(PYTHONLIBS_VERSION_STRING) +unset(PYTHON_DEBUG_LIBRARY CACHE) +unset(PYTHON_LIBRARY) +unset(PYTHON_LIBRARY_DEBUG) +unset(PYTHON_LIBRARY_RELEASE) unset(PYTHON_LIBRARY CACHE) -unset(PYTHON_LIBRARIES CACHE) -unset(PYTHON_DEBUG_LIBRARIES CACHE) -unset(PYTHON_MODULE_PREFIX CACHE) -unset(PYTHON_MODULE_EXTENSION CACHE) - -unset(PYTHONLIBS_FOUND CACHE) -unset(PYTHONLIBS_VERSION_STRING CACHE) +unset(PYTHON_LIBRARY_DEBUG CACHE) +unset(PYTHON_LIBRARY_RELEASE CACHE) +unset(PYTHON_INCLUDE_DIR CACHE) +unset(PYTHON_INCLUDE_DIR2 CACHE) -# locate requested python version -message("-- detecting Python ${PYTHON_BINDING_VERSION}...") +# Locate requested python version +message(STATUS "jetson-utils: detecting Python v${PYTHON_BINDING_VERSION}...") find_package(PythonInterp ${PYTHON_BINDING_VERSION} QUIET) find_package(PythonLibs ${PYTHON_BINDING_VERSION} QUIET) if(NOT ${PYTHONLIBS_FOUND}) - message("-- Python ${PYTHON_BINDING_VERSION} wasn't found") - return() + message(WARNING "jetson-utils: Python v${PYTHON_BINDING_VERSION} NOT found") + return() endif() -message("-- found Python version: ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} (${PYTHONLIBS_VERSION_STRING})") -message("-- found Python include: ${PYTHON_INCLUDE_DIRS}") -message("-- found Python library: ${PYTHON_LIBRARIES}") +message(STATUS "jetson-utils: found Python version: ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} (${PYTHONLIBS_VERSION_STRING})") +message(STATUS "jetson-utils: found Python include: ${PYTHON_INCLUDE_DIRS}") +message(STATUS "jetson-utils: found Python library: ${PYTHON_LIBRARIES}") include_directories(${PYTHON_INCLUDE_DIRS}) -# attempt to find numpy -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}") -message("-- CMake module path: ${CMAKE_MODULE_PATH}") +# Attempt to find numpy find_package(NumPy QUIET) if(${NUMPY_FOUND}) - message("-- found NumPy version: ${NUMPY_VERSION}") - message("-- found NumPy include: ${NUMPY_INCLUDE_DIR}") + message(STATUS "jetson-utils: found NumPy version: ${NUMPY_VERSION}") + message(STATUS "jetson-utils: found NumPy include: ${NUMPY_INCLUDE_DIR}") - add_definitions(-DHAS_NUMPY) - include_directories(${NUMPY_INCLUDE_DIR}) - link_directories(${NUMPY_INCLUDE_DIR}/../lib) + add_definitions(-DHAS_NUMPY) + include_directories(${NUMPY_INCLUDE_DIR}) + link_directories(${NUMPY_INCLUDE_DIR}/../lib) else() - message("-- NumPy not found") + message(WARNING "jetson-utils: NumPy NOT found") endif() -# build the bindings +# Find source and header files file(GLOB pythonUtilsSources *.cpp) +file(GLOB pythonUtilsIncludes *.h) -cuda_add_library(jetson-utils-python-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} SHARED ${pythonUtilsSources}) +# Build Python bindings +cuda_add_library(${PROJECT_NAME}-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} SHARED ${pythonUtilsSources} ${pythonUtilsIncludes}) -target_link_libraries(jetson-utils-python-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} jetson-utils ${PYTHON_LIBRARIES}) +if(HAVE_WRITE_STRINGS) + target_compile_options(${PROJECT_NAME}-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} PRIVATE -Wno-write-strings) +endif() + +target_link_libraries(${PROJECT_NAME}-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} + jetson-utils + ${PYTHON_LIBRARIES} +) if(${NUMPY_FOUND}) - target_link_libraries(jetson-utils-python-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} npymath) + target_link_libraries(${PROJECT_NAME}-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} + npymath + ) endif() -set_target_properties(jetson-utils-python-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} - PROPERTIES - PREFIX "" - OUTPUT_NAME "jetson_utils_python" - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/python/${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}") +set_target_properties(${PROJECT_NAME}-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} + PROPERTIES + PREFIX "" + OUTPUT_NAME "jetson_utils_python" + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/python/${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} +) # on x86, install under /opt/conda/lib/pythonX.X/site-packages -# otherwise, install under /usr/lib/pythonX.X/dist-packages +# otherwise, install under /usr/local/lib/pythonX.X/dist-packages if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") - set(PYTHON_BINDING_INSTALL_DIR /opt/conda/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages) + set(PYTHON_BINDING_INSTALL_DIR /opt/conda/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages) else() - set(PYTHON_BINDING_INSTALL_DIR /usr/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/dist-packages) + set(PYTHON_BINDING_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/dist-packages) endif() -install(TARGETS jetson-utils-python-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} DESTINATION ${PYTHON_BINDING_INSTALL_DIR}) - -install(DIRECTORY ../python/Jetson DESTINATION ${PYTHON_BINDING_INSTALL_DIR}) -install(DIRECTORY ../python/jetson DESTINATION ${PYTHON_BINDING_INSTALL_DIR}) -install(DIRECTORY ../python/jetson_utils DESTINATION ${PYTHON_BINDING_INSTALL_DIR}) +# Install the bindings as a Python package +install(TARGETS ${PROJECT_NAME}-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} + DESTINATION ${PYTHON_BINDING_INSTALL_DIR} +) + +# Install Python packaging files +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/../module/__init__.py + DESTINATION ${PYTHON_BINDING_INSTALL_DIR}/Jetson +) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/../module/deprecated/__init__.py + DESTINATION ${PYTHON_BINDING_INSTALL_DIR}/Jetson/Utils +) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/../module/__init__.py + DESTINATION ${PYTHON_BINDING_INSTALL_DIR}/jetson +) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/../module/deprecated/__init__.py + DESTINATION ${PYTHON_BINDING_INSTALL_DIR}/jetson/utils +) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/../module/utils/__init__.py + DESTINATION ${PYTHON_BINDING_INSTALL_DIR}/jetson_utils +) diff --git a/python/python/jetson_utils/__init__.py b/python/init.py.in similarity index 58% rename from python/python/jetson_utils/__init__.py rename to python/init.py.in index c5d9b124..b5af016c 100644 --- a/python/python/jetson_utils/__init__.py +++ b/python/init.py.in @@ -1,6 +1,3 @@ - -#print("jetson.utils.__init__.py") - from jetson_utils_python import * VERSION = '1.0.0' diff --git a/python/python/Jetson/Utils/__init__.py b/python/init_deprecated.py.in similarity index 80% rename from python/python/Jetson/Utils/__init__.py rename to python/init_deprecated.py.in index a9fc23c3..145ecd6f 100644 --- a/python/python/Jetson/Utils/__init__.py +++ b/python/init_deprecated.py.in @@ -1,6 +1,3 @@ - -#print("Jetson.Utils.__init__.py") - from jetson_utils_python import * VERSION = '1.0.0' diff --git a/python/python/Jetson/__init__.py b/python/init_empty.py.in similarity index 100% rename from python/python/Jetson/__init__.py rename to python/init_empty.py.in diff --git a/python/python/jetson/__init__.py b/python/python/jetson/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/python/python/jetson/utils/__init__.py b/python/python/jetson/utils/__init__.py deleted file mode 100644 index a9fc23c3..00000000 --- a/python/python/jetson/utils/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ - -#print("Jetson.Utils.__init__.py") - -from jetson_utils_python import * - -VERSION = '1.0.0' - -print("warning: importing jetson.utils is deprecated. please 'import jetson_utils' instead.") From a113f1d5a4ca4e4b13c29ef33756a7b87ad9f74d Mon Sep 17 00:00:00 2001 From: Onur Bingol Date: Fri, 4 Aug 2023 18:23:04 -0700 Subject: [PATCH 22/26] Enable python bindings by default --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 31bebfff..03d853e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -216,7 +216,7 @@ install( ) # Enable/disable python bindings -set(JU_ENABLE_PYTHON_BINDINGS OFF CACHE BOOL "Enable jetson-utils python bindings") +set(JU_ENABLE_PYTHON_BINDINGS ON CACHE BOOL "Enable jetson-utils python bindings") if(${JU_ENABLE_PYTHON_BINDINGS}) add_subdirectory(python) endif() From 05598d58799b6c8337ae245da711c892cd709222 Mon Sep 17 00:00:00 2001 From: Onur Bingol Date: Wed, 9 Aug 2023 15:04:34 -0700 Subject: [PATCH 23/26] minor clening --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 03d853e2..15486979 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,7 +43,6 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}/cmake) # Set install directory if(NOT DEFINED CMAKE_INSTALL_PREFIX) - #set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/install) set(CMAKE_INSTALL_PREFIX /usr/local) endif() message(STATUS "jetson-utils: install directory ${CMAKE_INSTALL_PREFIX}") From f6d09c386428aba2cd2c57216c25e461a3d75023 Mon Sep 17 00:00:00 2001 From: Onur Bingol Date: Wed, 9 Aug 2023 15:05:05 -0700 Subject: [PATCH 24/26] use python_add_module for python bindings --- python/bindings/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/bindings/CMakeLists.txt b/python/bindings/CMakeLists.txt index c91c7045..384ed3ca 100644 --- a/python/bindings/CMakeLists.txt +++ b/python/bindings/CMakeLists.txt @@ -58,7 +58,7 @@ file(GLOB pythonUtilsSources *.cpp) file(GLOB pythonUtilsIncludes *.h) # Build Python bindings -cuda_add_library(${PROJECT_NAME}-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} SHARED ${pythonUtilsSources} ${pythonUtilsIncludes}) +python_add_module(${PROJECT_NAME}-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} ${pythonUtilsSources} ${pythonUtilsIncludes}) if(HAVE_WRITE_STRINGS) target_compile_options(${PROJECT_NAME}-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR} PRIVATE -Wno-write-strings) From 2a4081dbbe9f90f775210e305b17a735a353c383 Mon Sep 17 00:00:00 2001 From: Onur Bingol Date: Wed, 9 Aug 2023 15:05:36 -0700 Subject: [PATCH 25/26] update rpath for python bindings --- python/bindings/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/bindings/CMakeLists.txt b/python/bindings/CMakeLists.txt index 384ed3ca..f9906b8d 100644 --- a/python/bindings/CMakeLists.txt +++ b/python/bindings/CMakeLists.txt @@ -80,6 +80,8 @@ set_target_properties(${PROJECT_NAME}-${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MI PREFIX "" OUTPUT_NAME "jetson_utils_python" LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/python/${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "$ORIGIN:$ORIGIN/../../" ) # on x86, install under /opt/conda/lib/pythonX.X/site-packages From 0f67b676bcb55ae76dbcadc202c7b580dd9df8ce Mon Sep 17 00:00:00 2001 From: Onur Bingol Date: Wed, 9 Aug 2023 15:14:34 -0700 Subject: [PATCH 26/26] fix install rpath on apps --- camera/camera-viewer/CMakeLists.txt | 5 +++++ camera/v4l2-console/CMakeLists.txt | 5 +++++ camera/v4l2-display/CMakeLists.txt | 5 +++++ display/gl-display-test/CMakeLists.txt | 5 +++++ network/rtsp-server/CMakeLists.txt | 5 +++++ network/webrtc-server/CMakeLists.txt | 5 +++++ video/video-viewer/CMakeLists.txt | 5 +++++ 7 files changed, 35 insertions(+) diff --git a/camera/camera-viewer/CMakeLists.txt b/camera/camera-viewer/CMakeLists.txt index 08bbd71d..685af923 100644 --- a/camera/camera-viewer/CMakeLists.txt +++ b/camera/camera-viewer/CMakeLists.txt @@ -19,6 +19,11 @@ add_executable(${PROJECT_NAME} ${gstCameraSources} ${gstCameraIncludes}) target_link_libraries(${PROJECT_NAME} jetson-utils ) +set_target_properties(${PROJECT_NAME} + PROPERTIES + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "$ORIGIN:$ORIGIN/../:$ORIGIN/../lib" +) # Install the executable install(TARGETS ${PROJECT_NAME} diff --git a/camera/v4l2-console/CMakeLists.txt b/camera/v4l2-console/CMakeLists.txt index f8da44d9..82921ef0 100644 --- a/camera/v4l2-console/CMakeLists.txt +++ b/camera/v4l2-console/CMakeLists.txt @@ -19,6 +19,11 @@ add_executable(${PROJECT_NAME} ${v4l2ConsoleSources} ${v4l2ConsoleIncludes}) target_link_libraries(${PROJECT_NAME} jetson-utils ) +set_target_properties(${PROJECT_NAME} + PROPERTIES + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "$ORIGIN:$ORIGIN/../:$ORIGIN/../lib" +) # Install the executable install(TARGETS ${PROJECT_NAME} diff --git a/camera/v4l2-display/CMakeLists.txt b/camera/v4l2-display/CMakeLists.txt index c1b6139b..05f33ee5 100644 --- a/camera/v4l2-display/CMakeLists.txt +++ b/camera/v4l2-display/CMakeLists.txt @@ -19,6 +19,11 @@ add_executable(${PROJECT_NAME} ${v4l2DisplaySources} ${v4l2DisplayIncludes}) target_link_libraries(${PROJECT_NAME} jetson-utils ) +set_target_properties(${PROJECT_NAME} + PROPERTIES + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "$ORIGIN:$ORIGIN/../:$ORIGIN/../lib" +) # Install the executable install(TARGETS ${PROJECT_NAME} diff --git a/display/gl-display-test/CMakeLists.txt b/display/gl-display-test/CMakeLists.txt index c0f5841f..7dc201fb 100644 --- a/display/gl-display-test/CMakeLists.txt +++ b/display/gl-display-test/CMakeLists.txt @@ -19,6 +19,11 @@ cuda_add_executable(${PROJECT_NAME} ${glDisplayTestSources} ${glDisplayTestInclu target_link_libraries(${PROJECT_NAME} jetson-utils ) +set_target_properties(${PROJECT_NAME} + PROPERTIES + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "$ORIGIN:$ORIGIN/../:$ORIGIN/../lib" +) # Install the executable install(TARGETS ${PROJECT_NAME} diff --git a/network/rtsp-server/CMakeLists.txt b/network/rtsp-server/CMakeLists.txt index 967d8104..d8114345 100644 --- a/network/rtsp-server/CMakeLists.txt +++ b/network/rtsp-server/CMakeLists.txt @@ -19,6 +19,11 @@ add_executable(${PROJECT_NAME} ${rtspServerSources} ${rtspServerIncludes}) target_link_libraries(${PROJECT_NAME} jetson-utils ) +set_target_properties(${PROJECT_NAME} + PROPERTIES + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "$ORIGIN:$ORIGIN/../:$ORIGIN/../lib" +) # Install the executable install(TARGETS ${PROJECT_NAME} diff --git a/network/webrtc-server/CMakeLists.txt b/network/webrtc-server/CMakeLists.txt index 1b6e5d89..88792c2e 100644 --- a/network/webrtc-server/CMakeLists.txt +++ b/network/webrtc-server/CMakeLists.txt @@ -19,6 +19,11 @@ add_executable(${PROJECT_NAME} ${WebRTCServerSources} ${WebRTCServerIncludes}) target_link_libraries(${PROJECT_NAME} jetson-utils ) +set_target_properties(${PROJECT_NAME} + PROPERTIES + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "$ORIGIN:$ORIGIN/../:$ORIGIN/../lib" +) # Install the executable install(TARGETS ${PROJECT_NAME} diff --git a/video/video-viewer/CMakeLists.txt b/video/video-viewer/CMakeLists.txt index 8b66ea17..297490ef 100644 --- a/video/video-viewer/CMakeLists.txt +++ b/video/video-viewer/CMakeLists.txt @@ -19,6 +19,11 @@ add_executable(${PROJECT_NAME} ${videoViewerSources} ${videoViewerIncludes}) target_link_libraries(${PROJECT_NAME} jetson-utils ) +set_target_properties(${PROJECT_NAME} + PROPERTIES + INSTALL_RPATH_USE_LINK_PATH TRUE + INSTALL_RPATH "$ORIGIN:$ORIGIN/../:$ORIGIN/../lib" +) # Install the executable install(TARGETS ${PROJECT_NAME}