Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
CMakeLists.txt113 linesDownload Raw Back to AppDecLowLatency
1# Copyright 2020-2024 NVIDIA Corporation.  All rights reserved.
2#
3# Please refer to the NVIDIA end user license agreement (EULA) associated
4# with this source code for terms and conditions that govern your use of
5# this software. Any use, reproduction, disclosure, or distribution of
6# this software and related documentation outside the terms of the EULA
7# is strictly prohibited.
8
9# 3.7 is required for FindVulkan module support in CMake.
10cmake_minimum_required(VERSION 3.7)
11
12project(AppDecLowLatency)
13
14set(APP_SOURCES
15 ${CMAKE_CURRENT_SOURCE_DIR}/AppDecLowLatency.cpp
16)
17
18if(WIN32)
19    set(NV_FFMPEG_HDRS ${FFMPEG_DIR}/include)
20endif()
21
22set(NV_DEC_SOURCES
23 ${NV_DEC_DIR}/NvDecoder.cpp
24)
25
26set(NV_DEC_HDRS
27 ${NV_DEC_DIR}/NvDecoder.h
28 ${NVCODEC_PUBLIC_INTERFACE_DIR}/cuviddec.h
29 ${NVCODEC_PUBLIC_INTERFACE_DIR}/nvcuvid.h
30 ${NVCODEC_UTILS_DIR}/NvCodecUtils.h
31 ${NVCODEC_UTILS_DIR}/FFmpegDemuxer.h
32 ${NV_APPDEC_COMMON_DIR}/AppDecUtils.h
33)
34
35source_group( "headers" FILES ${NV_DEC_HDRS} )
36source_group( "sources" FILES ${APP_SOURCES} ${NV_DEC_SOURCES} ${NV_ENC_CUDA_UTILS})
37
38# Try modern CUDAToolkit first for CMake 3.17+, fallback to deprecated CUDA module
39if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.17")
40    find_package(CUDAToolkit QUIET)
41    if(CUDAToolkit_FOUND)
42        # Map CUDAToolkit variables to legacy CUDA variable names
43        set(CUDA_CUDA_LIBRARY CUDA::cuda_driver)
44        set(CUDA_TOOLKIT_ROOT_DIR ${CUDAToolkit_TARGET_DIR})
45        set(CUDA_INCLUDE_DIRS ${CUDAToolkit_INCLUDE_DIRS})
46        set(CUDA_VERSION_MAJOR ${CUDAToolkit_VERSION_MAJOR})
47        set(CUDA_VERSION_MINOR ${CUDAToolkit_VERSION_MINOR})
48    endif()
49endif()
50if(NOT CUDAToolkit_FOUND)
51    find_package(CUDA)
52endif()
53
54set(CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER})
55
56if(NVCODEC_CUDA_VERSION_13_OR_GREATER)
57    set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-gencode arch=compute_75,code=\"sm_75,compute_75\")
58else()
59    set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-gencode arch=compute_50,code=\"sm_50,compute_50\")
60endif()
61if ( CMAKE_COMPILER_IS_GNUCC )
62    if(NOT "${CUDA_NVCC_FLAGS}" MATCHES "-std=c\\+\\+11" )
63        list(APPEND CUDA_NVCC_FLAGS -std=c++11)
64    endif()
65endif()
66
67# Use modern approach with CUDAToolkit when available, fallback to legacy FindCUDA
68if(CUDAToolkit_FOUND AND CUDAToolkit_NVCC_EXECUTABLE)
69    set(CMAKE_CUDA_COMPILER ${CUDAToolkit_NVCC_EXECUTABLE})
70    enable_language(CUDA)
71    add_executable(${PROJECT_NAME} ${APP_SOURCES} ${NV_DEC_SOURCES} ${NV_DEC_HDRS} ${NV_ENC_CUDA_UTILS})
72    set_property(TARGET ${PROJECT_NAME} PROPERTY CUDA_STANDARD 11)
73    if(NVCODEC_CUDA_VERSION_13_OR_GREATER)
74        set_property(TARGET ${PROJECT_NAME} PROPERTY CUDA_ARCHITECTURES "75")
75    else()
76        set_property(TARGET ${PROJECT_NAME} PROPERTY CUDA_ARCHITECTURES "50")
77    endif()
78else()
79    cuda_add_executable(${PROJECT_NAME} ${APP_SOURCES} ${NV_DEC_SOURCES} ${NV_DEC_HDRS} ${NV_ENC_CUDA_UTILS})
80endif()
81
82set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
83
84target_include_directories(${PROJECT_NAME} PUBLIC ${CUDA_INCLUDE_DIRS}
85 ${NVCODEC_PUBLIC_INTERFACE_DIR}
86 ${NVCODEC_UTILS_DIR}
87 ${NV_CODEC_DIR}
88 ${NV_APPDEC_COMMON_DIR}
89 ${NV_FFMPEG_HDRS}
90)
91
92if(WIN32)
93    Set(AVCODEC_LIB ${FFMPEG_DIR}/lib/avcodec.lib)
94    Set(AVFORMAT_LIB ${FFMPEG_DIR}/lib/avformat.lib)
95    Set(AVUTIL_LIB ${FFMPEG_DIR}/lib/avutil.lib)
96    Set(SWRESAMPLE_LIB ${FFMPEG_DIR}/lib/swresample.lib)
97    #copy dll's
98    install(DIRECTORY ${FFMPEG_DLL_DIR} DESTINATION ${NVCODEC_SAMPLES_INSTALL_DIR} FILES_MATCHING PATTERN "*.dll")
99    install(DIRECTORY ${FFMPEG_LIB_DIR} DESTINATION ${NVCODEC_SAMPLES_INSTALL_DIR} FILES_MATCHING PATTERN "*.lib")
100endif ()
101
102target_link_libraries(${PROJECT_NAME} ${CUDA_CUDA_LIBRARY} ${CMAKE_DL_LIBS} ${NVENCODEAPI_LIB} ${CUVID_LIB} ${AVCODEC_LIB}
103 ${AVFORMAT_LIB} ${AVUTIL_LIB} ${SWRESAMPLE_LIB})
104
105install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${NVCODEC_SAMPLES_INSTALL_DIR})
106if (MSVC)
107    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
108    set_target_properties( ${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${NVCODEC_SAMPLES_INSTALL_DIR}/$<CONFIG>/ )
109    add_dependencies(${PROJECT_NAME} copyFFMPEGFiles)
110    #copy pdb's
111    install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> DESTINATION ${NVCODEC_SAMPLES_INSTALL_DIR}  CONFIGURATIONS Debug)
112endif()
113 
codekingpro/portable-devtools · Team Ai