|
| 1 | +cmake_minimum_required(VERSION 3.15) |
| 2 | + |
| 3 | +# Define the project name |
| 4 | +project(StreamingSDK) |
| 5 | + |
| 6 | +# Specify the C++ standard |
| 7 | +set(CMAKE_CXX_STANDARD 20) |
| 8 | +set(CMAKE_CXX_STANDARD_REQUIRED True) |
| 9 | + |
| 10 | +if(MSVC) |
| 11 | + # Set common compile flags for MSVC |
| 12 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive- /W4 /std:c++latest /WX /FC /DUNICODE /D_UNICODE /nologo") |
| 13 | + |
| 14 | + # Ensure runtime library settings and flags are consistent across the entire project when using MSVC |
| 15 | + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd /ZI /JMC /sdl") |
| 16 | + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT /Zi /Oi /GL /Gy") |
| 17 | + |
| 18 | + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") |
| 19 | + |
| 20 | + # Set global link and lib options for Debug and Release configurations |
| 21 | + set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG /NOLOGO") |
| 22 | + set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /DEBUG /NOLOGO") |
| 23 | + set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS_DEBUG} /NOLOGO") |
| 24 | + |
| 25 | + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG /INCREMENTAL:NO /OPT:REF /OPT:ICF /NOLOGO") |
| 26 | + set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG /INCREMENTAL:NO /OPT:REF /OPT:ICF /NOLOGO") |
| 27 | + set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG /NOLOGO") |
| 28 | + |
| 29 | +#elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
| 30 | + # # compiler error checking flags for linux |
| 31 | + #-Wno-register \ |
| 32 | + #-Werror \ |
| 33 | + #-Wall \ |
| 34 | + #-Wextra \ |
| 35 | + #-Wno-unknown-pragmas \ |
| 36 | + #-Wno-reorder \ |
| 37 | + #-Wno-unused \ |
| 38 | + #-Wno-switch \ |
| 39 | + #-Wno-sign-compare \ |
| 40 | + #-Wno-missing-field-initializers \ |
| 41 | + #-Wno-nonnull \ |
| 42 | + #-Wno-overloaded-virtual \ |
| 43 | +endif() |
| 44 | + |
| 45 | +if(WIN32) |
| 46 | + set(PROGRAM_FILES_X86 "$ENV{ProgramFiles\(x86\)}") |
| 47 | + set(WINDOWS_SDK_VERSION "10.0.26100.0") |
| 48 | + set(WINDOWS_SDK_INCLUDE_BASE "${PROGRAM_FILES_X86}/Windows Kits/10/Include/${WINDOWS_SDK_VERSION}") |
| 49 | + set(WINDOWS_SDK_INCLUDE |
| 50 | + "${WINDOWS_SDK_INCLUDE_BASE}/ucrt" |
| 51 | + "${WINDOWS_SDK_INCLUDE_BASE}/um" |
| 52 | + "${WINDOWS_SDK_INCLUDE_BASE}/shared" |
| 53 | + "${WINDOWS_SDK_INCLUDE_BASE}/winrt" |
| 54 | + "${WINDOWS_SDK_INCLUDE_BASE}/cppwinrt" |
| 55 | + "${WINDOWS_SDK_INCLUDE_BASE}/um" |
| 56 | + ) |
| 57 | + set(WINDOWS_SDK_BIN "${PROGRAM_FILES_X86}/Windows Kits/10/bin/${WINDOWS_SDK_VERSION}/x64") |
| 58 | + set(OCL_ROOT "$ENV{OCL_ROOT}") |
| 59 | + set(VK_SDK_PATH "$ENV{VK_SDK_PATH}") |
| 60 | + include_directories(${WINDOWS_SDK_INCLUDE} $ENV{VK_SDK_PATH}/include) |
| 61 | + include_directories(${OCL_ROOT}/include) |
| 62 | +endif() |
| 63 | + |
| 64 | + |
| 65 | +# Set output directories for all build configurations |
| 66 | +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/bin/Debug") |
| 67 | +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/bin/Debug") |
| 68 | +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/bin/Debug") |
| 69 | + |
| 70 | +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/bin/Release") |
| 71 | +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/bin/Release") |
| 72 | +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/bin/Release") |
| 73 | + |
| 74 | +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/bin/RelWithDebInfo") |
| 75 | +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/bin/RelWithDebInfo") |
| 76 | +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/bin/RelWithDebInfo") |
| 77 | + |
| 78 | +# Solution configurations |
| 79 | +set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo" CACHE STRING "" FORCE) |
| 80 | +set_property(GLOBAL PROPERTY USE_FOLDERS ON) |
| 81 | + |
| 82 | +set(SOURCE_FILES "") |
| 83 | +set(HEADER_FILES "") |
| 84 | + |
| 85 | +# Add subdirectories for each project |
| 86 | +set(SUBFOLDER_NET sdk/net) |
| 87 | +set(SUBFOLDER_UTIL sdk/util) |
| 88 | +set(SUBFOLDER_TRANSPORT_COMMON sdk/transports/transport-common) |
| 89 | +set(SUBFOLDER_TRANSPORT_AMD sdk/transports/transport-amd) |
| 90 | +set(SUBFOLDER_VIDEO sdk/video) |
| 91 | +set(SUBFOLDER_AUDIO sdk/audio) |
| 92 | +set(SUBFOLDER_CONTROLLERS sdk/controllers) |
| 93 | + |
| 94 | +add_subdirectory(amf-helper-libs/amf-public) |
| 95 | +add_subdirectory(amf-helper-libs/amf-component-ffmpeg64) |
| 96 | +add_subdirectory(${SUBFOLDER_NET}) |
| 97 | +add_subdirectory(${SUBFOLDER_UTIL}) |
| 98 | +add_subdirectory(${SUBFOLDER_TRANSPORT_COMMON}) |
| 99 | +add_subdirectory(${SUBFOLDER_TRANSPORT_AMD}) |
| 100 | +add_subdirectory(${SUBFOLDER_VIDEO}) |
| 101 | +add_subdirectory(${SUBFOLDER_AUDIO}) |
| 102 | +add_subdirectory(${SUBFOLDER_CONTROLLERS}) |
| 103 | +add_subdirectory(mbedtls-custom) |
| 104 | +add_subdirectory(samples/SimpleStreamingClient) |
| 105 | +add_subdirectory(samples/RemoteDesktopServer) |
| 106 | + |
| 107 | +# Add the library |
| 108 | +add_library(ssdk STATIC ${SOURCE_FILES} ${HEADER_FILES}) |
| 109 | + |
| 110 | +# Include directories |
| 111 | +target_include_directories(ssdk PRIVATE |
| 112 | + ./ |
| 113 | + sdk |
| 114 | + amf |
| 115 | + amf/amf |
| 116 | + mbedtls/include |
| 117 | +) |
| 118 | + |
| 119 | +# Compile definitions |
| 120 | +target_compile_definitions(ssdk PRIVATE |
| 121 | + $<$<CONFIG:Debug>:_DEBUG;_LIB> |
| 122 | + $<$<CONFIG:Release>:NDEBUG;_LIB> |
| 123 | +) |
| 124 | + |
| 125 | +# Project dependencies |
| 126 | +add_dependencies(SimpleStreamingClient ssdk amf-public amf-component-ffmpeg64 mbedtls-custom) |
| 127 | +add_dependencies(RemoteDesktopServer ssdk amf-public amf-component-ffmpeg64 mbedtls-custom) |
| 128 | + |
| 129 | +# Optionally, group targets into folders in the solution |
| 130 | +set_target_properties(ssdk PROPERTIES FOLDER "libs") |
| 131 | +set_target_properties(mbedtls-custom PROPERTIES FOLDER "libs") |
| 132 | +set_target_properties(SimpleStreamingClient PROPERTIES FOLDER "samples") |
| 133 | +set_target_properties(RemoteDesktopServer PROPERTIES FOLDER "samples") |
0 commit comments