|
| 1 | +# FindTegraJPEG.cmake |
| 2 | +# - TegraJPEG_FOUND |
| 3 | +# - TegraJPEG_INCLUDE_DIRS |
| 4 | +# - TegraJPEG_LIBRARIES |
| 5 | + |
| 6 | +# Detect Linux4Tegra distribution |
| 7 | +SET(L4T_RELEASE_FILE /etc/nv_tegra_release) |
| 8 | +IF(EXISTS ${L4T_RELEASE_FILE}) |
| 9 | + SET(TegraJPEG_IS_L4T TRUE) |
| 10 | + EXECUTE_PROCESS( |
| 11 | + COMMAND sha1sum --quiet -c /etc/nv_tegra_release |
| 12 | + RESULT_VARIABLE TegraJPEG_DRIVER_ERROR |
| 13 | + OUTPUT_VARIABLE TegraJPEG_DRIVER_OUTPUT |
| 14 | + ERROR_QUIET |
| 15 | + ) |
| 16 | + IF(TegraJPEG_DRIVER_ERROR) |
| 17 | + MESSAGE(WARNING "Tegra drivers have wrong checksum:\n${TegraJPEG_DRIVER_OUTPUT}") |
| 18 | + ELSE() |
| 19 | + SET(TegraJPEG_DRIVER_OK TRUE) |
| 20 | + ENDIF() |
| 21 | +ENDIF() |
| 22 | + |
| 23 | +# Detect L4T version |
| 24 | +IF(TegraJPEG_IS_L4T) |
| 25 | + FILE(READ ${L4T_RELEASE_FILE} L4T_RELEASE_CONTENT LIMIT 64 OFFSET 2) |
| 26 | + STRING(REGEX REPLACE "^R([0-9]*)[^,]*, REVISION: ([0-9.]*).*" "\\1" L4T_VER_MAJOR "${L4T_RELEASE_CONTENT}") |
| 27 | + STRING(REGEX REPLACE "^R([0-9]*)[^,]*, REVISION: ([0-9.]*).*" "\\2" L4T_VER_MINOR "${L4T_RELEASE_CONTENT}") |
| 28 | + SET(L4T_VER "${L4T_VER_MAJOR}.${L4T_VER_MINOR}") |
| 29 | + MESSAGE(STATUS "Found Linux4Tegra ${L4T_VER}") |
| 30 | + IF(L4T_VER VERSION_LESS 21.3.0) |
| 31 | + MESSAGE(WARNING "Linux4Tegra version (${L4T_VER}) less than minimum requirement (21.3)") |
| 32 | + ELSE() |
| 33 | + SET(TegraJPEG_L4T_OK TRUE) |
| 34 | + ENDIF() |
| 35 | +ENDIF() |
| 36 | + |
| 37 | +# Download gstjpeg source |
| 38 | +IF(TegraJPEG_L4T_OK) |
| 39 | + SET(L4T_GSTJPEG_URL "http://developer.download.nvidia.com/embedded/L4T/r${L4T_VER_MAJOR}_Release_v${L4T_VER_MINOR}/source/gstjpeg_src.tbz2") |
| 40 | + SET(L4T_GSTJPEG_DEST ${DEPENDS_DIR}/gstjpeg/gstjpeg_src.tbz2) |
| 41 | + IF(NOT EXISTS ${L4T_GSTJPEG_DEST}) |
| 42 | + MESSAGE(STATUS "Downloading gstjpeg_src.tbz2 to ${DEPENDS_DIR}...") |
| 43 | + # Do we want checksum for the download? |
| 44 | + FILE(DOWNLOAD ${L4T_GSTJPEG_URL} ${L4T_GSTJPEG_DEST} STATUS L4T_GSTJPEG_STATUS) |
| 45 | + LIST(GET ${L4T_GSTJPEG_STATUS} 0 L4T_GSTJPEG_ERROR) |
| 46 | + LIST(GET ${L4T_GSTJPEG_STATUS} 1 L4T_GSTJPEG_MSG) |
| 47 | + IF(L4T_GSTJPEG_ERROR) |
| 48 | + MESSAGE(WARNING "Failed to download gstjpeg_src.tbz2: ${L4T_GSTJPEG_MSG}") |
| 49 | + ENDIF() |
| 50 | + ENDIF() |
| 51 | + EXECUTE_PROCESS( |
| 52 | + COMMAND ${CMAKE_COMMAND} -E tar xjf ${L4T_GSTJPEG_DEST} gstjpeg_src/nv_headers |
| 53 | + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} |
| 54 | + RESULT_VARIABLE L4T_HEADERS_ERROR |
| 55 | + ERROR_VARIABLE L4T_HEADERS_MSG |
| 56 | + ) |
| 57 | + IF(L4T_HEADERS_ERROR) |
| 58 | + MESSAGE(WARNING "Failed to unpack gstjpeg_src.tbz2: ${L4T_HEADERS_MSG}") |
| 59 | + ENDIF() |
| 60 | +ENDIF() |
| 61 | + |
| 62 | +FIND_PATH(TegraJPEG_INCLUDE_DIRS |
| 63 | + nv_headers/jpeglib.h |
| 64 | + DOC "Found TegraJPEG include directory" |
| 65 | + PATHS ${CMAKE_BINARY_DIR}/gstjpeg_src |
| 66 | + NO_DEFAULT_PATH |
| 67 | +) |
| 68 | + |
| 69 | +FIND_LIBRARY(TegraJPEG_LIBRARIES |
| 70 | + NAMES jpeg nvjpeg |
| 71 | + DOC "Found TegraJPEG library" |
| 72 | + PATHS /usr/lib/arm-linux-gnueabihf/tegra |
| 73 | + NO_DEFAULT_PATH |
| 74 | +) |
| 75 | + |
| 76 | +IF(TegraJPEG_INCLUDE_DIRS AND TegraJPEG_LIBRARIES) |
| 77 | + INCLUDE(CheckCSourceCompiles) |
| 78 | + set(CMAKE_REQUIRED_INCLUDES ${TegraJPEG_INCLUDE_DIRS}) |
| 79 | + set(CMAKE_REQUIRED_LIBRARIES ${TegraJPEG_LIBRARIES}) |
| 80 | + check_c_source_compiles("#include <stdio.h>\n#include <nv_headers/jpeglib.h>\nint main() { struct jpeg_decompress_struct d; jpeg_create_decompress(&d); d.jpegTegraMgr = 0; d.input_frame_buf = 0; return 0; }" TegraJPEG_WORKS) |
| 81 | + set(CMAKE_REQUIRED_INCLUDES) |
| 82 | + set(CMAKE_REQUIRED_LIBRARIES) |
| 83 | +ENDIF() |
| 84 | + |
| 85 | +INCLUDE(FindPackageHandleStandardArgs) |
| 86 | +FIND_PACKAGE_HANDLE_STANDARD_ARGS(TegraJPEG FOUND_VAR TegraJPEG_FOUND |
| 87 | + REQUIRED_VARS TegraJPEG_LIBRARIES TegraJPEG_INCLUDE_DIRS TegraJPEG_L4T_OK TegraJPEG_DRIVER_OK TegraJPEG_WORKS) |
0 commit comments