From 2a52d46fbb4e49f758d994e8926e83bbec2eef7d Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Tue, 27 Feb 2024 18:42:29 -0800 Subject: [PATCH 01/94] InitCommit - Update CMakeLists.txt --- CMakeLists.txt | 334 ++++++++++++++++++++++++++----------------------- 1 file changed, 177 insertions(+), 157 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 10b5f12cc..0e8d627fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,9 @@ cmake_minimum_required(VERSION 3.6.3) + +# Include custom utilites. set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") include(Utilities) + project(KinesisVideoProducerC VERSION 1.5.1 LANGUAGES C) set(KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION 1) @@ -8,8 +11,7 @@ set(KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION 5) set(KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION 1) set(KINESIS_VIDEO_PRODUCER_C_VERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION}) -include(GNUInstallDirs) - +set(SUPPORTED_CRYPTO_LIBRARIES "{OpenSSL, MbedTLS}") # User Flags option(ADD_MUCLIBC "Add -muclibc c flag" OFF) @@ -18,12 +20,15 @@ option(BUILD_DEPENDENCIES "Whether or not to build depending libraries from sour option(USE_OPENSSL "Use openssl as crypto library" ON) option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common library" OFF) -option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) +option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) # TODO: remove this and any other un-needed flags option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) -option(LOCAL_OPENSSL_BUILD "Whether or not to use local OpenSSL build" OFF) +option(BUILD_CRYPTO "Whether or not to build OpenSSL or MbedTLS, if not, will use system-installed version" ON) option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) +option(BUILD_KVS_PIC "Whether to build PIC SDK, else will use system-installed version" ON) +option(BUILD_SAMPLES "Whether to build Producer C samples" ON) -# Developer Flags + +# Maintainer Flags option(BUILD_TEST "Build the testing tree." OFF) option(CODE_COVERAGE "Enable coverage reporting" OFF) option(COMPILER_WARNINGS "Enable all compiler warnings." OFF) @@ -34,37 +39,37 @@ option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) -set(TYPE_OF_LIB SHARED) if (BUILD_STATIC) - set(TYPE_OF_LIB STATIC) + set(TYPE_OF_LIB STATIC) +else() + set(TYPE_OF_LIB SHARED) endif() -set(CMAKE_MACOSX_RPATH TRUE) - -get_filename_component(ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) - -add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") - if(CONSTRAINED_DEVICE) add_definitions(-DCONSTRAINED_DEVICE) endif() -if(NOT KINESIS_VIDEO_PRODUCER_C_SRC) - if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - else() - set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") - endif() -endif() +set(CMAKE_MACOSX_RPATH TRUE) +add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") -message(STATUS "Kinesis Video Producer path is ${KINESIS_VIDEO_PRODUCER_C_SRC}") +# Set where to build this project. +if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) +else() + set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") +endif() +# Default to release build if unspecified. if(NOT CMAKE_BUILD_TYPE) message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) endif() +# Fetch and build 3rd-party dependencies if specified. if(BUILD_DEPENDENCIES) + message(STATUS "Begin building dependencies.") + + # Set directory where to build the dependencies. if (NOT OPEN_SRC_INSTALL_PREFIX) set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) set(ENV{PKG_CONFIG_PATH} @@ -72,31 +77,30 @@ if(BUILD_DEPENDENCIES) set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) endif() + # Create the dependency directory if it doesn't exist. if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) endif() - message(STATUS "Begin building dependencies.") - + # Verify only one of SUPPORTED_CRYPTO_LIBRARIES are selected. set(SSL_OPTIONS USE_OPENSSL USE_MBEDTLS) - count_true(ENABLED_SSL_OPTION_COUNT - ${SSL_OPTIONS}) - + count_true(ENABLED_SSL_OPTION_COUNT ${SSL_OPTIONS}) if(ENABLED_SSL_OPTION_COUNT GREATER "1") message(FATAL_ERROR "Only one of ${SSL_OPTIONS} can be enabled") endif() - if(NOT LOCAL_OPENSSL_BUILD) - message(STATUS "Building non-local OpenSSL") + # If not using system's crypto library. + if(BUILD_CRYPTO) if(USE_OPENSSL) - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} - -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) + message(STATUS "Building OpenSSL") + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) build_dependency(openssl ${BUILD_ARGS}) elseif(USE_MBEDTLS) + message(STATUS "Building MbedTLS") set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) build_dependency(mbedtls ${BUILD_ARGS}) else() - message(FATAL_ERROR "No crypto library selected.") + message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) endif() endif() @@ -115,7 +119,6 @@ if(BUILD_DEPENDENCIES) -DUSE_OPENSSL=${USE_OPENSSL} -DUSE_MBEDTLS=${USE_MBEDTLS}) build_dependency(curl ${BUILD_ARGS}) - endif() if(BUILD_TEST) @@ -127,50 +130,79 @@ endif() find_package(PkgConfig REQUIRED) -############# Check system for kvspic ############# +message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. -pkg_check_modules(KVSPIC libkvspicUtils) -if(KVSPIC_FOUND) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) - link_directories(${KVSPIC_LIBRARY_DIRS}) -else() - ############# fetch repos that we need do add_subdirectory ############ - # repos that we will build using add_subdirectory will be stored in this path + +############# Checking system for kvspic ############# + +set(CMAKE_FIND_DEBUG_MODE ON) #TODO: Remove this. + +# NOTE: this is possibly a breaking change, if not specified, system PIC will not be used. +# Prev behavior: look for system PIC if not found, build PIC. +# Now: is BUILD_KVS_PIC ? build PIC, else find syste PIC - if system PIC not found, fail build +# TODO: Leave a not in the PIC file libkvspic.pc.cmake that the below comments/messages must be updated +# if we change "prefix=" from CMAKE_INSTALL_PREFIX. +if(BUILD_KVS_PIC) + # TODO: double check with the original comment that used to be here... make sure this comment is correct. + # KVS PIC will live in the DEPENDENCY_DOWNLOAD_PATH. + # TODO: Double check all the below is correct/necessary. set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) fetch_repo(kvspic ${BUILD_ARGS}) add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") include_directories("${PIC_HEADERS}") - - ############# fetch repos that we need do add_subdirectory done ############ +else() + # Finding PIC on system using the libcproducer.pc.cmake file. + pkg_check_modules(KVSPIC libkvspicUtils) + if(KVSPIC_FOUND) + message("Found system KVS PIC located: ${KVSPIC_PREFIX}") + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) + link_directories(${KVSPIC_LIBRARY_DIRS}) + else() + message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVSPIC_INCLUDE_DIRS} \ + Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") + endif() endif() -############# Check system for kvspic done ############# +############# Done checking system for kvspic ############# -############# find dependent libraries ############ -find_package(Threads) -set(OPEN_SRC_INCLUDE_DIRS ${LIBKVSPIC_INCLUDE_DIRS}) +############# Finding 3rd-party dependencies ############ -if(USE_OPENSSL) - find_package(OpenSSL) - if(NOT OPENSSL_FOUND AND NOT BUILD_DEPENDENCIES) - message(FATAL_ERROR "OpenSSL is not found. Make sure to export PKG_CONFIG_PATH to where OpenSSL's pc file is") +find_package(Threads) + +# TODO: Should maybe change "BUILD_CRYPTO" to be similar to the other ones: "BUILD_COMMON_CRYPTO" +# (and so BUILD_CRYPTO == !BUILD_COMMON_CRYPTO) +if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) + if(USE_OPENSSL) + find_package(OpenSSL REQUIRED) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) + elseif(USE_MBEDTLS) + find_package(MbedTLS REQUIRED) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) + else() + message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) endif() - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) -elseif(USE_MBEDTLS) - find_package(MbedTLS REQUIRED) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) -else() - message(FATAL_ERROR "No crypto library selected.") endif() -if(BUILD_COMMON_CURL) + +# TODO: Need to figure out the use case here. +# If we are building deps, should we check for system libraries at all? +# - Is there ever a case that buildDeps=TRUE AND buildCommon<>=TRUE? +# - And then is there ever a case buildDeps=FALSE AND buildCommon<>=FALSE? +# - Which takes precedence? +# I would think buildCommon is a way of overriding the in-house building and avoiding +# fetching the repo in this project. This way you can keep buildDeps=TRUE and then +# specify which ones you actually don't want built with the project by setting buildCommon to true. +# However, currently I have the logic setup reverse from the above: we only use common/system build +# if buildDeps is off AND buildCommon<> is TRUE for the package. + +if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) if (WIN32) - find_package(CURL REQUIRED) - set(CURL_LIBRARIES CURL::libcurl) + find_package(CURL REQUIRED) + set(CURL_LIBRARIES CURL::libcurl) else() pkg_check_modules(CURL REQUIRED libcurl) endif() @@ -179,7 +211,7 @@ if(BUILD_COMMON_CURL) link_directories(${CURL_LIBRARY_DIRS}) endif() -if (BUILD_COMMON_LWS) +if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) if (WIN32) find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) else() @@ -190,7 +222,10 @@ if (BUILD_COMMON_LWS) link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) endif() -############# find dependent libraries end ############ +############# Done finding 3rd-party dependencies ############ + + +############# TODO: Doing.... ############ if(CMAKE_SIZEOF_VOID_P STREQUAL 4) message(STATUS "Bitness 32 bits") @@ -206,6 +241,8 @@ else() message(FATAL_ERROR "Unknown bitness") endif() + +# TODO: Figure out what is going on in here and add comments. if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") @@ -236,6 +273,7 @@ if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") endif() endif() +# TODO: What and why? if(MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) endif() @@ -256,7 +294,6 @@ if(SET_SSL_CALLBACKS) add_definitions(-DSET_SSL_CALLBACKS) endif() - # use openssl by default set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) @@ -274,110 +311,93 @@ install( DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include DESTINATION .) -if(BUILD_COMMON_LWS) - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonLws.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc" @ONLY) - if (WIN32) - add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) - else() - add_library(kvsCommonLws ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) - endif() - target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS ${CPRODUCER_COMMON_TLS_OPTION}) - if(NOT BUILD_STATIC) - set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - target_link_libraries(kvsCommonLws - ${OPENSSL_CRYPTO_LIBRARY} - ${OPENSSL_SSL_LIBRARY} - ${LIBWEBSOCKETS_LIBRARIES} - kvspicUtils) - - install( - TARGETS kvsCommonLws - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") -endif() +# if(BUILD_COMMON_LWS) + + # ....... + +# endif() + + +# TODO: Still have to go through the rest below + if(BUILD_COMMON_CURL) - # producer only uses curl right now - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) - - if(BUILD_STATIC) - # Curl will enable ZLIB as part of its build if it finds - # the package. We need to therefore link it for static builds. - find_package(ZLIB) - if(ZLIB_FOUND) - list(APPEND CURL_LIBRARIES z) - endif() + # producer only uses curl right now + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) + + if(BUILD_STATIC) + # Curl will enable ZLIB as part of its build if it finds + # the package. We need to therefore link it for static builds. + find_package(ZLIB) + if(ZLIB_FOUND) + list(APPEND CURL_LIBRARIES z) endif() + endif() - if (WIN32) - add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - else() - add_library(kvsCommonCurl ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - endif() - target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) - if(NOT BUILD_STATIC) - set_target_properties(kvsCommonCurl PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - target_link_libraries(kvsCommonCurl - kvspicUtils - ${CURL_LIBRARIES} - ${PRODUCER_CRYPTO_LIBRARY}) - - install( - TARGETS kvsCommonCurl - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) - - if (WIN32) - add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) - else() - add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES}) - endif() - if(NOT BUILD_STATIC) - set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - target_link_libraries(cproducer PUBLIC kvsCommonCurl kvspic) + if (WIN32) + add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + else() + add_library(kvsCommonCurl ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + endif() + target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) + if(NOT BUILD_STATIC) + set_target_properties(kvsCommonCurl PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + target_link_libraries(kvsCommonCurl + kvspicUtils + ${CURL_LIBRARIES} + ${PRODUCER_CRYPTO_LIBRARY}) + + install( + TARGETS kvsCommonCurl + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - install( - TARGETS cproducer - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) - add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c) - target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer) - add_executable(kvsVideoOnlyOfflineStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyOfflineStreamingSample.c) - target_link_libraries(kvsVideoOnlyOfflineStreamingSample cproducer) + if (WIN32) + add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) + else() + add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES}) + endif() + if(NOT BUILD_STATIC) + set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + target_link_libraries(cproducer PUBLIC kvsCommonCurl kvspic) - add_executable(kvsAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioVideoStreamingSample.c) - target_link_libraries(kvsAudioVideoStreamingSample cproducer) + message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") + install( + TARGETS cproducer + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c) - target_link_libraries(kvsAudioOnlyStreamingSample cproducer) + add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c) + target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer) - if (BUILD_TEST) - add_subdirectory(tst) - endif() + add_executable(kvsVideoOnlyOfflineStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyOfflineStreamingSample.c) + target_link_libraries(kvsVideoOnlyOfflineStreamingSample cproducer) + + add_executable(kvsAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioVideoStreamingSample.c) + target_link_libraries(kvsAudioVideoStreamingSample cproducer) + + add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c) + target_link_libraries(kvsAudioOnlyStreamingSample cproducer) + + if (BUILD_TEST) + add_subdirectory(tst) + endif() endif() From f3e3af1af2ae5bfd113aa197bdd978fb27ae50b4 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Tue, 27 Feb 2024 21:03:29 -0800 Subject: [PATCH 02/94] Don't include LWS KVS source files --- CMakeLists.txt | 80 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e8d627fd..573a68488 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -273,19 +273,33 @@ if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") endif() endif() -# TODO: What and why? +# TODO: What and why is this MSVC thing? if(MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) endif() + file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") + file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") +#file(GLOB_RECURSE PRODUCER_C_SOURCE_FILES "src/source/*.c") + +list(APPEND PRODUCER_C_SOURCE_FILES + ${KVS_COMMON_SOURCE_FILES_BASE} + ${KVS_COMMON_SOURCE_FILES_CURL}) + +set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) +set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) + include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) +link_directories(${CMAKE_CURRENT_SOURCE_DIR}/open-source/lib) + + if(ALIGNED_MEMORY_MODEL) add_definitions(-DALIGNED_MEMORY_MODEL) endif() @@ -297,14 +311,14 @@ endif() # use openssl by default set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) -set(PRODUCER_CRYPTO_LIBRARY - OpenSSL::Crypto - OpenSSL::SSL) +# set(PRODUCER_CRYPTO_LIBRARY +# OpenSSL::Crypto +# OpenSSL::SSL) if (USE_MBEDTLS) - set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) - set(PRODUCER_CRYPTO_LIBRARY - MbedTLS - MbedCrypto) + set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) +# set(PRODUCER_CRYPTO_LIBRARY +# MbedTLS +# MbedCrypto) endif() install( @@ -320,7 +334,6 @@ install( # endif() -# TODO: Still have to go through the rest below if(BUILD_COMMON_CURL) # producer only uses curl right now @@ -337,28 +350,28 @@ if(BUILD_COMMON_CURL) endif() endif() - if (WIN32) - add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - else() - add_library(kvsCommonCurl ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - endif() - target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) - if(NOT BUILD_STATIC) - set_target_properties(kvsCommonCurl PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - target_link_libraries(kvsCommonCurl - kvspicUtils - ${CURL_LIBRARIES} - ${PRODUCER_CRYPTO_LIBRARY}) - - install( - TARGETS kvsCommonCurl - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + # if (WIN32) + # add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + # else() + # add_library(kvsCommonCurl ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + # endif() + # target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) + # if(NOT BUILD_STATIC) + # set_target_properties(kvsCommonCurl PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + # endif() + # target_link_libraries(kvsCommonCurl + # kvspicUtils + # ${CURL_LIBRARIES} + # ${PRODUCER_CRYPTO_LIBRARY}) + + # install( + # TARGETS kvsCommonCurl + # ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + # LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + # RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + # install( + # FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc + # DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" @@ -373,7 +386,10 @@ if(BUILD_COMMON_CURL) if(NOT BUILD_STATIC) set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) endif() - target_link_libraries(cproducer PUBLIC kvsCommonCurl kvspic) + + target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) + + target_link_libraries(cproducer PUBLIC kvspic curl ssl crypto websockets) message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") install( From b837e0ff8d01a6d93c3888854d82b3c1b7bd10f5 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Tue, 27 Feb 2024 21:05:17 -0800 Subject: [PATCH 03/94] Remove redundant line from libcurl-CMakeLists.txt --- CMake/Dependencies/libcurl-CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/CMake/Dependencies/libcurl-CMakeLists.txt b/CMake/Dependencies/libcurl-CMakeLists.txt index 74e44b520..4248dafc3 100644 --- a/CMake/Dependencies/libcurl-CMakeLists.txt +++ b/CMake/Dependencies/libcurl-CMakeLists.txt @@ -2,8 +2,6 @@ cmake_minimum_required(VERSION 3.6.3) project(libcurl-download LANGUAGES C) -find_program(MAKE_EXE NAMES make) - if (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isysroot${CMAKE_OSX_SYSROOT}") endif() From 998ea4ea0aa8e4e69787ab6e98262d7b5972b004 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Tue, 27 Feb 2024 21:06:39 -0800 Subject: [PATCH 04/94] Cleanup? libwebsockets-CMakeLists.txt --- .../Dependencies/libwebsockets-CMakeLists.txt | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/CMake/Dependencies/libwebsockets-CMakeLists.txt b/CMake/Dependencies/libwebsockets-CMakeLists.txt index 3ada49e4b..18a2398f6 100644 --- a/CMake/Dependencies/libwebsockets-CMakeLists.txt +++ b/CMake/Dependencies/libwebsockets-CMakeLists.txt @@ -18,11 +18,10 @@ else() set(LWS_WITH_MBEDTLS OFF) endif() -ExternalProject_Add(project_libwebsockets - GIT_REPOSITORY https://github.com/warmcat/libwebsockets.git - GIT_TAG v3.2.3 - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build - CMAKE_ARGS +set(CMAKE_ARGS + # enable for debug output -DCMAKE_BUILD_TYPE=DEBUG + -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${OPEN_SRC_INSTALL_PREFIX} -DLWS_WITH_HTTP2=1 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} @@ -41,8 +40,13 @@ ExternalProject_Add(project_libwebsockets -DLWS_STATIC_PIC=1 -DLWS_WITH_ZLIB=0 -DLWS_WITH_MBEDTLS=${LWS_WITH_MBEDTLS} -# enable for debug output -DCMAKE_BUILD_TYPE=DEBUG - -DOPENSSL_ROOT_DIR=${OPENSSL_DIR} - BUILD_ALWAYS TRUE - TEST_COMMAND "" + -DOPENSSL_ROOT_DIR=${OPENSSL_DIR}) + +ExternalProject_Add(project_libwebsockets + GIT_REPOSITORY https://github.com/warmcat/libwebsockets.git + GIT_TAG v3.2.3 + PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build + CMAKE_ARGS ${CMAKE_ARGS} + BUILD_ALWAYS TRUE + TEST_COMMAND "" ) From cdad37258591c66268614fe8f45e354364523525 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Tue, 27 Feb 2024 21:20:00 -0800 Subject: [PATCH 05/94] Working! --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 573a68488..5a10c06d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -389,7 +389,7 @@ if(BUILD_COMMON_CURL) target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) - target_link_libraries(cproducer PUBLIC kvspic curl ssl crypto websockets) + target_link_libraries(cproducer PUBLIC kvspic curl ssl crypto) message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") install( From 62b31af855d9dde895f0c5eafba608e6f9bff105 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Wed, 28 Feb 2024 11:32:11 -0800 Subject: [PATCH 06/94] Add comments, remove duplicated lines --- CMakeLists.txt | 5 +++-- tst/main.cpp | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a10c06d4..40242ee14 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -291,7 +291,6 @@ list(APPEND PRODUCER_C_SOURCE_FILES ${KVS_COMMON_SOURCE_FILES_CURL}) set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) -set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) @@ -334,7 +333,7 @@ install( # endif() - +# TODO: I wonder, why would producer ever need lws? if(BUILD_COMMON_CURL) # producer only uses curl right now configure_file( @@ -389,6 +388,8 @@ if(BUILD_COMMON_CURL) target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) + # TODO: I'd like to know why there is no openssl library and we instead have to use + # ssl and crypto (openssl's dependencies). target_link_libraries(cproducer PUBLIC kvspic curl ssl crypto) message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") diff --git a/tst/main.cpp b/tst/main.cpp index b5b4594a2..f0b8d2045 100644 --- a/tst/main.cpp +++ b/tst/main.cpp @@ -6,6 +6,7 @@ #include #include #include +#include // The number of retries allowed. 0 means no retry, all tests will run exactly run once. #define MAX_TRIALS 10 @@ -41,6 +42,9 @@ class Retrier : public ::testing::EmptyTestEventListener { }; int main(int argc, char **argv) { + curl_version_info_data *d = curl_version_info(CURLVERSION_NOW); + printf("CURL version is: %s\n", d->version); + int trial = 0, rc; bool breakOnFailure; From 2cd7c83b74bc054d5ccc4c3278286d6e85d0550c Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:08:05 -0800 Subject: [PATCH 07/94] Link top level opensoure libs directory --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 40242ee14..aff60317e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -297,7 +297,7 @@ include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) link_directories(${CMAKE_CURRENT_SOURCE_DIR}/open-source/lib) - +link_directories(${CMAKE_SOURCE_DIR}/open-source/lib) if(ALIGNED_MEMORY_MODEL) add_definitions(-DALIGNED_MEMORY_MODEL) From 394a4a60a648f6ac8cf37a0c20e271afe831f32b Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:56:06 -0800 Subject: [PATCH 08/94] Switch more dirs from current to top level --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aff60317e..cc94cbc78 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,7 +71,7 @@ if(BUILD_DEPENDENCIES) # Set directory where to build the dependencies. if (NOT OPEN_SRC_INSTALL_PREFIX) - set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) + set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) @@ -296,6 +296,7 @@ set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/in include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) +# TODO: Probably good to remove the CMAKE_CURRENT_SOURCE_DIR one link_directories(${CMAKE_CURRENT_SOURCE_DIR}/open-source/lib) link_directories(${CMAKE_SOURCE_DIR}/open-source/lib) From 9c6de411d213f1ecad7c810ebc932b535d737f45 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Wed, 28 Feb 2024 13:37:26 -0800 Subject: [PATCH 09/94] Remove one of the lib links --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc94cbc78..43c88edc5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -297,7 +297,6 @@ include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) # TODO: Probably good to remove the CMAKE_CURRENT_SOURCE_DIR one -link_directories(${CMAKE_CURRENT_SOURCE_DIR}/open-source/lib) link_directories(${CMAKE_SOURCE_DIR}/open-source/lib) if(ALIGNED_MEMORY_MODEL) From 175ead253b70e23588772ecca7268148b18bc69e Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Wed, 28 Feb 2024 14:12:50 -0800 Subject: [PATCH 10/94] Link curl, ssl, and crypto as private --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43c88edc5..9af090312 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -390,7 +390,9 @@ if(BUILD_COMMON_CURL) # TODO: I'd like to know why there is no openssl library and we instead have to use # ssl and crypto (openssl's dependencies). - target_link_libraries(cproducer PUBLIC kvspic curl ssl crypto) + target_link_libraries(cproducer + PUBLIC kvspic + PRIVATE curl ssl crypto) message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") install( From dbba69f785d6933c4c515b32265eef0fee7b7dc1 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Wed, 28 Feb 2024 14:13:45 -0800 Subject: [PATCH 11/94] Some extra reference files to be deleted later --- .gitignore | 3 +- CMakeLists copy.txt | 377 ++++++++++++++++++++++++++++++++++++++++++ oldCMakeLists.txt | 393 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 772 insertions(+), 1 deletion(-) create mode 100644 CMakeLists copy.txt create mode 100644 oldCMakeLists.txt diff --git a/.gitignore b/.gitignore index 47291ff12..da7209d13 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ cmake-build-release/ open-source outputs dependency/ -cmake-build-producerc/ \ No newline at end of file +cmake-build-producerc/ +.vscode/settings.json diff --git a/CMakeLists copy.txt b/CMakeLists copy.txt new file mode 100644 index 000000000..e33ee08e1 --- /dev/null +++ b/CMakeLists copy.txt @@ -0,0 +1,377 @@ +cmake_minimum_required(VERSION 3.6.3) + +# Include custom utilites. +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") +include(Utilities) + +project(KinesisVideoProducerC VERSION 1.5.1 LANGUAGES C) + +set(KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION 1) +set(KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION 5) +set(KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION 1) +set(KINESIS_VIDEO_PRODUCER_C_VERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION}) + +set(SUPPORTED_CRYPTO_LIBRARIES "{OpenSSL, MbedTLS}") + +# User Flags +option(ADD_MUCLIBC "Add -muclibc c flag" OFF) +option(BUILD_STATIC "Static build" OFF) +option(BUILD_DEPENDENCIES "Whether or not to build depending libraries from source" ON) +option(USE_OPENSSL "Use openssl as crypto library" ON) +option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) +option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common library" OFF) +option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) # TODO: remove this and any other un-needed flags +option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) +option(BUILD_CRYPTO "Whether or not to build OpenSSL or MbedTLS, if not, will use system-installed version" ON) +option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) +option(BUILD_KVS_PIC "Whether to build PIC SDK, else will use system-installed version" ON) +option(BUILD_SAMPLES "Whether to build Producer C samples" ON) + + +# Maintainer Flags +option(BUILD_TEST "Build the testing tree." OFF) +option(CODE_COVERAGE "Enable coverage reporting" OFF) +option(COMPILER_WARNINGS "Enable all compiler warnings." OFF) +option(ADDRESS_SANITIZER "Build with AddressSanitizer." OFF) +option(MEMORY_SANITIZER "Build with MemorySanitizer." OFF) +option(THREAD_SANITIZER "Build with ThreadSanitizer." OFF) +option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF) +option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) +option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) + +if (BUILD_STATIC) + set(TYPE_OF_LIB STATIC) +else() + set(TYPE_OF_LIB SHARED) +endif() + +if(CONSTRAINED_DEVICE) + add_definitions(-DCONSTRAINED_DEVICE) +endif() + +set(CMAKE_MACOSX_RPATH TRUE) +add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") + +# Set where to build this project. +if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) +else() + set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") +endif() + +# Default to release build if unspecified. +if(NOT CMAKE_BUILD_TYPE) + message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) +endif() + +# Fetch and build 3rd-party dependencies if specified. +if(BUILD_DEPENDENCIES) + message(STATUS "Begin building dependencies.") + + # Set directory where to build the dependencies. + if (NOT OPEN_SRC_INSTALL_PREFIX) + set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) + set(ENV{PKG_CONFIG_PATH} + "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") + set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) + endif() + + # Create the dependency directory if it doesn't exist. + if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) + file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) + endif() + + # Verify only one of SUPPORTED_CRYPTO_LIBRARIES are selected. + set(SSL_OPTIONS USE_OPENSSL USE_MBEDTLS) + count_true(ENABLED_SSL_OPTION_COUNT ${SSL_OPTIONS}) + if(ENABLED_SSL_OPTION_COUNT GREATER "1") + message(FATAL_ERROR "Only one of ${SSL_OPTIONS} can be enabled") + endif() + + # If not using system's crypto library. + if(BUILD_CRYPTO) + if(USE_OPENSSL) + message(STATUS "Building OpenSSL") + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) + build_dependency(openssl ${BUILD_ARGS}) + elseif(USE_MBEDTLS) + message(STATUS "Building MbedTLS") + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) + build_dependency(mbedtls ${BUILD_ARGS}) + else() + message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) + endif() + endif() + + if (BUILD_COMMON_LWS) + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} + -DUSE_OPENSSL=${USE_OPENSSL} + -DUSE_MBEDTLS=${USE_MBEDTLS}) + build_dependency(websockets ${BUILD_ARGS}) + endif() + + if (BUILD_COMMON_CURL) + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DUSE_OPENSSL=${USE_OPENSSL} + -DUSE_MBEDTLS=${USE_MBEDTLS}) + build_dependency(curl ${BUILD_ARGS}) + endif() + + if(BUILD_TEST) + build_dependency(gtest) + endif() + + message(STATUS "Finished building dependencies.") +endif() + +find_package(PkgConfig REQUIRED) + +message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. + + +############# Checking system for kvspic ############# + +set(CMAKE_FIND_DEBUG_MODE ON) #TODO: Remove this. + +if(BUILD_KVS_PIC) + set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) + set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) + fetch_repo(kvspic ${BUILD_ARGS}) + add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") + file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") + include_directories("${PIC_HEADERS}") +else() + # Finding PIC on system using the libcproducer.pc.cmake file. + pkg_check_modules(KVSPIC libkvspicUtils) + if(KVSPIC_FOUND) + message("Found system KVS PIC located: ${KVSPIC_PREFIX}") + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) + link_directories(${KVSPIC_LIBRARY_DIRS}) + else() + message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVSPIC_INCLUDE_DIRS} \ + Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") + endif() +endif() + +############# Done checking system for kvspic ############# + + + +############# Finding 3rd-party dependencies ############ + +find_package(Threads) + +# TODO: Should maybe change "BUILD_CRYPTO" to be similar to the other ones: "BUILD_COMMON_CRYPTO" +# (and so BUILD_CRYPTO == !BUILD_COMMON_CRYPTO) +if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) + if(USE_OPENSSL) + find_package(OpenSSL REQUIRED) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) + elseif(USE_MBEDTLS) + find_package(MbedTLS REQUIRED) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) + else() + message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) + endif() +endif() + +if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) + if (WIN32) + find_package(CURL REQUIRED) + set(CURL_LIBRARIES CURL::libcurl) + else() + pkg_check_modules(CURL REQUIRED libcurl) + endif() + + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) + link_directories(${CURL_LIBRARY_DIRS}) +endif() + +if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) + if (WIN32) + find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) + else() + pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) + endif() + + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) + link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) +endif() + +############# Done finding 3rd-party dependencies ############ + + +############# TODO: Doing.... ############ + +if(CMAKE_SIZEOF_VOID_P STREQUAL 4) + message(STATUS "Bitness 32 bits") + set(KINESIS_VIDEO_BUILD_BITNESS "x86") + set(KINESIS_VIDEO_BUILD_BITNESS_TYPE "Win32") + set(KINESIS_VIDEO_BUILD_BITNESS_NAME "x86") +elseif(CMAKE_SIZEOF_VOID_P STREQUAL 8) + message(STATUS "Bitness 64 bits") + set(KINESIS_VIDEO_BUILD_BITNESS "x64") + set(KINESIS_VIDEO_BUILD_BITNESS_TYPE "x64") + set(KINESIS_VIDEO_BUILD_BITNESS_NAME "x86_64") +else() + message(FATAL_ERROR "Unknown bitness") +endif() + + +# TODO: Figure out what is going on in here and add comments. +if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + + if(ADD_MUCLIBC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -muclibc") + endif() + + if(CODE_COVERAGE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fprofile-arcs -ftest-coverage") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") + endif() + function(enableSanitizer SANITIZER) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer" PARENT_SCOPE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer -fno-optimize-sibling-calls" PARENT_SCOPE) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${SANITIZER}" PARENT_SCOPE) + endfunction() + if(ADDRESS_SANITIZER) + enableSanitizer("address") + endif() + if(MEMORY_SANITIZER) + enableSanitizer("memory") + endif() + if(THREAD_SANITIZER) + enableSanitizer("thread") + endif() + if(UNDEFINED_BEHAVIOR_SANITIZER) + enableSanitizer("undefined") + endif() +endif() + +# TODO: What and why is this MSVC thing? +if(MSVC) + add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) +endif() + + +file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c") +file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") +file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") + +file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") +#file(GLOB_RECURSE PRODUCER_C_SOURCE_FILES "src/source/*.c") + +list(APPEND PRODUCER_C_SOURCE_FILES + ${KVS_COMMON_SOURCE_FILES_BASE} + ${KVS_COMMON_SOURCE_FILES_CURL}) + +set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) + + +include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) +include_directories(${OPEN_SRC_INCLUDE_DIRS}) + +link_directories(${CMAKE_CURRENT_SOURCE_DIR}/open-source/lib) + + +if(ALIGNED_MEMORY_MODEL) + add_definitions(-DALIGNED_MEMORY_MODEL) +endif() + +if(SET_SSL_CALLBACKS) + add_definitions(-DSET_SSL_CALLBACKS) +endif() + +# use openssl by default +set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) + +# set(PRODUCER_CRYPTO_LIBRARY +# OpenSSL::Crypto +# OpenSSL::SSL) +if (USE_MBEDTLS) + set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) +# set(PRODUCER_CRYPTO_LIBRARY +# MbedTLS +# MbedCrypto) +endif() + +install( + DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include + DESTINATION .) + + + +# if(BUILD_COMMON_LWS) + + # ....... + +# endif() + + +# TODO: I wonder, why would producer ever need lws? +if(BUILD_COMMON_CURL) + # producer only uses curl right now + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) + + if(BUILD_STATIC) + # Curl will enable ZLIB as part of its build if it finds + # the package. We need to therefore link it for static builds. + find_package(ZLIB) + if(ZLIB_FOUND) + list(APPEND CURL_LIBRARIES z) + endif() + endif() + + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) + + + if (WIN32) + add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) + else() + add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES}) + endif() + if(NOT BUILD_STATIC) + set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + + target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) + + # TODO: I'd like to know why there is no openssl librar and we instead have to use + # ssl and crypto (openssl's dependencies). + target_link_libraries(cproducer PUBLIC kvspic curl ssl crypto) + + message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") + install( + TARGETS cproducer + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c) + target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer) + + add_executable(kvsVideoOnlyOfflineStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyOfflineStreamingSample.c) + target_link_libraries(kvsVideoOnlyOfflineStreamingSample cproducer) + + add_executable(kvsAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioVideoStreamingSample.c) + target_link_libraries(kvsAudioVideoStreamingSample cproducer) + + add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c) + target_link_libraries(kvsAudioOnlyStreamingSample cproducer) + + if (BUILD_TEST) + add_subdirectory(tst) + endif() +endif() \ No newline at end of file diff --git a/oldCMakeLists.txt b/oldCMakeLists.txt new file mode 100644 index 000000000..d26e09682 --- /dev/null +++ b/oldCMakeLists.txt @@ -0,0 +1,393 @@ +cmake_minimum_required(VERSION 3.6.3) +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") +include(Utilities) +project(KinesisVideoProducerC VERSION 1.5.1 LANGUAGES C) + +set(KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION 1) +set(KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION 5) +set(KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION 1) +set(KINESIS_VIDEO_PRODUCER_C_VERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION}) + +include(GNUInstallDirs) + + +# User Flags +option(ADD_MUCLIBC "Add -muclibc c flag" OFF) +option(BUILD_STATIC "Static build" OFF) +option(BUILD_DEPENDENCIES "Whether or not to build depending libraries from source" ON) +option(USE_OPENSSL "Use openssl as crypto library" ON) +option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) +option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common library" OFF) +option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) +option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) +option(LOCAL_OPENSSL_BUILD "Whether or not to use local OpenSSL build" OFF) +option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) + +# Developer Flags +option(BUILD_TEST "Build the testing tree." OFF) +option(CODE_COVERAGE "Enable coverage reporting" OFF) +option(COMPILER_WARNINGS "Enable all compiler warnings." OFF) +option(ADDRESS_SANITIZER "Build with AddressSanitizer." OFF) +option(MEMORY_SANITIZER "Build with MemorySanitizer." OFF) +option(THREAD_SANITIZER "Build with ThreadSanitizer." OFF) +option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF) +option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) +option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) + +set(TYPE_OF_LIB SHARED) +if (BUILD_STATIC) + set(TYPE_OF_LIB STATIC) +endif() + +set(CMAKE_MACOSX_RPATH TRUE) + +get_filename_component(ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) + +add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") + +message("PROJECT_VERSION: ${PROJECT_VERSION}") + +if(CONSTRAINED_DEVICE) + add_definitions(-DCONSTRAINED_DEVICE) +endif() + +if(NOT KINESIS_VIDEO_PRODUCER_C_SRC) +message("it is not") + + if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + else() + set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") + endif() +endif() + +message(STATUS "Kinesis Video Producer path is ${KINESIS_VIDEO_PRODUCER_C_SRC}") + +if(NOT CMAKE_BUILD_TYPE) + message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) +endif() + +if(BUILD_DEPENDENCIES) + if (NOT OPEN_SRC_INSTALL_PREFIX) + set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) + set(ENV{PKG_CONFIG_PATH} + "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") + set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) + endif() + + if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) + file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) + endif() + + message(STATUS "Begin building dependencies.") + + set(SSL_OPTIONS USE_OPENSSL USE_MBEDTLS) + count_true(ENABLED_SSL_OPTION_COUNT + ${SSL_OPTIONS}) + + if(ENABLED_SSL_OPTION_COUNT GREATER "1") + message(FATAL_ERROR "Only one of ${SSL_OPTIONS} can be enabled") + endif() + + if(NOT LOCAL_OPENSSL_BUILD) + message(STATUS "Building non-local OpenSSL") + if(USE_OPENSSL) + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} + -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) + build_dependency(openssl ${BUILD_ARGS}) + elseif(USE_MBEDTLS) + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) + build_dependency(mbedtls ${BUILD_ARGS}) + else() + message(FATAL_ERROR "No crypto library selected.") + endif() + endif() + + if (BUILD_COMMON_LWS) + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} + -DUSE_OPENSSL=${USE_OPENSSL} + -DUSE_MBEDTLS=${USE_MBEDTLS}) + build_dependency(websockets ${BUILD_ARGS}) + endif() + + if (BUILD_COMMON_CURL) + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DUSE_OPENSSL=${USE_OPENSSL} + -DUSE_MBEDTLS=${USE_MBEDTLS}) + build_dependency(curl ${BUILD_ARGS}) + endif() + + if(BUILD_TEST) + build_dependency(gtest) + endif() + + message(STATUS "Finished building dependencies.") +endif() + +find_package(PkgConfig REQUIRED) + +############# Check system for kvspic ############# +set(CMAKE_FIND_DEBUG_MODE ON) + + +pkg_check_modules(KVSPIC libkvspicUtils) +if(KVSPIC_FOUND) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) + message("PIC found: ${KVSPIC_INCLUDE_DIRS}") + + link_directories(${KVSPIC_LIBRARY_DIRS}) +else() + message("PIC NOT found") + ############# fetch repos that we need do add_subdirectory ############ + # repos that we will build using add_subdirectory will be stored in this path + set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) + set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) + fetch_repo(kvspic ${BUILD_ARGS}) + add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") + file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") + include_directories("${PIC_HEADERS}") + + ############# fetch repos that we need do add_subdirectory done ############ +endif() + +############# Check system for kvspic done ############# + +############# find dependent libraries ############ + +find_package(Threads) + +if(USE_OPENSSL) + find_package(OpenSSL) + if(NOT OPENSSL_FOUND AND NOT BUILD_DEPENDENCIES) + message(FATAL_ERROR "OpenSSL is not found. Make sure to export PKG_CONFIG_PATH to where OpenSSL's pc file is") + endif() + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) +elseif(USE_MBEDTLS) + find_package(MbedTLS REQUIRED) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) +else() + message(FATAL_ERROR "No crypto library selected.") +endif() + +if(BUILD_COMMON_CURL) + if (WIN32) + find_package(CURL REQUIRED) + set(CURL_LIBRARIES CURL::libcurl) + else() + pkg_check_modules(CURL REQUIRED libcurl) + endif() + + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) + link_directories(${CURL_LIBRARY_DIRS}) +endif() + +if (BUILD_COMMON_LWS) + if (WIN32) + find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) + else() + pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) + endif() + + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) + link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) +endif() + +############# find dependent libraries end ############ + +if(CMAKE_SIZEOF_VOID_P STREQUAL 4) + message(STATUS "Bitness 32 bits") + set(KINESIS_VIDEO_BUILD_BITNESS "x86") + set(KINESIS_VIDEO_BUILD_BITNESS_TYPE "Win32") + set(KINESIS_VIDEO_BUILD_BITNESS_NAME "x86") +elseif(CMAKE_SIZEOF_VOID_P STREQUAL 8) + message(STATUS "Bitness 64 bits") + set(KINESIS_VIDEO_BUILD_BITNESS "x64") + set(KINESIS_VIDEO_BUILD_BITNESS_TYPE "x64") + set(KINESIS_VIDEO_BUILD_BITNESS_NAME "x86_64") +else() + message(FATAL_ERROR "Unknown bitness") +endif() + +if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + + if(ADD_MUCLIBC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -muclibc") + endif() + + if(CODE_COVERAGE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fprofile-arcs -ftest-coverage") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") + endif() + function(enableSanitizer SANITIZER) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer" PARENT_SCOPE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer -fno-optimize-sibling-calls" PARENT_SCOPE) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${SANITIZER}" PARENT_SCOPE) + endfunction() + if(ADDRESS_SANITIZER) + enableSanitizer("address") + endif() + if(MEMORY_SANITIZER) + enableSanitizer("memory") + endif() + if(THREAD_SANITIZER) + enableSanitizer("thread") + endif() + if(UNDEFINED_BEHAVIOR_SANITIZER) + enableSanitizer("undefined") + endif() +endif() + +if(MSVC) + add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) +endif() + +file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c") +file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") +file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") +file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") + +include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) +include_directories(${OPEN_SRC_INCLUDE_DIRS}) + +if(ALIGNED_MEMORY_MODEL) + add_definitions(-DALIGNED_MEMORY_MODEL) +endif() + +if(SET_SSL_CALLBACKS) + add_definitions(-DSET_SSL_CALLBACKS) +endif() + + +# use openssl by default +set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) + +set(PRODUCER_CRYPTO_LIBRARY + OpenSSL::Crypto + OpenSSL::SSL) +if (USE_MBEDTLS) + set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) + set(PRODUCER_CRYPTO_LIBRARY + MbedTLS + MbedCrypto) +endif() + +install( + DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include + DESTINATION .) + +if(BUILD_COMMON_LWS) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonLws.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc" @ONLY) + + if (WIN32) + add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + else() + add_library(kvsCommonLws ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + endif() + target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS ${CPRODUCER_COMMON_TLS_OPTION}) + if(NOT BUILD_STATIC) + set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + target_link_libraries(kvsCommonLws + ${OPENSSL_CRYPTO_LIBRARY} + ${OPENSSL_SSL_LIBRARY} + ${LIBWEBSOCKETS_LIBRARIES} + kvspicUtils) + + install( + TARGETS kvsCommonLws + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +endif() + +if(BUILD_COMMON_CURL) + # producer only uses curl right now + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) + + if(BUILD_STATIC) + # Curl will enable ZLIB as part of its build if it finds + # the package. We need to therefore link it for static builds. + find_package(ZLIB) + if(ZLIB_FOUND) + list(APPEND CURL_LIBRARIES z) + endif() + endif() + + if (WIN32) + add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + else() + add_library(kvsCommonCurl ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + endif() + target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) + if(NOT BUILD_STATIC) + set_target_properties(kvsCommonCurl PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + target_link_libraries(kvsCommonCurl + kvspicUtils + ${CURL_LIBRARIES} + ${PRODUCER_CRYPTO_LIBRARY}) + + install( + TARGETS kvsCommonCurl + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) + + + if (WIN32) + add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) + else() + add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES}) + endif() + if(NOT BUILD_STATIC) + set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + target_link_libraries(cproducer PUBLIC kvsCommonCurl kvspic) + + # target_include_directories(cproducer PUBLIC "/usr/local/include") + + message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") + install( + TARGETS cproducer + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c) + target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer) + + add_executable(kvsVideoOnlyOfflineStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyOfflineStreamingSample.c) + target_link_libraries(kvsVideoOnlyOfflineStreamingSample cproducer) + + add_executable(kvsAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioVideoStreamingSample.c) + target_link_libraries(kvsAudioVideoStreamingSample cproducer) + + add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c) + target_link_libraries(kvsAudioOnlyStreamingSample cproducer) + + if (BUILD_TEST) + add_subdirectory(tst) + endif() +endif() From 2ebb24dd7907c751a6eef2ec4611974168af0b72 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Wed, 28 Feb 2024 15:17:36 -0800 Subject: [PATCH 12/94] Remove curl test code from test main --- tst/main.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tst/main.cpp b/tst/main.cpp index f0b8d2045..b5b4594a2 100644 --- a/tst/main.cpp +++ b/tst/main.cpp @@ -6,7 +6,6 @@ #include #include #include -#include // The number of retries allowed. 0 means no retry, all tests will run exactly run once. #define MAX_TRIALS 10 @@ -42,9 +41,6 @@ class Retrier : public ::testing::EmptyTestEventListener { }; int main(int argc, char **argv) { - curl_version_info_data *d = curl_version_info(CURLVERSION_NOW); - printf("CURL version is: %s\n", d->version); - int trial = 0, rc; bool breakOnFailure; From 0afd3da631211d15e1cafc1dd35df211580329c4 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Wed, 28 Feb 2024 18:34:02 -0800 Subject: [PATCH 13/94] Setup choosing between mbedtls and openssl libs --- CMakeLists.txt | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9af090312..28a155243 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -202,7 +202,6 @@ endif() if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) if (WIN32) find_package(CURL REQUIRED) - set(CURL_LIBRARIES CURL::libcurl) else() pkg_check_modules(CURL REQUIRED libcurl) endif() @@ -309,15 +308,11 @@ endif() # use openssl by default set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) +set(PRODUCER_CRYPTO_LIBRARY ssl crypto) -# set(PRODUCER_CRYPTO_LIBRARY -# OpenSSL::Crypto -# OpenSSL::SSL) if (USE_MBEDTLS) set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) -# set(PRODUCER_CRYPTO_LIBRARY -# MbedTLS -# MbedCrypto) + set(PRODUCER_CRYPTO_LIBRARY MbedTLS MbedCrypto) endif() install( @@ -335,6 +330,8 @@ install( # TODO: I wonder, why would producer ever need lws? if(BUILD_COMMON_CURL) + set(CURL_LIBRARIES curl) + # producer only uses curl right now configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" @@ -390,9 +387,17 @@ if(BUILD_COMMON_CURL) # TODO: I'd like to know why there is no openssl library and we instead have to use # ssl and crypto (openssl's dependencies). + message("CURL_LIBRARIES: ${CURL_LIBRARIES}") + message("PRODUCER_CRYPTO_LIBRARY: ${PRODUCER_CRYPTO_LIBRARY}") + + # STRING(REPLACE ";" " " PRODUCER_CRYPTO_LIBRARY "${PRODUCER_CRYPTO_LIBRARY}") + # STRING(REPLACE ";" " " CURL_LIBRARIES "${CURL_LIBRARIES}") + # message("CURL_LIBRARIES: ${CURL_LIBRARIES}") + # message("PRODUCER_CRYPTO_LIBRARY: ${PRODUCER_CRYPTO_LIBRARY}") + target_link_libraries(cproducer PUBLIC kvspic - PRIVATE curl ssl crypto) + PRIVATE ${CURL_LIBRARIES} ${PRODUCER_CRYPTO_LIBRARY}) message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") install( From 73dde649939d95f18d117437b808d2c2ce72d324 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 29 Feb 2024 11:03:18 -0800 Subject: [PATCH 14/94] curl->libcurl for windows --- CMakeLists.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 28a155243..f940b4584 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,6 @@ option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) option(BUILD_KVS_PIC "Whether to build PIC SDK, else will use system-installed version" ON) option(BUILD_SAMPLES "Whether to build Producer C samples" ON) - # Maintainer Flags option(BUILD_TEST "Build the testing tree." OFF) option(CODE_COVERAGE "Enable coverage reporting" OFF) @@ -146,6 +145,7 @@ if(BUILD_KVS_PIC) # TODO: double check with the original comment that used to be here... make sure this comment is correct. # KVS PIC will live in the DEPENDENCY_DOWNLOAD_PATH. # TODO: Double check all the below is correct/necessary. + # TODO: Find a way to check specifically for an alrady built PIC here in the project, don't build if found set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) fetch_repo(kvspic ${BUILD_ARGS}) @@ -226,6 +226,7 @@ endif() ############# TODO: Doing.... ############ +# TODO: Note, these variables are neber used, in C, CPP, WebRTC SDKs. Not in cmake and not in source files. if(CMAKE_SIZEOF_VOID_P STREQUAL 4) message(STATUS "Bitness 32 bits") set(KINESIS_VIDEO_BUILD_BITNESS "x86") @@ -330,7 +331,11 @@ install( # TODO: I wonder, why would producer ever need lws? if(BUILD_COMMON_CURL) - set(CURL_LIBRARIES curl) + if(WIN32) + set(CURL_LIBRARIES libcurl) + else() + set(CURL_LIBRARIES curl) + endif() # producer only uses curl right now configure_file( @@ -394,7 +399,7 @@ if(BUILD_COMMON_CURL) # STRING(REPLACE ";" " " CURL_LIBRARIES "${CURL_LIBRARIES}") # message("CURL_LIBRARIES: ${CURL_LIBRARIES}") # message("PRODUCER_CRYPTO_LIBRARY: ${PRODUCER_CRYPTO_LIBRARY}") - + target_link_libraries(cproducer PUBLIC kvspic PRIVATE ${CURL_LIBRARIES} ${PRODUCER_CRYPTO_LIBRARY}) From c7d43b0ecfcfbb787a9f2a7249c776b6d728d95a Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 29 Feb 2024 22:35:13 -0800 Subject: [PATCH 15/94] Add comments --- .github/build_windows.bat | 1 + CMakeLists.txt | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/build_windows.bat b/.github/build_windows.bat index 836e44c00..d855efb8e 100644 --- a/.github/build_windows.bat +++ b/.github/build_windows.bat @@ -1,3 +1,4 @@ +REM NOTE: May need to replace "Enterprise" with "Community" int eh below command call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" mkdir build cd build diff --git a/CMakeLists.txt b/CMakeLists.txt index f940b4584..916c7be4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -139,11 +139,13 @@ set(CMAKE_FIND_DEBUG_MODE ON) #TODO: Remove this. # NOTE: this is possibly a breaking change, if not specified, system PIC will not be used. # Prev behavior: look for system PIC if not found, build PIC. # Now: is BUILD_KVS_PIC ? build PIC, else find syste PIC - if system PIC not found, fail build -# TODO: Leave a not in the PIC file libkvspic.pc.cmake that the below comments/messages must be updated -# if we change "prefix=" from CMAKE_INSTALL_PREFIX. +# TODO: Leave a note in the PIC file libkvspic.pc.cmake that the below comments/messages must be updated +# if we change "prefix=" from CMAKE_INSTALL_PREFIX. (CMAKE_INSTALL_PREFIX = usr/local). if(BUILD_KVS_PIC) # TODO: double check with the original comment that used to be here... make sure this comment is correct. + # KVS PIC will live in the DEPENDENCY_DOWNLOAD_PATH. + # TODO: Double check all the below is correct/necessary. # TODO: Find a way to check specifically for an alrady built PIC here in the project, don't build if found set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) From bb766aad432cefb150edf90240701886dc03c350 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 8 Mar 2024 15:41:00 -0800 Subject: [PATCH 16/94] Trying to fix Windows curl --- CMakeLists.txt | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 916c7be4e..ccefe08bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -201,9 +201,11 @@ endif() # However, currently I have the logic setup reverse from the above: we only use common/system build # if buildDeps is off AND buildCommon<> is TRUE for the package. -if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) + + +if((NOT BUILD_DEPENDENCIES OR WIN32) AND BUILD_COMMON_CURL) if (WIN32) - find_package(CURL REQUIRED) + find_package(CURL REQUIRED) else() pkg_check_modules(CURL REQUIRED libcurl) endif() @@ -397,11 +399,6 @@ if(BUILD_COMMON_CURL) message("CURL_LIBRARIES: ${CURL_LIBRARIES}") message("PRODUCER_CRYPTO_LIBRARY: ${PRODUCER_CRYPTO_LIBRARY}") - # STRING(REPLACE ";" " " PRODUCER_CRYPTO_LIBRARY "${PRODUCER_CRYPTO_LIBRARY}") - # STRING(REPLACE ";" " " CURL_LIBRARIES "${CURL_LIBRARIES}") - # message("CURL_LIBRARIES: ${CURL_LIBRARIES}") - # message("PRODUCER_CRYPTO_LIBRARY: ${PRODUCER_CRYPTO_LIBRARY}") - target_link_libraries(cproducer PUBLIC kvspic PRIVATE ${CURL_LIBRARIES} ${PRODUCER_CRYPTO_LIBRARY}) From c797aa4df4f43384232b4218d71a429802220a7f Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 8 Mar 2024 15:44:55 -0800 Subject: [PATCH 17/94] Update CMakeLists.txt --- CMakeLists.txt | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index acc0f2956..b075f2c7f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -325,37 +325,6 @@ install( DESTINATION .) - if (WIN32) - add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) - else() - add_library(kvsCommonLws ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) - endif() - target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS ${CPRODUCER_COMMON_TLS_OPTION}) - if(NOT BUILD_STATIC) - set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - target_link_libraries(kvsCommonLws - ${PRODUCER_CRYPTO_LIBRARY} - ${LIBWEBSOCKETS_LIBRARIES} - kvspicUtils) - - install( - TARGETS kvsCommonLws - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") -endif() - -# if(BUILD_COMMON_LWS) - - # ....... - -# endif() - - # TODO: I wonder, why would producer ever need lws? if(BUILD_COMMON_CURL) if(WIN32) From 55a4d1b7d0a4f68573ac28de13011258ec06bd02 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 8 Mar 2024 16:09:48 -0800 Subject: [PATCH 18/94] Update CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b075f2c7f..74ad8420e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -328,7 +328,7 @@ install( # TODO: I wonder, why would producer ever need lws? if(BUILD_COMMON_CURL) if(WIN32) - set(CURL_LIBRARIES libcurl) + set(CURL_LIBRARIES CURL::libcurl) else() set(CURL_LIBRARIES curl) endif() From 9127680ad50fa5518d539947293bcd8b7e466bd9 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 8 Mar 2024 16:33:02 -0800 Subject: [PATCH 19/94] Testing Windows fixes --- CMakeLists.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 74ad8420e..fdf7b575e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -177,7 +177,7 @@ find_package(Threads) # TODO: Should maybe change "BUILD_CRYPTO" to be similar to the other ones: "BUILD_COMMON_CRYPTO" # (and so BUILD_CRYPTO == !BUILD_COMMON_CRYPTO) -if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) +if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO OR WIN32) if(USE_OPENSSL) find_package(OpenSSL REQUIRED) set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) @@ -214,16 +214,16 @@ if((NOT BUILD_DEPENDENCIES OR WIN32) AND BUILD_COMMON_CURL) link_directories(${CURL_LIBRARY_DIRS}) endif() -if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) - if (WIN32) - find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) - else() - pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) - endif() +# if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) +# if (WIN32) +# find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) +# else() +# pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) +# endif() - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) - link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) -endif() +# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) +# link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) +# endif() ############# Done finding 3rd-party dependencies ############ From f032a13f00b174f7cd321ab7156c9b08dad1177e Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 8 Mar 2024 17:15:09 -0800 Subject: [PATCH 20/94] more --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fdf7b575e..9c0523a1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -313,7 +313,13 @@ endif() # use openssl by default set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) -set(PRODUCER_CRYPTO_LIBRARY ssl crypto) +if(WIN32) + set(PRODUCER_CRYPTO_LIBRARY + OpenSSL::Crypto + OpenSSL::SSL) +else() + set(PRODUCER_CRYPTO_LIBRARY ssl crypto) +endif() if (USE_MBEDTLS) set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) From 3e519b7670e39031375d227f983ad2cde888078e Mon Sep 17 00:00:00 2001 From: Hassan Sahibzada Date: Mon, 11 Mar 2024 17:35:35 -0400 Subject: [PATCH 21/94] producer c release candidate (#435) * Added 1-20% jitter to expiration value stored by AwsCredentials struct. This is part of a larger effort to help customers with large fleets distribute the timings of their attempts to reconnect to our servers. * reduced clumped distribution between 1-2% * fix auth query template, used by signAwsRequestInfoQueryParam * aws service configurable for presigned urls, eg s3 * Update PIC to include modified threadpool teardown * use git tag commit from pic-develop * Update PIC to include modified threadpool teardown * use git tag commit from pic-develop * Set newly added timeouts to default value * Expose CONSTRAINED_DEVICE option * use develop tag * Add logging section (#417) * Introduce M1 build in the CI (#419) * m1 build * cmake update * run tests in m1 * Add setting of fragment meta to the sample * Formatting + style * More style * Small optimization * Update readme * Clang format * Clang format, again * Add gcc paths (#420) * spotaws PR #226 (#423) * proper versioned shared libs * Fix version * Update to latest version * Exclude shared builds from windows --------- Co-authored-by: Tom spot Callaway Co-authored-by: Divya Sampath Kumar Co-authored-by: Hassan Sahibzada * Revert "Pr 323" * Added Iot credential usage to producer c samples (#220) * Added Iot credential usage to producer c samples * Refactor samples to include IoT usage and update readme --------- Co-authored-by: delaplan Co-authored-by: Divya Sampath Kumar * Update thing name length to be 128 as per AWS docs (#426) * Release build for producer C (#428) * Release build for producer C * Fix assert failure * Handle aws special regions (#430) * run windows tests with debug logging (#431) * run windows tests with debug logging * zero out frame buffer to avoid invalid mkv * fix tsan related issues (#427) fix tsan related issues * update pic hash to release candidate * add gcc m1 build * bump version for release * Add PR description lint (#438) * update pic to release tag --------- Co-authored-by: James Delaplane Co-authored-by: Michael Dietz Co-authored-by: Niyati Maheshwari Co-authored-by: Divya Sampath Kumar Co-authored-by: Dave Johansen Co-authored-by: Niyati Maheshwari Co-authored-by: Jeremy Gunawan Co-authored-by: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Co-authored-by: Tom spot Callaway Co-authored-by: Jeremy Gunawan Co-authored-by: delaplan --- .github/PULL_REQUEST_TEMPLATE.md | 11 ++ .github/workflows/ci.yml | 129 +++++++++++++----- .github/workflows/pr-desc-lint.yml | 55 ++++++++ CMake/Dependencies/libcurl-CMakeLists.txt | 3 +- CMake/Dependencies/libgtest-CMakeLists.txt | 1 - CMake/Dependencies/libjsmn-CMakeLists.txt | 14 -- .../Dependencies/libjsmn-add-cmakelists.patch | 17 --- CMake/Dependencies/libkvspic-CMakeLists.txt | 4 +- CMake/Dependencies/libmbedtls-CMakeLists.txt | 4 +- CMake/Dependencies/libopenssl-CMakeLists.txt | 8 +- .../Dependencies/libwebsockets-CMakeLists.txt | 3 +- CMakeLists.txt | 52 +++++-- README.md | 46 +++++++ libcproducer.pc.cmake | 2 +- libkvsCommonCurl.pc.cmake | 2 +- libkvsCommonLws.pc.cmake | 2 +- samples/KvsAudioOnlyStreamingSample.c | 50 +++++-- samples/KvsAudioVideoStreamingSample.c | 56 +++++--- samples/KvsVideoOnlyOfflineStreamingSample.c | 39 ++++-- samples/KvsVideoOnlyRealtimeStreamingSample.c | 77 +++++++++-- samples/Samples.h | 28 ++++ scripts/generate-iot-credential.sh | 115 ++++++++++++++++ .../amazonaws/kinesis/video/common/Include.h | 20 ++- src/source/Common/AwsV4Signer.c | 2 +- src/source/Common/IotCredentialProvider.c | 20 ++- src/source/Common/RequestInfo.c | 4 +- src/source/CurlApiCallbacks.c | 65 ++++++--- src/source/DeviceInfoProvider.c | 2 + src/source/Response.c | 10 +- src/source/Response.h | 2 +- tst/ProducerCallbackProviderApiTest.cpp | 51 ++++++- tst/ProducerClientBasicTest.cpp | 59 ++++---- tst/ProducerTestFixture.cpp | 31 +++-- tst/ProducerTestFixture.h | 4 +- 34 files changed, 773 insertions(+), 215 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/pr-desc-lint.yml delete mode 100644 CMake/Dependencies/libjsmn-CMakeLists.txt delete mode 100644 CMake/Dependencies/libjsmn-add-cmakelists.patch create mode 100644 samples/Samples.h create mode 100755 scripts/generate-iot-credential.sh diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..8507ac840 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,11 @@ +*Issue #, if available:* + +*What was changed?* + +*Why was it changed?* + +*How was it changed?* + +*What testing was done for the changes?* + +By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3d2fd5547..858c88f59 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,8 +29,8 @@ jobs: id-token: write contents: read env: - CC: gcc - CXX: g++ + CC: /usr/local/bin/gcc-13 + CXX: /usr/local/bin/g++-13 AWS_KVS_LOG_LEVEL: 2 steps: - name: Clone repository @@ -58,8 +58,6 @@ jobs: runs-on: macos-11 env: AWS_KVS_LOG_LEVEL: 2 - LDFLAGS: -L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib - CPATH: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/ permissions: id-token: write contents: read @@ -85,14 +83,78 @@ jobs: cd build ./tst/producer_test + mac-os-m1-build-clang: + runs-on: macos-13-xlarge + env: + AWS_KVS_LOG_LEVEL: 2 + permissions: + id-token: write + contents: read + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + brew install pkgconfig + brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++ + make + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + cd build + ./tst/producer_test + + mac-os-m1-build-gcc: + runs-on: macos-13-xlarge + env: + CC: /opt/homebrew/bin/gcc-13 + CXX: /opt/homebrew/bin/g++-13 + AWS_KVS_LOG_LEVEL: 2 + permissions: + id-token: write + contents: read + steps: + - name: Setup XCode version 15.2 + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '15.2' + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + brew install pkgconfig + brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE + make + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + cd build + ./tst/producer_test + mac-os-build-gcc-local-openssl: runs-on: macos-11 permissions: id-token: write contents: read env: - CC: gcc - CXX: g++ + CC: /usr/local/bin/gcc-13 + CXX: /usr/local/bin/g++-13 AWS_KVS_LOG_LEVEL: 2 LDFLAGS: -L/usr/local/opt/openssl@3/lib CPPFLAGS: -I/usr/local/opt/openssl@3/include @@ -268,31 +330,34 @@ jobs: # ulimit -c unlimited -S # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - # thread-sanitizer: - # runs-on: ubuntu-20.04 - # permissions: - # id-token: write - # contents: read - # env: - # CC: clang - # CXX: clang++ - # AWS_KVS_LOG_LEVEL: 2 - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v1-node16 - # with: - # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # aws-region: ${{ secrets.AWS_REGION }} - # - name: Build repository - # run: | - # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE -DTHREAD_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE - # make - # ulimit -c unlimited -S - # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + #thread-sanitizer: + # runs-on: ubuntu-20.04 + # permissions: + # id-token: write + # contents: read + # env: + # CC: clang + # CXX: clang++ + # AWS_KVS_LOG_LEVEL: 2 + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1-node16 + # with: + # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # aws-region: ${{ secrets.AWS_REGION }} + # - name: Build repository + # run: | + # mkdir build && cd build + # cmake .. -DBUILD_TEST=TRUE -DTHREAD_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE + # make + # - name: Run tests + # run: | + # cd build + # ulimit -c unlimited -S + # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure ubuntu-gcc: runs-on: ubuntu-20.04 @@ -331,7 +396,7 @@ jobs: windows-msvc: runs-on: windows-2022 env: - AWS_KVS_LOG_LEVEL: 7 + AWS_KVS_LOG_LEVEL: 2 permissions: id-token: write contents: read diff --git a/.github/workflows/pr-desc-lint.yml b/.github/workflows/pr-desc-lint.yml new file mode 100644 index 000000000..e4fcc9216 --- /dev/null +++ b/.github/workflows/pr-desc-lint.yml @@ -0,0 +1,55 @@ +name: PR Description Check + +on: + pull_request: + branches: + - develop + - master + types: + - opened + - synchronize + - reopened + - edited + +jobs: + check-description: + runs-on: macos-latest + steps: + - name: Install GitHub CLI + run: | + brew install gh + + - name: Check PR Description + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + pr_description=$(gh pr view https://github.com/${GITHUB_REPOSITORY}/pull/${{ github.event.pull_request.number }} --json body -q ".body") + error_occurred=0 + # Define minimum character count for each section + MIN_CHARS=25 + + # Extract contents + what_changed=$(echo "$pr_description" | sed -n -e '/\*What was changed?\*/,/\*/p' | sed '$d' | sed '1d') + why_changed=$(echo "$pr_description" | sed -n -e '/\*Why was it changed?\*/,/\*/p' | sed '$d' | sed '1d') + how_changed=$(echo "$pr_description" | sed -n -e '/\*How was it changed?\*/,/\*/p' | sed '$d' | sed '1d') + testing_done=$(echo "$pr_description" | sed -n -e '/\*What testing was done for the changes?\*/,/\*/p' | sed '$d' | sed '1d') + + if [[ ${#what_changed} -lt $MIN_CHARS ]]; then + echo "PR description for what changed section is either missing or too short." + error_occurred=1 + fi + if [[ ${#why_changed} -lt $MIN_CHARS ]]; then + echo "PR description for why it changed section is either missing or too short." + error_occurred=1 + fi + if [[ ${#how_changed} -lt $MIN_CHARS ]]; then + echo "PR description for how was it changed section is either missing or too short." + error_occurred=1 + fi + if [[ ${#testing_done} -lt $MIN_CHARS ]]; then + echo "PR description for testing section are either missing or too short." + error_occurred=1 + fi + if [[ $error_occurred -eq 1 ]]; then + exit 1 + fi diff --git a/CMake/Dependencies/libcurl-CMakeLists.txt b/CMake/Dependencies/libcurl-CMakeLists.txt index 7d369197e..74e44b520 100644 --- a/CMake/Dependencies/libcurl-CMakeLists.txt +++ b/CMake/Dependencies/libcurl-CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.6.3) -project(libcurl-download NONE) +project(libcurl-download LANGUAGES C) find_program(MAKE_EXE NAMES make) @@ -17,6 +17,7 @@ endif() set(CMAKE_ARGS -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${OPEN_SRC_INSTALL_PREFIX} -DBUILD_CURL_EXE=0 -DHTTP_ONLY=1) diff --git a/CMake/Dependencies/libgtest-CMakeLists.txt b/CMake/Dependencies/libgtest-CMakeLists.txt index 916087e76..14e4a09cb 100644 --- a/CMake/Dependencies/libgtest-CMakeLists.txt +++ b/CMake/Dependencies/libgtest-CMakeLists.txt @@ -3,7 +3,6 @@ cmake_minimum_required(VERSION 3.6.3) project(libgtest-download NONE) include(ExternalProject) - ExternalProject_Add(libgtest-download GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.12.1 diff --git a/CMake/Dependencies/libjsmn-CMakeLists.txt b/CMake/Dependencies/libjsmn-CMakeLists.txt deleted file mode 100644 index b16ca0f5b..000000000 --- a/CMake/Dependencies/libjsmn-CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -cmake_minimum_required(VERSION 3.6.3) - -project(libjsmn-download NONE) - -include(ExternalProject) -ExternalProject_Add(project_libjsmn - GIT_REPOSITORY https://github.com/zserge/jsmn.git - GIT_TAG v1.0.0 - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build - PATCH_COMMAND git apply --ignore-whitespace ${CMAKE_SOURCE_DIR}/../../CMake/Dependencies/libjsmn-add-cmakelists.patch - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${OPEN_SRC_INSTALL_PREFIX} - BUILD_ALWAYS TRUE - TEST_COMMAND "" -) diff --git a/CMake/Dependencies/libjsmn-add-cmakelists.patch b/CMake/Dependencies/libjsmn-add-cmakelists.patch deleted file mode 100644 index 133c61d9d..000000000 --- a/CMake/Dependencies/libjsmn-add-cmakelists.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -new file mode 100644 -index 0000000..f4a1d44 ---- /dev/null -+++ b/CMakeLists.txt -@@ -0,0 +1,11 @@ -+cmake_minimum_required(VERSION 3.6.3) -+project(jsmn C) -+ -+ -+if("${CMAKE_C_COMPILER_ID}" MATCHES "GNU|Clang") -+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") -+endif() -+ -+add_library(jsmn STATIC jsmn.h jsmn.c) -+install(TARGETS jsmn DESTINATION lib) -+install(FILES jsmn.h DESTINATION include) diff --git a/CMake/Dependencies/libkvspic-CMakeLists.txt b/CMake/Dependencies/libkvspic-CMakeLists.txt index 6ab35a2da..87a0fb728 100644 --- a/CMake/Dependencies/libkvspic-CMakeLists.txt +++ b/CMake/Dependencies/libkvspic-CMakeLists.txt @@ -1,13 +1,13 @@ cmake_minimum_required(VERSION 3.6.3) -project(libkvspic-download NONE) +project(libkvspic-download LANGUAGES C) include(ExternalProject) # clone repo only ExternalProject_Add(libkvspic-download GIT_REPOSITORY https://github.com/awslabs/amazon-kinesis-video-streams-pic.git - GIT_TAG 57637ea593f4b43c509413a44d993ed08d7f2616 + GIT_TAG v1.1.0 SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/kvspic-src" BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/kvspic-build" CMAKE_ARGS diff --git a/CMake/Dependencies/libmbedtls-CMakeLists.txt b/CMake/Dependencies/libmbedtls-CMakeLists.txt index cd89da2b4..edb782c68 100644 --- a/CMake/Dependencies/libmbedtls-CMakeLists.txt +++ b/CMake/Dependencies/libmbedtls-CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.6.3) -project(libmbedtls-download NONE) +project(libmbedtls-download LANGUAGES C) include(ExternalProject) @@ -22,7 +22,7 @@ ExternalProject_Add( CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${OPEN_SRC_INSTALL_PREFIX} -DUSE_SHARED_MBEDTLS_LIBRARY=${BUILD_SHARED} - -DCMAKE_BUILD_TYPE=Release + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_MACOSX_RPATH=${CMAKE_MACOSX_RPATH} BUILD_ALWAYS TRUE TEST_COMMAND "") diff --git a/CMake/Dependencies/libopenssl-CMakeLists.txt b/CMake/Dependencies/libopenssl-CMakeLists.txt index c97037a84..fbe3d41a2 100644 --- a/CMake/Dependencies/libopenssl-CMakeLists.txt +++ b/CMake/Dependencies/libopenssl-CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.6.3) -project(libopenssl-download NONE) +project(libopenssl-download LANGUAGES C) if (WIN32) find_program(MAKE_EXE NAMES nmake) @@ -11,6 +11,12 @@ else() SET(OPENSSL_EXTRA ${OPENSSL_EXTRA} no-shared no-dso) endif() + if (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "") + if ("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") + SET(OPENSSL_EXTRA ${OPENSSL_EXTRA} -I${CMAKE_OSX_SYSROOT}/usr/include -L${CMAKE_OSX_SYSROOT}/usr/lib) + endif() + endif() + if (DEFINED BUILD_OPENSSL_PLATFORM AND NOT BUILD_OPENSSL_PLATFORM STREQUAL OFF) SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX} ${BUILD_OPENSSL_PLATFORM} -Wno-nullability-completeness -Wno-expansion-to-defined) else() diff --git a/CMake/Dependencies/libwebsockets-CMakeLists.txt b/CMake/Dependencies/libwebsockets-CMakeLists.txt index e00ee305d..3ada49e4b 100644 --- a/CMake/Dependencies/libwebsockets-CMakeLists.txt +++ b/CMake/Dependencies/libwebsockets-CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.6.3) -project(libwebsocket-download NONE) +project(libwebsocket-download LANGUAGES C) include(ExternalProject) @@ -25,6 +25,7 @@ ExternalProject_Add(project_libwebsockets CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${OPEN_SRC_INSTALL_PREFIX} -DLWS_WITH_HTTP2=1 + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DLWS_HAVE_HMAC_CTX_new=1 -DLWS_HAVE_SSL_EXTRA_CHAIN_CERTS=1 -DLWS_HAVE_OPENSSL_ECDH_H=1 diff --git a/CMakeLists.txt b/CMakeLists.txt index d23b3cafa..3131b8479 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,12 @@ cmake_minimum_required(VERSION 3.6.3) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") include(Utilities) -project(KinesisVideoProducerC VERSION 1.5.1 LANGUAGES C) +project(KinesisVideoProducerC VERSION 1.5.2 LANGUAGES C) + +set(KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION 1) +set(KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION 5) +set(KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION 2) +set(KINESIS_VIDEO_PRODUCER_C_VERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION}) include(GNUInstallDirs) @@ -16,6 +21,7 @@ option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) option(LOCAL_OPENSSL_BUILD "Whether or not to use local OpenSSL build" OFF) +option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) # Developer Flags option(BUILD_TEST "Build the testing tree." OFF) @@ -28,12 +34,21 @@ option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) +set(TYPE_OF_LIB SHARED) +if (BUILD_STATIC) + set(TYPE_OF_LIB STATIC) +endif() + set(CMAKE_MACOSX_RPATH TRUE) get_filename_component(ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") +if(CONSTRAINED_DEVICE) + add_definitions(-DCONSTRAINED_DEVICE) +endif() + if(NOT KINESIS_VIDEO_PRODUCER_C_SRC) if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) @@ -44,6 +59,11 @@ endif() message(STATUS "Kinesis Video Producer path is ${KINESIS_VIDEO_PRODUCER_C_SRC}") +if(NOT CMAKE_BUILD_TYPE) + message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) +endif() + if(BUILD_DEPENDENCIES) if (NOT OPEN_SRC_INSTALL_PREFIX) set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) @@ -73,7 +93,7 @@ if(BUILD_DEPENDENCIES) -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) build_dependency(openssl ${BUILD_ARGS}) elseif(USE_MBEDTLS) - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC}) + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) build_dependency(mbedtls ${BUILD_ARGS}) else() message(FATAL_ERROR "No crypto library selected.") @@ -82,6 +102,7 @@ if(BUILD_DEPENDENCIES) if (BUILD_COMMON_LWS) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} -DUSE_OPENSSL=${USE_OPENSSL} -DUSE_MBEDTLS=${USE_MBEDTLS}) @@ -90,6 +111,7 @@ if(BUILD_DEPENDENCIES) if (BUILD_COMMON_CURL) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DUSE_OPENSSL=${USE_OPENSSL} -DUSE_MBEDTLS=${USE_MBEDTLS}) build_dependency(curl ${BUILD_ARGS}) @@ -257,8 +279,15 @@ if(BUILD_COMMON_LWS) "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonLws.pc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc" @ONLY) - add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + if (WIN32) + add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + else() + add_library(kvsCommonLws ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + endif() target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS ${CPRODUCER_COMMON_TLS_OPTION}) + if(NOT BUILD_STATIC) + set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() target_link_libraries(kvsCommonLws ${OPENSSL_CRYPTO_LIBRARY} ${OPENSSL_SSL_LIBRARY} @@ -290,8 +319,15 @@ if(BUILD_COMMON_CURL) endif() endif() - add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + if (WIN32) + add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + else() + add_library(kvsCommonCurl ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + endif() target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) + if(NOT BUILD_STATIC) + set_target_properties(kvsCommonCurl PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() target_link_libraries(kvsCommonCurl kvspicUtils ${CURL_LIBRARIES} @@ -310,16 +346,14 @@ if(BUILD_COMMON_CURL) "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) - set(TYPE_OF_LIB SHARED) - if (BUILD_STATIC) - set(TYPE_OF_LIB STATIC) - endif() - if (WIN32) add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) else() add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES}) endif() + if(NOT BUILD_STATIC) + set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() target_link_libraries(cproducer PUBLIC kvsCommonCurl kvspic) install( diff --git a/README.md b/README.md index 9d6860a80..ff2bd3464 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ You can pass the following options to `cmake ..`. * `-DUNDEFINED_BEHAVIOR_SANITIZER` Build with UndefinedBehaviorSanitizer * `-DALIGNED_MEMORY_MODEL` Build for aligned memory model only devices. Default is OFF. * `-DLOCAL_OPENSSL_BUILD` Whether or not to use local OpenSSL build. Default is OFF. +* `-DCONSTRAINED_DEVICE` -- Change thread stack size to 0.5Mb, needed for Alpine. DMEMORY_SANITIZER, DTHREAD_SANITIZER etc. flags works only with clang compiler @@ -132,6 +133,51 @@ For audio only, run `./kvsAudioOnlyStreamingSample +``` + +`num-metadata` -- the number of sample fragment metadata key-value pairs that are added to each fragment. Min: 0, Max: 10. Default: 10. + +### Setting log levels + + +### Setup logging: +Set up the desired log level. The log levels and corresponding values currently available are: +1. `LOG_LEVEL_VERBOSE` ---- 1 +2. `LOG_LEVEL_DEBUG` ---- 2 +3. `LOG_LEVEL_INFO` ---- 3 +4. `LOG_LEVEL_WARN` ---- 4 +5. `LOG_LEVEL_ERROR` ---- 5 +6. `LOG_LEVEL_FATAL` ---- 6 +7. `LOG_LEVEL_SILENT` ---- 7 +8. `LOG_LEVEL_PROFILE` ---- 8 + +To set a log level, you can set it using the deviceInfo structure. +``` +pDeviceInfo->clientInfo.loggerLogLevel = LOG_LEVEL_DEBUG; +``` + +By default, our samples set the log level to `LOG_LEVEL_DEBUG`. + +The SDK also tracks entry and exit of functions which increases the verbosity of the logs. This will be useful when you want to track the transitions within the codebase. To do so, you need to set log level to `LOG_LEVEL_VERBOSE` and add the following to the cmake file: +`add_definitions(-DLOG_STREAMING)` +Note: This log level is extremely VERBOSE and could flood the files if using file based logging strategy. + ### Run unit tests Since these tests exercise networking you need to have AWS credentials specified, specifically you need to: diff --git a/libcproducer.pc.cmake b/libcproducer.pc.cmake index 6391fd051..f4bfe45bb 100644 --- a/libcproducer.pc.cmake +++ b/libcproducer.pc.cmake @@ -5,6 +5,6 @@ libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@ Name: KVS-libcproducer Description: KVS C Producer library -Version: 0.0.0 +Version: @KINESIS_VIDEO_PRODUCER_C_VERSION@ Cflags: -I${includedir} Libs: -L${libdir} -lcproducer diff --git a/libkvsCommonCurl.pc.cmake b/libkvsCommonCurl.pc.cmake index 86325a40f..b2a3e47bd 100644 --- a/libkvsCommonCurl.pc.cmake +++ b/libkvsCommonCurl.pc.cmake @@ -5,6 +5,6 @@ libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@ Name: KVS-libkvsCommonCurl Description: KVS C Producer common curl library -Version: 0.0.0 +Version: @KINESIS_VIDEO_PRODUCER_C_VERSION@ Cflags: -I${includedir} Libs: -L${libdir} -lkvsCommonCurl diff --git a/libkvsCommonLws.pc.cmake b/libkvsCommonLws.pc.cmake index 975ae9c9e..04cb0f153 100644 --- a/libkvsCommonLws.pc.cmake +++ b/libkvsCommonLws.pc.cmake @@ -5,6 +5,6 @@ libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@ Name: KVS-libkvsCommonLws Description: KVS C Producer common libwebsockets library -Version: 0.0.0 +Version: @KINESIS_VIDEO_PRODUCER_C_VERSION@ Cflags: -I${includedir} Libs: -L${libdir} -lkvsCommonLws diff --git a/samples/KvsAudioOnlyStreamingSample.c b/samples/KvsAudioOnlyStreamingSample.c index 8a992ffad..e99de022c 100644 --- a/samples/KvsAudioOnlyStreamingSample.c +++ b/samples/KvsAudioOnlyStreamingSample.c @@ -1,4 +1,4 @@ -#include +#include "Samples.h" #define DEFAULT_RETENTION_PERIOD 2 * HUNDREDS_OF_NANOS_IN_AN_HOUR #define DEFAULT_BUFFER_DURATION 120 * HUNDREDS_OF_NANOS_IN_A_SECOND @@ -15,8 +15,7 @@ #define NUMBER_OF_AUDIO_FRAME_FILES 582 -#define FILE_LOGGING_BUFFER_SIZE (100 * 1024) -#define MAX_NUMBER_OF_LOG_FILES 5 +// #define IOT_CORE_ENABLE_CREDENTIALS 1 typedef struct { PBYTE buffer; @@ -110,21 +109,32 @@ INT32 main(INT32 argc, CHAR* argv[]) STRNCPY(audioCodec, AUDIO_CODEC_NAME_AAC, STRLEN(AUDIO_CODEC_NAME_AAC)); // aac audio by default - if (argc >= 5) { - if (!STRCMP(argv[2], AUDIO_CODEC_NAME_ALAW)) { - STRNCPY(audioCodec, AUDIO_CODEC_NAME_ALAW, STRLEN(AUDIO_CODEC_NAME_ALAW)); - } - } +#ifdef IOT_CORE_ENABLE_CREDENTIALS + PCHAR pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, pIotCoreRoleAlias, pIotCoreThingName; + CHK_ERR((pIotCoreCredentialEndpoint = GETENV(IOT_CORE_CREDENTIAL_ENDPOINT)) != NULL, STATUS_INVALID_OPERATION, + "AWS_IOT_CORE_CREDENTIAL_ENDPOINT must be set"); + CHK_ERR((pIotCoreCert = GETENV(IOT_CORE_CERT)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_CERT must be set"); + CHK_ERR((pIotCorePrivateKey = GETENV(IOT_CORE_PRIVATE_KEY)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_PRIVATE_KEY must be set"); + CHK_ERR((pIotCoreRoleAlias = GETENV(IOT_CORE_ROLE_ALIAS)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_ROLE_ALIAS must be set"); + CHK_ERR((pIotCoreThingName = GETENV(IOT_CORE_THING_NAME)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_THING_NAME must be set"); +#else if (argc < 2) { printf("Usage: AWS_ACCESS_KEY_ID=SAMPLEKEY AWS_SECRET_ACCESS_KEY=SAMPLESECRET %s \n", argv[0]); CHK(FALSE, STATUS_INVALID_ARG); } - - if ((accessKey = getenv(ACCESS_KEY_ENV_VAR)) == NULL || (secretKey = getenv(SECRET_KEY_ENV_VAR)) == NULL) { + if ((accessKey = GETENV(ACCESS_KEY_ENV_VAR)) == NULL || (secretKey = GETENV(SECRET_KEY_ENV_VAR)) == NULL) { printf("Error missing credentials\n"); CHK(FALSE, STATUS_INVALID_ARG); } + sessionToken = GETENV(SESSION_TOKEN_ENV_VAR); +#endif + + if (argc >= 5) { + if (!STRCMP(argv[2], AUDIO_CODEC_NAME_ALAW)) { + STRNCPY(audioCodec, AUDIO_CODEC_NAME_ALAW, STRLEN(AUDIO_CODEC_NAME_ALAW)); + } + } MEMSET(data.sampleDir, 0x00, MAX_PATH_LEN + 1); if (argc < 4) { @@ -146,10 +156,16 @@ INT32 main(INT32 argc, CHAR* argv[]) } printf("Done loading audio frames.\n"); - cacertPath = getenv(CACERT_PATH_ENV_VAR); - sessionToken = getenv(SESSION_TOKEN_ENV_VAR); + cacertPath = GETENV(CACERT_PATH_ENV_VAR); + sessionToken = GETENV(SESSION_TOKEN_ENV_VAR); + +#ifdef IOT_CORE_ENABLE_CREDENTIALS + streamName = pIotCoreThingName; +#else streamName = argv[1]; - if ((region = getenv(DEFAULT_REGION_ENV_VAR)) == NULL) { +#endif + + if ((region = GETENV(DEFAULT_REGION_ENV_VAR)) == NULL) { region = (PCHAR) DEFAULT_AWS_REGION; } @@ -202,10 +218,16 @@ INT32 main(INT32 argc, CHAR* argv[]) data.startTime = GETTIME(); data.firstFrame = TRUE; + +#ifdef IOT_CORE_ENABLE_CREDENTIALS + CHK_STATUS(createDefaultCallbacksProviderWithIotCertificate(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, cacertPath, + pIotCoreRoleAlias, pIotCoreThingName, region, NULL, NULL, &pClientCallbacks)); +#else CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL, &pClientCallbacks)); +#endif - if (NULL != getenv(ENABLE_FILE_LOGGING)) { + if (NULL != GETENV(ENABLE_FILE_LOGGING)) { if ((retStatus = addFileLoggerPlatformCallbacksProvider(pClientCallbacks, FILE_LOGGING_BUFFER_SIZE, MAX_NUMBER_OF_LOG_FILES, (PCHAR) FILE_LOGGER_LOG_FILE_DIRECTORY_PATH, TRUE) != STATUS_SUCCESS)) { printf("File logging enable option failed with 0x%08x error code\n", retStatus); diff --git a/samples/KvsAudioVideoStreamingSample.c b/samples/KvsAudioVideoStreamingSample.c index 7f001aa37..84f299a5a 100644 --- a/samples/KvsAudioVideoStreamingSample.c +++ b/samples/KvsAudioVideoStreamingSample.c @@ -1,4 +1,4 @@ -#include +#include "Samples.h" #define DEFAULT_RETENTION_PERIOD 2 * HUNDREDS_OF_NANOS_IN_AN_HOUR #define DEFAULT_BUFFER_DURATION 120 * HUNDREDS_OF_NANOS_IN_A_SECOND @@ -22,8 +22,7 @@ #define NUMBER_OF_VIDEO_FRAME_FILES 403 #define NUMBER_OF_AUDIO_FRAME_FILES 582 -#define FILE_LOGGING_BUFFER_SIZE (100 * 1024) -#define MAX_NUMBER_OF_LOG_FILES 5 +// #define IOT_CORE_ENABLE_CREDENTIALS 1 UINT8 gEventsEnabled = 0; @@ -195,6 +194,28 @@ INT32 main(INT32 argc, CHAR* argv[]) STRNCPY(audioCodec, AUDIO_CODEC_NAME_AAC, STRLEN(AUDIO_CODEC_NAME_AAC)); // aac audio by default STRNCPY(videoCodec, VIDEO_CODEC_NAME_H264, STRLEN(VIDEO_CODEC_NAME_H264)); // h264 video by default +#ifdef IOT_CORE_ENABLE_CREDENTIALS + PCHAR pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, pIotCoreRoleAlias, pIotCoreThingName; + CHK_ERR((pIotCoreCredentialEndpoint = GETENV(IOT_CORE_CREDENTIAL_ENDPOINT)) != NULL, STATUS_INVALID_OPERATION, + "AWS_IOT_CORE_CREDENTIAL_ENDPOINT must be set"); + CHK_ERR((pIotCoreCert = GETENV(IOT_CORE_CERT)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_CERT must be set"); + CHK_ERR((pIotCorePrivateKey = GETENV(IOT_CORE_PRIVATE_KEY)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_PRIVATE_KEY must be set"); + CHK_ERR((pIotCoreRoleAlias = GETENV(IOT_CORE_ROLE_ALIAS)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_ROLE_ALIAS must be set"); + CHK_ERR((pIotCoreThingName = GETENV(IOT_CORE_THING_NAME)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_THING_NAME must be set"); +#else + if (argc < 2) { + printf("Usage: AWS_ACCESS_KEY_ID=SAMPLEKEY AWS_SECRET_ACCESS_KEY=SAMPLESECRET %s " + "[audio_codec] [video_codec] [events_enabled]\n", + argv[0]); + CHK(FALSE, STATUS_INVALID_ARG); + } + if ((accessKey = GETENV(ACCESS_KEY_ENV_VAR)) == NULL || (secretKey = GETENV(SECRET_KEY_ENV_VAR)) == NULL) { + printf("Error missing credentials\n"); + CHK(FALSE, STATUS_INVALID_ARG); + } + sessionToken = GETENV(SESSION_TOKEN_ENV_VAR); +#endif + if (argc == 7) { if (!STRCMP(argv[6], "1")) { gEventsEnabled = 1; @@ -209,17 +230,6 @@ INT32 main(INT32 argc, CHAR* argv[]) videoCodecID = VIDEO_CODEC_ID_H265; } } - if (argc < 2) { - printf("Usage: AWS_ACCESS_KEY_ID=SAMPLEKEY AWS_SECRET_ACCESS_KEY=SAMPLESECRET %s " - "[audio_codec] [video_codec] [events_enabled]\n", - argv[0]); - CHK(FALSE, STATUS_INVALID_ARG); - } - - if ((accessKey = getenv(ACCESS_KEY_ENV_VAR)) == NULL || (secretKey = getenv(SECRET_KEY_ENV_VAR)) == NULL) { - printf("Error missing credentials\n"); - CHK(FALSE, STATUS_INVALID_ARG); - } MEMSET(data.sampleDir, 0x00, MAX_PATH_LEN + 1); if (argc < 4) { @@ -251,10 +261,15 @@ INT32 main(INT32 argc, CHAR* argv[]) } printf("Done loading video frames.\n"); - cacertPath = getenv(CACERT_PATH_ENV_VAR); - sessionToken = getenv(SESSION_TOKEN_ENV_VAR); + cacertPath = GETENV(CACERT_PATH_ENV_VAR); + +#ifdef IOT_CORE_ENABLE_CREDENTIALS + streamName = pIotCoreThingName; +#else streamName = argv[1]; - if ((region = getenv(DEFAULT_REGION_ENV_VAR)) == NULL) { +#endif + + if ((region = GETENV(DEFAULT_REGION_ENV_VAR)) == NULL) { region = (PCHAR) DEFAULT_AWS_REGION; } @@ -309,10 +324,15 @@ INT32 main(INT32 argc, CHAR* argv[]) data.startTime = GETTIME(); data.firstFrame = TRUE; +#ifdef IOT_CORE_ENABLE_CREDENTIALS + CHK_STATUS(createDefaultCallbacksProviderWithIotCertificate(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, cacertPath, + pIotCoreRoleAlias, pIotCoreThingName, region, NULL, NULL, &pClientCallbacks)); +#else CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL, &pClientCallbacks)); +#endif - if (NULL != getenv(ENABLE_FILE_LOGGING)) { + if (NULL != GETENV(ENABLE_FILE_LOGGING)) { if ((retStatus = addFileLoggerPlatformCallbacksProvider(pClientCallbacks, FILE_LOGGING_BUFFER_SIZE, MAX_NUMBER_OF_LOG_FILES, (PCHAR) FILE_LOGGER_LOG_FILE_DIRECTORY_PATH, TRUE) != STATUS_SUCCESS)) { printf("File logging enable option failed with 0x%08x error code\n", retStatus); diff --git a/samples/KvsVideoOnlyOfflineStreamingSample.c b/samples/KvsVideoOnlyOfflineStreamingSample.c index 9424eeedc..b67463819 100644 --- a/samples/KvsVideoOnlyOfflineStreamingSample.c +++ b/samples/KvsVideoOnlyOfflineStreamingSample.c @@ -1,4 +1,4 @@ -#include +#include "Samples.h" #define DEFAULT_RETENTION_PERIOD 2 * HUNDREDS_OF_NANOS_IN_AN_HOUR #define DEFAULT_BUFFER_DURATION 120 * HUNDREDS_OF_NANOS_IN_A_SECOND @@ -14,8 +14,8 @@ #define NUMBER_OF_FRAME_FILES 403 -#define FILE_LOGGING_BUFFER_SIZE (100 * 1024) -#define MAX_NUMBER_OF_LOG_FILES 5 +// #define IOT_CORE_ENABLE_CREDENTIALS 1 + STATUS readFrameData(PFrame pFrame, PCHAR frameFilePath, PCHAR videoCodec) { STATUS retStatus = STATUS_SUCCESS; @@ -66,17 +66,27 @@ INT32 main(INT32 argc, CHAR* argv[]) STRNCPY(videoCodec, VIDEO_CODEC_NAME_H264, STRLEN(VIDEO_CODEC_NAME_H264)); // h264 video by default VIDEO_CODEC_ID videoCodecID = VIDEO_CODEC_ID_H264; +#ifdef IOT_CORE_ENABLE_CREDENTIALS + PCHAR pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, pIotCoreRoleAlias, pIotCoreThingName; + CHK_ERR((pIotCoreCredentialEndpoint = GETENV(IOT_CORE_CREDENTIAL_ENDPOINT)) != NULL, STATUS_INVALID_OPERATION, + "AWS_IOT_CORE_CREDENTIAL_ENDPOINT must be set"); + CHK_ERR((pIotCoreCert = GETENV(IOT_CORE_CERT)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_CERT must be set"); + CHK_ERR((pIotCorePrivateKey = GETENV(IOT_CORE_PRIVATE_KEY)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_PRIVATE_KEY must be set"); + CHK_ERR((pIotCoreRoleAlias = GETENV(IOT_CORE_ROLE_ALIAS)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_ROLE_ALIAS must be set"); + CHK_ERR((pIotCoreThingName = GETENV(IOT_CORE_THING_NAME)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_THING_NAME must be set"); +#else if (argc < 2) { DLOGE("Usage: AWS_ACCESS_KEY_ID=SAMPLEKEY AWS_SECRET_ACCESS_KEY=SAMPLESECRET %s " "\n", argv[0]); CHK(FALSE, STATUS_INVALID_ARG); } - - if ((accessKey = getenv(ACCESS_KEY_ENV_VAR)) == NULL || (secretKey = getenv(SECRET_KEY_ENV_VAR)) == NULL) { + if ((accessKey = GETENV(ACCESS_KEY_ENV_VAR)) == NULL || (secretKey = GETENV(SECRET_KEY_ENV_VAR)) == NULL) { DLOGE("Error missing credentials"); CHK(FALSE, STATUS_INVALID_ARG); } + sessionToken = GETENV(SESSION_TOKEN_ENV_VAR); +#endif MEMSET(frameFilePath, 0x00, MAX_PATH_LEN + 1); if (argc < 5) { @@ -85,10 +95,15 @@ INT32 main(INT32 argc, CHAR* argv[]) STRNCPY(frameFilePath, argv[4], MAX_PATH_LEN); } - cacertPath = getenv(CACERT_PATH_ENV_VAR); - sessionToken = getenv(SESSION_TOKEN_ENV_VAR); + cacertPath = GETENV(CACERT_PATH_ENV_VAR); + +#ifdef IOT_CORE_ENABLE_CREDENTIALS + streamName = pIotCoreThingName; +#else streamName = argv[1]; - if ((region = getenv(DEFAULT_REGION_ENV_VAR)) == NULL) { +#endif + + if ((region = GETENV(DEFAULT_REGION_ENV_VAR)) == NULL) { region = (PCHAR) DEFAULT_AWS_REGION; } @@ -119,10 +134,16 @@ INT32 main(INT32 argc, CHAR* argv[]) // adjust members of pStreamInfo here if needed startTime = GETTIME(); + +#ifdef IOT_CORE_ENABLE_CREDENTIALS + CHK_STATUS(createDefaultCallbacksProviderWithIotCertificate(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, cacertPath, + pIotCoreRoleAlias, pIotCoreThingName, region, NULL, NULL, &pClientCallbacks)); +#else CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL, &pClientCallbacks)); +#endif - if (NULL != getenv(ENABLE_FILE_LOGGING)) { + if (NULL != GETENV(ENABLE_FILE_LOGGING)) { if ((retStatus = addFileLoggerPlatformCallbacksProvider(pClientCallbacks, FILE_LOGGING_BUFFER_SIZE, MAX_NUMBER_OF_LOG_FILES, (PCHAR) FILE_LOGGER_LOG_FILE_DIRECTORY_PATH, TRUE) != STATUS_SUCCESS)) { printf("File logging enable option failed with 0x%08x error code\n", retStatus); diff --git a/samples/KvsVideoOnlyRealtimeStreamingSample.c b/samples/KvsVideoOnlyRealtimeStreamingSample.c index a5e3d2efc..9c5b0a062 100644 --- a/samples/KvsVideoOnlyRealtimeStreamingSample.c +++ b/samples/KvsVideoOnlyRealtimeStreamingSample.c @@ -1,4 +1,4 @@ -#include +#include "Samples.h" #define DEFAULT_RETENTION_PERIOD 2 * HUNDREDS_OF_NANOS_IN_AN_HOUR #define DEFAULT_BUFFER_DURATION 120 * HUNDREDS_OF_NANOS_IN_A_SECOND @@ -11,11 +11,14 @@ #define VIDEO_CODEC_NAME_H264 "h264" #define VIDEO_CODEC_NAME_H265 "h265" #define VIDEO_CODEC_NAME_MAX_LENGTH 5 +#define METADATA_MAX_KEY_LENGTH 128 +#define METADATA_MAX_VALUE_LENGTH 256 +#define MAX_METADATA_PER_FRAGMENT 10 #define NUMBER_OF_FRAME_FILES 403 -#define FILE_LOGGING_BUFFER_SIZE (100 * 1024) -#define MAX_NUMBER_OF_LOG_FILES 5 +// #define IOT_CORE_ENABLE_CREDENTIALS 1 + STATUS readFrameData(PFrame pFrame, PCHAR frameFilePath, PCHAR videoCodec) { STATUS retStatus = STATUS_SUCCESS; @@ -57,10 +60,10 @@ INT32 main(INT32 argc, CHAR* argv[]) STREAM_HANDLE streamHandle = INVALID_STREAM_HANDLE_VALUE; STATUS retStatus = STATUS_SUCCESS; PCHAR accessKey = NULL, secretKey = NULL, sessionToken = NULL, streamName = NULL, region = NULL, cacertPath = NULL; - CHAR frameFilePath[MAX_PATH_LEN + 1]; + CHAR frameFilePath[MAX_PATH_LEN + 1], metadataKey[METADATA_MAX_KEY_LENGTH + 1], metadataValue[METADATA_MAX_VALUE_LENGTH + 1]; Frame frame; BYTE frameBuffer[200000]; // Assuming this is enough - UINT32 frameSize = SIZEOF(frameBuffer), frameIndex = 0, fileIndex = 0; + UINT32 frameSize = SIZEOF(frameBuffer), frameIndex = 0, fileIndex = 0, n = 0, numMetadata = 10; UINT64 streamStopTime, streamingDuration = DEFAULT_STREAM_DURATION; DOUBLE startUpLatency; BOOL firstFrame = TRUE; @@ -69,17 +72,28 @@ INT32 main(INT32 argc, CHAR* argv[]) STRNCPY(videoCodec, VIDEO_CODEC_NAME_H264, STRLEN(VIDEO_CODEC_NAME_H264)); // h264 video by default VIDEO_CODEC_ID videoCodecID = VIDEO_CODEC_ID_H264; +#ifdef IOT_CORE_ENABLE_CREDENTIALS + PCHAR pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, pIotCoreRoleAlias, pIotCoreThingName; + CHK_ERR((pIotCoreCredentialEndpoint = GETENV(IOT_CORE_CREDENTIAL_ENDPOINT)) != NULL, STATUS_INVALID_OPERATION, + "AWS_IOT_CORE_CREDENTIAL_ENDPOINT must be set"); + CHK_ERR((pIotCoreCert = GETENV(IOT_CORE_CERT)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_CERT must be set"); + CHK_ERR((pIotCorePrivateKey = GETENV(IOT_CORE_PRIVATE_KEY)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_PRIVATE_KEY must be set"); + CHK_ERR((pIotCoreRoleAlias = GETENV(IOT_CORE_ROLE_ALIAS)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_ROLE_ALIAS must be set"); + CHK_ERR((pIotCoreRoleAlias = GETENV(IOT_CORE_ROLE_ALIAS)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_ROLE_ALIAS must be set"); + CHK_ERR((pIotCoreThingName = GETENV(IOT_CORE_THING_NAME)) != NULL, STATUS_INVALID_OPERATION, "AWS_IOT_CORE_THING_NAME must be set"); +#else if (argc < 2) { - DLOGE("Usage: AWS_ACCESS_KEY_ID=SAMPLEKEY AWS_SECRET_ACCESS_KEY=SAMPLESECRET %s " - "\n", + DLOGE("Usage: AWS_ACCESS_KEY_ID=SAMPLEKEY AWS_SECRET_ACCESS_KEY=SAMPLESECRET %s " + " [num_metadata = 10]\n", argv[0]); CHK(FALSE, STATUS_INVALID_ARG); } - - if ((accessKey = getenv(ACCESS_KEY_ENV_VAR)) == NULL || (secretKey = getenv(SECRET_KEY_ENV_VAR)) == NULL) { + if ((accessKey = GETENV(ACCESS_KEY_ENV_VAR)) == NULL || (secretKey = GETENV(SECRET_KEY_ENV_VAR)) == NULL) { DLOGE("Error missing credentials"); CHK(FALSE, STATUS_INVALID_ARG); } + sessionToken = GETENV(SESSION_TOKEN_ENV_VAR); +#endif MEMSET(frameFilePath, 0x00, MAX_PATH_LEN + 1); if (argc < 5) { @@ -88,26 +102,42 @@ INT32 main(INT32 argc, CHAR* argv[]) STRNCPY(frameFilePath, argv[4], MAX_PATH_LEN); } - cacertPath = getenv(CACERT_PATH_ENV_VAR); - sessionToken = getenv(SESSION_TOKEN_ENV_VAR); + cacertPath = GETENV(CACERT_PATH_ENV_VAR); +#ifdef IOT_CORE_ENABLE_CREDENTIALS + streamName = pIotCoreThingName; +#else streamName = argv[1]; - if ((region = getenv(DEFAULT_REGION_ENV_VAR)) == NULL) { +#endif + if ((region = GETENV(DEFAULT_REGION_ENV_VAR)) == NULL) { region = (PCHAR) DEFAULT_AWS_REGION; } - if (argc >= 3) { + if (argc >= 3 && !IS_EMPTY_STRING(argv[2])) { if (!STRCMP(argv[2], VIDEO_CODEC_NAME_H265)) { STRNCPY(videoCodec, VIDEO_CODEC_NAME_H265, STRLEN(VIDEO_CODEC_NAME_H265)); videoCodecID = VIDEO_CODEC_ID_H265; } } - if (argc >= 4) { + if (argc >= 4 && !IS_EMPTY_STRING(argv[3])) { // Get the duration and convert to an integer CHK_STATUS(STRTOUI64(argv[3], NULL, 10, &streamingDuration)); streamingDuration *= HUNDREDS_OF_NANOS_IN_A_SECOND; } + MEMSET(frameFilePath, 0x00, MAX_PATH_LEN + 1); + if (argc >= 5 && !IS_EMPTY_STRING(argv[4])) { + STRNCPY(frameFilePath, argv[4], MAX_PATH_LEN); + } else { + STRCPY(frameFilePath, (PCHAR) "../samples/"); + } + + if (argc >= 6 && !IS_EMPTY_STRING(argv[5])) { + numMetadata = STRTOUL(argv[5], NULL, 10); + DLOGD("numMetadata: %d\n", numMetadata); + CHK(numMetadata <= MAX_METADATA_PER_FRAGMENT, STATUS_INVALID_ARG); + } + streamStopTime = GETTIME() + streamingDuration; // default storage size is 128MB. Use setDeviceInfoStorageSize after create to change storage size. @@ -122,10 +152,16 @@ INT32 main(INT32 argc, CHAR* argv[]) // adjust members of pStreamInfo here if needed startTime = GETTIME(); + +#ifdef IOT_CORE_ENABLE_CREDENTIALS + CHK_STATUS(createDefaultCallbacksProviderWithIotCertificate(pIotCoreCredentialEndpoint, pIotCoreCert, pIotCorePrivateKey, cacertPath, + pIotCoreRoleAlias, pIotCoreThingName, region, NULL, NULL, &pClientCallbacks)); +#else CHK_STATUS(createDefaultCallbacksProviderWithAwsCredentials(accessKey, secretKey, sessionToken, MAX_UINT64, region, cacertPath, NULL, NULL, &pClientCallbacks)); +#endif - if (NULL != getenv(ENABLE_FILE_LOGGING)) { + if (NULL != GETENV(ENABLE_FILE_LOGGING)) { if ((retStatus = addFileLoggerPlatformCallbacksProvider(pClientCallbacks, FILE_LOGGING_BUFFER_SIZE, MAX_NUMBER_OF_LOG_FILES, (PCHAR) FILE_LOGGER_LOG_FILE_DIRECTORY_PATH, TRUE) != STATUS_SUCCESS)) { printf("File logging enable option failed with 0x%08x error code\n", retStatus); @@ -154,6 +190,17 @@ INT32 main(INT32 argc, CHAR* argv[]) CHK_STATUS(readFrameData(&frame, frameFilePath, videoCodec)); + // Add the fragment metadata key-value pairs + // For limits, refer to https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html#limits-streaming-metadata + if (numMetadata > 0 && frame.flags == FRAME_FLAG_KEY_FRAME) { + DLOGD("Adding metadata! frameIndex: %d", frame.index); + for (n = 1; n <= numMetadata; n++) { + SNPRINTF(metadataKey, METADATA_MAX_KEY_LENGTH, "TEST_KEY_%d", n); + SNPRINTF(metadataValue, METADATA_MAX_VALUE_LENGTH, "TEST_VALUE_%d", frame.index + n); + CHK_STATUS(putKinesisVideoFragmentMetadata(streamHandle, metadataKey, metadataValue, TRUE)); + } + } + CHK_STATUS(putKinesisVideoFrame(streamHandle, &frame)); if (firstFrame) { startUpLatency = (DOUBLE) (GETTIME() - startTime) / (DOUBLE) HUNDREDS_OF_NANOS_IN_A_MILLISECOND; diff --git a/samples/Samples.h b/samples/Samples.h new file mode 100644 index 000000000..0d1de4357 --- /dev/null +++ b/samples/Samples.h @@ -0,0 +1,28 @@ +/******************************************* +Shared include file for the samples +*******************************************/ +#ifndef __KINESIS_VIDEO_PRODUCER_SAMPLE_INCLUDE__ +#define __KINESIS_VIDEO_PRODUCER_SAMPLE_INCLUDE__ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define IOT_CORE_CREDENTIAL_ENDPOINT ((PCHAR) "AWS_IOT_CORE_CREDENTIAL_ENDPOINT") +#define IOT_CORE_CERT ((PCHAR) "AWS_IOT_CORE_CERT") +#define IOT_CORE_PRIVATE_KEY ((PCHAR) "AWS_IOT_CORE_PRIVATE_KEY") +#define IOT_CORE_ROLE_ALIAS ((PCHAR) "AWS_IOT_CORE_ROLE_ALIAS") +#define IOT_CORE_THING_NAME ((PCHAR) "AWS_IOT_CORE_THING_NAME") +#define IOT_CORE_CERTIFICATE_ID ((PCHAR) "AWS_IOT_CORE_CERTIFICATE_ID") + +#define FILE_LOGGING_BUFFER_SIZE (100 * 1024) +#define MAX_NUMBER_OF_LOG_FILES 5 + +#ifdef __cplusplus +} +#endif +#endif /* __KINESIS_VIDEO_PRODUCER_SAMPLE_INCLUDE__ */ \ No newline at end of file diff --git a/scripts/generate-iot-credential.sh b/scripts/generate-iot-credential.sh new file mode 100755 index 000000000..29801cb01 --- /dev/null +++ b/scripts/generate-iot-credential.sh @@ -0,0 +1,115 @@ +#!/bin/bash +# You need to setup your aws cli first, because this script is based on aws cli. +# You can use this script to setup environment variables in the shell which samples run on. +# https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/how-iot.html + +thingName="producerc_thing" +thingTypeName="producerc_thing_type" +iotPolicyName="producerc_policy" +kvsPolicyName="producerc_policy" +iotRoleName="producerc_role" +iotRoleAlias="producerc_role_alias" +iotCert="producerc_certificate.pem" +iotPublicKey="producerc_public.key" +iotPrivateKey="producerc_private.key" + +# Step 1: Create an IoT Thing Type and an IoT Thing +# The following example command creates a thing type $thingTypeName +aws --profile default iot create-thing-type --thing-type-name $thingTypeName > iot-thing-type.json +# And this example command creates the $thingName thing of the $thingTypeName thing type: +aws --profile default iot create-thing --thing-name $thingName --thing-type-name $thingTypeName > iot-thing.json + +# Step 2: Create an IAM Role to be Assumed by IoT +# You can use the following trust policy JSON for the iam-policy-document.json: +cat > iam-policy-document.json < iam-role.json + +# You can use the following IAM policy JSON for the iam-permission-document.json: +cat > iam-permission-document.json < iot-role-alias.json + +# You can use the following command to create the iot-policy-document.json document JSON: +cat > iot-policy-document.json << EOF +{ + "Version":"2012-10-17", + "Statement":[ + { + "Effect":"Allow", + "Action":[ + "iot:Connect" + ], + "Resource":"*" + }, + { + "Effect":"Allow", + "Action":[ + "iot:AssumeRoleWithCertificate" + ], + "Resource":"$(jq --raw-output '.roleAliasArn' iot-role-alias.json)" + } + ] +} +EOF + +# Now you can create the policy that will enable IoT to assume role with the certificate (once it is attached) using the role alias. +aws --profile default iot create-policy --policy-name $iotPolicyName --policy-document 'file://iot-policy-document.json' + +# Create the certificate to which you must attach the policy for IoT that you created above. +aws --profile default iot create-keys-and-certificate --set-as-active --certificate-pem-outfile $iotCert --public-key-outfile $iotPublicKey --private-key-outfile $iotPrivateKey > certificate +# Attach the policy for IoT (KvsCameraIoTPolicy created above) to this certificate. +aws --profile default iot attach-policy --policy-name $iotPolicyName --target $(jq --raw-output '.certificateArn' certificate) +# Attach your IoT thing (kvs_example_camera_stream) to the certificate you just created: +aws --profile default iot attach-thing-principal --thing-name $thingName --principal $(jq --raw-output '.certificateArn' certificate) +# In order to authorize requests through the IoT credentials provider, you need the IoT credentials endpoint which is unique to your AWS account ID. You can use the following command to get the IoT credentials endpoint. +aws --profile default iot describe-endpoint --endpoint-type iot:CredentialProvider --output text > iot-credential-provider.txt +# In addition to the X.509 cerficiate created above, you must also have a CA certificate to establish trust with the back-end service through TLS. You can get the CA certificate using the following command: +curl 'https://www.amazontrust.com/repository/SFSRootCAG2.pem' --output cacert.pem + +export AWS_IOT_CORE_CREDENTIAL_ENDPOINT=$(cat iot-credential-provider.txt) +export AWS_IOT_CORE_CERT=$(pwd)"/"$iotCert +export AWS_IOT_CORE_PRIVATE_KEY=$(pwd)"/"$iotPrivateKey +export AWS_IOT_CORE_ROLE_ALIAS=$iotRoleAlias +export AWS_IOT_CORE_THING_NAME=$thingName \ No newline at end of file diff --git a/src/include/com/amazonaws/kinesis/video/common/Include.h b/src/include/com/amazonaws/kinesis/video/common/Include.h index 730b0b2bb..cc8fae722 100644 --- a/src/include/com/amazonaws/kinesis/video/common/Include.h +++ b/src/include/com/amazonaws/kinesis/video/common/Include.h @@ -139,9 +139,9 @@ extern "C" { #define MAX_ROLE_ALIAS_LEN 128 /** - * Maximum allowed string length for IoT thing name + * Maximum allowed string length for IoT thing name: https://docs.aws.amazon.com/iot/latest/apireference/API_CreateThing.html */ -#define MAX_IOT_THING_NAME_LEN MAX_STREAM_NAME_LEN +#define MAX_IOT_THING_NAME_LEN 128 /** * Maximum allowed request header length @@ -314,11 +314,27 @@ extern "C" { */ #define KINESIS_VIDEO_SERVICE_NAME "kinesisvideo" +#define AWS_KVS_FIPS_ENDPOINT_POSTFIX "-fips" + /** * Control plane postfix */ #define CONTROL_PLANE_URI_POSTFIX ".amazonaws.com" +#define CONTROL_PLANE_URI_POSTFIX_CN ".amazonaws.com.cn" + +#define CONTROL_PLANE_URI_POSTFIX_ISO ".c2s.ic.gov" + +#define CONTROL_PLANE_URI_POSTFIX_ISO_B ".sc2s.sgov.gov" + +#define AWS_ISO_B_REGION_PREFIX "us-isob-" + +#define AWS_ISO_REGION_PREFIX "us-iso-" + +#define AWS_GOV_CLOUD_REGION_PREFIX "us-gov-" + +#define AWS_CN_REGION_PREFIX "cn-" + /** * Default user agent name */ diff --git a/src/source/Common/AwsV4Signer.c b/src/source/Common/AwsV4Signer.c index 3eddaf44c..19b5831ad 100644 --- a/src/source/Common/AwsV4Signer.c +++ b/src/source/Common/AwsV4Signer.c @@ -659,7 +659,7 @@ STATUS generateSignatureDateTime(UINT64 currentTime, PCHAR pDateTimeStr) // Convert to time_t timeT = (time_t) (currentTime / HUNDREDS_OF_NANOS_IN_A_SECOND); - retSize = STRFTIME(pDateTimeStr, SIGNATURE_DATE_TIME_STRING_LEN, DATE_TIME_STRING_FORMAT, GMTIME(&timeT)); + retSize = STRFTIME(pDateTimeStr, SIGNATURE_DATE_TIME_STRING_LEN, DATE_TIME_STRING_FORMAT, GMTIME_THREAD_SAFE(&timeT)); CHK(retSize > 0, STATUS_BUFFER_TOO_SMALL); pDateTimeStr[retSize] = '\0'; diff --git a/src/source/Common/IotCredentialProvider.c b/src/source/Common/IotCredentialProvider.c index 4e0604628..ba23b185e 100644 --- a/src/source/Common/IotCredentialProvider.c +++ b/src/source/Common/IotCredentialProvider.c @@ -139,7 +139,7 @@ STATUS parseIotResponse(PIotCredentialProvider pIotCredentialProvider, PCallInfo jsmn_parser parser; jsmntok_t tokens[MAX_JSON_TOKEN_COUNT]; PCHAR accessKeyId = NULL, secretKey = NULL, sessionToken = NULL, expirationTimestamp = NULL, pResponseStr = NULL; - UINT64 expiration, currentTime; + UINT64 expiration, currentTime, jitter, randMultiplier; CHAR expirationTimestampStr[MAX_EXPIRATION_LEN + 1]; CHK(pIotCredentialProvider != NULL && pCallInfo != NULL, STATUS_NULL_ARG); @@ -191,10 +191,20 @@ STATUS parseIotResponse(PIotCredentialProvider pIotCredentialProvider, PCallInfo pIotCredentialProvider->pAwsCredentials = NULL; } - // Fix-up the expiration to be no more than max enforced token rotation to avoid extra token rotations - // as we are caching the returned value which is likely to be an hour but we are enforcing max - // rotation to be more frequent. - expiration = MIN(expiration, currentTime + MAX_ENFORCED_TOKEN_EXPIRATION_DURATION); + // Need to have large numbers since all items are in terms of HUNDREDS_NANOS_IN_A_SECOND. -1 to round down + randMultiplier = (ULONG_MAX / RAND_MAX) - 1; + + // add randomized jitter between 1-20% of expiration + srand(currentTime / ((UINT64) sessionToken[rand() % (sessionTokenLen - 1)] + (UINT64) sessionToken[rand() % (sessionTokenLen - 1)])); + expiration -= currentTime; + + // remainder after dividing by 19% + jitter = (rand() * randMultiplier) % (((expiration / 100) * 19) + (expiration % 100) * 19 / 100); + // add exaction 1% to change to range from 0-19 to 1-20; + jitter += expiration / 100; + + expiration -= jitter; + expiration += currentTime; CHK_STATUS(createAwsCredentials(accessKeyId, accessKeyIdLen, secretKey, secretKeyLen, sessionToken, sessionTokenLen, expiration, &pIotCredentialProvider->pAwsCredentials)); diff --git a/src/source/Common/RequestInfo.c b/src/source/Common/RequestInfo.c index a3890eda8..86e7d9365 100644 --- a/src/source/Common/RequestInfo.c +++ b/src/source/Common/RequestInfo.c @@ -221,6 +221,8 @@ STATUS setRequestHeader(PRequestInfo pRequestInfo, PCHAR headerName, UINT32 head if (STATUS_FAILED(retStatus) && pRequestHeader != NULL) { MEMFREE(pRequestHeader); + } else { + DLOGD("Appending header to request: %s -> %s", headerName, headerValue); } return retStatus; @@ -340,4 +342,4 @@ STATUS releaseCallInfo(PCallInfo pCallInfo) CleanUp: return retStatus; -} \ No newline at end of file +} diff --git a/src/source/CurlApiCallbacks.c b/src/source/CurlApiCallbacks.c index 66b71a063..c045e0e1e 100644 --- a/src/source/CurlApiCallbacks.c +++ b/src/source/CurlApiCallbacks.c @@ -79,12 +79,23 @@ STATUS createCurlApiCallbacks(PCallbacksProvider pCallbacksProvider, PCHAR regio // Set the control plane URL if (controlPlaneUrl == NULL || controlPlaneUrl[0] == '\0') { - // Create a fully qualified URI - SNPRINTF(pCurlApiCallbacks->controlPlaneUrl, MAX_URI_CHAR_LEN, "%s%s.%s%s", CONTROL_PLANE_URI_PREFIX, KINESIS_VIDEO_SERVICE_NAME, - pCurlApiCallbacks->region, CONTROL_PLANE_URI_POSTFIX); - // If region is in CN, add CN region uri postfix - if (STRSTR(pCurlApiCallbacks->region, "cn-")) { - STRCAT(pCurlApiCallbacks->controlPlaneUrl, ".cn"); + if (0 == STRNCMP(pCurlApiCallbacks->region, AWS_ISO_B_REGION_PREFIX, STRLEN(AWS_ISO_B_REGION_PREFIX))) { + SNPRINTF(pCurlApiCallbacks->controlPlaneUrl, MAX_URI_CHAR_LEN, "%s%s%s.%s%s", CONTROL_PLANE_URI_PREFIX, KINESIS_VIDEO_SERVICE_NAME, + AWS_KVS_FIPS_ENDPOINT_POSTFIX, pCurlApiCallbacks->region, CONTROL_PLANE_URI_POSTFIX_ISO_B); + // Region is in "aws-iso" partition + } else if (0 == STRNCMP(pCurlApiCallbacks->region, AWS_ISO_REGION_PREFIX, STRLEN(AWS_ISO_REGION_PREFIX))) { + SNPRINTF(pCurlApiCallbacks->controlPlaneUrl, MAX_URI_CHAR_LEN, "%s%s%s.%s%s", CONTROL_PLANE_URI_PREFIX, KINESIS_VIDEO_SERVICE_NAME, + AWS_KVS_FIPS_ENDPOINT_POSTFIX, pCurlApiCallbacks->region, CONTROL_PLANE_URI_POSTFIX_ISO); + } else if (0 == STRNCMP(pCurlApiCallbacks->region, AWS_GOV_CLOUD_REGION_PREFIX, STRLEN(AWS_GOV_CLOUD_REGION_PREFIX))) { + SNPRINTF(pCurlApiCallbacks->controlPlaneUrl, MAX_URI_CHAR_LEN, "%s%s%s.%s%s", CONTROL_PLANE_URI_PREFIX, KINESIS_VIDEO_SERVICE_NAME, + AWS_KVS_FIPS_ENDPOINT_POSTFIX, pCurlApiCallbacks->region, CONTROL_PLANE_URI_POSTFIX); + } else if (0 == STRNCMP(pCurlApiCallbacks->region, AWS_CN_REGION_PREFIX, STRLEN(AWS_CN_REGION_PREFIX))) { + SNPRINTF(pCurlApiCallbacks->controlPlaneUrl, MAX_URI_CHAR_LEN, "%s%s.%s%s", CONTROL_PLANE_URI_PREFIX, KINESIS_VIDEO_SERVICE_NAME, + pCurlApiCallbacks->region, CONTROL_PLANE_URI_POSTFIX_CN); + } else { + // Create a fully qualified URI + SNPRINTF(pCurlApiCallbacks->controlPlaneUrl, MAX_URI_CHAR_LEN, "%s%s.%s%s", CONTROL_PLANE_URI_PREFIX, KINESIS_VIDEO_SERVICE_NAME, + pCurlApiCallbacks->region, CONTROL_PLANE_URI_POSTFIX); } } else { STRNCPY(pCurlApiCallbacks->controlPlaneUrl, controlPlaneUrl, MAX_URI_CHAR_LEN); @@ -994,15 +1005,17 @@ STATUS createStreamCurl(UINT64 customData, PCHAR deviceName, PCHAR streamName, P CleanUp: + if (startLocked) { + // Release the lock to let the awaiting handler thread to continue + pCallbacksProvider->clientCallbacks.unlockMutexFn(pCallbacksProvider->clientCallbacks.customData, pCurlRequest->startLock); + } + if (STATUS_FAILED(retStatus)) { if (IS_VALID_TID_VALUE(threadId)) { THREAD_CANCEL(threadId); } freeCurlRequest(&pCurlRequest); - } else if (startLocked) { - // Release the lock to let the awaiting handler thread to continue - pCallbacksProvider->clientCallbacks.unlockMutexFn(pCallbacksProvider->clientCallbacks.customData, pCurlRequest->startLock); } if (shutdownLocked) { @@ -1226,15 +1239,17 @@ STATUS describeStreamCurl(UINT64 customData, PCHAR streamName, PServiceCallConte CleanUp: + if (startLocked) { + // Release the lock to let the awaiting handler thread to continue + pCallbacksProvider->clientCallbacks.unlockMutexFn(pCallbacksProvider->clientCallbacks.customData, pCurlRequest->startLock); + } + if (STATUS_FAILED(retStatus)) { if (IS_VALID_TID_VALUE(threadId)) { THREAD_CANCEL(threadId); } freeCurlRequest(&pCurlRequest); - } else if (startLocked) { - // Release the lock to let the awaiting handler thread to continue - pCallbacksProvider->clientCallbacks.unlockMutexFn(pCallbacksProvider->clientCallbacks.customData, pCurlRequest->startLock); } if (shutdownLocked) { @@ -1317,7 +1332,7 @@ PVOID describeStreamCurlHandler(PVOID arg) UINT32 i, strLen, resultLen; INT32 tokenCount; UINT64 retention; - BOOL jsonInStreamDescription = FALSE, requestTerminating = FALSE; + BOOL jsonInStreamDescription = FALSE, requestTerminating = FALSE, responseReceived = FALSE; StreamDescription streamDescription; STREAM_HANDLE streamHandle = INVALID_STREAM_HANDLE_VALUE; SERVICE_CALL_RESULT callResult = SERVICE_CALL_RESULT_NOT_SET; @@ -1350,8 +1365,7 @@ PVOID describeStreamCurlHandler(PVOID arg) CHK(pCurlResponse->callInfo.callResult != SERVICE_CALL_RESULT_NOT_SET, STATUS_INVALID_OPERATION); pResponseStr = pCurlResponse->callInfo.responseData; resultLen = pCurlResponse->callInfo.responseDataLen; - - DLOGD("[%s] DescribeStream API response: %.*s", streamDescription.streamName, resultLen, pResponseStr); + responseReceived = TRUE; // skip json parsing if call result not ok CHK(pCurlResponse->callInfo.callResult == SERVICE_CALL_RESULT_OK && resultLen != 0 && pResponseStr != NULL, retStatus); @@ -1430,6 +1444,10 @@ PVOID describeStreamCurlHandler(PVOID arg) CleanUp: + if (responseReceived) { + DLOGD("[%s] DescribeStream API response: %.*s", streamDescription.streamName, resultLen, pResponseStr); + } + // Preserve the values as we need to free the request before the event notification if (pCurlRequest->pCurlResponse != NULL) { callResult = pCurlRequest->pCurlResponse->callInfo.callResult; @@ -1534,15 +1552,18 @@ STATUS getStreamingEndpointCurl(UINT64 customData, PCHAR streamName, PCHAR apiNa CleanUp: + if (startLocked) { + // Release the lock to let the awaiting handler thread to continue. + // This needs to be done before freeCurlRequest because there we will free the startLock mutex + pCallbacksProvider->clientCallbacks.unlockMutexFn(pCallbacksProvider->clientCallbacks.customData, pCurlRequest->startLock); + } + if (STATUS_FAILED(retStatus)) { if (IS_VALID_TID_VALUE(threadId)) { THREAD_CANCEL(threadId); } freeCurlRequest(&pCurlRequest); - } else if (startLocked) { - // Release the lock to let the awaiting handler thread to continue - pCallbacksProvider->clientCallbacks.unlockMutexFn(pCallbacksProvider->clientCallbacks.customData, pCurlRequest->startLock); } if (shutdownLocked) { @@ -1863,15 +1884,17 @@ STATUS tagResourceCurl(UINT64 customData, PCHAR streamArn, UINT32 tagCount, PTag CleanUp: + if (startLocked) { + // Release the lock to let the awaiting handler thread to continue + pCallbacksProvider->clientCallbacks.unlockMutexFn(pCallbacksProvider->clientCallbacks.customData, pCurlRequest->startLock); + } + if (STATUS_FAILED(retStatus)) { if (IS_VALID_TID_VALUE(threadId)) { THREAD_CANCEL(threadId); } freeCurlRequest(&pCurlRequest); - } else if (startLocked) { - // Release the lock to let the awaiting handler thread to continue - pCallbacksProvider->clientCallbacks.unlockMutexFn(pCallbacksProvider->clientCallbacks.customData, pCurlRequest->startLock); } if (shutdownLocked) { diff --git a/src/source/DeviceInfoProvider.c b/src/source/DeviceInfoProvider.c index e9a54f590..8ebac6092 100644 --- a/src/source/DeviceInfoProvider.c +++ b/src/source/DeviceInfoProvider.c @@ -45,6 +45,8 @@ STATUS createDefaultDeviceInfo(PDeviceInfo* ppDeviceInfo) // use 0 for default values pDeviceInfo->clientInfo.stopStreamTimeout = 0; + pDeviceInfo->clientInfo.serviceCallConnectionTimeout = SERVICE_CALL_DEFAULT_CONNECTION_TIMEOUT; + pDeviceInfo->clientInfo.serviceCallCompletionTimeout = SERVICE_CALL_DEFAULT_TIMEOUT; pDeviceInfo->clientInfo.createClientTimeout = 0; pDeviceInfo->clientInfo.createStreamTimeout = 0; diff --git a/src/source/Response.c b/src/source/Response.c index 9b0f8397e..b96c05108 100644 --- a/src/source/Response.c +++ b/src/source/Response.c @@ -31,7 +31,7 @@ STATUS createCurlResponse(PCurlRequest pCurlRequest, PCurlResponse* ppCurlRespon // init putMedia related members pCurlResponse->endOfStream = FALSE; - pCurlResponse->paused = TRUE; + ATOMIC_STORE_BOOL(&pCurlResponse->paused, TRUE); pCurlResponse->debugDumpFile = FALSE; pCurlResponse->debugDumpFilePath[0] = '\0'; @@ -456,8 +456,8 @@ STATUS notifyDataAvailable(PCurlResponse pCurlResponse, UINT64 durationAvailable DLOGV("[%s] Note data received: duration(100ns): %" PRIu64 " bytes %" PRIu64 " for stream handle %" PRIu64, pCurlResponse->pCurlRequest->streamName, durationAvailable, sizeAvailable, pCurlResponse->pCurlRequest->uploadHandle); - if (pCurlResponse->paused && pCurlResponse->pCurl != NULL) { - pCurlResponse->paused = FALSE; + if (ATOMIC_LOAD_BOOL(&pCurlResponse->paused) && pCurlResponse->pCurl != NULL) { + ATOMIC_STORE_BOOL(&pCurlResponse->paused, FALSE); // frequent pause unpause causes curl segfault in offline scenario THREAD_SLEEP(10 * HUNDREDS_OF_NANOS_IN_A_MILLISECOND); // un-pause curl @@ -634,7 +634,7 @@ SIZE_T postReadCallback(PCHAR pBuffer, SIZE_T size, SIZE_T numItems, PVOID custo pCurlApiCallbacks = pCurlRequest->pCurlApiCallbacks; uploadHandle = pCurlResponse->pCurlRequest->uploadHandle; - if (pCurlResponse->paused) { + if (ATOMIC_LOAD_BOOL(&pCurlResponse->paused)) { bytesWritten = CURL_READFUNC_PAUSE; CHK(FALSE, retStatus); } @@ -721,7 +721,7 @@ SIZE_T postReadCallback(PCHAR pBuffer, SIZE_T size, SIZE_T numItems, PVOID custo } } } else if (bytesWritten == CURL_READFUNC_PAUSE) { - pCurlResponse->paused = TRUE; + ATOMIC_STORE_BOOL(&pCurlResponse->paused, TRUE); } // Since curl is about to terminate gracefully, set flag to prevent shutdown thread from timing it out. diff --git a/src/source/Response.h b/src/source/Response.h index 670b268e4..5f625f4a9 100644 --- a/src/source/Response.h +++ b/src/source/Response.h @@ -62,7 +62,7 @@ struct __CurlResponse { BOOL endOfStream; // Whether curl is paused - volatile BOOL paused; + volatile ATOMIC_BOOL paused; // Whether to dump streaming session into mkv file BOOL debugDumpFile; diff --git a/tst/ProducerCallbackProviderApiTest.cpp b/tst/ProducerCallbackProviderApiTest.cpp index 844f8af42..aeca444aa 100644 --- a/tst/ProducerCallbackProviderApiTest.cpp +++ b/tst/ProducerCallbackProviderApiTest.cpp @@ -1,5 +1,5 @@ - #include "ProducerTestFixture.h" +#include namespace com { namespace amazonaws { namespace kinesis { namespace video { @@ -58,6 +58,55 @@ namespace com { namespace amazonaws { namespace kinesis { namespace video { } + TEST_F(ProducerCallbackProviderApiTest, TestCorrectControlPlaneUriForSpecifiedRegion) + { + PClientCallbacks pClientCallbacks = NULL; + // Map region to control plane url + std::map regionToControlPlaneUrlMap = { + {"us-east-1", "https://kinesisvideo.us-east-1.amazonaws.com"}, + {"us-west-2", "https://kinesisvideo.us-west-2.amazonaws.com"}, + {"ap-northeast-1", "https://kinesisvideo.ap-northeast-1.amazonaws.com"}, + {"ap-southeast-2", "https://kinesisvideo.ap-southeast-2.amazonaws.com"}, + {"eu-central-1", "https://kinesisvideo.eu-central-1.amazonaws.com"}, + {"eu-west-1", "https://kinesisvideo.eu-west-1.amazonaws.com"}, + {"ap-northeast-2", "https://kinesisvideo.ap-northeast-2.amazonaws.com"}, + {"ap-south-1", "https://kinesisvideo.ap-south-1.amazonaws.com"}, + {"ap-southeast-1", "https://kinesisvideo.ap-southeast-1.amazonaws.com"}, + {"ca-central-1", "https://kinesisvideo.ca-central-1.amazonaws.com"}, + {"eu-north-1", "https://kinesisvideo.eu-north-1.amazonaws.com"}, + {"eu-west-2", "https://kinesisvideo.eu-west-2.amazonaws.com"}, + {"sa-east-1", "https://kinesisvideo.sa-east-1.amazonaws.com"}, + {"us-east-2", "https://kinesisvideo.us-east-2.amazonaws.com"}, + {"ap-east-1", "https://kinesisvideo.ap-east-1.amazonaws.com"}, + {"af-south-1", "https://kinesisvideo.af-south-1.amazonaws.com"}, + {"us-iso-east-1", "https://kinesisvideo-fips.us-iso-east-1.c2s.ic.gov"}, + {"us-iso-west-1", "https://kinesisvideo-fips.us-iso-west-1.c2s.ic.gov"}, + {"us-isob-east-1", "https://kinesisvideo-fips.us-isob-east-1.sc2s.sgov.gov"}, + {"us-gov-west-1", "https://kinesisvideo-fips.us-gov-west-1.amazonaws.com"}, + {"us-gov-east-1", "https://kinesisvideo-fips.us-gov-east-1.amazonaws.com"}, + {"cn-north-1", "https://kinesisvideo.cn-north-1.amazonaws.com.cn"}, + {"cn-northwest-1", "https://kinesisvideo.cn-northwest-1.amazonaws.com.cn"}, + }; + + for (auto it : regionToControlPlaneUrlMap) { + EXPECT_EQ(STATUS_SUCCESS, + createDefaultCallbacksProvider(TEST_DEFAULT_CHAIN_COUNT, TEST_ACCESS_KEY, TEST_SECRET_KEY, TEST_SESSION_TOKEN, + TEST_STREAMING_TOKEN_DURATION, (PCHAR) it.first.c_str(), TEST_CONTROL_PLANE_URI, mCaCertPath, NULL, + TEST_USER_AGENT, API_CALL_CACHE_TYPE_NONE, TEST_CACHING_ENDPOINT_PERIOD, TRUE, + &pClientCallbacks)); + + PCallbacksProvider pCallbacksProvider = (PCallbacksProvider) pClientCallbacks; + PCurlApiCallbacks pCurlApiCallbacks = (PCurlApiCallbacks) pCallbacksProvider->pApiCallbacks[0].customData; + + EXPECT_EQ(0, STRNCMP(pCurlApiCallbacks->controlPlaneUrl, (PCHAR) it.second.c_str(), MAX_URI_CHAR_LEN)); + + EXPECT_EQ(STATUS_SUCCESS, freeCallbacksProvider(&pClientCallbacks)); + + EXPECT_EQ(STATUS_NULL_ARG, freeCallbacksProvider(NULL)); + } + + } + } // namespace video } // namespace kinesis } // namespace amazonaws diff --git a/tst/ProducerClientBasicTest.cpp b/tst/ProducerClientBasicTest.cpp index 22a97a0e6..85f5f0681 100644 --- a/tst/ProducerClientBasicTest.cpp +++ b/tst/ProducerClientBasicTest.cpp @@ -10,8 +10,8 @@ class ProducerClientBasicTest : public ProducerClientTestBase { mStreamsCreated = CVAR_CREATE(); MEMSET(mClients, 0x00, SIZEOF(mClients)); MEMSET(mClientCallbacks, 0x00, SIZEOF(mClientCallbacks)); - mActiveStreamCount = 0; - mActiveClientCount = 0; + ATOMIC_STORE(&mActiveStreamCount, 0); + ATOMIC_STORE(&mActiveClientCount, 0); } VOID deinitialize() @@ -35,8 +35,8 @@ class ProducerClientBasicTest : public ProducerClientTestBase { CVAR mStreamsCreated; CLIENT_HANDLE mClients[TEST_STREAM_COUNT]; PClientCallbacks mClientCallbacks[TEST_STREAM_COUNT]; - volatile UINT32 mActiveStreamCount; - volatile UINT32 mActiveClientCount; + volatile SIZE_T mActiveStreamCount; + volatile SIZE_T mActiveClientCount; }; extern ProducerClientTestBase* gProducerClientTestBase; @@ -137,7 +137,8 @@ PVOID ProducerClientBasicTest::staticCreateProducerClientRoutine(PVOID arg) EXPECT_EQ(STATUS_SUCCESS, retStatus = createKinesisVideoStreamSync(pTest->mClients[index], &streamInfo, &pTest->mStreams[index])); - if (++pTest->mActiveStreamCount == TEST_STREAM_COUNT) { + ATOMIC_INCREMENT(&pTest->mActiveStreamCount); + if (ATOMIC_LOAD(&pTest->mActiveStreamCount) == TEST_STREAM_COUNT) { CVAR_SIGNAL(pTest->mStreamsCreated); } @@ -196,7 +197,8 @@ PVOID ProducerClientBasicTest::staticCreateProducerRoutine(PVOID arg) retStatus = createKinesisVideoStreamSync(pTest->mClientHandle, &streamInfo, &pTest->mStreams[index]); - if (++pTest->mActiveStreamCount == TEST_STREAM_COUNT) { + ATOMIC_INCREMENT(&pTest->mActiveStreamCount); + if (ATOMIC_LOAD(&pTest->mActiveStreamCount) == TEST_STREAM_COUNT) { CVAR_SIGNAL(pTest->mStreamsCreated); } @@ -223,10 +225,10 @@ PVOID ProducerClientBasicTest::staticProducerClientStartRoutine(PVOID arg) EXPECT_EQ(STATUS_SUCCESS, kinesisVideoStreamGetStreamInfo(streamHandle, &pStreamInfo)); // Set an indicator that the producer is not stopped - pTest->mProducerStopped = FALSE; + ATOMIC_STORE_BOOL(&pTest->mProducerStopped, FALSE); // Increment the active stream/producer count - pTest->mActiveClientCount++; + ATOMIC_INCREMENT(&pTest->mActiveClientCount); // Loop until cancelled frame.version = FRAME_CURRENT_VERSION; @@ -245,7 +247,7 @@ PVOID ProducerClientBasicTest::staticProducerClientStartRoutine(PVOID arg) EXPECT_EQ(STATUS_SUCCESS, kinesisVideoStreamFormatChanged(streamHandle, cpdSize, cpd, DEFAULT_VIDEO_TRACK_ID)); - while (!pTest->mStopProducer) { + while (!ATOMIC_LOAD_BOOL(&pTest->mStopProducer)) { // Produce frames timestamp = GETTIME(); @@ -319,8 +321,9 @@ PVOID ProducerClientBasicTest::staticProducerClientStartRoutine(PVOID arg) pTest->mStreams[streamIndex] = INVALID_STREAM_HANDLE_VALUE; // Indicate that the producer routine had stopped - if (--pTest->mActiveClientCount == 0) { - pTest->mProducerStopped = true; + ATOMIC_DECREMENT(&pTest->mActiveClientCount); + if (ATOMIC_LOAD(&pTest->mActiveClientCount) == 0) { + ATOMIC_STORE_BOOL(&pTest->mProducerStopped, TRUE); } return NULL; @@ -356,7 +359,7 @@ PVOID ProducerClientTestBase::basicProducerRoutine(STREAM_HANDLE streamHandle, S EXPECT_EQ(STATUS_SUCCESS, kinesisVideoStreamGetStreamInfo(streamHandle, &pStreamInfo)); // Set an indicator that the producer is not stopped - mProducerStopped = FALSE; + ATOMIC_STORE_BOOL(&mProducerStopped, FALSE); // Loop until cancelled frame.version = FRAME_CURRENT_VERSION; @@ -375,7 +378,7 @@ PVOID ProducerClientTestBase::basicProducerRoutine(STREAM_HANDLE streamHandle, S EXPECT_EQ(STATUS_SUCCESS, kinesisVideoStreamFormatChanged(streamHandle, cpdSize, cpd, DEFAULT_VIDEO_TRACK_ID)); - while (!mStopProducer) { + while (!ATOMIC_LOAD_BOOL(&mStopProducer)) { // Produce frames if (IS_OFFLINE_STREAMING_MODE(streamingType)) { timestamp += frame.duration; @@ -459,7 +462,7 @@ EXPECT_TRUE(kinesis_video_stream->putFrame(eofr)); EXPECT_EQ(STATUS_SUCCESS, stopKinesisVideoStreamSync(streamHandle)) << "Timed out awaiting for the stream stop notification"; // Indicate that the producer routine had stopped - mProducerStopped = true; + ATOMIC_STORE_BOOL(&mProducerStopped, TRUE); return NULL; } @@ -489,7 +492,7 @@ TEST_F(ProducerClientBasicTest, create_produce_stream) for (UINT32 iter = 0; iter < 10; iter++) { THREAD_SLEEP(10 * HUNDREDS_OF_NANOS_IN_A_SECOND); DLOGD("Stopping the streams"); - mStopProducer = TRUE; + ATOMIC_STORE_BOOL(&mStopProducer, TRUE); DLOGD("Waiting for the streams to finish and close..."); THREAD_SLEEP(10 * HUNDREDS_OF_NANOS_IN_A_SECOND); @@ -501,7 +504,7 @@ TEST_F(ProducerClientBasicTest, create_produce_stream) } DLOGD("Starting the streams again"); - mStopProducer = FALSE; + ATOMIC_STORE_BOOL(&mStopProducer, FALSE); // Create new streams for (UINT32 i = 0; i < TEST_STREAM_COUNT; i++) { @@ -521,7 +524,7 @@ TEST_F(ProducerClientBasicTest, create_produce_stream) THREAD_SLEEP(2*TEST_EXECUTION_DURATION); // Indicate the cancel for the threads - mStopProducer = TRUE; + ATOMIC_STORE_BOOL(&mStopProducer, TRUE); // Join the thread and wait to exit. // NOTE: This is not a right way of doing it as for the multiple stream scenario @@ -531,9 +534,9 @@ TEST_F(ProducerClientBasicTest, create_produce_stream) UINT32 index = 0; do { THREAD_SLEEP(100 * HUNDREDS_OF_NANOS_IN_A_MILLISECOND); - } while (index++ < 300 && !mProducerStopped); + } while (index++ < 300 && !ATOMIC_LOAD_BOOL(&mProducerStopped)); - EXPECT_TRUE(mProducerStopped) << "Producer thread failed to stop cleanly"; + EXPECT_TRUE(ATOMIC_LOAD_BOOL(&mProducerStopped)) << "Producer thread failed to stop cleanly"; // We will block for some time due to an incorrect implementation of the awaiting code // NOTE: The proper implementation should use synchronization primitives to await for the @@ -576,14 +579,14 @@ TEST_F(ProducerClientBasicTest, create_produce_stream_parallel) THREAD_SLEEP(2*TEST_EXECUTION_DURATION); // Indicate the cancel for the threads - mStopProducer = TRUE; + ATOMIC_STORE_BOOL(&mStopProducer, TRUE); UINT32 index = 0; do { THREAD_SLEEP(100 * HUNDREDS_OF_NANOS_IN_A_MILLISECOND); - } while (index++ < 300 && !mProducerStopped); + } while (index++ < 300 && !ATOMIC_LOAD_BOOL(&mProducerStopped)); - EXPECT_TRUE(mProducerStopped) << "Producer thread failed to stop cleanly"; + EXPECT_TRUE(ATOMIC_LOAD_BOOL(&mProducerStopped)) << "Producer thread failed to stop cleanly"; THREAD_SLEEP(10 * HUNDREDS_OF_NANOS_IN_A_MILLISECOND); @@ -622,14 +625,14 @@ TEST_F(ProducerClientBasicTest, create_produce_client_parallel) THREAD_SLEEP(2*TEST_EXECUTION_DURATION); // Indicate the cancel for the threads - mStopProducer = TRUE; + ATOMIC_STORE_BOOL(&mStopProducer, TRUE); UINT32 index = 0; do { THREAD_SLEEP(100 * HUNDREDS_OF_NANOS_IN_A_MILLISECOND); - } while (index++ < 300 && !mProducerStopped); + } while (index++ < 300 && !ATOMIC_LOAD_BOOL(&mProducerStopped)); - EXPECT_TRUE(mProducerStopped) << "Producer thread failed to stop cleanly"; + EXPECT_TRUE(ATOMIC_LOAD_BOOL(&mProducerStopped)) << "Producer thread failed to stop cleanly"; THREAD_SLEEP(10 * HUNDREDS_OF_NANOS_IN_A_MILLISECOND); @@ -662,7 +665,7 @@ TEST_F(ProducerClientBasicTest, cachingEndpointProvider_Returns_EndpointFromCach THREAD_SLEEP(TEST_STREAMING_TOKEN_DURATION * ITERATION_COUNT); // Indicate the cancel for the threads - mStopProducer = TRUE; + ATOMIC_STORE_BOOL(&mStopProducer, TRUE); // Join the thread and wait to exit. // NOTE: This is not a right way of doing it as for the multiple stream scenario @@ -672,9 +675,9 @@ TEST_F(ProducerClientBasicTest, cachingEndpointProvider_Returns_EndpointFromCach UINT32 index = 0; do { THREAD_SLEEP(100 * HUNDREDS_OF_NANOS_IN_A_MILLISECOND); - } while (index++ < 300 && !mProducerStopped); + } while (index++ < 300 && !ATOMIC_LOAD_BOOL(&mProducerStopped)); - EXPECT_TRUE(mProducerStopped) << "Producer thread failed to stop cleanly"; + EXPECT_TRUE(ATOMIC_LOAD_BOOL(&mProducerStopped)) << "Producer thread failed to stop cleanly"; // Expect the number of calls EXPECT_EQ(((ITERATION_COUNT + 1) * TEST_STREAM_COUNT), mPutStreamFnCount); diff --git a/tst/ProducerTestFixture.cpp b/tst/ProducerTestFixture.cpp index 5ef4cdea2..902ca1d65 100644 --- a/tst/ProducerTestFixture.cpp +++ b/tst/ProducerTestFixture.cpp @@ -181,9 +181,7 @@ ProducerClientTestBase::ProducerClientTestBase() : mAccessKeyIdSet(FALSE), mCaCertPath(NULL), mProducerThread(INVALID_TID_VALUE), - mProducerStopped(FALSE), mStartProducer(FALSE), - mStopProducer(FALSE), mAccessKey(NULL), mSecretKey(NULL), mSessionToken(NULL), @@ -233,11 +231,20 @@ ProducerClientTestBase::ProducerClientTestBase() : mDescribeFailCount(0), mDescribeRecoverCount(0) { + STATUS retStatus = STATUS_SUCCESS; auto logLevelStr = GETENV("AWS_KVS_LOG_LEVEL"); if (logLevelStr != NULL) { - assert(STRTOUI32(logLevelStr, NULL, 10, &this->loggerLogLevel) == STATUS_SUCCESS); + retStatus = STRTOUI32(logLevelStr, NULL, 10, &this->loggerLogLevel); + if (retStatus != STATUS_SUCCESS) { + // Throwing instead of asserting since this is being done in a constructor. ASSERT_EQ + // causes the function to exit immediately and constructor does not have a return type. + // The goal is to ensure if an env is set, it is set with a valid value and not empty + throw std::runtime_error("Failed to set log level from env"); + } SET_LOGGER_LOG_LEVEL(this->loggerLogLevel); } + ATOMIC_STORE_BOOL(&mStopProducer, FALSE); + ATOMIC_STORE_BOOL(&mProducerStopped, FALSE); // Store the function pointers gTotalProducerClientMemoryUsage = 0; @@ -332,7 +339,7 @@ ProducerClientTestBase::ProducerClientTestBase() : mFps = TEST_FPS; mKeyFrameInterval = TEST_FPS; mFrameSize = TEST_FRAME_SIZE; - mFrameBuffer = (PBYTE) MEMALLOC(mFrameSize); + mFrameBuffer = (PBYTE) MEMCALLOC(mFrameSize, SIZEOF(BYTE)); mFrame.duration = HUNDREDS_OF_NANOS_IN_A_SECOND / mFps; mFrame.frameData = mFrameBuffer; @@ -535,7 +542,7 @@ STATUS ProducerClientTestBase::createTestStream(UINT32 index, STREAMING_TYPE str VOID ProducerClientTestBase::freeStreams(BOOL sync) { - mProducerStopped = TRUE; + ATOMIC_STORE_BOOL(&mProducerStopped, TRUE); for (UINT32 i = 0; i < TEST_STREAM_COUNT; i++) { DLOGD("Freeing stream index %u with handle value %" PRIu64 " %s", i, mStreams[i], sync ? "synchronously" : "asynchronously"); @@ -561,6 +568,7 @@ STATUS ProducerClientTestBase::curlEasyPerformHookFunc(PCurlResponse pCurlRespon // Get the test object ProducerClientTestBase* pTest = (ProducerClientTestBase*) pCurlResponse->pCurlRequest->pCurlApiCallbacks->hookCustomData; + MUTEX_LOCK(pTest->mTestCallbackLock); DLOGV("Curl perform hook for %s", pCurlResponse->pCurlRequest->requestInfo.url); @@ -623,6 +631,7 @@ STATUS ProducerClientTestBase::curlEasyPerformHookFunc(PCurlResponse pCurlRespon pTest->mPutMediaCallResult = SERVICE_CALL_RESULT_OK; } } + MUTEX_UNLOCK(pTest->mTestCallbackLock); return retStatus; } @@ -640,6 +649,7 @@ STATUS ProducerClientTestBase::curlWriteCallbackHookFunc(PCurlResponse pCurlResp // Get the test object ProducerClientTestBase* pTest = (ProducerClientTestBase*) pCurlResponse->pCurlRequest->pCurlApiCallbacks->hookCustomData; + MUTEX_LOCK(pTest->mTestCallbackLock); pTest->mWriteCallbackFnCount++; @@ -647,6 +657,7 @@ STATUS ProducerClientTestBase::curlWriteCallbackHookFunc(PCurlResponse pCurlResp *ppRetBuffer = pTest->mWriteBuffer; *pRetDataSize = pTest->mWriteDataSize; } + MUTEX_UNLOCK(pTest->mTestCallbackLock); return pTest->mWriteStatus; } @@ -671,6 +682,7 @@ STATUS ProducerClientTestBase::curlReadCallbackHookFunc(PCurlResponse pCurlRespo // Get the test object ProducerClientTestBase* pTest = (ProducerClientTestBase*) pCurlResponse->pCurlRequest->pCurlApiCallbacks->hookCustomData; + MUTEX_LOCK(pTest->mTestCallbackLock); pTest->mReadCallbackFnCount++; @@ -679,16 +691,17 @@ STATUS ProducerClientTestBase::curlReadCallbackHookFunc(PCurlResponse pCurlRespo } else { pTest->mReadStatus = status; } + MUTEX_UNLOCK(pTest->mTestCallbackLock); return pTest->mReadStatus; } STATUS ProducerClientTestBase::testFreeApiCallbackFunc(PUINT64 customData) { - ProducerClientTestBase* pTestBase = (ProducerClientTestBase*) *customData; - - pTestBase->mFreeApiCallbacksFnCount++; - + ProducerClientTestBase* pTest = (ProducerClientTestBase*) *customData; + MUTEX_LOCK(pTest->mTestCallbackLock); + pTest->mFreeApiCallbacksFnCount++; + MUTEX_UNLOCK(pTest->mTestCallbackLock); return STATUS_SUCCESS; } diff --git a/tst/ProducerTestFixture.h b/tst/ProducerTestFixture.h index 2754a7e29..ce6910d22 100644 --- a/tst/ProducerTestFixture.h +++ b/tst/ProducerTestFixture.h @@ -272,8 +272,8 @@ class ProducerClientTestBase : public ::testing::Test { STREAM_HANDLE mStreams[TEST_MAX_STREAM_COUNT]; volatile bool mStartProducer; - volatile bool mStopProducer; - volatile bool mProducerStopped; + volatile ATOMIC_BOOL mStopProducer; + volatile ATOMIC_BOOL mProducerStopped; // Test callbacks ApiCallbacks mApiCallbacks; From fe16da21d42bfcdc73510cf33ebc2b16c5f3d668 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 11:50:54 -0700 Subject: [PATCH 22/94] Undo Windows fix that wasn't it --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c0523a1b..3bcb03e3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,6 +155,7 @@ if(BUILD_KVS_PIC) file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") include_directories("${PIC_HEADERS}") else() + # TODO: test this already-installed case # Finding PIC on system using the libcproducer.pc.cmake file. pkg_check_modules(KVSPIC libkvspicUtils) if(KVSPIC_FOUND) @@ -173,11 +174,12 @@ endif() ############# Finding 3rd-party dependencies ############ +# TODO: shouldn't this be "required" ? find_package(Threads) # TODO: Should maybe change "BUILD_CRYPTO" to be similar to the other ones: "BUILD_COMMON_CRYPTO" # (and so BUILD_CRYPTO == !BUILD_COMMON_CRYPTO) -if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO OR WIN32) +if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) if(USE_OPENSSL) find_package(OpenSSL REQUIRED) set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) From e6fa97d103098e5edca0f0a1726bb6575683074c Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 13:51:28 -0700 Subject: [PATCH 23/94] Bring in LWS building, not tested --- CMakeLists.txt | 86 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 64 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bcb03e3b..4e17668e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,18 +154,31 @@ if(BUILD_KVS_PIC) add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") include_directories("${PIC_HEADERS}") + else() # TODO: test this already-installed case # Finding PIC on system using the libcproducer.pc.cmake file. - pkg_check_modules(KVSPIC libkvspicUtils) - if(KVSPIC_FOUND) - message("Found system KVS PIC located: ${KVSPIC_PREFIX}") - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) - link_directories(${KVSPIC_LIBRARY_DIRS}) + pkg_check_modules(KVS_PIC kvspic) + if(KVS_PIC_FOUND) + message("Found system KVS PIC located: ${KVS_PIC_PREFIX}") + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) + link_directories(${KVS_PIC_LIBRARY_DIRS}) else() - message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVSPIC_INCLUDE_DIRS} \ + message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVS_PIC_INCLUDE_DIRS} \ Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") endif() + + # Note: PIC Utils are built seperately as CommonLWS only uses these files. + pkg_check_modules(KVS_PIC_UTILS libkvspicUtils) + if(KVS_PIC_UTILS_FOUND) + message("Found system KVS PIC Utils located: ${KVS_PIC_UTILS_PREFIX}") + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) + link_directories(${KVS_PIC_UTILS_LIBRARY_DIRS}) + else() + message(FATAL_ERROR "Could not find system KVS PIC Utils. PkgConfig searched in: ${KVS_PIC_UTILS_INCLUDE_DIRS} \ + Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") + endif() + endif() ############# Done checking system for kvspic ############# @@ -194,10 +207,10 @@ endif() # TODO: Need to figure out the use case here. # If we are building deps, should we check for system libraries at all? -# - Is there ever a case that buildDeps=TRUE AND buildCommon<>=TRUE? -# - And then is there ever a case buildDeps=FALSE AND buildCommon<>=FALSE? +# - Is there ever a case that buildDeps==TRUE AND buildCommon<>==FALSE? +# - And then is there ever a case buildDeps==FALSE AND buildCommon<>==TRUE? # - Which takes precedence? -# I would think buildCommon is a way of overriding the in-house building and avoiding +# I would think buildCommon<> is a way of overriding the in-house building and avoiding # fetching the repo in this project. This way you can keep buildDeps=TRUE and then # specify which ones you actually don't want built with the project by setting buildCommon to true. # However, currently I have the logic setup reverse from the above: we only use common/system build @@ -216,16 +229,16 @@ if((NOT BUILD_DEPENDENCIES OR WIN32) AND BUILD_COMMON_CURL) link_directories(${CURL_LIBRARY_DIRS}) endif() -# if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) -# if (WIN32) -# find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) -# else() -# pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) -# endif() +if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) + if (WIN32) + find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) + else() + pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) + endif() -# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) -# link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) -# endif() + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) + link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) +endif() ############# Done finding 3rd-party dependencies ############ @@ -315,6 +328,7 @@ endif() # use openssl by default set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) + if(WIN32) set(PRODUCER_CRYPTO_LIBRARY OpenSSL::Crypto @@ -328,12 +342,39 @@ if (USE_MBEDTLS) set(PRODUCER_CRYPTO_LIBRARY MbedTLS MbedCrypto) endif() -install( - DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include - DESTINATION .) +# TODO: Confirm this is ok to remove +# install( +# DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include +# DESTINATION .) + +if(BUILD_COMMON_LWS) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonLws.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc" @ONLY) + + if (WIN32) + add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + else() + add_library(kvsCommonLws ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + endif() + target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS ${CPRODUCER_COMMON_TLS_OPTION}) + if(NOT BUILD_STATIC) + set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + + target_link_libraries(kvsCommonLws ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) + + install( + TARGETS kvsCommonLws + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +endif() -# TODO: I wonder, why would producer ever need lws? if(BUILD_COMMON_CURL) if(WIN32) set(CURL_LIBRARIES CURL::libcurl) @@ -392,6 +433,7 @@ if(BUILD_COMMON_CURL) set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) endif() + # TODO: what does this do? target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) # TODO: I'd like to know why there is no openssl library and we instead have to use From 888106183527c16f0c62ef9b14a43aa0b2a72287 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 13:51:59 -0700 Subject: [PATCH 24/94] Allow for turning off of sample builds --- CMakeLists.txt | 50 ++++++++++++++------------------------------------ 1 file changed, 14 insertions(+), 36 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e17668e4..528a10204 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -217,7 +217,7 @@ endif() # if buildDeps is off AND buildCommon<> is TRUE for the package. - + if((NOT BUILD_DEPENDENCIES OR WIN32) AND BUILD_COMMON_CURL) if (WIN32) find_package(CURL REQUIRED) @@ -245,7 +245,8 @@ endif() ############# TODO: Doing.... ############ -# TODO: Note, these variables are neber used, in C, CPP, WebRTC SDKs. Not in cmake and not in source files. +# TODO: Note, these variables are never used, in C, CPP, WebRTC SDKs. Not in cmake and not in source files. +# Confirm whether we need these. if(CMAKE_SIZEOF_VOID_P STREQUAL 4) message(STATUS "Bitness 32 bits") set(KINESIS_VIDEO_BUILD_BITNESS "x86") @@ -292,7 +293,6 @@ if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") endif() endif() -# TODO: What and why is this MSVC thing? if(MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) endif() @@ -396,34 +396,10 @@ if(BUILD_COMMON_CURL) endif() endif() - # if (WIN32) - # add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - # else() - # add_library(kvsCommonCurl ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - # endif() - # target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) - # if(NOT BUILD_STATIC) - # set_target_properties(kvsCommonCurl PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - # endif() - # target_link_libraries(kvsCommonCurl - # kvspicUtils - # ${CURL_LIBRARIES} - # ${PRODUCER_CRYPTO_LIBRARY}) - - # install( - # TARGETS kvsCommonCurl - # ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - # LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - # RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - # install( - # FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc - # DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) - if (WIN32) add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) else() @@ -435,7 +411,7 @@ if(BUILD_COMMON_CURL) # TODO: what does this do? target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) - + # TODO: I'd like to know why there is no openssl library and we instead have to use # ssl and crypto (openssl's dependencies). message("CURL_LIBRARIES: ${CURL_LIBRARIES}") @@ -455,17 +431,19 @@ if(BUILD_COMMON_CURL) FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c) - target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer) + if(BUILD_SAMPLES) + add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c) + target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer) - add_executable(kvsVideoOnlyOfflineStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyOfflineStreamingSample.c) - target_link_libraries(kvsVideoOnlyOfflineStreamingSample cproducer) + add_executable(kvsVideoOnlyOfflineStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyOfflineStreamingSample.c) + target_link_libraries(kvsVideoOnlyOfflineStreamingSample cproducer) - add_executable(kvsAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioVideoStreamingSample.c) - target_link_libraries(kvsAudioVideoStreamingSample cproducer) + add_executable(kvsAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioVideoStreamingSample.c) + target_link_libraries(kvsAudioVideoStreamingSample cproducer) - add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c) - target_link_libraries(kvsAudioOnlyStreamingSample cproducer) + add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c) + target_link_libraries(kvsAudioOnlyStreamingSample cproducer) + endif() if (BUILD_TEST) add_subdirectory(tst) From 2fb90e0ff4475df2e1d3d9d3270e6ba5bf637638 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 14:07:26 -0700 Subject: [PATCH 25/94] Build local curl for windows --- .github/build_windows.bat | 2 +- CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/build_windows.bat b/.github/build_windows.bat index d855efb8e..5f8fb8413 100644 --- a/.github/build_windows.bat +++ b/.github/build_windows.bat @@ -1,4 +1,4 @@ -REM NOTE: May need to replace "Enterprise" with "Community" int eh below command +REM NOTE: May need to replace "Enterprise" with "Community" int the below command call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" mkdir build cd build diff --git a/CMakeLists.txt b/CMakeLists.txt index 528a10204..aea85bafa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -218,7 +218,7 @@ endif() -if((NOT BUILD_DEPENDENCIES OR WIN32) AND BUILD_COMMON_CURL) +if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) if (WIN32) find_package(CURL REQUIRED) else() From 275c5780d2b0588f297c7c56c95a3afe3fb83b37 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 14:09:02 -0700 Subject: [PATCH 26/94] Change openssl libs names --- CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aea85bafa..7f1f195c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -218,7 +218,7 @@ endif() -if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) +if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) if (WIN32) find_package(CURL REQUIRED) else() @@ -330,9 +330,10 @@ endif() set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) if(WIN32) - set(PRODUCER_CRYPTO_LIBRARY - OpenSSL::Crypto - OpenSSL::SSL) + # set(PRODUCER_CRYPTO_LIBRARY + # OpenSSL::Crypto + # OpenSSL::SSL) + set(PRODUCER_CRYPTO_LIBRARY ssl crypto) else() set(PRODUCER_CRYPTO_LIBRARY ssl crypto) endif() From c3be70d9d37c257dfe6cc66b3bb610cb125e9257 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 14:25:10 -0700 Subject: [PATCH 27/94] Same for curl --- CMakeLists.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f1f195c1..4a844265c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -378,12 +378,12 @@ endif() if(BUILD_COMMON_CURL) if(WIN32) - set(CURL_LIBRARIES CURL::libcurl) + #set(CURL_LIBRARIES CURL::libcurl) + set(CURL_LIBRARIES curl) else() set(CURL_LIBRARIES curl) endif() - # producer only uses curl right now configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) @@ -410,7 +410,6 @@ if(BUILD_COMMON_CURL) set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) endif() - # TODO: what does this do? target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) # TODO: I'd like to know why there is no openssl library and we instead have to use From ff9f4ec84f680887e6386f7c920adce47647e541 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 15:08:46 -0700 Subject: [PATCH 28/94] Remove unused variables --- CMake/Dependencies/libwebsockets-CMakeLists.txt | 1 - CMakeLists.txt | 14 ++++++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/CMake/Dependencies/libwebsockets-CMakeLists.txt b/CMake/Dependencies/libwebsockets-CMakeLists.txt index 18a2398f6..308a3172e 100644 --- a/CMake/Dependencies/libwebsockets-CMakeLists.txt +++ b/CMake/Dependencies/libwebsockets-CMakeLists.txt @@ -21,7 +21,6 @@ endif() set(CMAKE_ARGS # enable for debug output -DCMAKE_BUILD_TYPE=DEBUG -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${OPEN_SRC_INSTALL_PREFIX} -DLWS_WITH_HTTP2=1 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a844265c..cb87c6fd3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,21 +103,19 @@ if(BUILD_DEPENDENCIES) endif() endif() - if (BUILD_COMMON_LWS) + if (BUILD_COMMON_CURL) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} - -DUSE_OPENSSL=${USE_OPENSSL} -DUSE_MBEDTLS=${USE_MBEDTLS}) - build_dependency(websockets ${BUILD_ARGS}) + build_dependency(curl ${BUILD_ARGS}) endif() - if (BUILD_COMMON_CURL) + if (BUILD_COMMON_LWS) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DUSE_OPENSSL=${USE_OPENSSL} + -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} -DUSE_MBEDTLS=${USE_MBEDTLS}) - build_dependency(curl ${BUILD_ARGS}) + build_dependency(websockets ${BUILD_ARGS}) endif() if(BUILD_TEST) @@ -316,7 +314,7 @@ include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) # TODO: Probably good to remove the CMAKE_CURRENT_SOURCE_DIR one -link_directories(${CMAKE_SOURCE_DIR}/open-source/lib) +link_directories(${OPEN_SRC_INSTALL_PREFIX}/lib) if(ALIGNED_MEMORY_MODEL) add_definitions(-DALIGNED_MEMORY_MODEL) From 27a2610be33ea06451e881594092f3206bf0d527 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 15:39:18 -0700 Subject: [PATCH 29/94] Print CMAKE_BUILD_TYPE --- CMakeLists.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cb87c6fd3..f3317736a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,17 +53,20 @@ add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") # Set where to build this project. if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) else() - set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") + set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") endif() # Default to release build if unspecified. if(NOT CMAKE_BUILD_TYPE) - message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) + message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) +else() + message(STATUS "CMAKE_BUILD_TYPE is set to: ${CMAKE_BUILD_TYPE}") endif() + # Fetch and build 3rd-party dependencies if specified. if(BUILD_DEPENDENCIES) message(STATUS "Begin building dependencies.") From 3a71f9f218c5de703eb14cf23457f367fadd1bcd Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 16:11:17 -0700 Subject: [PATCH 30/94] Add open-source/bin to link_directories --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3317736a..1a240681d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,6 +58,7 @@ else() set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") endif() +# NOTE: The windows CI build has CMAKE_BUILD_TYPE set to debug, probably due to MSVC environment, TODO: look into this # Default to release build if unspecified. if(NOT CMAKE_BUILD_TYPE) message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") @@ -316,8 +317,8 @@ set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/in include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) -# TODO: Probably good to remove the CMAKE_CURRENT_SOURCE_DIR one -link_directories(${OPEN_SRC_INSTALL_PREFIX}/lib) +link_directories(${OPEN_SRC_INSTALL_PREFIX}/lib) # Unix intsalls libraries into /lib directory +link_directories(${OPEN_SRC_INSTALL_PREFIX}/bin) # Windows installs libraries into /bin directory if(ALIGNED_MEMORY_MODEL) add_definitions(-DALIGNED_MEMORY_MODEL) From 54d116dcfd9de25bd1e9e747d830e6b49ce600dc Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:00:30 -0700 Subject: [PATCH 31/94] Set whole build to static for Windows --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a240681d..9efb9f4f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,12 +38,17 @@ option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) +if (WIN32) { + set(BUILD_STATIC TRUE) +} + if (BUILD_STATIC) set(TYPE_OF_LIB STATIC) else() set(TYPE_OF_LIB SHARED) endif() + if(CONSTRAINED_DEVICE) add_definitions(-DCONSTRAINED_DEVICE) endif() From 0e19b5e8eaa595c7c5e7c75316bce54861a63648 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:03:40 -0700 Subject: [PATCH 32/94] Fix syntax --- CMakeLists.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9efb9f4f7..4e749ef99 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,19 +38,18 @@ option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) -if (WIN32) { +if (WIN32) set(BUILD_STATIC TRUE) -} +endif() if (BUILD_STATIC) - set(TYPE_OF_LIB STATIC) + set(TYPE_OF_LIB STATIC) else() - set(TYPE_OF_LIB SHARED) + set(TYPE_OF_LIB SHARED) endif() - if(CONSTRAINED_DEVICE) - add_definitions(-DCONSTRAINED_DEVICE) + add_definitions(-DCONSTRAINED_DEVICE) endif() set(CMAKE_MACOSX_RPATH TRUE) From dd65e5365584c6e1e58bb8521bf58a44e6a598a1 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 18:56:51 -0700 Subject: [PATCH 33/94] Shorten path for windows CI build --- .github/workflows/ci.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 22a8bb264..17263956e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -391,13 +391,17 @@ jobs: steps: - name: Clone repository uses: actions/checkout@v3 + - name: Move cloned repo # to shorten path length for Windows OS + run: | + git config --system core.longpaths true + mkdir C:\amazon-kinesis-video-streams-producer-c + Move-Item -Path "D:\a\amazon-kinesis-video-streams-producer-c\amazon-kinesis-video-streams-producer-c\*" -Destination "C:\amazon-kinesis-video-streams-producer-c" - name: Install dependencies run: | choco install nasm strawberryperl - name: Build repository run: | - $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;D:\a\amazon-kinesis-video-streams-producer-c\amazon-kinesis-video-streams-producer-c\open-source\lib;D:\a\amazon-kinesis-video-streams-producer-c\amazon-kinesis-video-streams-producer-c\open-source\bin' - git config --system core.longpaths true + $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' .github/build_windows.bat - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1-node16 @@ -408,8 +412,8 @@ jobs: role-duration-seconds: 10800 - name: Run tests run: | - $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;D:\a\amazon-kinesis-video-streams-producer-c\amazon-kinesis-video-streams-producer-c\open-source\lib;D:\a\amazon-kinesis-video-streams-producer-c\amazon-kinesis-video-streams-producer-c\open-source\bin' - & "D:\a\amazon-kinesis-video-streams-producer-c\amazon-kinesis-video-streams-producer-c\build\tst\producer_test.exe" --gtest_filter="-ProducerFunctionalityTest.pressure_on_buffer_duration_fail_new_connection_at_token_rotation" + $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' + & "C:\amazon-kinesis-video-streams-producer-c\build\tst\producer_test.exe" --gtest_filter="-ProducerFunctionalityTest.pressure_on_buffer_duration_fail_new_connection_at_token_rotation" arm64-cross-compilation: runs-on: ubuntu-20.04 From 0247b510fbd87bd630424cadddadacfb8b50674d Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 19:02:15 -0700 Subject: [PATCH 34/94] cd into new path --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17263956e..4ac7c11c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -402,6 +402,7 @@ jobs: - name: Build repository run: | $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' + cd C:\amazon-kinesis-video-streams-producer-c .github/build_windows.bat - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1-node16 From 78e29705f25396ca3a34be53c6fb3ee852eeaee7 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 14 Mar 2024 19:26:01 -0700 Subject: [PATCH 35/94] Trying with "curl-d" --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e749ef99..c4cb8ee6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -385,7 +385,7 @@ endif() if(BUILD_COMMON_CURL) if(WIN32) #set(CURL_LIBRARIES CURL::libcurl) - set(CURL_LIBRARIES curl) + set(CURL_LIBRARIES curl-d) else() set(CURL_LIBRARIES curl) endif() From 93302776e66fe5d8932a6e699a5fb2b3a062ab28 Mon Sep 17 00:00:00 2001 From: stefankiesz Date: Fri, 15 Mar 2024 18:19:40 +0000 Subject: [PATCH 36/94] more --- CMakeLists.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c4cb8ee6b..dc59c8912 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,7 @@ option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) if (WIN32) set(BUILD_STATIC TRUE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) endif() if (BUILD_STATIC) @@ -336,17 +337,17 @@ endif() set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) if(WIN32) - # set(PRODUCER_CRYPTO_LIBRARY - # OpenSSL::Crypto - # OpenSSL::SSL) - set(PRODUCER_CRYPTO_LIBRARY ssl crypto) + # set(PRODUCER_CRYPTO_LIBRARIES + # OpenSSL::Crypto + # OpenSSL::SSL) + set(PRODUCER_CRYPTO_LIBRARIES crypto ssl) else() - set(PRODUCER_CRYPTO_LIBRARY ssl crypto) + set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) endif() if (USE_MBEDTLS) set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) - set(PRODUCER_CRYPTO_LIBRARY MbedTLS MbedCrypto) + set(PRODUCER_CRYPTO_LIBRARIES MbedTLS MbedCrypto) endif() # TODO: Confirm this is ok to remove @@ -384,8 +385,7 @@ endif() if(BUILD_COMMON_CURL) if(WIN32) - #set(CURL_LIBRARIES CURL::libcurl) - set(CURL_LIBRARIES curl-d) + set(CURL_LIBRARIES libcurl) else() set(CURL_LIBRARIES curl) endif() @@ -421,11 +421,11 @@ if(BUILD_COMMON_CURL) # TODO: I'd like to know why there is no openssl library and we instead have to use # ssl and crypto (openssl's dependencies). message("CURL_LIBRARIES: ${CURL_LIBRARIES}") - message("PRODUCER_CRYPTO_LIBRARY: ${PRODUCER_CRYPTO_LIBRARY}") + message("PRODUCER_CRYPTO_LIBRARIES: ${PRODUCER_CRYPTO_LIBRARIES}") target_link_libraries(cproducer PUBLIC kvspic - PRIVATE ${CURL_LIBRARIES} ${PRODUCER_CRYPTO_LIBRARY}) + PRIVATE ${PRODUCER_CRYPTO_LIBRARIES} ${CURL_LIBRARIES}) message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") install( From 98cf9506a87afaec15a8ba81b90ae29f9cee85da Mon Sep 17 00:00:00 2001 From: stefankiesz Date: Fri, 15 Mar 2024 18:40:51 +0000 Subject: [PATCH 37/94] more --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dc59c8912..712c0801a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -340,7 +340,7 @@ if(WIN32) # set(PRODUCER_CRYPTO_LIBRARIES # OpenSSL::Crypto # OpenSSL::SSL) - set(PRODUCER_CRYPTO_LIBRARIES crypto ssl) + set(PRODUCER_CRYPTO_LIBRARIES libcrypto libssl) else() set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) endif() From fa02b3fc039403516268f119edfc409d7ecd0ed2 Mon Sep 17 00:00:00 2001 From: stefankiesz Date: Fri, 15 Mar 2024 22:06:26 +0000 Subject: [PATCH 38/94] Print link dirs --- CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 712c0801a..f2af16069 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -325,6 +325,14 @@ include_directories(${OPEN_SRC_INCLUDE_DIRS}) link_directories(${OPEN_SRC_INSTALL_PREFIX}/lib) # Unix intsalls libraries into /lib directory link_directories(${OPEN_SRC_INSTALL_PREFIX}/bin) # Windows installs libraries into /bin directory +# Get the list of link directories +get_property(link_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY LINK_DIRECTORIES) + +# Print each link directory +foreach(dir IN LISTS link_dirs) + message("Link directory: ${dir}") +endforeach() + if(ALIGNED_MEMORY_MODEL) add_definitions(-DALIGNED_MEMORY_MODEL) endif() From a0946bb1836ea9531974b2324946ec42faa35f9b Mon Sep 17 00:00:00 2001 From: stefankiesz Date: Sat, 16 Mar 2024 10:51:20 +0000 Subject: [PATCH 39/94] Brute force linking working --- CMakeLists.txt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f2af16069..bb94381e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,10 +38,6 @@ option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) -if (WIN32) - set(BUILD_STATIC TRUE) - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) -endif() if (BUILD_STATIC) set(TYPE_OF_LIB STATIC) @@ -431,9 +427,15 @@ if(BUILD_COMMON_CURL) message("CURL_LIBRARIES: ${CURL_LIBRARIES}") message("PRODUCER_CRYPTO_LIBRARIES: ${PRODUCER_CRYPTO_LIBRARIES}") - target_link_libraries(cproducer - PUBLIC kvspic - PRIVATE ${PRODUCER_CRYPTO_LIBRARIES} ${CURL_LIBRARIES}) + target_link_libraries(cproducer + kvspic + C:/Users/Administrator/Desktop/Producer_C/amazon-kinesis-video-streams-producer-c/open-source/lib/libssl.lib + C:/Users/Administrator/Desktop/Producer_C/amazon-kinesis-video-streams-producer-c/open-source/lib/libcrypto.lib + C:/Users/Administrator/Desktop/Producer_C/amazon-kinesis-video-streams-producer-c/open-source/lib/libcurl-d_imp.lib) + + # target_link_libraries(cproducer + # PUBLIC kvspic + # PRIVATE ${PRODUCER_CRYPTO_LIBRARIES} ${CURL_LIBRARIES}) message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") install( From 2fe14716f08e95bf29114efff6e3d4e4de13d5f5 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 16 Mar 2024 15:01:13 -0700 Subject: [PATCH 40/94] Separate into conditional --- CMakeLists.txt | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bb94381e6..9a3578ce8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -427,15 +427,19 @@ if(BUILD_COMMON_CURL) message("CURL_LIBRARIES: ${CURL_LIBRARIES}") message("PRODUCER_CRYPTO_LIBRARIES: ${PRODUCER_CRYPTO_LIBRARIES}") - target_link_libraries(cproducer - kvspic - C:/Users/Administrator/Desktop/Producer_C/amazon-kinesis-video-streams-producer-c/open-source/lib/libssl.lib - C:/Users/Administrator/Desktop/Producer_C/amazon-kinesis-video-streams-producer-c/open-source/lib/libcrypto.lib - C:/Users/Administrator/Desktop/Producer_C/amazon-kinesis-video-streams-producer-c/open-source/lib/libcurl-d_imp.lib) - - # target_link_libraries(cproducer - # PUBLIC kvspic - # PRIVATE ${PRODUCER_CRYPTO_LIBRARIES} ${CURL_LIBRARIES}) + if(WIN32) + target_link_libraries(cproducer + kvspic + ${OPEN_SRC_INSTALL_PREFIX}/lib/libssl.lib + ${OPEN_SRC_INSTALL_PREFIX}/lib/libcrypto.lib + ${OPEN_SRC_INSTALL_PREFIX}/lib/libcurl-d_imp.lib) + else() + target_link_libraries(cproducer + PUBLIC kvspic + PRIVATE ${PRODUCER_CRYPTO_LIBRARIES} ${CURL_LIBRARIES}) + endif() + + message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") install( From 709e3baa38a0e4e27b1b575164adb5dcae826298 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 16 Mar 2024 19:42:30 -0700 Subject: [PATCH 41/94] Switch order of linked libs to fix static build --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a3578ce8..0ab0112a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -436,7 +436,7 @@ if(BUILD_COMMON_CURL) else() target_link_libraries(cproducer PUBLIC kvspic - PRIVATE ${PRODUCER_CRYPTO_LIBRARIES} ${CURL_LIBRARIES}) + PRIVATE ${CURL_LIBRARIES} ${PRODUCER_CRYPTO_LIBRARIES}) endif() From 6bc18f37312898a69bc43f5a071212fd77e2982e Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 12:05:56 -0700 Subject: [PATCH 42/94] Only build with crypto if building common curl --- CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ab0112a8..bfd829f5a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ option(BUILD_DEPENDENCIES "Whether or not to build depending libraries from sour option(USE_OPENSSL "Use openssl as crypto library" ON) option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common library" OFF) -option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) # TODO: remove this and any other un-needed flags +option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) option(BUILD_CRYPTO "Whether or not to build OpenSSL or MbedTLS, if not, will use system-installed version" ON) option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) @@ -115,6 +115,7 @@ if(BUILD_DEPENDENCIES) build_dependency(curl ${BUILD_ARGS}) endif() + # NOTE: LWS does not get built from source here in our WebRTC CI tests since we set BUILD_DEPENDENCIES=FALSE if (BUILD_COMMON_LWS) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} @@ -137,11 +138,10 @@ message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. ############# Checking system for kvspic ############# -set(CMAKE_FIND_DEBUG_MODE ON) #TODO: Remove this. # NOTE: this is possibly a breaking change, if not specified, system PIC will not be used. # Prev behavior: look for system PIC if not found, build PIC. -# Now: is BUILD_KVS_PIC ? build PIC, else find syste PIC - if system PIC not found, fail build +# Now: is BUILD_KVS_PIC ? build PIC, else find system PIC - if system PIC not found, fail build # TODO: Leave a note in the PIC file libkvspic.pc.cmake that the below comments/messages must be updated # if we change "prefix=" from CMAKE_INSTALL_PREFIX. (CMAKE_INSTALL_PREFIX = usr/local). if(BUILD_KVS_PIC) @@ -195,7 +195,7 @@ find_package(Threads) # TODO: Should maybe change "BUILD_CRYPTO" to be similar to the other ones: "BUILD_COMMON_CRYPTO" # (and so BUILD_CRYPTO == !BUILD_COMMON_CRYPTO) -if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) +if((NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) AND BUILD_COMMON_CURL) if(USE_OPENSSL) find_package(OpenSSL REQUIRED) set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) @@ -427,6 +427,7 @@ if(BUILD_COMMON_CURL) message("CURL_LIBRARIES: ${CURL_LIBRARIES}") message("PRODUCER_CRYPTO_LIBRARIES: ${PRODUCER_CRYPTO_LIBRARIES}") + # Linker is not able to find the .lib files on Windows even when they are present and the path is searched. if(WIN32) target_link_libraries(cproducer kvspic From e7fbe198935b360a0681e296783ae19746515451 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 12:09:29 -0700 Subject: [PATCH 43/94] Undo --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bfd829f5a..9f33bd65c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -195,7 +195,7 @@ find_package(Threads) # TODO: Should maybe change "BUILD_CRYPTO" to be similar to the other ones: "BUILD_COMMON_CRYPTO" # (and so BUILD_CRYPTO == !BUILD_COMMON_CRYPTO) -if((NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) AND BUILD_COMMON_CURL) +if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) if(USE_OPENSSL) find_package(OpenSSL REQUIRED) set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) From 49d8af86db4eedaa2755e100d3f231ef10eb1063 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 13:07:21 -0700 Subject: [PATCH 44/94] more --- CMakeLists.txt | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f33bd65c..94c909358 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,14 +193,14 @@ endif() # TODO: shouldn't this be "required" ? find_package(Threads) -# TODO: Should maybe change "BUILD_CRYPTO" to be similar to the other ones: "BUILD_COMMON_CRYPTO" -# (and so BUILD_CRYPTO == !BUILD_COMMON_CRYPTO) if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) if(USE_OPENSSL) find_package(OpenSSL REQUIRED) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) + # set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) elseif(USE_MBEDTLS) find_package(MbedTLS REQUIRED) + + # We do have a FindMbedTLS.cmake file. set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) else() message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) @@ -226,21 +226,19 @@ if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) find_package(CURL REQUIRED) else() pkg_check_modules(CURL REQUIRED libcurl) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) + link_directories(${CURL_LIBRARY_DIRS}) endif() - - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) - link_directories(${CURL_LIBRARY_DIRS}) endif() if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) if (WIN32) - find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) + find_package(LIBWEBSOCKETS REQUIRED) else() pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) + link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) endif() - - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) - link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) endif() ############# Done finding 3rd-party dependencies ############ @@ -317,6 +315,7 @@ set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/in include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) +message("OPEN_SRC_INCLUDE_DIRS: ${OPEN_SRC_INCLUDE_DIRS}") link_directories(${OPEN_SRC_INSTALL_PREFIX}/lib) # Unix intsalls libraries into /lib directory link_directories(${OPEN_SRC_INSTALL_PREFIX}/bin) # Windows installs libraries into /bin directory From c41dacff24d1a8116400c7865659675e0387556e Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 13:43:08 -0700 Subject: [PATCH 45/94] Set OPEN_SRC_INCLUDE_DIRS regardless of BUILD_DEPENDENCIES --- CMakeLists.txt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 94c909358..86178bcc6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,19 +68,18 @@ else() message(STATUS "CMAKE_BUILD_TYPE is set to: ${CMAKE_BUILD_TYPE}") endif() +# Set directory where to build the dependencies. +if (NOT OPEN_SRC_INSTALL_PREFIX) + set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) + set(ENV{PKG_CONFIG_PATH} + "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") + set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) +endif() # Fetch and build 3rd-party dependencies if specified. if(BUILD_DEPENDENCIES) message(STATUS "Begin building dependencies.") - # Set directory where to build the dependencies. - if (NOT OPEN_SRC_INSTALL_PREFIX) - set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) - set(ENV{PKG_CONFIG_PATH} - "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) - endif() - # Create the dependency directory if it doesn't exist. if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) @@ -237,7 +236,7 @@ if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) else() pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) - link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) + link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) endif() endif() From 37ad49de9ffa069bb3206b03a9dbd296ed86ddc8 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 14:03:17 -0700 Subject: [PATCH 46/94] Testing with find_package removed --- CMakeLists.txt | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 86178bcc6..9d144e52e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,19 +192,19 @@ endif() # TODO: shouldn't this be "required" ? find_package(Threads) -if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) - if(USE_OPENSSL) - find_package(OpenSSL REQUIRED) - # set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) - elseif(USE_MBEDTLS) - find_package(MbedTLS REQUIRED) - - # We do have a FindMbedTLS.cmake file. - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) - else() - message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) - endif() -endif() +# if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) +# if(USE_OPENSSL) +# find_package(OpenSSL REQUIRED) +# # set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) +# elseif(USE_MBEDTLS) +# find_package(MbedTLS REQUIRED) + +# # We do have a FindMbedTLS.cmake file. +# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) +# else() +# message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) +# endif() +# endif() # TODO: Need to figure out the use case here. From bb2004b60d83ba4fab78e52f569b512889065f24 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 14:25:44 -0700 Subject: [PATCH 47/94] Link "libwebsockets" --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d144e52e..066b6a120 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -372,7 +372,7 @@ if(BUILD_COMMON_LWS) set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) endif() - target_link_libraries(kvsCommonLws ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) + target_link_libraries(kvsCommonLws libwebsockets kvspicUtils) install( TARGETS kvsCommonLws From 9ba15b2f26d725957f36969fa7bc52ada12e9c33 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 14:59:06 -0700 Subject: [PATCH 48/94] more testing --- CMakeLists.txt | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 066b6a120..fa2a7b34f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,19 +192,22 @@ endif() # TODO: shouldn't this be "required" ? find_package(Threads) -# if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) -# if(USE_OPENSSL) -# find_package(OpenSSL REQUIRED) -# # set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) -# elseif(USE_MBEDTLS) -# find_package(MbedTLS REQUIRED) - -# # We do have a FindMbedTLS.cmake file. -# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) -# else() -# message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) -# endif() -# endif() +if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) + if(USE_OPENSSL) + find_package(OpenSSL) + if(NOT OPENSSL_FOUND AND NOT BUILD_DEPENDENCIES) + message(FATAL_ERROR "OpenSSL is not found. Make sure to export PKG_CONFIG_PATH to where OpenSSL's pc file is") + endif() + # TODO: I don't think the below line does anything + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) + elseif(USE_MBEDTLS) + find_package(MbedTLS REQUIRED) + # We do have a FindMbedTLS.cmake file. + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) + else() + message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) + endif() +endif() # TODO: Need to figure out the use case here. @@ -372,7 +375,7 @@ if(BUILD_COMMON_LWS) set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) endif() - target_link_libraries(kvsCommonLws libwebsockets kvspicUtils) + target_link_libraries(kvsCommonLws OpenSSL::Crypto OpenSSL::SSL kvspicUtils) install( TARGETS kvsCommonLws From 78836b50fd91462667356ebf779d68b890004454 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 15:25:25 -0700 Subject: [PATCH 49/94] more --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fa2a7b34f..a986f6d27 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -375,7 +375,7 @@ if(BUILD_COMMON_LWS) set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) endif() - target_link_libraries(kvsCommonLws OpenSSL::Crypto OpenSSL::SSL kvspicUtils) + target_link_libraries(kvsCommonLws ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) install( TARGETS kvsCommonLws From 51eebb40a7ec9a825a64854b2a5b47f7111b30c6 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 16:24:17 -0700 Subject: [PATCH 50/94] Add in the crypto libs for commonLWS --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a986f6d27..6023c4357 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -375,7 +375,7 @@ if(BUILD_COMMON_LWS) set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) endif() - target_link_libraries(kvsCommonLws ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) + target_link_libraries(kvsCommonLws OpenSSL::Crypto OpenSSL::SSL ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) install( TARGETS kvsCommonLws From 411324078338b0bcc628e479dcb2dfeb317fbd80 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 18:49:59 -0700 Subject: [PATCH 51/94] more --- CMakeLists.txt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6023c4357..101e38106 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,10 @@ set(KINESIS_VIDEO_PRODUCER_C_VERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}.$ set(SUPPORTED_CRYPTO_LIBRARIES "{OpenSSL, MbedTLS}") +# TODO: Verify if need this +include(GNUInstallDirs) + + # User Flags option(ADD_MUCLIBC "Add -muclibc c flag" OFF) option(BUILD_STATIC "Static build" OFF) @@ -50,14 +54,21 @@ if(CONSTRAINED_DEVICE) endif() set(CMAKE_MACOSX_RPATH TRUE) + +# TODO: Verify if need this +get_filename_component(ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) + add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") # Set where to build this project. -if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) -else() - set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") +if(NOT KINESIS_VIDEO_PRODUCER_C_SRC) + if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + else() + set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") + endif() endif() +message(STATUS "Kinesis Video Producer path is ${KINESIS_VIDEO_PRODUCER_C_SRC}") # NOTE: The windows CI build has CMAKE_BUILD_TYPE set to debug, probably due to MSVC environment, TODO: look into this # Default to release build if unspecified. From 9e26a851076358a51e37159d2aace99f3e426270 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 19:11:05 -0700 Subject: [PATCH 52/94] more --- CMakeLists.txt | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 101e38106..2f7fa097b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,7 +81,8 @@ endif() # Set directory where to build the dependencies. if (NOT OPEN_SRC_INSTALL_PREFIX) - set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) + set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) + #set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) @@ -315,14 +316,9 @@ endif() file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") - file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") #file(GLOB_RECURSE PRODUCER_C_SOURCE_FILES "src/source/*.c") -list(APPEND PRODUCER_C_SOURCE_FILES - ${KVS_COMMON_SOURCE_FILES_BASE} - ${KVS_COMMON_SOURCE_FILES_CURL}) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) @@ -424,9 +420,9 @@ if(BUILD_COMMON_CURL) "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) if (WIN32) - add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) + add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) else() - add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES}) + add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) endif() if(NOT BUILD_STATIC) set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) From cb831576a4c4c09dc331e2b9a307b76fba11c363 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 20:53:10 -0700 Subject: [PATCH 53/94] more --- CMakeLists.txt | 78 +++++++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f7fa097b..386313599 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,13 +155,55 @@ message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. # Now: is BUILD_KVS_PIC ? build PIC, else find system PIC - if system PIC not found, fail build # TODO: Leave a note in the PIC file libkvspic.pc.cmake that the below comments/messages must be updated # if we change "prefix=" from CMAKE_INSTALL_PREFIX. (CMAKE_INSTALL_PREFIX = usr/local). -if(BUILD_KVS_PIC) - # TODO: double check with the original comment that used to be here... make sure this comment is correct. +# if(BUILD_KVS_PIC) +# # TODO: double check with the original comment that used to be here... make sure this comment is correct. + +# # KVS PIC will live in the DEPENDENCY_DOWNLOAD_PATH. + +# # TODO: Double check all the below is correct/necessary. +# # TODO: Find a way to check specifically for an alrady built PIC here in the project, don't build if found +# set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) +# set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) +# fetch_repo(kvspic ${BUILD_ARGS}) +# add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") +# file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") +# include_directories("${PIC_HEADERS}") + +# else() +# # TODO: test this already-installed case +# # Finding PIC on system using the libcproducer.pc.cmake file. +# pkg_check_modules(KVS_PIC kvspic) +# if(KVS_PIC_FOUND) +# message("Found system KVS PIC located: ${KVS_PIC_PREFIX}") +# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) +# link_directories(${KVS_PIC_LIBRARY_DIRS}) +# else() +# message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVS_PIC_INCLUDE_DIRS} \ +# Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") +# endif() + +# # Note: PIC Utils are built seperately as CommonLWS only uses these files. +# pkg_check_modules(KVS_PIC_UTILS libkvspicUtils) +# if(KVS_PIC_UTILS_FOUND) +# message("Found system KVS PIC Utils located: ${KVS_PIC_UTILS_PREFIX}") +# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) +# link_directories(${KVS_PIC_UTILS_LIBRARY_DIRS}) +# else() +# message(FATAL_ERROR "Could not find system KVS PIC Utils. PkgConfig searched in: ${KVS_PIC_UTILS_INCLUDE_DIRS} \ +# Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") +# endif() + +# endif() - # KVS PIC will live in the DEPENDENCY_DOWNLOAD_PATH. +############# Done checking system for kvspic ############# - # TODO: Double check all the below is correct/necessary. - # TODO: Find a way to check specifically for an alrady built PIC here in the project, don't build if found +pkg_check_modules(KVSPIC libkvspicUtils) +if(KVSPIC_FOUND) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) + link_directories(${KVSPIC_LIBRARY_DIRS}) +else() + ############# fetch repos that we need do add_subdirectory ############ + # repos that we will build using add_subdirectory will be stored in this path set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) fetch_repo(kvspic ${BUILD_ARGS}) @@ -169,33 +211,9 @@ if(BUILD_KVS_PIC) file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") include_directories("${PIC_HEADERS}") -else() - # TODO: test this already-installed case - # Finding PIC on system using the libcproducer.pc.cmake file. - pkg_check_modules(KVS_PIC kvspic) - if(KVS_PIC_FOUND) - message("Found system KVS PIC located: ${KVS_PIC_PREFIX}") - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) - link_directories(${KVS_PIC_LIBRARY_DIRS}) - else() - message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVS_PIC_INCLUDE_DIRS} \ - Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") - endif() - - # Note: PIC Utils are built seperately as CommonLWS only uses these files. - pkg_check_modules(KVS_PIC_UTILS libkvspicUtils) - if(KVS_PIC_UTILS_FOUND) - message("Found system KVS PIC Utils located: ${KVS_PIC_UTILS_PREFIX}") - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) - link_directories(${KVS_PIC_UTILS_LIBRARY_DIRS}) - else() - message(FATAL_ERROR "Could not find system KVS PIC Utils. PkgConfig searched in: ${KVS_PIC_UTILS_INCLUDE_DIRS} \ - Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") - endif() - + ############# fetch repos that we need do add_subdirectory done ############ endif() -############# Done checking system for kvspic ############# From 0295cea724368a9da86d233a2f7f97d6453d8b9f Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 22:36:24 -0700 Subject: [PATCH 54/94] Reverting changes to libwebsockets-cmakelists.txt --- .../Dependencies/libwebsockets-CMakeLists.txt | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/CMake/Dependencies/libwebsockets-CMakeLists.txt b/CMake/Dependencies/libwebsockets-CMakeLists.txt index 308a3172e..995d08257 100644 --- a/CMake/Dependencies/libwebsockets-CMakeLists.txt +++ b/CMake/Dependencies/libwebsockets-CMakeLists.txt @@ -18,9 +18,11 @@ else() set(LWS_WITH_MBEDTLS OFF) endif() -set(CMAKE_ARGS - # enable for debug output -DCMAKE_BUILD_TYPE=DEBUG - -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} +ExternalProject_Add(project_libwebsockets + GIT_REPOSITORY https://github.com/warmcat/libwebsockets.git + GIT_TAG v3.2.3 + PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${OPEN_SRC_INSTALL_PREFIX} -DLWS_WITH_HTTP2=1 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} @@ -39,13 +41,8 @@ set(CMAKE_ARGS -DLWS_STATIC_PIC=1 -DLWS_WITH_ZLIB=0 -DLWS_WITH_MBEDTLS=${LWS_WITH_MBEDTLS} - -DOPENSSL_ROOT_DIR=${OPENSSL_DIR}) - -ExternalProject_Add(project_libwebsockets - GIT_REPOSITORY https://github.com/warmcat/libwebsockets.git - GIT_TAG v3.2.3 - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build - CMAKE_ARGS ${CMAKE_ARGS} - BUILD_ALWAYS TRUE - TEST_COMMAND "" -) +# enable for debug output -DCMAKE_BUILD_TYPE=DEBUG + -DOPENSSL_ROOT_DIR=${OPENSSL_DIR} + BUILD_ALWAYS TRUE + TEST_COMMAND "" +) \ No newline at end of file From f04658d5b83da86ce0f0b556115943c7d1cbe12a Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 22:51:32 -0700 Subject: [PATCH 55/94] more --- CMakeLists.txt | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 386313599..9162c27a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,17 +79,22 @@ else() message(STATUS "CMAKE_BUILD_TYPE is set to: ${CMAKE_BUILD_TYPE}") endif() -# Set directory where to build the dependencies. -if (NOT OPEN_SRC_INSTALL_PREFIX) - set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) - #set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) - set(ENV{PKG_CONFIG_PATH} - "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) +if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) + file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) endif() + # Fetch and build 3rd-party dependencies if specified. if(BUILD_DEPENDENCIES) + # Set directory where to build the dependencies. + if (NOT OPEN_SRC_INSTALL_PREFIX) + set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) + #set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) + set(ENV{PKG_CONFIG_PATH} + "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") + set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) + endif() + message(STATUS "Begin building dependencies.") # Create the dependency directory if it doesn't exist. @@ -222,6 +227,9 @@ endif() # TODO: shouldn't this be "required" ? find_package(Threads) +set(OPEN_SRC_INCLUDE_DIRS ${LIBKVSPIC_INCLUDE_DIRS}) + + if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) if(USE_OPENSSL) find_package(OpenSSL) @@ -269,7 +277,7 @@ if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) else() pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) - link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) + link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) endif() endif() @@ -349,7 +357,6 @@ link_directories(${OPEN_SRC_INSTALL_PREFIX}/bin) # Windows installs libraries in # Get the list of link directories get_property(link_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY LINK_DIRECTORIES) - # Print each link directory foreach(dir IN LISTS link_dirs) message("Link directory: ${dir}") From 3bec97c56298670217cd187a8f8b9a416a83d37c Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 23:14:37 -0700 Subject: [PATCH 56/94] more --- CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9162c27a5..886dac032 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,10 +79,6 @@ else() message(STATUS "CMAKE_BUILD_TYPE is set to: ${CMAKE_BUILD_TYPE}") endif() -if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) - file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) -endif() - # Fetch and build 3rd-party dependencies if specified. if(BUILD_DEPENDENCIES) From 0464ba28527a6fa8efa9bc9fe1f1b82fd15b6e77 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 18 Mar 2024 23:40:54 -0700 Subject: [PATCH 57/94] Add logs --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 886dac032..814bd79b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -200,9 +200,11 @@ message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. pkg_check_modules(KVSPIC libkvspicUtils) if(KVSPIC_FOUND) + message("PIC was found") set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) link_directories(${KVSPIC_LIBRARY_DIRS}) else() + message("PIC was NOT found") ############# fetch repos that we need do add_subdirectory ############ # repos that we will build using add_subdirectory will be stored in this path set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) From e7df7c07d93198270ed3b94dd019f19450635eab Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Tue, 19 Mar 2024 08:39:16 -0700 Subject: [PATCH 58/94] develop --- CMakeLists.txt | 419 ++++++++++++++++++------------------------------- 1 file changed, 152 insertions(+), 267 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 814bd79b3..38e95f832 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,10 +26,8 @@ option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common library" OFF) option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) -option(BUILD_CRYPTO "Whether or not to build OpenSSL or MbedTLS, if not, will use system-installed version" ON) +option(LOCAL_OPENSSL_BUILD "Whether or not to use local OpenSSL build" OFF) option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) -option(BUILD_KVS_PIC "Whether to build PIC SDK, else will use system-installed version" ON) -option(BUILD_SAMPLES "Whether to build Producer C samples" ON) # Maintainer Flags option(BUILD_TEST "Build the testing tree." OFF) @@ -42,98 +40,88 @@ option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) - +set(TYPE_OF_LIB SHARED) if (BUILD_STATIC) set(TYPE_OF_LIB STATIC) -else() - set(TYPE_OF_LIB SHARED) -endif() - -if(CONSTRAINED_DEVICE) - add_definitions(-DCONSTRAINED_DEVICE) endif() set(CMAKE_MACOSX_RPATH TRUE) -# TODO: Verify if need this get_filename_component(ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") -# Set where to build this project. +if(CONSTRAINED_DEVICE) + add_definitions(-DCONSTRAINED_DEVICE) +endif() + if(NOT KINESIS_VIDEO_PRODUCER_C_SRC) - if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - else() - set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") - endif() + if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + else() + set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") + endif() endif() + message(STATUS "Kinesis Video Producer path is ${KINESIS_VIDEO_PRODUCER_C_SRC}") -# NOTE: The windows CI build has CMAKE_BUILD_TYPE set to debug, probably due to MSVC environment, TODO: look into this -# Default to release build if unspecified. if(NOT CMAKE_BUILD_TYPE) - message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) -else() - message(STATUS "CMAKE_BUILD_TYPE is set to: ${CMAKE_BUILD_TYPE}") + message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) endif() - -# Fetch and build 3rd-party dependencies if specified. if(BUILD_DEPENDENCIES) - # Set directory where to build the dependencies. if (NOT OPEN_SRC_INSTALL_PREFIX) set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) - #set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) endif() - message(STATUS "Begin building dependencies.") - - # Create the dependency directory if it doesn't exist. if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) endif() - # Verify only one of SUPPORTED_CRYPTO_LIBRARIES are selected. + message(STATUS "Begin building dependencies.") + set(SSL_OPTIONS USE_OPENSSL USE_MBEDTLS) - count_true(ENABLED_SSL_OPTION_COUNT ${SSL_OPTIONS}) + count_true(ENABLED_SSL_OPTION_COUNT + ${SSL_OPTIONS}) + if(ENABLED_SSL_OPTION_COUNT GREATER "1") message(FATAL_ERROR "Only one of ${SSL_OPTIONS} can be enabled") endif() - # If not using system's crypto library. - if(BUILD_CRYPTO) + if(NOT LOCAL_OPENSSL_BUILD) + message(STATUS "Building non-local OpenSSL") if(USE_OPENSSL) - message(STATUS "Building OpenSSL") - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} + -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) build_dependency(openssl ${BUILD_ARGS}) elseif(USE_MBEDTLS) - message(STATUS "Building MbedTLS") set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) build_dependency(mbedtls ${BUILD_ARGS}) else() - message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) + message(FATAL_ERROR "No crypto library selected.") endif() endif() - if (BUILD_COMMON_CURL) + if (BUILD_COMMON_LWS) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} + -DUSE_OPENSSL=${USE_OPENSSL} -DUSE_MBEDTLS=${USE_MBEDTLS}) - build_dependency(curl ${BUILD_ARGS}) + build_dependency(websockets ${BUILD_ARGS}) endif() - # NOTE: LWS does not get built from source here in our WebRTC CI tests since we set BUILD_DEPENDENCIES=FALSE - if (BUILD_COMMON_LWS) + if (BUILD_COMMON_CURL) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} + -DUSE_OPENSSL=${USE_OPENSSL} -DUSE_MBEDTLS=${USE_MBEDTLS}) - build_dependency(websockets ${BUILD_ARGS}) + build_dependency(curl ${BUILD_ARGS}) + endif() if(BUILD_TEST) @@ -145,66 +133,13 @@ endif() find_package(PkgConfig REQUIRED) -message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. - - -############# Checking system for kvspic ############# - - -# NOTE: this is possibly a breaking change, if not specified, system PIC will not be used. -# Prev behavior: look for system PIC if not found, build PIC. -# Now: is BUILD_KVS_PIC ? build PIC, else find system PIC - if system PIC not found, fail build -# TODO: Leave a note in the PIC file libkvspic.pc.cmake that the below comments/messages must be updated -# if we change "prefix=" from CMAKE_INSTALL_PREFIX. (CMAKE_INSTALL_PREFIX = usr/local). -# if(BUILD_KVS_PIC) -# # TODO: double check with the original comment that used to be here... make sure this comment is correct. - -# # KVS PIC will live in the DEPENDENCY_DOWNLOAD_PATH. - -# # TODO: Double check all the below is correct/necessary. -# # TODO: Find a way to check specifically for an alrady built PIC here in the project, don't build if found -# set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) -# set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) -# fetch_repo(kvspic ${BUILD_ARGS}) -# add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") -# file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") -# include_directories("${PIC_HEADERS}") - -# else() -# # TODO: test this already-installed case -# # Finding PIC on system using the libcproducer.pc.cmake file. -# pkg_check_modules(KVS_PIC kvspic) -# if(KVS_PIC_FOUND) -# message("Found system KVS PIC located: ${KVS_PIC_PREFIX}") -# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) -# link_directories(${KVS_PIC_LIBRARY_DIRS}) -# else() -# message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVS_PIC_INCLUDE_DIRS} \ -# Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") -# endif() - -# # Note: PIC Utils are built seperately as CommonLWS only uses these files. -# pkg_check_modules(KVS_PIC_UTILS libkvspicUtils) -# if(KVS_PIC_UTILS_FOUND) -# message("Found system KVS PIC Utils located: ${KVS_PIC_UTILS_PREFIX}") -# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) -# link_directories(${KVS_PIC_UTILS_LIBRARY_DIRS}) -# else() -# message(FATAL_ERROR "Could not find system KVS PIC Utils. PkgConfig searched in: ${KVS_PIC_UTILS_INCLUDE_DIRS} \ -# Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") -# endif() - -# endif() - -############# Done checking system for kvspic ############# +############# Check system for kvspic ############# pkg_check_modules(KVSPIC libkvspicUtils) if(KVSPIC_FOUND) - message("PIC was found") set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) link_directories(${KVSPIC_LIBRARY_DIRS}) else() - message("PIC was NOT found") ############# fetch repos that we need do add_subdirectory ############ # repos that we will build using add_subdirectory will be stored in this path set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) @@ -217,75 +152,52 @@ else() ############# fetch repos that we need do add_subdirectory done ############ endif() +############# Check system for kvspic done ############# +############# find dependent libraries ############ - -############# Finding 3rd-party dependencies ############ - -# TODO: shouldn't this be "required" ? find_package(Threads) set(OPEN_SRC_INCLUDE_DIRS ${LIBKVSPIC_INCLUDE_DIRS}) - -if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) - if(USE_OPENSSL) - find_package(OpenSSL) - if(NOT OPENSSL_FOUND AND NOT BUILD_DEPENDENCIES) - message(FATAL_ERROR "OpenSSL is not found. Make sure to export PKG_CONFIG_PATH to where OpenSSL's pc file is") - endif() - # TODO: I don't think the below line does anything - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) - elseif(USE_MBEDTLS) - find_package(MbedTLS REQUIRED) - # We do have a FindMbedTLS.cmake file. - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) - else() - message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) +if(USE_OPENSSL) + find_package(OpenSSL) + if(NOT OPENSSL_FOUND AND NOT BUILD_DEPENDENCIES) + message(FATAL_ERROR "OpenSSL is not found. Make sure to export PKG_CONFIG_PATH to where OpenSSL's pc file is") endif() + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) +elseif(USE_MBEDTLS) + find_package(MbedTLS REQUIRED) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) +else() + message(FATAL_ERROR "No crypto library selected.") endif() - -# TODO: Need to figure out the use case here. -# If we are building deps, should we check for system libraries at all? -# - Is there ever a case that buildDeps==TRUE AND buildCommon<>==FALSE? -# - And then is there ever a case buildDeps==FALSE AND buildCommon<>==TRUE? -# - Which takes precedence? -# I would think buildCommon<> is a way of overriding the in-house building and avoiding -# fetching the repo in this project. This way you can keep buildDeps=TRUE and then -# specify which ones you actually don't want built with the project by setting buildCommon to true. -# However, currently I have the logic setup reverse from the above: we only use common/system build -# if buildDeps is off AND buildCommon<> is TRUE for the package. - - - -if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) +if(BUILD_COMMON_CURL) if (WIN32) find_package(CURL REQUIRED) + set(CURL_LIBRARIES CURL::libcurl) else() pkg_check_modules(CURL REQUIRED libcurl) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) - link_directories(${CURL_LIBRARY_DIRS}) endif() + + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) + link_directories(${CURL_LIBRARY_DIRS}) endif() -if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) +if (BUILD_COMMON_LWS) if (WIN32) - find_package(LIBWEBSOCKETS REQUIRED) + find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) else() pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) - link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) endif() -endif() - -############# Done finding 3rd-party dependencies ############ + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) + link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) +endif() -############# TODO: Doing.... ############ +############# find dependent libraries end ############ -# TODO: Note, these variables are never used, in C, CPP, WebRTC SDKs. Not in cmake and not in source files. -# Confirm whether we need these. if(CMAKE_SIZEOF_VOID_P STREQUAL 4) message(STATUS "Bitness 32 bits") set(KINESIS_VIDEO_BUILD_BITNESS "x86") @@ -300,8 +212,6 @@ else() message(FATAL_ERROR "Unknown bitness") endif() - -# TODO: Figure out what is going on in here and add comments. if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") @@ -336,29 +246,13 @@ if(MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) endif() - file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") -#file(GLOB_RECURSE PRODUCER_C_SOURCE_FILES "src/source/*.c") - -set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) - include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) -message("OPEN_SRC_INCLUDE_DIRS: ${OPEN_SRC_INCLUDE_DIRS}") - -link_directories(${OPEN_SRC_INSTALL_PREFIX}/lib) # Unix intsalls libraries into /lib directory -link_directories(${OPEN_SRC_INSTALL_PREFIX}/bin) # Windows installs libraries into /bin directory - -# Get the list of link directories -get_property(link_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY LINK_DIRECTORIES) -# Print each link directory -foreach(dir IN LISTS link_dirs) - message("Link directory: ${dir}") -endforeach() if(ALIGNED_MEMORY_MODEL) add_definitions(-DALIGNED_MEMORY_MODEL) @@ -368,122 +262,114 @@ if(SET_SSL_CALLBACKS) add_definitions(-DSET_SSL_CALLBACKS) endif() + # use openssl by default set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) -if(WIN32) - # set(PRODUCER_CRYPTO_LIBRARIES - # OpenSSL::Crypto - # OpenSSL::SSL) - set(PRODUCER_CRYPTO_LIBRARIES libcrypto libssl) -else() - set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) -endif() - +set(PRODUCER_CRYPTO_LIBRARY + OpenSSL::Crypto + OpenSSL::SSL) if (USE_MBEDTLS) - set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) - set(PRODUCER_CRYPTO_LIBRARIES MbedTLS MbedCrypto) + set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) + set(PRODUCER_CRYPTO_LIBRARY + MbedTLS + MbedCrypto) endif() -# TODO: Confirm this is ok to remove -# install( -# DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include -# DESTINATION .) +install( + DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include + DESTINATION .) if(BUILD_COMMON_LWS) - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonLws.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc" @ONLY) - - if (WIN32) - add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) - else() - add_library(kvsCommonLws ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) - endif() - target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS ${CPRODUCER_COMMON_TLS_OPTION}) - if(NOT BUILD_STATIC) - set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - - target_link_libraries(kvsCommonLws OpenSSL::Crypto OpenSSL::SSL ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) - - install( - TARGETS kvsCommonLws - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonLws.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc" @ONLY) + if (WIN32) + add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + else() + add_library(kvsCommonLws ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + endif() + target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS ${CPRODUCER_COMMON_TLS_OPTION}) + if(NOT BUILD_STATIC) + set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + target_link_libraries(kvsCommonLws + ${PRODUCER_CRYPTO_LIBRARY} + ${LIBWEBSOCKETS_LIBRARIES} + kvspicUtils) + + install( + TARGETS kvsCommonLws + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") endif() if(BUILD_COMMON_CURL) - if(WIN32) - set(CURL_LIBRARIES libcurl) - else() - set(CURL_LIBRARIES curl) - endif() - - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) - - if(BUILD_STATIC) - # Curl will enable ZLIB as part of its build if it finds - # the package. We need to therefore link it for static builds. - find_package(ZLIB) - if(ZLIB_FOUND) - list(APPEND CURL_LIBRARIES z) + # producer only uses curl right now + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) + + if(BUILD_STATIC) + # Curl will enable ZLIB as part of its build if it finds + # the package. We need to therefore link it for static builds. + find_package(ZLIB) + if(ZLIB_FOUND) + list(APPEND CURL_LIBRARIES z) + endif() endif() - endif() - - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) - - if (WIN32) - add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - else() - add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - endif() - if(NOT BUILD_STATIC) - set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - - target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) - - # TODO: I'd like to know why there is no openssl library and we instead have to use - # ssl and crypto (openssl's dependencies). - message("CURL_LIBRARIES: ${CURL_LIBRARIES}") - message("PRODUCER_CRYPTO_LIBRARIES: ${PRODUCER_CRYPTO_LIBRARIES}") - - # Linker is not able to find the .lib files on Windows even when they are present and the path is searched. - if(WIN32) - target_link_libraries(cproducer - kvspic - ${OPEN_SRC_INSTALL_PREFIX}/lib/libssl.lib - ${OPEN_SRC_INSTALL_PREFIX}/lib/libcrypto.lib - ${OPEN_SRC_INSTALL_PREFIX}/lib/libcurl-d_imp.lib) - else() - target_link_libraries(cproducer - PUBLIC kvspic - PRIVATE ${CURL_LIBRARIES} ${PRODUCER_CRYPTO_LIBRARIES}) - endif() - + if (WIN32) + add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + else() + add_library(kvsCommonCurl ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + endif() + target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) + if(NOT BUILD_STATIC) + set_target_properties(kvsCommonCurl PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + target_link_libraries(kvsCommonCurl + kvspicUtils + ${CURL_LIBRARIES} + ${PRODUCER_CRYPTO_LIBRARY}) + + install( + TARGETS kvsCommonCurl + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) + + if (WIN32) + add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) + else() + add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES}) + endif() + if(NOT BUILD_STATIC) + set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + target_link_libraries(cproducer PUBLIC kvsCommonCurl kvspic) - message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") - install( - TARGETS cproducer - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + install( + TARGETS cproducer + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - if(BUILD_SAMPLES) add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c) target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer) @@ -495,9 +381,8 @@ if(BUILD_COMMON_CURL) add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c) target_link_libraries(kvsAudioOnlyStreamingSample cproducer) - endif() - if (BUILD_TEST) - add_subdirectory(tst) - endif() -endif() + if (BUILD_TEST) + add_subdirectory(tst) + endif() +endif() \ No newline at end of file From 0d2ab423ca63bca7b2c3eadb2280060fa090515f Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Tue, 19 Mar 2024 09:14:07 -0700 Subject: [PATCH 59/94] more --- CMakeLists.txt | 380 +++++++++++++++++++++++++++++++------------------ 1 file changed, 243 insertions(+), 137 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 38e95f832..454c5444e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,8 +26,10 @@ option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common library" OFF) option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) -option(LOCAL_OPENSSL_BUILD "Whether or not to use local OpenSSL build" OFF) +option(BUILD_CRYPTO "Whether or not to build OpenSSL or MbedTLS, if not, will use system-installed version" ON) option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) +option(BUILD_KVS_PIC "Whether to build PIC SDK, else will use system-installed version" ON) +option(BUILD_SAMPLES "Whether to build Producer C samples" ON) # Maintainer Flags option(BUILD_TEST "Build the testing tree." OFF) @@ -40,13 +42,14 @@ option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) -set(TYPE_OF_LIB SHARED) + if (BUILD_STATIC) set(TYPE_OF_LIB STATIC) endif() set(CMAKE_MACOSX_RPATH TRUE) +# TODO: Verify if need this get_filename_component(ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") @@ -56,72 +59,78 @@ if(CONSTRAINED_DEVICE) endif() if(NOT KINESIS_VIDEO_PRODUCER_C_SRC) - if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - else() - set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") - endif() + if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) + else() + set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") + endif() endif() - message(STATUS "Kinesis Video Producer path is ${KINESIS_VIDEO_PRODUCER_C_SRC}") +# NOTE: The windows CI build has CMAKE_BUILD_TYPE set to debug, probably due to MSVC environment, TODO: look into this +# Default to release build if unspecified. if(NOT CMAKE_BUILD_TYPE) - message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) + message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) +else() + message(STATUS "CMAKE_BUILD_TYPE is set to: ${CMAKE_BUILD_TYPE}") endif() + +# Fetch and build 3rd-party dependencies if specified. if(BUILD_DEPENDENCIES) + # Set directory where to build the dependencies. if (NOT OPEN_SRC_INSTALL_PREFIX) set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) + #set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) endif() + message(STATUS "Begin building dependencies.") + + # Create the dependency directory if it doesn't exist. if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) endif() - message(STATUS "Begin building dependencies.") - + # Verify only one of SUPPORTED_CRYPTO_LIBRARIES are selected. set(SSL_OPTIONS USE_OPENSSL USE_MBEDTLS) - count_true(ENABLED_SSL_OPTION_COUNT - ${SSL_OPTIONS}) - + count_true(ENABLED_SSL_OPTION_COUNT ${SSL_OPTIONS}) if(ENABLED_SSL_OPTION_COUNT GREATER "1") message(FATAL_ERROR "Only one of ${SSL_OPTIONS} can be enabled") endif() - if(NOT LOCAL_OPENSSL_BUILD) - message(STATUS "Building non-local OpenSSL") + # If not using system's crypto library. + if(BUILD_CRYPTO) if(USE_OPENSSL) - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} - -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) + message(STATUS "Building OpenSSL") + set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) build_dependency(openssl ${BUILD_ARGS}) elseif(USE_MBEDTLS) + message(STATUS "Building MbedTLS") set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) build_dependency(mbedtls ${BUILD_ARGS}) else() - message(FATAL_ERROR "No crypto library selected.") + message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) endif() endif() - if (BUILD_COMMON_LWS) + if (BUILD_COMMON_CURL) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} - -DUSE_OPENSSL=${USE_OPENSSL} -DUSE_MBEDTLS=${USE_MBEDTLS}) - build_dependency(websockets ${BUILD_ARGS}) + build_dependency(curl ${BUILD_ARGS}) endif() - if (BUILD_COMMON_CURL) + # NOTE: LWS does not get built from source here in our WebRTC CI tests since we set BUILD_DEPENDENCIES=FALSE + if (BUILD_COMMON_LWS) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DUSE_OPENSSL=${USE_OPENSSL} + -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} -DUSE_MBEDTLS=${USE_MBEDTLS}) - build_dependency(curl ${BUILD_ARGS}) - + build_dependency(websockets ${BUILD_ARGS}) endif() if(BUILD_TEST) @@ -133,13 +142,66 @@ endif() find_package(PkgConfig REQUIRED) -############# Check system for kvspic ############# +message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. + + +############# Checking system for kvspic ############# + + +# NOTE: this is possibly a breaking change, if not specified, system PIC will not be used. +# Prev behavior: look for system PIC if not found, build PIC. +# Now: is BUILD_KVS_PIC ? build PIC, else find system PIC - if system PIC not found, fail build +# TODO: Leave a note in the PIC file libkvspic.pc.cmake that the below comments/messages must be updated +# if we change "prefix=" from CMAKE_INSTALL_PREFIX. (CMAKE_INSTALL_PREFIX = usr/local). +# if(BUILD_KVS_PIC) +# # TODO: double check with the original comment that used to be here... make sure this comment is correct. + +# # KVS PIC will live in the DEPENDENCY_DOWNLOAD_PATH. + +# # TODO: Double check all the below is correct/necessary. +# # TODO: Find a way to check specifically for an alrady built PIC here in the project, don't build if found +# set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) +# set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) +# fetch_repo(kvspic ${BUILD_ARGS}) +# add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") +# file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") +# include_directories("${PIC_HEADERS}") + +# else() +# # TODO: test this already-installed case +# # Finding PIC on system using the libcproducer.pc.cmake file. +# pkg_check_modules(KVS_PIC kvspic) +# if(KVS_PIC_FOUND) +# message("Found system KVS PIC located: ${KVS_PIC_PREFIX}") +# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) +# link_directories(${KVS_PIC_LIBRARY_DIRS}) +# else() +# message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVS_PIC_INCLUDE_DIRS} \ +# Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") +# endif() + +# # Note: PIC Utils are built seperately as CommonLWS only uses these files. +# pkg_check_modules(KVS_PIC_UTILS libkvspicUtils) +# if(KVS_PIC_UTILS_FOUND) +# message("Found system KVS PIC Utils located: ${KVS_PIC_UTILS_PREFIX}") +# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) +# link_directories(${KVS_PIC_UTILS_LIBRARY_DIRS}) +# else() +# message(FATAL_ERROR "Could not find system KVS PIC Utils. PkgConfig searched in: ${KVS_PIC_UTILS_INCLUDE_DIRS} \ +# Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") +# endif() + +# endif() + +############# Done checking system for kvspic ############# pkg_check_modules(KVSPIC libkvspicUtils) if(KVSPIC_FOUND) + message("PIC was found") set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) link_directories(${KVSPIC_LIBRARY_DIRS}) else() + message("PIC was NOT found") ############# fetch repos that we need do add_subdirectory ############ # repos that we will build using add_subdirectory will be stored in this path set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) @@ -152,40 +214,59 @@ else() ############# fetch repos that we need do add_subdirectory done ############ endif() -############# Check system for kvspic done ############# -############# find dependent libraries ############ + +############# Finding 3rd-party dependencies ############ + +# TODO: shouldn't this be "required" ? find_package(Threads) set(OPEN_SRC_INCLUDE_DIRS ${LIBKVSPIC_INCLUDE_DIRS}) -if(USE_OPENSSL) - find_package(OpenSSL) - if(NOT OPENSSL_FOUND AND NOT BUILD_DEPENDENCIES) - message(FATAL_ERROR "OpenSSL is not found. Make sure to export PKG_CONFIG_PATH to where OpenSSL's pc file is") + +if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) + if(USE_OPENSSL) + find_package(OpenSSL) + if(NOT OPENSSL_FOUND AND NOT BUILD_DEPENDENCIES) + message(FATAL_ERROR "OpenSSL is not found. Make sure to export PKG_CONFIG_PATH to where OpenSSL's pc file is") + endif() + # TODO: I don't think the below line does anything + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) + elseif(USE_MBEDTLS) + find_package(MbedTLS REQUIRED) + # We do have a FindMbedTLS.cmake file. + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) + else() + message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) endif() - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) -elseif(USE_MBEDTLS) - find_package(MbedTLS REQUIRED) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) -else() - message(FATAL_ERROR "No crypto library selected.") endif() -if(BUILD_COMMON_CURL) + +# TODO: Need to figure out the use case here. +# If we are building deps, should we check for system libraries at all? +# - Is there ever a case that buildDeps==TRUE AND buildCommon<>==FALSE? +# - And then is there ever a case buildDeps==FALSE AND buildCommon<>==TRUE? +# - Which takes precedence? +# I would think buildCommon<> is a way of overriding the in-house building and avoiding +# fetching the repo in this project. This way you can keep buildDeps=TRUE and then +# specify which ones you actually don't want built with the project by setting buildCommon to true. +# However, currently I have the logic setup reverse from the above: we only use common/system build +# if buildDeps is off AND buildCommon<> is TRUE for the package. + + + +if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) if (WIN32) find_package(CURL REQUIRED) - set(CURL_LIBRARIES CURL::libcurl) else() pkg_check_modules(CURL REQUIRED libcurl) + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) + link_directories(${CURL_LIBRARY_DIRS}) endif() - - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) - link_directories(${CURL_LIBRARY_DIRS}) endif() -if (BUILD_COMMON_LWS) +if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) if (WIN32) find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) else() @@ -196,8 +277,13 @@ if (BUILD_COMMON_LWS) link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) endif() -############# find dependent libraries end ############ +############# Done finding 3rd-party dependencies ############ + + +############# TODO: Doing.... ############ +# TODO: Note, these variables are never used, in C, CPP, WebRTC SDKs. Not in cmake and not in source files. +# Confirm whether we need these. if(CMAKE_SIZEOF_VOID_P STREQUAL 4) message(STATUS "Bitness 32 bits") set(KINESIS_VIDEO_BUILD_BITNESS "x86") @@ -212,6 +298,8 @@ else() message(FATAL_ERROR "Unknown bitness") endif() + +# TODO: Figure out what is going on in here and add comments. if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") @@ -246,13 +334,29 @@ if(MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) endif() + file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") +#file(GLOB_RECURSE PRODUCER_C_SOURCE_FILES "src/source/*.c") + +set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) + include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) +message("OPEN_SRC_INCLUDE_DIRS: ${OPEN_SRC_INCLUDE_DIRS}") + +link_directories(${OPEN_SRC_INSTALL_PREFIX}/lib) # Unix intsalls libraries into /lib directory +link_directories(${OPEN_SRC_INSTALL_PREFIX}/bin) # Windows installs libraries into /bin directory + +# Get the list of link directories +get_property(link_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY LINK_DIRECTORIES) +# Print each link directory +foreach(dir IN LISTS link_dirs) + message("Link directory: ${dir}") +endforeach() if(ALIGNED_MEMORY_MODEL) add_definitions(-DALIGNED_MEMORY_MODEL) @@ -262,7 +366,6 @@ if(SET_SSL_CALLBACKS) add_definitions(-DSET_SSL_CALLBACKS) endif() - # use openssl by default set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) @@ -270,10 +373,8 @@ set(PRODUCER_CRYPTO_LIBRARY OpenSSL::Crypto OpenSSL::SSL) if (USE_MBEDTLS) - set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) - set(PRODUCER_CRYPTO_LIBRARY - MbedTLS - MbedCrypto) + set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) + set(PRODUCER_CRYPTO_LIBRARIES MbedTLS MbedCrypto) endif() install( @@ -281,95 +382,99 @@ install( DESTINATION .) if(BUILD_COMMON_LWS) - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonLws.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc" @ONLY) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonLws.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc" @ONLY) + + if (WIN32) + add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + else() + add_library(kvsCommonLws ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) + endif() + target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS ${CPRODUCER_COMMON_TLS_OPTION}) + if(NOT BUILD_STATIC) + set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() + + target_link_libraries(kvsCommonLws OpenSSL::Crypto OpenSSL::SSL ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) + + install( + TARGETS kvsCommonLws + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - if (WIN32) - add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) - else() - add_library(kvsCommonLws ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) - endif() - target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS ${CPRODUCER_COMMON_TLS_OPTION}) - if(NOT BUILD_STATIC) - set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - target_link_libraries(kvsCommonLws - ${PRODUCER_CRYPTO_LIBRARY} - ${LIBWEBSOCKETS_LIBRARIES} - kvspicUtils) - - install( - TARGETS kvsCommonLws - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") endif() if(BUILD_COMMON_CURL) - # producer only uses curl right now - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) - - if(BUILD_STATIC) - # Curl will enable ZLIB as part of its build if it finds - # the package. We need to therefore link it for static builds. - find_package(ZLIB) - if(ZLIB_FOUND) - list(APPEND CURL_LIBRARIES z) - endif() - endif() + if(WIN32) + set(CURL_LIBRARIES libcurl) + else() + set(CURL_LIBRARIES curl) + endif() - if (WIN32) - add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - else() - add_library(kvsCommonCurl ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - endif() - target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) - if(NOT BUILD_STATIC) - set_target_properties(kvsCommonCurl PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - target_link_libraries(kvsCommonCurl - kvspicUtils - ${CURL_LIBRARIES} - ${PRODUCER_CRYPTO_LIBRARY}) - - install( - TARGETS kvsCommonCurl - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) - - if (WIN32) - add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) - else() - add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES}) - endif() - if(NOT BUILD_STATIC) - set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) + + if(BUILD_STATIC) + # Curl will enable ZLIB as part of its build if it finds + # the package. We need to therefore link it for static builds. + find_package(ZLIB) + if(ZLIB_FOUND) + list(APPEND CURL_LIBRARIES z) endif() - target_link_libraries(cproducer PUBLIC kvsCommonCurl kvspic) + endif() + + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) + + if (WIN32) + add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + else() + add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) + endif() + if(NOT BUILD_STATIC) + set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) + endif() - install( - TARGETS cproducer - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) + # TODO: I'd like to know why there is no openssl library and we instead have to use + # ssl and crypto (openssl's dependencies). + message("CURL_LIBRARIES: ${CURL_LIBRARIES}") + message("PRODUCER_CRYPTO_LIBRARIES: ${PRODUCER_CRYPTO_LIBRARIES}") + + # Linker is not able to find the .lib files on Windows even when they are present and the path is searched. + if(WIN32) + target_link_libraries(cproducer + kvspic + ${OPEN_SRC_INSTALL_PREFIX}/lib/libssl.lib + ${OPEN_SRC_INSTALL_PREFIX}/lib/libcrypto.lib + ${OPEN_SRC_INSTALL_PREFIX}/lib/libcurl-d_imp.lib) + else() + target_link_libraries(cproducer + PUBLIC kvspic + PRIVATE ${CURL_LIBRARIES} ${PRODUCER_CRYPTO_LIBRARIES}) + endif() + + + + message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") + install( + TARGETS cproducer + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + if(BUILD_SAMPLES) add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c) target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer) @@ -381,8 +486,9 @@ if(BUILD_COMMON_CURL) add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c) target_link_libraries(kvsAudioOnlyStreamingSample cproducer) + endif() - if (BUILD_TEST) - add_subdirectory(tst) - endif() + if (BUILD_TEST) + add_subdirectory(tst) + endif() endif() \ No newline at end of file From 8d6a48c45590ecffcdfbc1ad558645f00e439821 Mon Sep 17 00:00:00 2001 From: stefankiesz Date: Tue, 19 Mar 2024 20:12:03 -0700 Subject: [PATCH 60/94] Removing this line to verify this was the issue --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 454c5444e..15c3ad1f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -377,9 +377,9 @@ if (USE_MBEDTLS) set(PRODUCER_CRYPTO_LIBRARIES MbedTLS MbedCrypto) endif() -install( - DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include - DESTINATION .) +# install( +# DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include +# DESTINATION .) if(BUILD_COMMON_LWS) configure_file( From f47cdbecf8b99e92d67d63abd46bc4f09ed8e12f Mon Sep 17 00:00:00 2001 From: stefankiesz Date: Wed, 20 Mar 2024 10:21:44 -0700 Subject: [PATCH 61/94] Revert to originally working version with some changes kept --- CMakeLists.txt | 147 +++++++++++++++++++++---------------------------- 1 file changed, 62 insertions(+), 85 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 15c3ad1f9..96cd95c0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ set(KINESIS_VIDEO_PRODUCER_C_VERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}.$ set(SUPPORTED_CRYPTO_LIBRARIES "{OpenSSL, MbedTLS}") -# TODO: Verify if need this +# This sets CMAKE_INSTAL_... directories based on GNU standard include(GNUInstallDirs) @@ -24,7 +24,7 @@ option(BUILD_DEPENDENCIES "Whether or not to build depending libraries from sour option(USE_OPENSSL "Use openssl as crypto library" ON) option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common library" OFF) -option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) +option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) # TODO: remove this and any other un-needed flags option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) option(BUILD_CRYPTO "Whether or not to build OpenSSL or MbedTLS, if not, will use system-installed version" ON) option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) @@ -45,19 +45,18 @@ option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) if (BUILD_STATIC) set(TYPE_OF_LIB STATIC) +else() + set(TYPE_OF_LIB SHARED) endif() -set(CMAKE_MACOSX_RPATH TRUE) - -# TODO: Verify if need this -get_filename_component(ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) - -add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") - if(CONSTRAINED_DEVICE) - add_definitions(-DCONSTRAINED_DEVICE) + add_definitions(-DCONSTRAINED_DEVICE) endif() +set(CMAKE_MACOSX_RPATH TRUE) +add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") + +# Set where to build this project. if(NOT KINESIS_VIDEO_PRODUCER_C_SRC) if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) @@ -79,17 +78,16 @@ endif() # Fetch and build 3rd-party dependencies if specified. if(BUILD_DEPENDENCIES) + message(STATUS "Begin building dependencies.") + # Set directory where to build the dependencies. if (NOT OPEN_SRC_INSTALL_PREFIX) - set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) - #set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) + set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) endif() - message(STATUS "Begin building dependencies.") - # Create the dependency directory if it doesn't exist. if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) @@ -124,7 +122,6 @@ if(BUILD_DEPENDENCIES) build_dependency(curl ${BUILD_ARGS}) endif() - # NOTE: LWS does not get built from source here in our WebRTC CI tests since we set BUILD_DEPENDENCIES=FALSE if (BUILD_COMMON_LWS) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} @@ -147,63 +144,18 @@ message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. ############# Checking system for kvspic ############# - # NOTE: this is possibly a breaking change, if not specified, system PIC will not be used. # Prev behavior: look for system PIC if not found, build PIC. -# Now: is BUILD_KVS_PIC ? build PIC, else find system PIC - if system PIC not found, fail build +# Now: is BUILD_KVS_PIC ? build PIC, else find syste PIC - if system PIC not found, fail build # TODO: Leave a note in the PIC file libkvspic.pc.cmake that the below comments/messages must be updated # if we change "prefix=" from CMAKE_INSTALL_PREFIX. (CMAKE_INSTALL_PREFIX = usr/local). -# if(BUILD_KVS_PIC) -# # TODO: double check with the original comment that used to be here... make sure this comment is correct. - -# # KVS PIC will live in the DEPENDENCY_DOWNLOAD_PATH. - -# # TODO: Double check all the below is correct/necessary. -# # TODO: Find a way to check specifically for an alrady built PIC here in the project, don't build if found -# set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) -# set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) -# fetch_repo(kvspic ${BUILD_ARGS}) -# add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") -# file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") -# include_directories("${PIC_HEADERS}") - -# else() -# # TODO: test this already-installed case -# # Finding PIC on system using the libcproducer.pc.cmake file. -# pkg_check_modules(KVS_PIC kvspic) -# if(KVS_PIC_FOUND) -# message("Found system KVS PIC located: ${KVS_PIC_PREFIX}") -# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) -# link_directories(${KVS_PIC_LIBRARY_DIRS}) -# else() -# message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVS_PIC_INCLUDE_DIRS} \ -# Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") -# endif() - -# # Note: PIC Utils are built seperately as CommonLWS only uses these files. -# pkg_check_modules(KVS_PIC_UTILS libkvspicUtils) -# if(KVS_PIC_UTILS_FOUND) -# message("Found system KVS PIC Utils located: ${KVS_PIC_UTILS_PREFIX}") -# set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) -# link_directories(${KVS_PIC_UTILS_LIBRARY_DIRS}) -# else() -# message(FATAL_ERROR "Could not find system KVS PIC Utils. PkgConfig searched in: ${KVS_PIC_UTILS_INCLUDE_DIRS} \ -# Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") -# endif() - -# endif() +if(BUILD_KVS_PIC) + # TODO: double check with the original comment that used to be here... make sure this comment is correct. -############# Done checking system for kvspic ############# + # KVS PIC will live in the DEPENDENCY_DOWNLOAD_PATH. -pkg_check_modules(KVSPIC libkvspicUtils) -if(KVSPIC_FOUND) - message("PIC was found") - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) - link_directories(${KVSPIC_LIBRARY_DIRS}) -else() - message("PIC was NOT found") - ############# fetch repos that we need do add_subdirectory ############ - # repos that we will build using add_subdirectory will be stored in this path + # TODO: Double check all the below is correct/necessary. + # TODO: Find a way to check specifically for an alrady built PIC here in the project, don't build if found set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) fetch_repo(kvspic ${BUILD_ARGS}) @@ -211,9 +163,33 @@ else() file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") include_directories("${PIC_HEADERS}") - ############# fetch repos that we need do add_subdirectory done ############ +else() + # TODO: test this already-installed case + # Finding PIC on system using the libcproducer.pc.cmake file. + pkg_check_modules(KVS_PIC kvspic) + if(KVS_PIC_FOUND) + message("Found system KVS PIC located: ${KVS_PIC_PREFIX}") + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) + link_directories(${KVS_PIC_LIBRARY_DIRS}) + else() + message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVS_PIC_INCLUDE_DIRS} \ + Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") + endif() + + # Note: PIC Utils are built seperately as CommonLWS only uses these files. + pkg_check_modules(KVS_PIC_UTILS libkvspicUtils) + if(KVS_PIC_UTILS_FOUND) + message("Found system KVS PIC Utils located: ${KVS_PIC_UTILS_PREFIX}") + set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVS_PIC_UTILS_INCLUDE_DIRS}) + link_directories(${KVS_PIC_UTILS_LIBRARY_DIRS}) + else() + message(FATAL_ERROR "Could not find system KVS PIC Utils. PkgConfig searched in: ${KVS_PIC_UTILS_INCLUDE_DIRS} \ + Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") + endif() + endif() +############# Done checking system for kvspic ############# @@ -222,20 +198,13 @@ endif() # TODO: shouldn't this be "required" ? find_package(Threads) -set(OPEN_SRC_INCLUDE_DIRS ${LIBKVSPIC_INCLUDE_DIRS}) - - +# TODO: Should maybe change "BUILD_CRYPTO" to be similar to the other ones: "BUILD_COMMON_CRYPTO" +# (and so BUILD_CRYPTO == !BUILD_COMMON_CRYPTO) if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) if(USE_OPENSSL) - find_package(OpenSSL) - if(NOT OPENSSL_FOUND AND NOT BUILD_DEPENDENCIES) - message(FATAL_ERROR "OpenSSL is not found. Make sure to export PKG_CONFIG_PATH to where OpenSSL's pc file is") - endif() - # TODO: I don't think the below line does anything - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) + find_package(OpenSSL REQUIRED) elseif(USE_MBEDTLS) find_package(MbedTLS REQUIRED) - # We do have a FindMbedTLS.cmake file. set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) else() message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) @@ -338,6 +307,7 @@ endif() file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") + file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") #file(GLOB_RECURSE PRODUCER_C_SOURCE_FILES "src/source/*.c") @@ -346,13 +316,13 @@ set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/in include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) -message("OPEN_SRC_INCLUDE_DIRS: ${OPEN_SRC_INCLUDE_DIRS}") link_directories(${OPEN_SRC_INSTALL_PREFIX}/lib) # Unix intsalls libraries into /lib directory link_directories(${OPEN_SRC_INSTALL_PREFIX}/bin) # Windows installs libraries into /bin directory # Get the list of link directories get_property(link_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY LINK_DIRECTORIES) + # Print each link directory foreach(dir IN LISTS link_dirs) message("Link directory: ${dir}") @@ -369,17 +339,24 @@ endif() # use openssl by default set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) -set(PRODUCER_CRYPTO_LIBRARY - OpenSSL::Crypto - OpenSSL::SSL) +if(WIN32) + # set(PRODUCER_CRYPTO_LIBRARIES + # OpenSSL::Crypto + # OpenSSL::SSL) + set(PRODUCER_CRYPTO_LIBRARIES libcrypto libssl) +else() + set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) +endif() + if (USE_MBEDTLS) set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) set(PRODUCER_CRYPTO_LIBRARIES MbedTLS MbedCrypto) endif() -# install( -# DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include -# DESTINATION .) +# TODO: Confirm this is where WebRTC build is broken +install( + DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include + DESTINATION .) if(BUILD_COMMON_LWS) configure_file( @@ -396,7 +373,7 @@ if(BUILD_COMMON_LWS) set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) endif() - target_link_libraries(kvsCommonLws OpenSSL::Crypto OpenSSL::SSL ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) + target_link_libraries(kvsCommonLws ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) install( TARGETS kvsCommonLws From 77adbf32caf29d582afff2d0cf4ec7ea6f3a2602 Mon Sep 17 00:00:00 2001 From: stefankiesz Date: Wed, 20 Mar 2024 10:42:59 -0700 Subject: [PATCH 62/94] Try fix EVP_sha256 undefined --- CMakeLists.txt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 96cd95c0a..7370d8cef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -146,7 +146,7 @@ message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. # NOTE: this is possibly a breaking change, if not specified, system PIC will not be used. # Prev behavior: look for system PIC if not found, build PIC. -# Now: is BUILD_KVS_PIC ? build PIC, else find syste PIC - if system PIC not found, fail build +# Now: is BUILD_KVS_PIC ? build PIC, else find system PIC - if system PIC not found, fail build # TODO: Leave a note in the PIC file libkvspic.pc.cmake that the below comments/messages must be updated # if we change "prefix=" from CMAKE_INSTALL_PREFIX. (CMAKE_INSTALL_PREFIX = usr/local). if(BUILD_KVS_PIC) @@ -198,8 +198,6 @@ endif() # TODO: shouldn't this be "required" ? find_package(Threads) -# TODO: Should maybe change "BUILD_CRYPTO" to be similar to the other ones: "BUILD_COMMON_CRYPTO" -# (and so BUILD_CRYPTO == !BUILD_COMMON_CRYPTO) if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) if(USE_OPENSSL) find_package(OpenSSL REQUIRED) @@ -373,8 +371,8 @@ if(BUILD_COMMON_LWS) set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) endif() - target_link_libraries(kvsCommonLws ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) - + target_link_libraries(kvsCommonLws OpenSSL::Crypto OpenSSL::SSL ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) + install( TARGETS kvsCommonLws ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" From a758022e336c0486e30f8028fc4902944bcbf38c Mon Sep 17 00:00:00 2001 From: stefankiesz Date: Wed, 20 Mar 2024 10:57:57 -0700 Subject: [PATCH 63/94] works, remove hardcode openssl --- CMakeLists.txt | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7370d8cef..b5330cf7b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -337,16 +337,16 @@ endif() # use openssl by default set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) -if(WIN32) - # set(PRODUCER_CRYPTO_LIBRARIES - # OpenSSL::Crypto - # OpenSSL::SSL) - set(PRODUCER_CRYPTO_LIBRARIES libcrypto libssl) -else() - set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) -endif() - -if (USE_MBEDTLS) +if (USE_OPENSSL) + if(WIN32) + # set(PRODUCER_CRYPTO_LIBRARIES + # OpenSSL::Crypto + # OpenSSL::SSL) + set(PRODUCER_CRYPTO_LIBRARIES libssl libcrypto) + else() + set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) + endif() +else() # USE_MBEDTLS set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) set(PRODUCER_CRYPTO_LIBRARIES MbedTLS MbedCrypto) endif() @@ -371,8 +371,8 @@ if(BUILD_COMMON_LWS) set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) endif() - target_link_libraries(kvsCommonLws OpenSSL::Crypto OpenSSL::SSL ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) - + target_link_libraries(kvsCommonLws ${PRODUCER_CRYPTO_LIBRARIES} ${LIBWEBSOCKETS_LIBRARIES} kvspicUtils) + install( TARGETS kvsCommonLws ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" From 0a60e7b2fe1a028886eb85392244c618bc2f0fa9 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski Date: Wed, 20 Mar 2024 20:13:59 -0700 Subject: [PATCH 64/94] Should all work now... --- CMakeLists.txt | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b5330cf7b..8c0917150 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,17 +19,20 @@ include(GNUInstallDirs) # User Flags option(ADD_MUCLIBC "Add -muclibc c flag" OFF) -option(BUILD_STATIC "Static build" OFF) -option(BUILD_DEPENDENCIES "Whether or not to build depending libraries from source" ON) option(USE_OPENSSL "Use openssl as crypto library" ON) option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) -option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common library" OFF) -option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) # TODO: remove this and any other un-needed flags +option(BUILD_STATIC "Static build" OFF) +option(BUILD_DEPENDENCIES "Whether to build depending libraries from source" ON) # This is a master OFF switch, non will be built if off, but if it is ON, some can be specified to be not built +option(BUILD_COMMON_LWS "Whether to build ProducerC libwebsockets common library" OFF) +option(BUILD_COMMON_CURL "Whether to build ProducerC curl common library" ON) # TODO: remove this and any other un-needed flags option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) -option(BUILD_CRYPTO "Whether or not to build OpenSSL or MbedTLS, if not, will use system-installed version" ON) -option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) +option(BUILD_CRYPTO "Whether to build OpenSSL or MbedTLS, if not, will use system-installed version" ON) +option(BUILD_LWS "Whether to build LibWebSockets, if not, will use system-installed version" ON) +option(BUILD_CURL "Whether to build CURL library, if not, will use system-installed version" ON) option(BUILD_KVS_PIC "Whether to build PIC SDK, else will use system-installed version" ON) option(BUILD_SAMPLES "Whether to build Producer C samples" ON) +option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) + # Maintainer Flags option(BUILD_TEST "Build the testing tree." OFF) @@ -42,6 +45,9 @@ option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) +# TODO: Use target_include_directories to not give headers to WHOLE project +# - Print out the dependencies for each target via command line and verify there are no duplicate libraries being linked + if (BUILD_STATIC) set(TYPE_OF_LIB STATIC) @@ -115,14 +121,14 @@ if(BUILD_DEPENDENCIES) endif() endif() - if (BUILD_COMMON_CURL) + if (BUILD_COMMON_CURL AND BUILD_CURL) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DUSE_MBEDTLS=${USE_MBEDTLS}) build_dependency(curl ${BUILD_ARGS}) endif() - if (BUILD_COMMON_LWS) + if (BUILD_COMMON_LWS AND BUILD_LWS) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} @@ -200,10 +206,9 @@ find_package(Threads) if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) if(USE_OPENSSL) - find_package(OpenSSL REQUIRED) + find_package(OpenSSL REQUIRED) elseif(USE_MBEDTLS) find_package(MbedTLS REQUIRED) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) else() message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) endif() @@ -223,7 +228,7 @@ endif() -if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) +if((NOT BUILD_DEPENDENCIES OR NOT BUILD_CURL) AND BUILD_COMMON_CURL) if (WIN32) find_package(CURL REQUIRED) else() @@ -233,7 +238,7 @@ if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) endif() endif() -if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) +if((NOT BUILD_DEPENDENCIES OR NOT BUILD_LWS) AND BUILD_COMMON_LWS) if (WIN32) find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) else() @@ -247,7 +252,7 @@ endif() ############# Done finding 3rd-party dependencies ############ -############# TODO: Doing.... ############ +############# TODO: Doing.... what ############ # TODO: Note, these variables are never used, in C, CPP, WebRTC SDKs. Not in cmake and not in source files. # Confirm whether we need these. @@ -348,7 +353,7 @@ if (USE_OPENSSL) endif() else() # USE_MBEDTLS set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) - set(PRODUCER_CRYPTO_LIBRARIES MbedTLS MbedCrypto) + set(PRODUCER_CRYPTO_LIBRARIES mbedtls mbedcrypto) endif() # TODO: Confirm this is where WebRTC build is broken From 60647dfa7a123990005fb5787284fc00454745c9 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 21 Mar 2024 13:52:33 -0700 Subject: [PATCH 65/94] Trying to fix Windows runtime errors --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c0917150..1458f78b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -347,9 +347,9 @@ if (USE_OPENSSL) # set(PRODUCER_CRYPTO_LIBRARIES # OpenSSL::Crypto # OpenSSL::SSL) - set(PRODUCER_CRYPTO_LIBRARIES libssl libcrypto) + set(PRODUCER_CRYPTO_LIBRARIES libcrypto libssl) else() - set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) + set(PRODUCER_CRYPTO_LIBRARIES crypto ssl) endif() else() # USE_MBEDTLS set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) From 9e5140a350840186b51cdba148eb1ac7b197879e Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 21 Mar 2024 15:02:31 -0700 Subject: [PATCH 66/94] Revert "Trying to fix Windows runtime errors" This reverts commit 60647dfa7a123990005fb5787284fc00454745c9. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1458f78b1..8c0917150 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -347,9 +347,9 @@ if (USE_OPENSSL) # set(PRODUCER_CRYPTO_LIBRARIES # OpenSSL::Crypto # OpenSSL::SSL) - set(PRODUCER_CRYPTO_LIBRARIES libcrypto libssl) + set(PRODUCER_CRYPTO_LIBRARIES libssl libcrypto) else() - set(PRODUCER_CRYPTO_LIBRARIES crypto ssl) + set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) endif() else() # USE_MBEDTLS set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) From d3afb1c573bdd3262e556b852fc9490ce10c6d1f Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Thu, 21 Mar 2024 14:24:17 -0700 Subject: [PATCH 67/94] Add comments, cleanup --- CMakeLists.txt | 70 +++++++++++++++++++------------------------------- 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c0917150..cbee72a0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,7 +106,7 @@ if(BUILD_DEPENDENCIES) message(FATAL_ERROR "Only one of ${SSL_OPTIONS} can be enabled") endif() - # If not using system's crypto library. + # If building the specified crypto library from source if(BUILD_CRYPTO) if(USE_OPENSSL) message(STATUS "Building OpenSSL") @@ -121,6 +121,7 @@ if(BUILD_DEPENDENCIES) endif() endif() + # If building KVS Producer C Common Curl, build curl. if (BUILD_COMMON_CURL AND BUILD_CURL) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} @@ -128,6 +129,7 @@ if(BUILD_DEPENDENCIES) build_dependency(curl ${BUILD_ARGS}) endif() + # If building KVS Producer C Common LWS, build libwebsockets. if (BUILD_COMMON_LWS AND BUILD_LWS) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} @@ -136,6 +138,7 @@ if(BUILD_DEPENDENCIES) build_dependency(websockets ${BUILD_ARGS}) endif() + # If building KVS Producer C tests, build gtest. if(BUILD_TEST) build_dependency(gtest) endif() @@ -156,19 +159,14 @@ message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. # TODO: Leave a note in the PIC file libkvspic.pc.cmake that the below comments/messages must be updated # if we change "prefix=" from CMAKE_INSTALL_PREFIX. (CMAKE_INSTALL_PREFIX = usr/local). if(BUILD_KVS_PIC) - # TODO: double check with the original comment that used to be here... make sure this comment is correct. - # KVS PIC will live in the DEPENDENCY_DOWNLOAD_PATH. - # TODO: Double check all the below is correct/necessary. - # TODO: Find a way to check specifically for an alrady built PIC here in the project, don't build if found set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) fetch_repo(kvspic ${BUILD_ARGS}) add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") include_directories("${PIC_HEADERS}") - else() # TODO: test this already-installed case # Finding PIC on system using the libcproducer.pc.cmake file. @@ -182,7 +180,6 @@ else() Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") endif() - # Note: PIC Utils are built seperately as CommonLWS only uses these files. pkg_check_modules(KVS_PIC_UTILS libkvspicUtils) if(KVS_PIC_UTILS_FOUND) message("Found system KVS PIC Utils located: ${KVS_PIC_UTILS_PREFIX}") @@ -192,14 +189,13 @@ else() message(FATAL_ERROR "Could not find system KVS PIC Utils. PkgConfig searched in: ${KVS_PIC_UTILS_INCLUDE_DIRS} \ Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") endif() - endif() ############# Done checking system for kvspic ############# -############# Finding 3rd-party dependencies ############ +############# Finding 3rd-party dependencies if not built from source ############ # TODO: shouldn't this be "required" ? find_package(Threads) @@ -214,20 +210,6 @@ if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) endif() endif() - -# TODO: Need to figure out the use case here. -# If we are building deps, should we check for system libraries at all? -# - Is there ever a case that buildDeps==TRUE AND buildCommon<>==FALSE? -# - And then is there ever a case buildDeps==FALSE AND buildCommon<>==TRUE? -# - Which takes precedence? -# I would think buildCommon<> is a way of overriding the in-house building and avoiding -# fetching the repo in this project. This way you can keep buildDeps=TRUE and then -# specify which ones you actually don't want built with the project by setting buildCommon to true. -# However, currently I have the logic setup reverse from the above: we only use common/system build -# if buildDeps is off AND buildCommon<> is TRUE for the package. - - - if((NOT BUILD_DEPENDENCIES OR NOT BUILD_CURL) AND BUILD_COMMON_CURL) if (WIN32) find_package(CURL REQUIRED) @@ -249,11 +231,10 @@ if((NOT BUILD_DEPENDENCIES OR NOT BUILD_LWS) AND BUILD_COMMON_LWS) link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) endif() -############# Done finding 3rd-party dependencies ############ - +############# Done finding 3rd-party dependencies if not built from source ############ -############# TODO: Doing.... what ############ +# Configure bitness. # TODO: Note, these variables are never used, in C, CPP, WebRTC SDKs. Not in cmake and not in source files. # Confirm whether we need these. if(CMAKE_SIZEOF_VOID_P STREQUAL 4) @@ -312,20 +293,18 @@ file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") -#file(GLOB_RECURSE PRODUCER_C_SOURCE_FILES "src/source/*.c") set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) - include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) include_directories(${OPEN_SRC_INCLUDE_DIRS}) link_directories(${OPEN_SRC_INSTALL_PREFIX}/lib) # Unix intsalls libraries into /lib directory -link_directories(${OPEN_SRC_INSTALL_PREFIX}/bin) # Windows installs libraries into /bin directory +link_directories(${OPEN_SRC_INSTALL_PREFIX}/bin) # Windows may install libraries into /bin directory +# TODO: Remove the below debugging code # Get the list of link directories get_property(link_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY LINK_DIRECTORIES) - # Print each link directory foreach(dir IN LISTS link_dirs) message("Link directory: ${dir}") @@ -339,11 +318,12 @@ if(SET_SSL_CALLBACKS) add_definitions(-DSET_SSL_CALLBACKS) endif() -# use openssl by default -set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) +# Set which crypto libraries to link with (OpenSSL or MbedTLS). if (USE_OPENSSL) + set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) if(WIN32) + # TODO: remove the below once done testing/debugging # set(PRODUCER_CRYPTO_LIBRARIES # OpenSSL::Crypto # OpenSSL::SSL) @@ -356,16 +336,17 @@ else() # USE_MBEDTLS set(PRODUCER_CRYPTO_LIBRARIES mbedtls mbedcrypto) endif() -# TODO: Confirm this is where WebRTC build is broken +# Note: This install path is necessary for KSV WebRTC SDK to find Producer C headers. install( DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include DESTINATION .) +# Create KVS Common LWS library, link its dependecies, and define its installation. if(BUILD_COMMON_LWS) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonLws.pc.cmake" "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc" @ONLY) - + if (WIN32) add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) else() @@ -386,20 +367,22 @@ if(BUILD_COMMON_LWS) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - endif() +# Create KVS Producer C Common Curl library, link its dependecies, and define its installation. +# Build KVS Producer C samples and tests if specified. if(BUILD_COMMON_CURL) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) + if(WIN32) set(CURL_LIBRARIES libcurl) else() set(CURL_LIBRARIES curl) endif() - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) - + # TODO: Should verify if this is infact built along with curl, if so, do not use find_package when building it from source. if(BUILD_STATIC) # Curl will enable ZLIB as part of its build if it finds # the package. We need to therefore link it for static builds. @@ -424,12 +407,11 @@ if(BUILD_COMMON_CURL) target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) - # TODO: I'd like to know why there is no openssl library and we instead have to use - # ssl and crypto (openssl's dependencies). + # TODO: Remove debug messages, this one and others. message("CURL_LIBRARIES: ${CURL_LIBRARIES}") message("PRODUCER_CRYPTO_LIBRARIES: ${PRODUCER_CRYPTO_LIBRARIES}") - # Linker is not able to find the .lib files on Windows even when they are present and the path is searched. + # Note: The linker is not able to find the .lib files on Windows even when they are present and the path is searched. if(WIN32) target_link_libraries(cproducer kvspic @@ -442,9 +424,9 @@ if(BUILD_COMMON_CURL) PRIVATE ${CURL_LIBRARIES} ${PRODUCER_CRYPTO_LIBRARIES}) endif() - - + # TODO: Remove debug messages, this one and others. message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") + install( TARGETS cproducer ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" From be81fbaa8f0b67de1a86bda37f4d87785ab3a31c Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:38:25 -0700 Subject: [PATCH 68/94] More commenting and cleanup --- CMakeLists.txt | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cbee72a0e..757109c53 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,18 +13,17 @@ set(KINESIS_VIDEO_PRODUCER_C_VERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}.$ set(SUPPORTED_CRYPTO_LIBRARIES "{OpenSSL, MbedTLS}") -# This sets CMAKE_INSTAL_... directories based on GNU standard +# Set CMAKE_INSTALL_ directories based on GNU standard. include(GNUInstallDirs) - # User Flags option(ADD_MUCLIBC "Add -muclibc c flag" OFF) option(USE_OPENSSL "Use openssl as crypto library" ON) option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) option(BUILD_STATIC "Static build" OFF) -option(BUILD_DEPENDENCIES "Whether to build depending libraries from source" ON) # This is a master OFF switch, non will be built if off, but if it is ON, some can be specified to be not built +option(BUILD_DEPENDENCIES "Whether to build dependency libraries from source" ON) # This is a master OFF switch, none will be built if off, but if it is ON, some can be specified to be not built option(BUILD_COMMON_LWS "Whether to build ProducerC libwebsockets common library" OFF) -option(BUILD_COMMON_CURL "Whether to build ProducerC curl common library" ON) # TODO: remove this and any other un-needed flags +option(BUILD_COMMON_CURL "Whether to build ProducerC curl common library" ON) option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) option(BUILD_CRYPTO "Whether to build OpenSSL or MbedTLS, if not, will use system-installed version" ON) option(BUILD_LWS "Whether to build LibWebSockets, if not, will use system-installed version" ON) @@ -254,16 +253,21 @@ endif() # TODO: Figure out what is going on in here and add comments. if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") + # Enable compiler to genarate "Positin Independent Code". set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") - + + # Note: muclib is a standard C library alternative to glibc. if(ADD_MUCLIBC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -muclibc") endif() + # Set compiler flags for code coverage check and enable debug mode. if(CODE_COVERAGE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fprofile-arcs -ftest-coverage") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") endif() + + # Set compiler flags for appropriate sanitizer checks and enable debug mode. function(enableSanitizer SANITIZER) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer" PARENT_SCOPE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer -fno-optimize-sibling-calls" PARENT_SCOPE) @@ -283,15 +287,15 @@ if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") endif() endif() +# Silence warnings for Windows builds. if(MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) endif() - +# Producer C source files are seperated by Common, LWS, Curl, and Producer related code. file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") - file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) @@ -302,13 +306,6 @@ include_directories(${OPEN_SRC_INCLUDE_DIRS}) link_directories(${OPEN_SRC_INSTALL_PREFIX}/lib) # Unix intsalls libraries into /lib directory link_directories(${OPEN_SRC_INSTALL_PREFIX}/bin) # Windows may install libraries into /bin directory -# TODO: Remove the below debugging code -# Get the list of link directories -get_property(link_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY LINK_DIRECTORIES) -# Print each link directory -foreach(dir IN LISTS link_dirs) - message("Link directory: ${dir}") -endforeach() if(ALIGNED_MEMORY_MODEL) add_definitions(-DALIGNED_MEMORY_MODEL) @@ -323,10 +320,6 @@ endif() if (USE_OPENSSL) set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) if(WIN32) - # TODO: remove the below once done testing/debugging - # set(PRODUCER_CRYPTO_LIBRARIES - # OpenSSL::Crypto - # OpenSSL::SSL) set(PRODUCER_CRYPTO_LIBRARIES libssl libcrypto) else() set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) @@ -336,7 +329,7 @@ else() # USE_MBEDTLS set(PRODUCER_CRYPTO_LIBRARIES mbedtls mbedcrypto) endif() -# Note: This install path is necessary for KSV WebRTC SDK to find Producer C headers. +# Note: This install instruction is necessary for KSV WebRTC SDK to find Producer C headers. install( DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include DESTINATION .) @@ -382,7 +375,6 @@ if(BUILD_COMMON_CURL) set(CURL_LIBRARIES curl) endif() - # TODO: Should verify if this is infact built along with curl, if so, do not use find_package when building it from source. if(BUILD_STATIC) # Curl will enable ZLIB as part of its build if it finds # the package. We need to therefore link it for static builds. @@ -411,7 +403,9 @@ if(BUILD_COMMON_CURL) message("CURL_LIBRARIES: ${CURL_LIBRARIES}") message("PRODUCER_CRYPTO_LIBRARIES: ${PRODUCER_CRYPTO_LIBRARIES}") - # Note: The linker is not able to find the .lib files on Windows even when they are present and the path is searched. + # TODO: Make this work with mbedtls on Windows + # Note: The linker is not able to find the .lib files on Windows without the full path, + # even when they are present and in the LIBPATH search path. if(WIN32) target_link_libraries(cproducer kvspic @@ -450,7 +444,7 @@ if(BUILD_COMMON_CURL) target_link_libraries(kvsAudioOnlyStreamingSample cproducer) endif() - if (BUILD_TEST) + if(BUILD_TEST) add_subdirectory(tst) endif() endif() \ No newline at end of file From 4d27f7a94f09dcb9252d46e928e10d80ee354af2 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:46:09 -0700 Subject: [PATCH 69/94] comment --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 757109c53..7a6469051 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,6 +152,7 @@ message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. ############# Checking system for kvspic ############# +# TODO: Remove this comment in final cleanup. # NOTE: this is possibly a breaking change, if not specified, system PIC will not be used. # Prev behavior: look for system PIC if not found, build PIC. # Now: is BUILD_KVS_PIC ? build PIC, else find system PIC - if system PIC not found, fail build From e69543fdbbd71dffedac74e1c09056ff4ed433f9 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 22 Mar 2024 17:04:05 -0700 Subject: [PATCH 70/94] Cleanup setting of linker paths for Windows --- CMakeLists.txt | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a6469051..22bdb4173 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -321,13 +321,21 @@ endif() if (USE_OPENSSL) set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) if(WIN32) - set(PRODUCER_CRYPTO_LIBRARIES libssl libcrypto) + set(PRODUCER_CRYPTO_LIBRARIES + ${OPEN_SRC_INSTALL_PREFIX}/lib/libssl.lib + ${OPEN_SRC_INSTALL_PREFIX}/lib/libcrypto.lib) else() set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) endif() -else() # USE_MBEDTLS +elseif(USE_MBEDTLS) set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) - set(PRODUCER_CRYPTO_LIBRARIES mbedtls mbedcrypto) + if(WIN32) + set(PRODUCER_CRYPTO_LIBRARIES + ${OPEN_SRC_INSTALL_PREFIX}/lib/mbedtls.lib + ${OPEN_SRC_INSTALL_PREFIX}/lib/mbedcrypto.lib) + else() + set(PRODUCER_CRYPTO_LIBRARIES mbedtls mbedcrypto) + endif() endif() # Note: This install instruction is necessary for KSV WebRTC SDK to find Producer C headers. @@ -371,7 +379,7 @@ if(BUILD_COMMON_CURL) "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) if(WIN32) - set(CURL_LIBRARIES libcurl) + set(CURL_LIBRARIES ${OPEN_SRC_INSTALL_PREFIX}/lib/libcurl-d_imp.lib) else() set(CURL_LIBRARIES curl) endif() @@ -407,17 +415,9 @@ if(BUILD_COMMON_CURL) # TODO: Make this work with mbedtls on Windows # Note: The linker is not able to find the .lib files on Windows without the full path, # even when they are present and in the LIBPATH search path. - if(WIN32) - target_link_libraries(cproducer - kvspic - ${OPEN_SRC_INSTALL_PREFIX}/lib/libssl.lib - ${OPEN_SRC_INSTALL_PREFIX}/lib/libcrypto.lib - ${OPEN_SRC_INSTALL_PREFIX}/lib/libcurl-d_imp.lib) - else() - target_link_libraries(cproducer + target_link_libraries(cproducer PUBLIC kvspic PRIVATE ${CURL_LIBRARIES} ${PRODUCER_CRYPTO_LIBRARIES}) - endif() # TODO: Remove debug messages, this one and others. message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") From 93993b0d779702662bcfb8a7a090de9d1ce009f9 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 22 Mar 2024 20:56:17 -0700 Subject: [PATCH 71/94] Remove unlinking of openssl from CI tests --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4ac7c11c0..b3f41b46d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,6 @@ jobs: - name: Build repository run: | brew install pkgconfig - brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build mkdir build && cd build cmake .. --trace -DBUILD_TEST=TRUE make @@ -67,7 +66,6 @@ jobs: - name: Build repository run: | brew install pkgconfig - brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build mkdir build && cd build cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE make @@ -96,7 +94,6 @@ jobs: - name: Build repository run: | brew install pkgconfig - brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build mkdir build && cd build sh -c 'cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++;cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++' make From 129262a47f5ddd093ddffbe1318568ec67add9e4 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 22 Mar 2024 23:07:36 -0700 Subject: [PATCH 72/94] Specify openssl build path when from built from source, tested static and shared --- CMakeLists.txt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 22bdb4173..9d901647d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -316,6 +316,7 @@ if(SET_SSL_CALLBACKS) add_definitions(-DSET_SSL_CALLBACKS) endif() +# TODO: Test building with BUILD_DEPENDENCIES=OFF # Set which crypto libraries to link with (OpenSSL or MbedTLS). if (USE_OPENSSL) @@ -325,7 +326,16 @@ if (USE_OPENSSL) ${OPEN_SRC_INSTALL_PREFIX}/lib/libssl.lib ${OPEN_SRC_INSTALL_PREFIX}/lib/libcrypto.lib) else() - set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) + # Specify library path if using library built from source. + if(!BUILD_DEPENDENCIES OR !BUILD_CRYPTO) + if(BUILD_STATIC) + set(PRODUCER_CRYPTO_LIBRARIES ${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.a ${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.a) + else() + set(PRODUCER_CRYPTO_LIBRARIES ${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.dylib ${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.dylib) + endif() + else() + set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) + endif() endif() elseif(USE_MBEDTLS) set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) From f952306517606b5c76514c05bb441feec1ca3854 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Fri, 22 Mar 2024 23:15:48 -0700 Subject: [PATCH 73/94] Switch local openssl test to local everything --- .github/workflows/ci.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b3f41b46d..9ae627395 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew install pkgconfig + brew install pkg-config mkdir build && cd build cmake .. --trace -DBUILD_TEST=TRUE make @@ -65,7 +65,7 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew install pkgconfig + brew install pkg-config mkdir build && cd build cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE make @@ -93,7 +93,7 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew install pkgconfig + brew install pkg-config mkdir build && cd build sh -c 'cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++;cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++' make @@ -109,7 +109,7 @@ jobs: cd build ./tst/producer_test - mac-os-build-gcc-local-openssl: + mac-os-build-gcc-system-depsa-openssl: runs-on: macos-11 permissions: id-token: write @@ -126,9 +126,9 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew info openssl + brew install pkg-config openssl curl mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DLOCAL_OPENSSL_BUILD=ON + cmake .. -DBUILD_TEST=TRUE -DBUILD_DEPENDENCIES=FALSE make - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1-node16 @@ -157,7 +157,6 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew info openssl mkdir build && cd build cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DLOCAL_OPENSSL_BUILD=ON make From a392dc0b768bb4596dc62c52b3cc917982a7c0ad Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 14:37:26 -0700 Subject: [PATCH 74/94] Unset DYLD_LIBRARY_PATH --- .github/workflows/ci.yml | 1 + CMakeLists.txt | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9ae627395..1fa9e378d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,6 +67,7 @@ jobs: run: | brew install pkg-config mkdir build && cd build + unset DYLD_LIBRARY_PATH cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE make - name: Configure AWS Credentials diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d901647d..d00c47d0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,9 +90,11 @@ if(BUILD_DEPENDENCIES) set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) endif() + set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) + + # Create the dependency directory if it doesn't exist. if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) From 69c37582f9cb2d956eb53e184207e743a15e5db0 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 14:45:09 -0700 Subject: [PATCH 75/94] Print DYLD_LIBRARY_PATH --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1fa9e378d..d5f966d67 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,6 +67,7 @@ jobs: run: | brew install pkg-config mkdir build && cd build + echo $DYLD_LIBRARY_PATH unset DYLD_LIBRARY_PATH cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE make From 5dd013bfe51b8c1c045bb0e2b1414d0d8896b593 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 15:10:32 -0700 Subject: [PATCH 76/94] Set openssl root directory for curl to find --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d00c47d0e..872767c93 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,6 +113,7 @@ if(BUILD_DEPENDENCIES) message(STATUS "Building OpenSSL") set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) build_dependency(openssl ${BUILD_ARGS}) + set(OPENSSL_ROOT_DIR ${OPEN_SRC_INSTALL_PREFIX}) elseif(USE_MBEDTLS) message(STATUS "Building MbedTLS") set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) From e7b922e49b18398102c9e66dce4daacfd789a9e1 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 16:08:30 -0700 Subject: [PATCH 77/94] Trying more --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 872767c93..76bae447f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,6 +114,9 @@ if(BUILD_DEPENDENCIES) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) build_dependency(openssl ${BUILD_ARGS}) set(OPENSSL_ROOT_DIR ${OPEN_SRC_INSTALL_PREFIX}) + set(OPENSSL_INCLUDE_DIR ${OPEN_SRC_INSTALL_PREFIX}/include/openssl) + set(OPENSSL_CRYPTO_LIBRARY ${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.dylib) + set(OPENSSL_SSL_LIBRARY ${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.dylib) elseif(USE_MBEDTLS) message(STATUS "Building MbedTLS") set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) From 18f5bde167abd4a10b45a48ea73829f453f0a1da Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 16:23:18 -0700 Subject: [PATCH 78/94] more --- CMake/Dependencies/libcurl-CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CMake/Dependencies/libcurl-CMakeLists.txt b/CMake/Dependencies/libcurl-CMakeLists.txt index 4248dafc3..4fa0ee584 100644 --- a/CMake/Dependencies/libcurl-CMakeLists.txt +++ b/CMake/Dependencies/libcurl-CMakeLists.txt @@ -29,6 +29,15 @@ if (WIN32) set(CMAKE_ARGS ${CMAKE_ARGS} -DCMAKE_USE_WINSSL=1 -DCURL_STATIC_CRT=1) endif() +message("OPEN_SRC_INSTALL_PREFIX from curl build: ${OPEN_SRC_INSTALL_PREFIX}") + +if(BUILD_DEPENDENCIES AND BUILD_CRYPTO AND USE_OPENSSL) + message("Setting OPEN_SRC_INSTALL_PREFIX from curl build.") + set(CMAKE_ARGS ${CMAKE_ARGS} -DOPENSSL_INCLUDE_DIR=${OPEN_SRC_INSTALL_PREFIX}/include/openssl + -DOPENSSL_SSL_LIBRARY=${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.dylib + -DOPENSSL_CRYPTO_LIBRARY=${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.dylib) +endif() + ExternalProject_Add(project_libcurl GIT_REPOSITORY https://github.com/curl/curl.git GIT_TAG curl-7_68_0 From 85f6d8b290d9d22bc9238d8c1f7ae73d547547f0 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 16:25:59 -0700 Subject: [PATCH 79/94] more --- CMake/Dependencies/libcurl-CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMake/Dependencies/libcurl-CMakeLists.txt b/CMake/Dependencies/libcurl-CMakeLists.txt index 4fa0ee584..807aeb057 100644 --- a/CMake/Dependencies/libcurl-CMakeLists.txt +++ b/CMake/Dependencies/libcurl-CMakeLists.txt @@ -35,7 +35,8 @@ if(BUILD_DEPENDENCIES AND BUILD_CRYPTO AND USE_OPENSSL) message("Setting OPEN_SRC_INSTALL_PREFIX from curl build.") set(CMAKE_ARGS ${CMAKE_ARGS} -DOPENSSL_INCLUDE_DIR=${OPEN_SRC_INSTALL_PREFIX}/include/openssl -DOPENSSL_SSL_LIBRARY=${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.dylib - -DOPENSSL_CRYPTO_LIBRARY=${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.dylib) + -DOPENSSL_CRYPTO_LIBRARY=${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.dylib + -DOPENSSL_ROOT_DIR=${OPEN_SRC_INSTALL_PREFIX}) endif() ExternalProject_Add(project_libcurl From 3946c1819fa5dff4c9b5af14912795a560c75233 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 16:41:23 -0700 Subject: [PATCH 80/94] more --- CMake/Dependencies/libcurl-CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMake/Dependencies/libcurl-CMakeLists.txt b/CMake/Dependencies/libcurl-CMakeLists.txt index 807aeb057..cfc595217 100644 --- a/CMake/Dependencies/libcurl-CMakeLists.txt +++ b/CMake/Dependencies/libcurl-CMakeLists.txt @@ -30,8 +30,9 @@ if (WIN32) endif() message("OPEN_SRC_INSTALL_PREFIX from curl build: ${OPEN_SRC_INSTALL_PREFIX}") - -if(BUILD_DEPENDENCIES AND BUILD_CRYPTO AND USE_OPENSSL) +message("BUILD_CRYPTO: ${BUILD_CRYPTO}") +message("USE_OPENSSL: ${USE_OPENSSL}") +if(BUILD_CRYPTO AND USE_OPENSSL) message("Setting OPEN_SRC_INSTALL_PREFIX from curl build.") set(CMAKE_ARGS ${CMAKE_ARGS} -DOPENSSL_INCLUDE_DIR=${OPEN_SRC_INSTALL_PREFIX}/include/openssl -DOPENSSL_SSL_LIBRARY=${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.dylib From 1b61699bf0347d00fc03c1361f27c74693bd3e6b Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 16:51:16 -0700 Subject: [PATCH 81/94] more --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 76bae447f..46268bc8b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -130,7 +130,9 @@ if(BUILD_DEPENDENCIES) if (BUILD_COMMON_CURL AND BUILD_CURL) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DUSE_MBEDTLS=${USE_MBEDTLS}) + -DUSE_MBEDTLS=${USE_MBEDTLS} + -DBUILD_CRYPTO=${BUILD_CRYPTO} + -DUSE_OPENSSL=${USE_OPENSSL}) build_dependency(curl ${BUILD_ARGS}) endif() From 2ba56c9cc940bbb96df60c8fe2be1e246202a64f Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 17:02:21 -0700 Subject: [PATCH 82/94] more --- CMake/Dependencies/libcurl-CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMake/Dependencies/libcurl-CMakeLists.txt b/CMake/Dependencies/libcurl-CMakeLists.txt index cfc595217..1b97f3488 100644 --- a/CMake/Dependencies/libcurl-CMakeLists.txt +++ b/CMake/Dependencies/libcurl-CMakeLists.txt @@ -37,7 +37,9 @@ if(BUILD_CRYPTO AND USE_OPENSSL) set(CMAKE_ARGS ${CMAKE_ARGS} -DOPENSSL_INCLUDE_DIR=${OPEN_SRC_INSTALL_PREFIX}/include/openssl -DOPENSSL_SSL_LIBRARY=${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.dylib -DOPENSSL_CRYPTO_LIBRARY=${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.dylib - -DOPENSSL_ROOT_DIR=${OPEN_SRC_INSTALL_PREFIX}) + -DOPENSSL_LIBRARIES=${OPEN_SRC_INSTALL_PREFIX}/lib + -DOPENSSL_ROOT_DIR=${OPEN_SRC_INSTALL_PREFIX} + -DCMAKE_PREFIX_PATH=${OPEN_SRC_INSTALL_PREFIX}) endif() ExternalProject_Add(project_libcurl From 269630ca01ca3cd3c79d35b8bbe7da260600c055 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 19:02:21 -0700 Subject: [PATCH 83/94] more --- CMake/Dependencies/libcurl-CMakeLists.txt | 6 +----- CMakeLists.txt | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/CMake/Dependencies/libcurl-CMakeLists.txt b/CMake/Dependencies/libcurl-CMakeLists.txt index 1b97f3488..aa26aabef 100644 --- a/CMake/Dependencies/libcurl-CMakeLists.txt +++ b/CMake/Dependencies/libcurl-CMakeLists.txt @@ -34,11 +34,7 @@ message("BUILD_CRYPTO: ${BUILD_CRYPTO}") message("USE_OPENSSL: ${USE_OPENSSL}") if(BUILD_CRYPTO AND USE_OPENSSL) message("Setting OPEN_SRC_INSTALL_PREFIX from curl build.") - set(CMAKE_ARGS ${CMAKE_ARGS} -DOPENSSL_INCLUDE_DIR=${OPEN_SRC_INSTALL_PREFIX}/include/openssl - -DOPENSSL_SSL_LIBRARY=${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.dylib - -DOPENSSL_CRYPTO_LIBRARY=${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.dylib - -DOPENSSL_LIBRARIES=${OPEN_SRC_INSTALL_PREFIX}/lib - -DOPENSSL_ROOT_DIR=${OPEN_SRC_INSTALL_PREFIX} + set(CMAKE_ARGS ${CMAKE_ARGS} -DOPENSSL_ROOT_DIR=${OPEN_SRC_INSTALL_PREFIX} -DCMAKE_PREFIX_PATH=${OPEN_SRC_INSTALL_PREFIX}) endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 46268bc8b..783df9a2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,10 +88,9 @@ if(BUILD_DEPENDENCIES) # Set directory where to build the dependencies. if (NOT OPEN_SRC_INSTALL_PREFIX) set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) - set(ENV{PKG_CONFIG_PATH} - "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") endif() + set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) @@ -114,9 +113,6 @@ if(BUILD_DEPENDENCIES) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) build_dependency(openssl ${BUILD_ARGS}) set(OPENSSL_ROOT_DIR ${OPEN_SRC_INSTALL_PREFIX}) - set(OPENSSL_INCLUDE_DIR ${OPEN_SRC_INSTALL_PREFIX}/include/openssl) - set(OPENSSL_CRYPTO_LIBRARY ${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.dylib) - set(OPENSSL_SSL_LIBRARY ${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.dylib) elseif(USE_MBEDTLS) message(STATUS "Building MbedTLS") set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) From a5a535f0e7f470836ab06669df732bfd99476ece Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 20:28:56 -0700 Subject: [PATCH 84/94] printing all openssl find_package vars --- CMake/Dependencies/libopenssl-CMakeLists.txt | 6 +++--- CMakeLists.txt | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CMake/Dependencies/libopenssl-CMakeLists.txt b/CMake/Dependencies/libopenssl-CMakeLists.txt index fbe3d41a2..9f57e88a4 100644 --- a/CMake/Dependencies/libopenssl-CMakeLists.txt +++ b/CMake/Dependencies/libopenssl-CMakeLists.txt @@ -4,7 +4,7 @@ project(libopenssl-download LANGUAGES C) if (WIN32) find_program(MAKE_EXE NAMES nmake) - SET(CONFIGURE_COMMAND perl ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure VC-WIN64A no-asm --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX}) + SET(CONFIGURE_COMMAND perl ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure VC-WIN64A no-asm --prefix=${OPEN_SRC_INSTALL_PREFIX}) else() find_program(MAKE_EXE NAMES make) if (BUILD_STATIC) @@ -18,9 +18,9 @@ else() endif() if (DEFINED BUILD_OPENSSL_PLATFORM AND NOT BUILD_OPENSSL_PLATFORM STREQUAL OFF) - SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX} ${BUILD_OPENSSL_PLATFORM} -Wno-nullability-completeness -Wno-expansion-to-defined) + SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} ${BUILD_OPENSSL_PLATFORM} -Wno-nullability-completeness -Wno-expansion-to-defined) else() - SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/config ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX} -Wno-nullability-completeness -Wno-expansion-to-defined) + SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/config ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} -Wno-nullability-completeness -Wno-expansion-to-defined) endif() endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 783df9a2f..f2a5824ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,6 +113,13 @@ if(BUILD_DEPENDENCIES) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) build_dependency(openssl ${BUILD_ARGS}) set(OPENSSL_ROOT_DIR ${OPEN_SRC_INSTALL_PREFIX}) + find_package(OpenSSL REQUIRED) + message("OPENSSL_FOUND: ${OPENSSL_FOUND}") + message("OPENSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}") + message("OPENSSL_LIBRARIES: ${OPENSSL_LIBRARIES}") + message("OPENSSL_VERSION: ${OPENSSL_VERSION}") + message("OPENSSL_CRYPTO_LIBRARY: ${OPENSSL_CRYPTO_LIBRARY}") + message("OPENSSL_SSL_LIBRARY: ${OPENSSL_SSL_LIBRARY}") elseif(USE_MBEDTLS) message(STATUS "Building MbedTLS") set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) From 38424d955d101de4fed16443e8e518657e43dbaa Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 21:27:24 -0700 Subject: [PATCH 85/94] Switch my curl fork --- CMake/Dependencies/libcurl-CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMake/Dependencies/libcurl-CMakeLists.txt b/CMake/Dependencies/libcurl-CMakeLists.txt index aa26aabef..2e6bb745f 100644 --- a/CMake/Dependencies/libcurl-CMakeLists.txt +++ b/CMake/Dependencies/libcurl-CMakeLists.txt @@ -39,8 +39,9 @@ if(BUILD_CRYPTO AND USE_OPENSSL) endif() ExternalProject_Add(project_libcurl - GIT_REPOSITORY https://github.com/curl/curl.git - GIT_TAG curl-7_68_0 + GIT_REPOSITORY https://github.com/stefankiesz/curl-7_68_0.git + GIT_TAG 7_68_0 + GIT_SHALLOW TRUE PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build CMAKE_ARGS ${CMAKE_ARGS} BUILD_ALWAYS TRUE From 9b9be5664d5a33ec7ef0a47dee530436fce4f320 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sat, 23 Mar 2024 21:50:43 -0700 Subject: [PATCH 86/94] Isolate job, verify unlink openssl works --- .github/workflows/ci.yml | 792 +++++++++++++++++++-------------------- 1 file changed, 396 insertions(+), 396 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d5f966d67..d1bc7bd7a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,35 +23,35 @@ jobs: run: | bash scripts/check-clang.sh - mac-os-build-gcc: - runs-on: macos-12 - permissions: - id-token: write - contents: read - env: - CC: /usr/local/bin/gcc-13 - CXX: /usr/local/bin/g++-13 - AWS_KVS_LOG_LEVEL: 2 - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Build repository - run: | - brew install pkg-config - mkdir build && cd build - cmake .. --trace -DBUILD_TEST=TRUE - make - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - cd build - ./tst/producer_test + # mac-os-build-gcc: + # runs-on: macos-12 + # permissions: + # id-token: write + # contents: read + # env: + # CC: /usr/local/bin/gcc-13 + # CXX: /usr/local/bin/g++-13 + # AWS_KVS_LOG_LEVEL: 2 + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Build repository + # run: | + # brew install pkg-config + # mkdir build && cd build + # cmake .. --trace -DBUILD_TEST=TRUE + # make + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1-node16 + # with: + # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # aws-region: ${{ secrets.AWS_REGION }} + # role-duration-seconds: 10800 + # - name: Run tests + # run: | + # cd build + # ./tst/producer_test mac-os-build-clang: runs-on: macos-11 @@ -65,7 +65,7 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew install pkg-config + brew unlink openssl mkdir build && cd build echo $DYLD_LIBRARY_PATH unset DYLD_LIBRARY_PATH @@ -83,214 +83,153 @@ jobs: cd build ./tst/producer_test - mac-os-m1-build-clang: - runs-on: macos-13-xlarge - env: - AWS_KVS_LOG_LEVEL: 2 - permissions: - id-token: write - contents: read - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Build repository - run: | - brew install pkg-config - mkdir build && cd build - sh -c 'cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++;cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++' - make - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - cd build - ./tst/producer_test - - mac-os-build-gcc-system-depsa-openssl: - runs-on: macos-11 - permissions: - id-token: write - contents: read - env: - CC: /usr/local/bin/gcc-13 - CXX: /usr/local/bin/g++-13 - AWS_KVS_LOG_LEVEL: 2 - LDFLAGS: -L/usr/local/opt/openssl@3/lib - CPPFLAGS: -I/usr/local/opt/openssl@3/include - OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Build repository - run: | - brew install pkg-config openssl curl - mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DBUILD_DEPENDENCIES=FALSE - make - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - cd build - ./tst/producer_test - - mac-os-build-clang-local-openssl: - runs-on: macos-latest - env: - AWS_KVS_LOG_LEVEL: 2 - LDFLAGS: -L/usr/local/opt/openssl@3/lib - CPPFLAGS: -I/usr/local/opt/openssl@3/include - OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ - permissions: - id-token: write - contents: read - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Build repository - run: | - mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DLOCAL_OPENSSL_BUILD=ON - make - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - cd build - ./tst/producer_test - - ubuntu-os-gcc-build-lws-mbedtls: - runs-on: ubuntu-20.04 - env: - AWS_KVS_LOG_LEVEL: 2 - CC: gcc - CXX: g++ - permissions: - id-token: write - contents: read - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Install dependencies - run: | - sudo apt clean && sudo apt update - sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' - - name: Build repository - run: | - mkdir build && cd build - cmake .. -DBUILD_COMMON_LWS=ON -DBUILD_COMMON_CURL=OFF -DUSE_OPENSSL=OFF -DUSE_MBEDTLS=ON - make + # mac-os-m1-build-clang: + # runs-on: macos-13-xlarge + # env: + # AWS_KVS_LOG_LEVEL: 2 + # permissions: + # id-token: write + # contents: read + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Build repository + # run: | + # brew install pkg-config + # mkdir build && cd build + # sh -c 'cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++;cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++' + # make + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1-node16 + # with: + # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # aws-region: ${{ secrets.AWS_REGION }} + # role-duration-seconds: 10800 + # - name: Run tests + # run: | + # cd build + # ./tst/producer_test - linux-gcc-code-coverage: - runs-on: ubuntu-20.04 - env: - AWS_KVS_LOG_LEVEL: 2 - permissions: - id-token: write - contents: read - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Build repository - run: | - mkdir build && cd build - cmake .. -DCODE_COVERAGE=TRUE -DBUILD_TEST=TRUE -DBUILD_COMMON_LWS=TRUE - make - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - cd build - ulimit -c unlimited -S - timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - - name: Code coverage - run: | - cd build - for test_file in $(find cproducer.dir kvsCommonCurl.dir kvsCommonLws.dir -name '*.gcno'); do gcov $test_file; done - bash <(curl -s https://codecov.io/bash) + # mac-os-build-gcc-system-depsa-openssl: + # runs-on: macos-11 + # permissions: + # id-token: write + # contents: read + # env: + # CC: /usr/local/bin/gcc-13 + # CXX: /usr/local/bin/g++-13 + # AWS_KVS_LOG_LEVEL: 2 + # LDFLAGS: -L/usr/local/opt/openssl@3/lib + # CPPFLAGS: -I/usr/local/opt/openssl@3/include + # OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Build repository + # run: | + # brew install pkg-config openssl curl + # mkdir build && cd build + # cmake .. -DBUILD_TEST=TRUE -DBUILD_DEPENDENCIES=FALSE + # make + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1-node16 + # with: + # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # aws-region: ${{ secrets.AWS_REGION }} + # role-duration-seconds: 10800 + # - name: Run tests + # run: | + # cd build + # ./tst/producer_test - address-sanitizer: - runs-on: ubuntu-20.04 - permissions: - id-token: write - contents: read - env: - CC: clang - CXX: clang++ - AWS_KVS_LOG_LEVEL: 2 - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Build repository - run: | - mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DADDRESS_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE - make - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - cd build - ulimit -c unlimited -S - timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + # mac-os-build-clang-local-openssl: + # runs-on: macos-latest + # env: + # AWS_KVS_LOG_LEVEL: 2 + # LDFLAGS: -L/usr/local/opt/openssl@3/lib + # CPPFLAGS: -I/usr/local/opt/openssl@3/include + # OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ + # permissions: + # id-token: write + # contents: read + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Build repository + # run: | + # mkdir build && cd build + # cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DLOCAL_OPENSSL_BUILD=ON + # make + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1-node16 + # with: + # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # aws-region: ${{ secrets.AWS_REGION }} + # role-duration-seconds: 10800 + # - name: Run tests + # run: | + # cd build + # ./tst/producer_test - undefined-behavior-sanitizer: - runs-on: ubuntu-20.04 - permissions: - id-token: write - contents: read - env: - CC: clang - CXX: clang++ - AWS_KVS_LOG_LEVEL: 2 - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Build repository - run: | - mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DUNDEFINED_BEHAVIOR_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE - make - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - cd build - ulimit -c unlimited -S - timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + # ubuntu-os-gcc-build-lws-mbedtls: + # runs-on: ubuntu-20.04 + # env: + # AWS_KVS_LOG_LEVEL: 2 + # CC: gcc + # CXX: g++ + # permissions: + # id-token: write + # contents: read + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Install dependencies + # run: | + # sudo apt clean && sudo apt update + # sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + # - name: Build repository + # run: | + # mkdir build && cd build + # cmake .. -DBUILD_COMMON_LWS=ON -DBUILD_COMMON_CURL=OFF -DUSE_OPENSSL=OFF -DUSE_MBEDTLS=ON + # make + # linux-gcc-code-coverage: + # runs-on: ubuntu-20.04 + # env: + # AWS_KVS_LOG_LEVEL: 2 + # permissions: + # id-token: write + # contents: read + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Build repository + # run: | + # mkdir build && cd build + # cmake .. -DCODE_COVERAGE=TRUE -DBUILD_TEST=TRUE -DBUILD_COMMON_LWS=TRUE + # make + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1-node16 + # with: + # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # aws-region: ${{ secrets.AWS_REGION }} + # role-duration-seconds: 10800 + # - name: Run tests + # run: | + # cd build + # ulimit -c unlimited -S + # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + # - name: Code coverage + # run: | + # cd build + # for test_file in $(find cproducer.dir kvsCommonCurl.dir kvsCommonLws.dir -name '*.gcno'); do gcov $test_file; done + # bash <(curl -s https://codecov.io/bash) - # memory-sanitizer: + # address-sanitizer: # runs-on: ubuntu-20.04 # permissions: # id-token: write @@ -302,183 +241,244 @@ jobs: # steps: # - name: Clone repository # uses: actions/checkout@v3 + # - name: Build repository + # run: | + # mkdir build && cd build + # cmake .. -DBUILD_TEST=TRUE -DADDRESS_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE + # make # - name: Configure AWS Credentials # uses: aws-actions/configure-aws-credentials@v1-node16 # with: # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} # aws-region: ${{ secrets.AWS_REGION }} + # role-duration-seconds: 10800 + # - name: Run tests + # run: | + # cd build + # ulimit -c unlimited -S + # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + + # undefined-behavior-sanitizer: + # runs-on: ubuntu-20.04 + # permissions: + # id-token: write + # contents: read + # env: + # CC: clang + # CXX: clang++ + # AWS_KVS_LOG_LEVEL: 2 + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 # - name: Build repository # run: | # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE -DMEMORY_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE + # cmake .. -DBUILD_TEST=TRUE -DUNDEFINED_BEHAVIOR_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE # make + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1-node16 + # with: + # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # aws-region: ${{ secrets.AWS_REGION }} + # role-duration-seconds: 10800 + # - name: Run tests + # run: | + # cd build # ulimit -c unlimited -S # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - #thread-sanitizer: - # runs-on: ubuntu-20.04 - # permissions: - # id-token: write - # contents: read - # env: - # CC: clang - # CXX: clang++ - # AWS_KVS_LOG_LEVEL: 2 - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v1-node16 - # with: - # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # aws-region: ${{ secrets.AWS_REGION }} - # - name: Build repository - # run: | - # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE -DTHREAD_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE - # make - # - name: Run tests - # run: | - # cd build - # ulimit -c unlimited -S - # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - ubuntu-gcc: - runs-on: ubuntu-20.04 - env: - AWS_KVS_LOG_LEVEL: 2 - CC: gcc - CXX: g++ - permissions: - id-token: write - contents: read - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Install dependencies - run: | - sudo apt clean && sudo apt update - sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' - - name: Build repository - run: | - mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE - make - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - cd build - ulimit -c unlimited -S - timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + # # memory-sanitizer: + # # runs-on: ubuntu-20.04 + # # permissions: + # # id-token: write + # # contents: read + # # env: + # # CC: clang + # # CXX: clang++ + # # AWS_KVS_LOG_LEVEL: 2 + # # steps: + # # - name: Clone repository + # # uses: actions/checkout@v3 + # # - name: Configure AWS Credentials + # # uses: aws-actions/configure-aws-credentials@v1-node16 + # # with: + # # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # # aws-region: ${{ secrets.AWS_REGION }} + # # - name: Build repository + # # run: | + # # mkdir build && cd build + # # cmake .. -DBUILD_TEST=TRUE -DMEMORY_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE + # # make + # # ulimit -c unlimited -S + # # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - windows-msvc: - runs-on: windows-2022 - env: - AWS_KVS_LOG_LEVEL: 2 - permissions: - id-token: write - contents: read - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Move cloned repo # to shorten path length for Windows OS - run: | - git config --system core.longpaths true - mkdir C:\amazon-kinesis-video-streams-producer-c - Move-Item -Path "D:\a\amazon-kinesis-video-streams-producer-c\amazon-kinesis-video-streams-producer-c\*" -Destination "C:\amazon-kinesis-video-streams-producer-c" - - name: Install dependencies - run: | - choco install nasm strawberryperl - - name: Build repository - run: | - $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' - cd C:\amazon-kinesis-video-streams-producer-c - .github/build_windows.bat - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' - & "C:\amazon-kinesis-video-streams-producer-c\build\tst\producer_test.exe" --gtest_filter="-ProducerFunctionalityTest.pressure_on_buffer_duration_fail_new_connection_at_token_rotation" + # #thread-sanitizer: + # # runs-on: ubuntu-20.04 + # # permissions: + # # id-token: write + # # contents: read + # # env: + # # CC: clang + # # CXX: clang++ + # # AWS_KVS_LOG_LEVEL: 2 + # # steps: + # # - name: Clone repository + # # uses: actions/checkout@v3 + # # - name: Configure AWS Credentials + # # uses: aws-actions/configure-aws-credentials@v1-node16 + # # with: + # # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # # aws-region: ${{ secrets.AWS_REGION }} + # # - name: Build repository + # # run: | + # # mkdir build && cd build + # # cmake .. -DBUILD_TEST=TRUE -DTHREAD_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE + # # make + # # - name: Run tests + # # run: | + # # cd build + # # ulimit -c unlimited -S + # # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - arm64-cross-compilation: - runs-on: ubuntu-20.04 - env: - CC: aarch64-linux-gnu-gcc - CXX: aarch64-linux-gnu-g++ - steps: - - name: Install dependencies - run: | - sudo apt clean && sudo apt update - sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu - - name: Clone repository - uses: actions/checkout@v3 - - name: Build Repository - run: | - sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' - mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic64 - make - file libcproducer.so - linux-aarch64-cross-compilation: - runs-on: ubuntu-20.04 - env: - CC: aarch64-linux-gnu-gcc - CXX: aarch64-linux-gnu-g++ - steps: - - name: Install dependencies - run: | - sudo apt clean && sudo apt update - sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu - - name: Clone repository - uses: actions/checkout@v3 - - name: Build Repository - run: | - sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' - mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-aarch64 - make - file libcproducer.so - arm32-cross-compilation: - runs-on: ubuntu-20.04 - env: - CC: arm-linux-gnueabi-gcc - CXX: arm-linux-gnueabi-g++ - steps: - - name: Install dependencies - run: | - sudo apt clean && sudo apt update - sudo apt-get -y install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi binutils-arm-linux-gnueabi - - name: Clone repository - uses: actions/checkout@v3 - - name: Build Repository - run: | - sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' - mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic32 - make - file libcproducer.so + # ubuntu-gcc: + # runs-on: ubuntu-20.04 + # env: + # AWS_KVS_LOG_LEVEL: 2 + # CC: gcc + # CXX: g++ + # permissions: + # id-token: write + # contents: read + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Install dependencies + # run: | + # sudo apt clean && sudo apt update + # sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + # - name: Build repository + # run: | + # mkdir build && cd build + # cmake .. -DBUILD_TEST=TRUE + # make + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1-node16 + # with: + # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # aws-region: ${{ secrets.AWS_REGION }} + # role-duration-seconds: 10800 + # - name: Run tests + # run: | + # cd build + # ulimit -c unlimited -S + # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - linux-build-gcc-static: - runs-on: ubuntu-20.04 - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Build Repository - run: | - mkdir build && cd build - cmake .. -DBUILD_STATIC=ON - make + # windows-msvc: + # runs-on: windows-2022 + # env: + # AWS_KVS_LOG_LEVEL: 2 + # permissions: + # id-token: write + # contents: read + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Move cloned repo # to shorten path length for Windows OS + # run: | + # git config --system core.longpaths true + # mkdir C:\amazon-kinesis-video-streams-producer-c + # Move-Item -Path "D:\a\amazon-kinesis-video-streams-producer-c\amazon-kinesis-video-streams-producer-c\*" -Destination "C:\amazon-kinesis-video-streams-producer-c" + # - name: Install dependencies + # run: | + # choco install nasm strawberryperl + # - name: Build repository + # run: | + # $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' + # cd C:\amazon-kinesis-video-streams-producer-c + # .github/build_windows.bat + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1-node16 + # with: + # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # aws-region: ${{ secrets.AWS_REGION }} + # role-duration-seconds: 10800 + # - name: Run tests + # run: | + # $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' + # & "C:\amazon-kinesis-video-streams-producer-c\build\tst\producer_test.exe" --gtest_filter="-ProducerFunctionalityTest.pressure_on_buffer_duration_fail_new_connection_at_token_rotation" + + # arm64-cross-compilation: + # runs-on: ubuntu-20.04 + # env: + # CC: aarch64-linux-gnu-gcc + # CXX: aarch64-linux-gnu-g++ + # steps: + # - name: Install dependencies + # run: | + # sudo apt clean && sudo apt update + # sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Build Repository + # run: | + # sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + # mkdir build && cd build + # cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic64 + # make + # file libcproducer.so + # linux-aarch64-cross-compilation: + # runs-on: ubuntu-20.04 + # env: + # CC: aarch64-linux-gnu-gcc + # CXX: aarch64-linux-gnu-g++ + # steps: + # - name: Install dependencies + # run: | + # sudo apt clean && sudo apt update + # sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Build Repository + # run: | + # sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + # mkdir build && cd build + # cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-aarch64 + # make + # file libcproducer.so + # arm32-cross-compilation: + # runs-on: ubuntu-20.04 + # env: + # CC: arm-linux-gnueabi-gcc + # CXX: arm-linux-gnueabi-g++ + # steps: + # - name: Install dependencies + # run: | + # sudo apt clean && sudo apt update + # sudo apt-get -y install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi binutils-arm-linux-gnueabi + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Build Repository + # run: | + # sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + # mkdir build && cd build + # cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic32 + # make + # file libcproducer.so + + # linux-build-gcc-static: + # runs-on: ubuntu-20.04 + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Build Repository + # run: | + # mkdir build && cd build + # cmake .. -DBUILD_STATIC=ON + # make From 6432c50c70b32bf83088d6b4374f159bfc6085a4 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sun, 24 Mar 2024 01:58:49 -0700 Subject: [PATCH 87/94] Try setting dyld lib path --- .github/workflows/ci.yml | 1 - CMakeLists.txt | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1bc7bd7a..50c28cf5e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,7 +65,6 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew unlink openssl mkdir build && cd build echo $DYLD_LIBRARY_PATH unset DYLD_LIBRARY_PATH diff --git a/CMakeLists.txt b/CMakeLists.txt index f2a5824ad..b92d8d519 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,6 +83,9 @@ endif() # Fetch and build 3rd-party dependencies if specified. if(BUILD_DEPENDENCIES) + # TODO: Should we instead set the RPATH? + set(ENV{DYLD_LIBRARY_PATH} ${CMAKE_SOURCE_DIR}/open-source/lib) + message(STATUS "Begin building dependencies.") # Set directory where to build the dependencies. From eb20224033ace8e489ae7bda7bd43464bc0936e0 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sun, 24 Mar 2024 21:12:58 -0700 Subject: [PATCH 88/94] Revert "Remove unlinking of openssl from CI tests" This reverts commit 93993b0d779702662bcfb8a7a090de9d1ce009f9. --- .github/workflows/ci.yml | 797 ++++++++++--------- CMake/Dependencies/libcurl-CMakeLists.txt | 14 +- CMake/Dependencies/libopenssl-CMakeLists.txt | 6 +- CMakeLists.txt | 34 +- 4 files changed, 410 insertions(+), 441 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 50c28cf5e..4ac7c11c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,35 +23,36 @@ jobs: run: | bash scripts/check-clang.sh - # mac-os-build-gcc: - # runs-on: macos-12 - # permissions: - # id-token: write - # contents: read - # env: - # CC: /usr/local/bin/gcc-13 - # CXX: /usr/local/bin/g++-13 - # AWS_KVS_LOG_LEVEL: 2 - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Build repository - # run: | - # brew install pkg-config - # mkdir build && cd build - # cmake .. --trace -DBUILD_TEST=TRUE - # make - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v1-node16 - # with: - # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # aws-region: ${{ secrets.AWS_REGION }} - # role-duration-seconds: 10800 - # - name: Run tests - # run: | - # cd build - # ./tst/producer_test + mac-os-build-gcc: + runs-on: macos-12 + permissions: + id-token: write + contents: read + env: + CC: /usr/local/bin/gcc-13 + CXX: /usr/local/bin/g++-13 + AWS_KVS_LOG_LEVEL: 2 + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + brew install pkgconfig + brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build + mkdir build && cd build + cmake .. --trace -DBUILD_TEST=TRUE + make + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + cd build + ./tst/producer_test mac-os-build-clang: runs-on: macos-11 @@ -65,9 +66,9 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | + brew install pkgconfig + brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build mkdir build && cd build - echo $DYLD_LIBRARY_PATH - unset DYLD_LIBRARY_PATH cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE make - name: Configure AWS Credentials @@ -82,153 +83,216 @@ jobs: cd build ./tst/producer_test - # mac-os-m1-build-clang: - # runs-on: macos-13-xlarge - # env: - # AWS_KVS_LOG_LEVEL: 2 - # permissions: - # id-token: write - # contents: read - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Build repository - # run: | - # brew install pkg-config - # mkdir build && cd build - # sh -c 'cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++;cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++' - # make - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v1-node16 - # with: - # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # aws-region: ${{ secrets.AWS_REGION }} - # role-duration-seconds: 10800 - # - name: Run tests - # run: | - # cd build - # ./tst/producer_test + mac-os-m1-build-clang: + runs-on: macos-13-xlarge + env: + AWS_KVS_LOG_LEVEL: 2 + permissions: + id-token: write + contents: read + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + brew install pkgconfig + brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build + mkdir build && cd build + sh -c 'cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++;cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++' + make + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + cd build + ./tst/producer_test - # mac-os-build-gcc-system-depsa-openssl: - # runs-on: macos-11 - # permissions: - # id-token: write - # contents: read - # env: - # CC: /usr/local/bin/gcc-13 - # CXX: /usr/local/bin/g++-13 - # AWS_KVS_LOG_LEVEL: 2 - # LDFLAGS: -L/usr/local/opt/openssl@3/lib - # CPPFLAGS: -I/usr/local/opt/openssl@3/include - # OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Build repository - # run: | - # brew install pkg-config openssl curl - # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE -DBUILD_DEPENDENCIES=FALSE - # make - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v1-node16 - # with: - # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # aws-region: ${{ secrets.AWS_REGION }} - # role-duration-seconds: 10800 - # - name: Run tests - # run: | - # cd build - # ./tst/producer_test + mac-os-build-gcc-local-openssl: + runs-on: macos-11 + permissions: + id-token: write + contents: read + env: + CC: /usr/local/bin/gcc-13 + CXX: /usr/local/bin/g++-13 + AWS_KVS_LOG_LEVEL: 2 + LDFLAGS: -L/usr/local/opt/openssl@3/lib + CPPFLAGS: -I/usr/local/opt/openssl@3/include + OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + brew info openssl + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DLOCAL_OPENSSL_BUILD=ON + make + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + cd build + ./tst/producer_test - # mac-os-build-clang-local-openssl: - # runs-on: macos-latest - # env: - # AWS_KVS_LOG_LEVEL: 2 - # LDFLAGS: -L/usr/local/opt/openssl@3/lib - # CPPFLAGS: -I/usr/local/opt/openssl@3/include - # OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ - # permissions: - # id-token: write - # contents: read - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Build repository - # run: | - # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DLOCAL_OPENSSL_BUILD=ON - # make - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v1-node16 - # with: - # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # aws-region: ${{ secrets.AWS_REGION }} - # role-duration-seconds: 10800 - # - name: Run tests - # run: | - # cd build - # ./tst/producer_test + mac-os-build-clang-local-openssl: + runs-on: macos-latest + env: + AWS_KVS_LOG_LEVEL: 2 + LDFLAGS: -L/usr/local/opt/openssl@3/lib + CPPFLAGS: -I/usr/local/opt/openssl@3/include + OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ + permissions: + id-token: write + contents: read + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + brew info openssl + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DLOCAL_OPENSSL_BUILD=ON + make + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + cd build + ./tst/producer_test - # ubuntu-os-gcc-build-lws-mbedtls: - # runs-on: ubuntu-20.04 - # env: - # AWS_KVS_LOG_LEVEL: 2 - # CC: gcc - # CXX: g++ - # permissions: - # id-token: write - # contents: read - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Install dependencies - # run: | - # sudo apt clean && sudo apt update - # sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' - # - name: Build repository - # run: | - # mkdir build && cd build - # cmake .. -DBUILD_COMMON_LWS=ON -DBUILD_COMMON_CURL=OFF -DUSE_OPENSSL=OFF -DUSE_MBEDTLS=ON - # make + ubuntu-os-gcc-build-lws-mbedtls: + runs-on: ubuntu-20.04 + env: + AWS_KVS_LOG_LEVEL: 2 + CC: gcc + CXX: g++ + permissions: + id-token: write + contents: read + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Install dependencies + run: | + sudo apt clean && sudo apt update + sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + - name: Build repository + run: | + mkdir build && cd build + cmake .. -DBUILD_COMMON_LWS=ON -DBUILD_COMMON_CURL=OFF -DUSE_OPENSSL=OFF -DUSE_MBEDTLS=ON + make - # linux-gcc-code-coverage: - # runs-on: ubuntu-20.04 - # env: - # AWS_KVS_LOG_LEVEL: 2 - # permissions: - # id-token: write - # contents: read - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Build repository - # run: | - # mkdir build && cd build - # cmake .. -DCODE_COVERAGE=TRUE -DBUILD_TEST=TRUE -DBUILD_COMMON_LWS=TRUE - # make - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v1-node16 - # with: - # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # aws-region: ${{ secrets.AWS_REGION }} - # role-duration-seconds: 10800 - # - name: Run tests - # run: | - # cd build - # ulimit -c unlimited -S - # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - # - name: Code coverage - # run: | - # cd build - # for test_file in $(find cproducer.dir kvsCommonCurl.dir kvsCommonLws.dir -name '*.gcno'); do gcov $test_file; done - # bash <(curl -s https://codecov.io/bash) + linux-gcc-code-coverage: + runs-on: ubuntu-20.04 + env: + AWS_KVS_LOG_LEVEL: 2 + permissions: + id-token: write + contents: read + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + mkdir build && cd build + cmake .. -DCODE_COVERAGE=TRUE -DBUILD_TEST=TRUE -DBUILD_COMMON_LWS=TRUE + make + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + cd build + ulimit -c unlimited -S + timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + - name: Code coverage + run: | + cd build + for test_file in $(find cproducer.dir kvsCommonCurl.dir kvsCommonLws.dir -name '*.gcno'); do gcov $test_file; done + bash <(curl -s https://codecov.io/bash) - # address-sanitizer: + address-sanitizer: + runs-on: ubuntu-20.04 + permissions: + id-token: write + contents: read + env: + CC: clang + CXX: clang++ + AWS_KVS_LOG_LEVEL: 2 + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DADDRESS_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE + make + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + cd build + ulimit -c unlimited -S + timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + + undefined-behavior-sanitizer: + runs-on: ubuntu-20.04 + permissions: + id-token: write + contents: read + env: + CC: clang + CXX: clang++ + AWS_KVS_LOG_LEVEL: 2 + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DUNDEFINED_BEHAVIOR_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE + make + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + cd build + ulimit -c unlimited -S + timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + + + # memory-sanitizer: # runs-on: ubuntu-20.04 # permissions: # id-token: write @@ -240,244 +304,183 @@ jobs: # steps: # - name: Clone repository # uses: actions/checkout@v3 - # - name: Build repository - # run: | - # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE -DADDRESS_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE - # make # - name: Configure AWS Credentials # uses: aws-actions/configure-aws-credentials@v1-node16 # with: # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} # aws-region: ${{ secrets.AWS_REGION }} - # role-duration-seconds: 10800 - # - name: Run tests - # run: | - # cd build - # ulimit -c unlimited -S - # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - - # undefined-behavior-sanitizer: - # runs-on: ubuntu-20.04 - # permissions: - # id-token: write - # contents: read - # env: - # CC: clang - # CXX: clang++ - # AWS_KVS_LOG_LEVEL: 2 - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 # - name: Build repository # run: | # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE -DUNDEFINED_BEHAVIOR_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE + # cmake .. -DBUILD_TEST=TRUE -DMEMORY_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE # make - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v1-node16 - # with: - # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # aws-region: ${{ secrets.AWS_REGION }} - # role-duration-seconds: 10800 - # - name: Run tests - # run: | - # cd build # ulimit -c unlimited -S # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + #thread-sanitizer: + # runs-on: ubuntu-20.04 + # permissions: + # id-token: write + # contents: read + # env: + # CC: clang + # CXX: clang++ + # AWS_KVS_LOG_LEVEL: 2 + # steps: + # - name: Clone repository + # uses: actions/checkout@v3 + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1-node16 + # with: + # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + # aws-region: ${{ secrets.AWS_REGION }} + # - name: Build repository + # run: | + # mkdir build && cd build + # cmake .. -DBUILD_TEST=TRUE -DTHREAD_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE + # make + # - name: Run tests + # run: | + # cd build + # ulimit -c unlimited -S + # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - # # memory-sanitizer: - # # runs-on: ubuntu-20.04 - # # permissions: - # # id-token: write - # # contents: read - # # env: - # # CC: clang - # # CXX: clang++ - # # AWS_KVS_LOG_LEVEL: 2 - # # steps: - # # - name: Clone repository - # # uses: actions/checkout@v3 - # # - name: Configure AWS Credentials - # # uses: aws-actions/configure-aws-credentials@v1-node16 - # # with: - # # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # # aws-region: ${{ secrets.AWS_REGION }} - # # - name: Build repository - # # run: | - # # mkdir build && cd build - # # cmake .. -DBUILD_TEST=TRUE -DMEMORY_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE - # # make - # # ulimit -c unlimited -S - # # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - - # #thread-sanitizer: - # # runs-on: ubuntu-20.04 - # # permissions: - # # id-token: write - # # contents: read - # # env: - # # CC: clang - # # CXX: clang++ - # # AWS_KVS_LOG_LEVEL: 2 - # # steps: - # # - name: Clone repository - # # uses: actions/checkout@v3 - # # - name: Configure AWS Credentials - # # uses: aws-actions/configure-aws-credentials@v1-node16 - # # with: - # # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # # aws-region: ${{ secrets.AWS_REGION }} - # # - name: Build repository - # # run: | - # # mkdir build && cd build - # # cmake .. -DBUILD_TEST=TRUE -DTHREAD_SANITIZER=TRUE -DBUILD_COMMON_LWS=TRUE - # # make - # # - name: Run tests - # # run: | - # # cd build - # # ulimit -c unlimited -S - # # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - - # ubuntu-gcc: - # runs-on: ubuntu-20.04 - # env: - # AWS_KVS_LOG_LEVEL: 2 - # CC: gcc - # CXX: g++ - # permissions: - # id-token: write - # contents: read - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Install dependencies - # run: | - # sudo apt clean && sudo apt update - # sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' - # - name: Build repository - # run: | - # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE - # make - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v1-node16 - # with: - # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # aws-region: ${{ secrets.AWS_REGION }} - # role-duration-seconds: 10800 - # - name: Run tests - # run: | - # cd build - # ulimit -c unlimited -S - # timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure + ubuntu-gcc: + runs-on: ubuntu-20.04 + env: + AWS_KVS_LOG_LEVEL: 2 + CC: gcc + CXX: g++ + permissions: + id-token: write + contents: read + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Install dependencies + run: | + sudo apt clean && sudo apt update + sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + - name: Build repository + run: | + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE + make + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + cd build + ulimit -c unlimited -S + timeout --signal=SIGABRT 150m ./tst/producer_test --gtest_break_on_failure - # windows-msvc: - # runs-on: windows-2022 - # env: - # AWS_KVS_LOG_LEVEL: 2 - # permissions: - # id-token: write - # contents: read - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Move cloned repo # to shorten path length for Windows OS - # run: | - # git config --system core.longpaths true - # mkdir C:\amazon-kinesis-video-streams-producer-c - # Move-Item -Path "D:\a\amazon-kinesis-video-streams-producer-c\amazon-kinesis-video-streams-producer-c\*" -Destination "C:\amazon-kinesis-video-streams-producer-c" - # - name: Install dependencies - # run: | - # choco install nasm strawberryperl - # - name: Build repository - # run: | - # $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' - # cd C:\amazon-kinesis-video-streams-producer-c - # .github/build_windows.bat - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v1-node16 - # with: - # role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - # role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - # aws-region: ${{ secrets.AWS_REGION }} - # role-duration-seconds: 10800 - # - name: Run tests - # run: | - # $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' - # & "C:\amazon-kinesis-video-streams-producer-c\build\tst\producer_test.exe" --gtest_filter="-ProducerFunctionalityTest.pressure_on_buffer_duration_fail_new_connection_at_token_rotation" + windows-msvc: + runs-on: windows-2022 + env: + AWS_KVS_LOG_LEVEL: 2 + permissions: + id-token: write + contents: read + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Move cloned repo # to shorten path length for Windows OS + run: | + git config --system core.longpaths true + mkdir C:\amazon-kinesis-video-streams-producer-c + Move-Item -Path "D:\a\amazon-kinesis-video-streams-producer-c\amazon-kinesis-video-streams-producer-c\*" -Destination "C:\amazon-kinesis-video-streams-producer-c" + - name: Install dependencies + run: | + choco install nasm strawberryperl + - name: Build repository + run: | + $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' + cd C:\amazon-kinesis-video-streams-producer-c + .github/build_windows.bat + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v1-node16 + with: + role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} + role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} + aws-region: ${{ secrets.AWS_REGION }} + role-duration-seconds: 10800 + - name: Run tests + run: | + $env:Path += ';C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Strawberry\c\bin;C:\Program Files\NASM;C:\amazon-kinesis-video-streams-producer-c\open-source\lib;C:\amazon-kinesis-video-streams-producer-c\open-source\bin' + & "C:\amazon-kinesis-video-streams-producer-c\build\tst\producer_test.exe" --gtest_filter="-ProducerFunctionalityTest.pressure_on_buffer_duration_fail_new_connection_at_token_rotation" - # arm64-cross-compilation: - # runs-on: ubuntu-20.04 - # env: - # CC: aarch64-linux-gnu-gcc - # CXX: aarch64-linux-gnu-g++ - # steps: - # - name: Install dependencies - # run: | - # sudo apt clean && sudo apt update - # sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Build Repository - # run: | - # sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' - # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic64 - # make - # file libcproducer.so - # linux-aarch64-cross-compilation: - # runs-on: ubuntu-20.04 - # env: - # CC: aarch64-linux-gnu-gcc - # CXX: aarch64-linux-gnu-g++ - # steps: - # - name: Install dependencies - # run: | - # sudo apt clean && sudo apt update - # sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Build Repository - # run: | - # sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' - # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-aarch64 - # make - # file libcproducer.so - # arm32-cross-compilation: - # runs-on: ubuntu-20.04 - # env: - # CC: arm-linux-gnueabi-gcc - # CXX: arm-linux-gnueabi-g++ - # steps: - # - name: Install dependencies - # run: | - # sudo apt clean && sudo apt update - # sudo apt-get -y install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi binutils-arm-linux-gnueabi - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Build Repository - # run: | - # sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' - # mkdir build && cd build - # cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic32 - # make - # file libcproducer.so + arm64-cross-compilation: + runs-on: ubuntu-20.04 + env: + CC: aarch64-linux-gnu-gcc + CXX: aarch64-linux-gnu-g++ + steps: + - name: Install dependencies + run: | + sudo apt clean && sudo apt update + sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu + - name: Clone repository + uses: actions/checkout@v3 + - name: Build Repository + run: | + sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic64 + make + file libcproducer.so + linux-aarch64-cross-compilation: + runs-on: ubuntu-20.04 + env: + CC: aarch64-linux-gnu-gcc + CXX: aarch64-linux-gnu-g++ + steps: + - name: Install dependencies + run: | + sudo apt clean && sudo apt update + sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu + - name: Clone repository + uses: actions/checkout@v3 + - name: Build Repository + run: | + sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-aarch64 + make + file libcproducer.so + arm32-cross-compilation: + runs-on: ubuntu-20.04 + env: + CC: arm-linux-gnueabi-gcc + CXX: arm-linux-gnueabi-g++ + steps: + - name: Install dependencies + run: | + sudo apt clean && sudo apt update + sudo apt-get -y install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi binutils-arm-linux-gnueabi + - name: Clone repository + uses: actions/checkout@v3 + - name: Build Repository + run: | + sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6' + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic32 + make + file libcproducer.so - # linux-build-gcc-static: - # runs-on: ubuntu-20.04 - # steps: - # - name: Clone repository - # uses: actions/checkout@v3 - # - name: Build Repository - # run: | - # mkdir build && cd build - # cmake .. -DBUILD_STATIC=ON - # make + linux-build-gcc-static: + runs-on: ubuntu-20.04 + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build Repository + run: | + mkdir build && cd build + cmake .. -DBUILD_STATIC=ON + make diff --git a/CMake/Dependencies/libcurl-CMakeLists.txt b/CMake/Dependencies/libcurl-CMakeLists.txt index 2e6bb745f..4248dafc3 100644 --- a/CMake/Dependencies/libcurl-CMakeLists.txt +++ b/CMake/Dependencies/libcurl-CMakeLists.txt @@ -29,19 +29,9 @@ if (WIN32) set(CMAKE_ARGS ${CMAKE_ARGS} -DCMAKE_USE_WINSSL=1 -DCURL_STATIC_CRT=1) endif() -message("OPEN_SRC_INSTALL_PREFIX from curl build: ${OPEN_SRC_INSTALL_PREFIX}") -message("BUILD_CRYPTO: ${BUILD_CRYPTO}") -message("USE_OPENSSL: ${USE_OPENSSL}") -if(BUILD_CRYPTO AND USE_OPENSSL) - message("Setting OPEN_SRC_INSTALL_PREFIX from curl build.") - set(CMAKE_ARGS ${CMAKE_ARGS} -DOPENSSL_ROOT_DIR=${OPEN_SRC_INSTALL_PREFIX} - -DCMAKE_PREFIX_PATH=${OPEN_SRC_INSTALL_PREFIX}) -endif() - ExternalProject_Add(project_libcurl - GIT_REPOSITORY https://github.com/stefankiesz/curl-7_68_0.git - GIT_TAG 7_68_0 - GIT_SHALLOW TRUE + GIT_REPOSITORY https://github.com/curl/curl.git + GIT_TAG curl-7_68_0 PREFIX ${CMAKE_CURRENT_BINARY_DIR}/build CMAKE_ARGS ${CMAKE_ARGS} BUILD_ALWAYS TRUE diff --git a/CMake/Dependencies/libopenssl-CMakeLists.txt b/CMake/Dependencies/libopenssl-CMakeLists.txt index 9f57e88a4..fbe3d41a2 100644 --- a/CMake/Dependencies/libopenssl-CMakeLists.txt +++ b/CMake/Dependencies/libopenssl-CMakeLists.txt @@ -4,7 +4,7 @@ project(libopenssl-download LANGUAGES C) if (WIN32) find_program(MAKE_EXE NAMES nmake) - SET(CONFIGURE_COMMAND perl ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure VC-WIN64A no-asm --prefix=${OPEN_SRC_INSTALL_PREFIX}) + SET(CONFIGURE_COMMAND perl ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure VC-WIN64A no-asm --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX}) else() find_program(MAKE_EXE NAMES make) if (BUILD_STATIC) @@ -18,9 +18,9 @@ else() endif() if (DEFINED BUILD_OPENSSL_PLATFORM AND NOT BUILD_OPENSSL_PLATFORM STREQUAL OFF) - SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} ${BUILD_OPENSSL_PLATFORM} -Wno-nullability-completeness -Wno-expansion-to-defined) + SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX} ${BUILD_OPENSSL_PLATFORM} -Wno-nullability-completeness -Wno-expansion-to-defined) else() - SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/config ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} -Wno-nullability-completeness -Wno-expansion-to-defined) + SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/config ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX} -Wno-nullability-completeness -Wno-expansion-to-defined) endif() endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index b92d8d519..22bdb4173 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,20 +83,16 @@ endif() # Fetch and build 3rd-party dependencies if specified. if(BUILD_DEPENDENCIES) - # TODO: Should we instead set the RPATH? - set(ENV{DYLD_LIBRARY_PATH} ${CMAKE_SOURCE_DIR}/open-source/lib) - message(STATUS "Begin building dependencies.") # Set directory where to build the dependencies. if (NOT OPEN_SRC_INSTALL_PREFIX) set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) + set(ENV{PKG_CONFIG_PATH} + "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") + set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) endif() - set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) - - # Create the dependency directory if it doesn't exist. if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) @@ -115,14 +111,6 @@ if(BUILD_DEPENDENCIES) message(STATUS "Building OpenSSL") set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) build_dependency(openssl ${BUILD_ARGS}) - set(OPENSSL_ROOT_DIR ${OPEN_SRC_INSTALL_PREFIX}) - find_package(OpenSSL REQUIRED) - message("OPENSSL_FOUND: ${OPENSSL_FOUND}") - message("OPENSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}") - message("OPENSSL_LIBRARIES: ${OPENSSL_LIBRARIES}") - message("OPENSSL_VERSION: ${OPENSSL_VERSION}") - message("OPENSSL_CRYPTO_LIBRARY: ${OPENSSL_CRYPTO_LIBRARY}") - message("OPENSSL_SSL_LIBRARY: ${OPENSSL_SSL_LIBRARY}") elseif(USE_MBEDTLS) message(STATUS "Building MbedTLS") set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) @@ -136,9 +124,7 @@ if(BUILD_DEPENDENCIES) if (BUILD_COMMON_CURL AND BUILD_CURL) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DUSE_MBEDTLS=${USE_MBEDTLS} - -DBUILD_CRYPTO=${BUILD_CRYPTO} - -DUSE_OPENSSL=${USE_OPENSSL}) + -DUSE_MBEDTLS=${USE_MBEDTLS}) build_dependency(curl ${BUILD_ARGS}) endif() @@ -330,7 +316,6 @@ if(SET_SSL_CALLBACKS) add_definitions(-DSET_SSL_CALLBACKS) endif() -# TODO: Test building with BUILD_DEPENDENCIES=OFF # Set which crypto libraries to link with (OpenSSL or MbedTLS). if (USE_OPENSSL) @@ -340,16 +325,7 @@ if (USE_OPENSSL) ${OPEN_SRC_INSTALL_PREFIX}/lib/libssl.lib ${OPEN_SRC_INSTALL_PREFIX}/lib/libcrypto.lib) else() - # Specify library path if using library built from source. - if(!BUILD_DEPENDENCIES OR !BUILD_CRYPTO) - if(BUILD_STATIC) - set(PRODUCER_CRYPTO_LIBRARIES ${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.a ${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.a) - else() - set(PRODUCER_CRYPTO_LIBRARIES ${OPEN_SRC_INSTALL_PREFIX}/lib/ssl.dylib ${OPEN_SRC_INSTALL_PREFIX}/lib/crypto.dylib) - endif() - else() - set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) - endif() + set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) endif() elseif(USE_MBEDTLS) set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) From 32789512ba03bba654526021a617c6e4e2687731 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sun, 24 Mar 2024 21:15:36 -0700 Subject: [PATCH 89/94] Remove setting of openssldir --- CMake/Dependencies/libopenssl-CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMake/Dependencies/libopenssl-CMakeLists.txt b/CMake/Dependencies/libopenssl-CMakeLists.txt index fbe3d41a2..7f52e3619 100644 --- a/CMake/Dependencies/libopenssl-CMakeLists.txt +++ b/CMake/Dependencies/libopenssl-CMakeLists.txt @@ -18,9 +18,9 @@ else() endif() if (DEFINED BUILD_OPENSSL_PLATFORM AND NOT BUILD_OPENSSL_PLATFORM STREQUAL OFF) - SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX} ${BUILD_OPENSSL_PLATFORM} -Wno-nullability-completeness -Wno-expansion-to-defined) + SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/Configure ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} ${BUILD_OPENSSL_PLATFORM} -Wno-nullability-completeness -Wno-expansion-to-defined) else() - SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/config ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} --openssldir=${OPEN_SRC_INSTALL_PREFIX} -Wno-nullability-completeness -Wno-expansion-to-defined) + SET(CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/build/src/project_libopenssl/config ${OPENSSL_EXTRA} --prefix=${OPEN_SRC_INSTALL_PREFIX} -Wno-nullability-completeness -Wno-expansion-to-defined) endif() endif() From 0b27c8235a2e55c553bf89928e306263a5c13722 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Sun, 24 Mar 2024 22:01:51 -0700 Subject: [PATCH 90/94] Tested BUILD_DEPS off for common curl --- CMakeLists copy.txt | 377 ------------------------------------------ CMakeLists.txt | 8 +- oldCMakeLists.txt | 393 -------------------------------------------- 3 files changed, 7 insertions(+), 771 deletions(-) delete mode 100644 CMakeLists copy.txt delete mode 100644 oldCMakeLists.txt diff --git a/CMakeLists copy.txt b/CMakeLists copy.txt deleted file mode 100644 index e33ee08e1..000000000 --- a/CMakeLists copy.txt +++ /dev/null @@ -1,377 +0,0 @@ -cmake_minimum_required(VERSION 3.6.3) - -# Include custom utilites. -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") -include(Utilities) - -project(KinesisVideoProducerC VERSION 1.5.1 LANGUAGES C) - -set(KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION 1) -set(KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION 5) -set(KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION 1) -set(KINESIS_VIDEO_PRODUCER_C_VERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION}) - -set(SUPPORTED_CRYPTO_LIBRARIES "{OpenSSL, MbedTLS}") - -# User Flags -option(ADD_MUCLIBC "Add -muclibc c flag" OFF) -option(BUILD_STATIC "Static build" OFF) -option(BUILD_DEPENDENCIES "Whether or not to build depending libraries from source" ON) -option(USE_OPENSSL "Use openssl as crypto library" ON) -option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) -option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common library" OFF) -option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) # TODO: remove this and any other un-needed flags -option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) -option(BUILD_CRYPTO "Whether or not to build OpenSSL or MbedTLS, if not, will use system-installed version" ON) -option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) -option(BUILD_KVS_PIC "Whether to build PIC SDK, else will use system-installed version" ON) -option(BUILD_SAMPLES "Whether to build Producer C samples" ON) - - -# Maintainer Flags -option(BUILD_TEST "Build the testing tree." OFF) -option(CODE_COVERAGE "Enable coverage reporting" OFF) -option(COMPILER_WARNINGS "Enable all compiler warnings." OFF) -option(ADDRESS_SANITIZER "Build with AddressSanitizer." OFF) -option(MEMORY_SANITIZER "Build with MemorySanitizer." OFF) -option(THREAD_SANITIZER "Build with ThreadSanitizer." OFF) -option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF) -option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) -option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) - -if (BUILD_STATIC) - set(TYPE_OF_LIB STATIC) -else() - set(TYPE_OF_LIB SHARED) -endif() - -if(CONSTRAINED_DEVICE) - add_definitions(-DCONSTRAINED_DEVICE) -endif() - -set(CMAKE_MACOSX_RPATH TRUE) -add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") - -# Set where to build this project. -if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) -else() - set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") -endif() - -# Default to release build if unspecified. -if(NOT CMAKE_BUILD_TYPE) - message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) -endif() - -# Fetch and build 3rd-party dependencies if specified. -if(BUILD_DEPENDENCIES) - message(STATUS "Begin building dependencies.") - - # Set directory where to build the dependencies. - if (NOT OPEN_SRC_INSTALL_PREFIX) - set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) - set(ENV{PKG_CONFIG_PATH} - "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) - endif() - - # Create the dependency directory if it doesn't exist. - if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) - file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) - endif() - - # Verify only one of SUPPORTED_CRYPTO_LIBRARIES are selected. - set(SSL_OPTIONS USE_OPENSSL USE_MBEDTLS) - count_true(ENABLED_SSL_OPTION_COUNT ${SSL_OPTIONS}) - if(ENABLED_SSL_OPTION_COUNT GREATER "1") - message(FATAL_ERROR "Only one of ${SSL_OPTIONS} can be enabled") - endif() - - # If not using system's crypto library. - if(BUILD_CRYPTO) - if(USE_OPENSSL) - message(STATUS "Building OpenSSL") - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) - build_dependency(openssl ${BUILD_ARGS}) - elseif(USE_MBEDTLS) - message(STATUS "Building MbedTLS") - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) - build_dependency(mbedtls ${BUILD_ARGS}) - else() - message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) - endif() - endif() - - if (BUILD_COMMON_LWS) - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} - -DUSE_OPENSSL=${USE_OPENSSL} - -DUSE_MBEDTLS=${USE_MBEDTLS}) - build_dependency(websockets ${BUILD_ARGS}) - endif() - - if (BUILD_COMMON_CURL) - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DUSE_OPENSSL=${USE_OPENSSL} - -DUSE_MBEDTLS=${USE_MBEDTLS}) - build_dependency(curl ${BUILD_ARGS}) - endif() - - if(BUILD_TEST) - build_dependency(gtest) - endif() - - message(STATUS "Finished building dependencies.") -endif() - -find_package(PkgConfig REQUIRED) - -message("CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") #TODO: Remove this. - - -############# Checking system for kvspic ############# - -set(CMAKE_FIND_DEBUG_MODE ON) #TODO: Remove this. - -if(BUILD_KVS_PIC) - set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) - set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) - fetch_repo(kvspic ${BUILD_ARGS}) - add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") - file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") - include_directories("${PIC_HEADERS}") -else() - # Finding PIC on system using the libcproducer.pc.cmake file. - pkg_check_modules(KVSPIC libkvspicUtils) - if(KVSPIC_FOUND) - message("Found system KVS PIC located: ${KVSPIC_PREFIX}") - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) - link_directories(${KVSPIC_LIBRARY_DIRS}) - else() - message(FATAL_ERROR "Could not find system KVS PIC. PkgConfig searched in: ${KVSPIC_INCLUDE_DIRS} \ - Please check PIC installation or set BUILD_KVS_PIC to TRUE to build PIC with this project.") - endif() -endif() - -############# Done checking system for kvspic ############# - - - -############# Finding 3rd-party dependencies ############ - -find_package(Threads) - -# TODO: Should maybe change "BUILD_CRYPTO" to be similar to the other ones: "BUILD_COMMON_CRYPTO" -# (and so BUILD_CRYPTO == !BUILD_COMMON_CRYPTO) -if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) - if(USE_OPENSSL) - find_package(OpenSSL REQUIRED) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) - elseif(USE_MBEDTLS) - find_package(MbedTLS REQUIRED) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) - else() - message(FATAL_ERROR "No crypto library selected. Please specify one of the following: " ${SUPPORTED_CRYPTO_LIBRARIES}) - endif() -endif() - -if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_CURL) - if (WIN32) - find_package(CURL REQUIRED) - set(CURL_LIBRARIES CURL::libcurl) - else() - pkg_check_modules(CURL REQUIRED libcurl) - endif() - - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) - link_directories(${CURL_LIBRARY_DIRS}) -endif() - -if(NOT BUILD_DEPENDENCIES AND BUILD_COMMON_LWS) - if (WIN32) - find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) - else() - pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) - endif() - - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) - link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) -endif() - -############# Done finding 3rd-party dependencies ############ - - -############# TODO: Doing.... ############ - -if(CMAKE_SIZEOF_VOID_P STREQUAL 4) - message(STATUS "Bitness 32 bits") - set(KINESIS_VIDEO_BUILD_BITNESS "x86") - set(KINESIS_VIDEO_BUILD_BITNESS_TYPE "Win32") - set(KINESIS_VIDEO_BUILD_BITNESS_NAME "x86") -elseif(CMAKE_SIZEOF_VOID_P STREQUAL 8) - message(STATUS "Bitness 64 bits") - set(KINESIS_VIDEO_BUILD_BITNESS "x64") - set(KINESIS_VIDEO_BUILD_BITNESS_TYPE "x64") - set(KINESIS_VIDEO_BUILD_BITNESS_NAME "x86_64") -else() - message(FATAL_ERROR "Unknown bitness") -endif() - - -# TODO: Figure out what is going on in here and add comments. -if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") - - if(ADD_MUCLIBC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -muclibc") - endif() - - if(CODE_COVERAGE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fprofile-arcs -ftest-coverage") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") - endif() - function(enableSanitizer SANITIZER) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer" PARENT_SCOPE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer -fno-optimize-sibling-calls" PARENT_SCOPE) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${SANITIZER}" PARENT_SCOPE) - endfunction() - if(ADDRESS_SANITIZER) - enableSanitizer("address") - endif() - if(MEMORY_SANITIZER) - enableSanitizer("memory") - endif() - if(THREAD_SANITIZER) - enableSanitizer("thread") - endif() - if(UNDEFINED_BEHAVIOR_SANITIZER) - enableSanitizer("undefined") - endif() -endif() - -# TODO: What and why is this MSVC thing? -if(MSVC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) -endif() - - -file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c") -file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") -file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") - -file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") -#file(GLOB_RECURSE PRODUCER_C_SOURCE_FILES "src/source/*.c") - -list(APPEND PRODUCER_C_SOURCE_FILES - ${KVS_COMMON_SOURCE_FILES_BASE} - ${KVS_COMMON_SOURCE_FILES_CURL}) - -set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPEN_SRC_INSTALL_PREFIX}/include) - - -include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) -include_directories(${OPEN_SRC_INCLUDE_DIRS}) - -link_directories(${CMAKE_CURRENT_SOURCE_DIR}/open-source/lib) - - -if(ALIGNED_MEMORY_MODEL) - add_definitions(-DALIGNED_MEMORY_MODEL) -endif() - -if(SET_SSL_CALLBACKS) - add_definitions(-DSET_SSL_CALLBACKS) -endif() - -# use openssl by default -set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) - -# set(PRODUCER_CRYPTO_LIBRARY -# OpenSSL::Crypto -# OpenSSL::SSL) -if (USE_MBEDTLS) - set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) -# set(PRODUCER_CRYPTO_LIBRARY -# MbedTLS -# MbedCrypto) -endif() - -install( - DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include - DESTINATION .) - - - -# if(BUILD_COMMON_LWS) - - # ....... - -# endif() - - -# TODO: I wonder, why would producer ever need lws? -if(BUILD_COMMON_CURL) - # producer only uses curl right now - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) - - if(BUILD_STATIC) - # Curl will enable ZLIB as part of its build if it finds - # the package. We need to therefore link it for static builds. - find_package(ZLIB) - if(ZLIB_FOUND) - list(APPEND CURL_LIBRARIES z) - endif() - endif() - - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) - - - if (WIN32) - add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) - else() - add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES}) - endif() - if(NOT BUILD_STATIC) - set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - - target_compile_definitions(cproducer PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) - - # TODO: I'd like to know why there is no openssl librar and we instead have to use - # ssl and crypto (openssl's dependencies). - target_link_libraries(cproducer PUBLIC kvspic curl ssl crypto) - - message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") - install( - TARGETS cproducer - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - - add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c) - target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer) - - add_executable(kvsVideoOnlyOfflineStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyOfflineStreamingSample.c) - target_link_libraries(kvsVideoOnlyOfflineStreamingSample cproducer) - - add_executable(kvsAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioVideoStreamingSample.c) - target_link_libraries(kvsAudioVideoStreamingSample cproducer) - - add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c) - target_link_libraries(kvsAudioOnlyStreamingSample cproducer) - - if (BUILD_TEST) - add_subdirectory(tst) - endif() -endif() \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 22bdb4173..c9357767a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,6 +129,7 @@ if(BUILD_DEPENDENCIES) endif() # If building KVS Producer C Common LWS, build libwebsockets. + # NOTE: This version of LWS does not build on Mac if (BUILD_COMMON_LWS AND BUILD_LWS) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} @@ -203,6 +204,7 @@ find_package(Threads) if(NOT BUILD_DEPENDENCIES OR NOT BUILD_CRYPTO) if(USE_OPENSSL) find_package(OpenSSL REQUIRED) + include_directories(${OPENSSL_INCLUDE_DIR}) elseif(USE_MBEDTLS) find_package(MbedTLS REQUIRED) else() @@ -325,7 +327,11 @@ if (USE_OPENSSL) ${OPEN_SRC_INSTALL_PREFIX}/lib/libssl.lib ${OPEN_SRC_INSTALL_PREFIX}/lib/libcrypto.lib) else() - set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) + if(BUILD_DEPENDENCIES AND BUILD_CRYPTO) + set(PRODUCER_CRYPTO_LIBRARIES ssl crypto) + else() + set(PRODUCER_CRYPTO_LIBRARIES OpenSSL::SSL OpenSSL::Crypto) + endif() endif() elseif(USE_MBEDTLS) set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) diff --git a/oldCMakeLists.txt b/oldCMakeLists.txt deleted file mode 100644 index d26e09682..000000000 --- a/oldCMakeLists.txt +++ /dev/null @@ -1,393 +0,0 @@ -cmake_minimum_required(VERSION 3.6.3) -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") -include(Utilities) -project(KinesisVideoProducerC VERSION 1.5.1 LANGUAGES C) - -set(KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION 1) -set(KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION 5) -set(KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION 1) -set(KINESIS_VIDEO_PRODUCER_C_VERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION}) - -include(GNUInstallDirs) - - -# User Flags -option(ADD_MUCLIBC "Add -muclibc c flag" OFF) -option(BUILD_STATIC "Static build" OFF) -option(BUILD_DEPENDENCIES "Whether or not to build depending libraries from source" ON) -option(USE_OPENSSL "Use openssl as crypto library" ON) -option(USE_MBEDTLS "Use mbedtls as crypto library" OFF) -option(BUILD_COMMON_LWS "Whether or not to build ProducerC libwebsockets common library" OFF) -option(BUILD_COMMON_CURL "Whether or not to build ProducerC curl common library" ON) -option(BUILD_OPENSSL_PLATFORM "If buildng OpenSSL what is the target platform" OFF) -option(LOCAL_OPENSSL_BUILD "Whether or not to use local OpenSSL build" OFF) -option(CONSTRAINED_DEVICE "Change pthread stack size" OFF) - -# Developer Flags -option(BUILD_TEST "Build the testing tree." OFF) -option(CODE_COVERAGE "Enable coverage reporting" OFF) -option(COMPILER_WARNINGS "Enable all compiler warnings." OFF) -option(ADDRESS_SANITIZER "Build with AddressSanitizer." OFF) -option(MEMORY_SANITIZER "Build with MemorySanitizer." OFF) -option(THREAD_SANITIZER "Build with ThreadSanitizer." OFF) -option(UNDEFINED_BEHAVIOR_SANITIZER "Build with UndefinedBehaviorSanitizer." OFF) -option(ALIGNED_MEMORY_MODEL "Aligned memory model ONLY." OFF) -option(SET_SSL_CALLBACKS "Set SSL thread and lock callbacks." OFF) - -set(TYPE_OF_LIB SHARED) -if (BUILD_STATIC) - set(TYPE_OF_LIB STATIC) -endif() - -set(CMAKE_MACOSX_RPATH TRUE) - -get_filename_component(ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) - -add_definitions(-DVERSION_STRING=\"${PROJECT_VERSION}\") - -message("PROJECT_VERSION: ${PROJECT_VERSION}") - -if(CONSTRAINED_DEVICE) - add_definitions(-DCONSTRAINED_DEVICE) -endif() - -if(NOT KINESIS_VIDEO_PRODUCER_C_SRC) -message("it is not") - - if(DEFINED ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - set(KINESIS_VIDEO_PRODUCER_C_SRC $ENV{KINESIS_VIDEO_PRODUCER_C_SRC}) - else() - set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}") - endif() -endif() - -message(STATUS "Kinesis Video Producer path is ${KINESIS_VIDEO_PRODUCER_C_SRC}") - -if(NOT CMAKE_BUILD_TYPE) - message(STATUS "Setting CMAKE_BUILD_TYPE to Release by default") - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) -endif() - -if(BUILD_DEPENDENCIES) - if (NOT OPEN_SRC_INSTALL_PREFIX) - set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/open-source) - set(ENV{PKG_CONFIG_PATH} - "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) - endif() - - if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) - file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) - endif() - - message(STATUS "Begin building dependencies.") - - set(SSL_OPTIONS USE_OPENSSL USE_MBEDTLS) - count_true(ENABLED_SSL_OPTION_COUNT - ${SSL_OPTIONS}) - - if(ENABLED_SSL_OPTION_COUNT GREATER "1") - message(FATAL_ERROR "Only one of ${SSL_OPTIONS} can be enabled") - endif() - - if(NOT LOCAL_OPENSSL_BUILD) - message(STATUS "Building non-local OpenSSL") - if(USE_OPENSSL) - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} - -DBUILD_OPENSSL_PLATFORM=${BUILD_OPENSSL_PLATFORM}) - build_dependency(openssl ${BUILD_ARGS}) - elseif(USE_MBEDTLS) - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) - build_dependency(mbedtls ${BUILD_ARGS}) - else() - message(FATAL_ERROR "No crypto library selected.") - endif() - endif() - - if (BUILD_COMMON_LWS) - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DOPENSSL_DIR=${OPEN_SRC_INSTALL_PREFIX} - -DUSE_OPENSSL=${USE_OPENSSL} - -DUSE_MBEDTLS=${USE_MBEDTLS}) - build_dependency(websockets ${BUILD_ARGS}) - endif() - - if (BUILD_COMMON_CURL) - set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DUSE_OPENSSL=${USE_OPENSSL} - -DUSE_MBEDTLS=${USE_MBEDTLS}) - build_dependency(curl ${BUILD_ARGS}) - endif() - - if(BUILD_TEST) - build_dependency(gtest) - endif() - - message(STATUS "Finished building dependencies.") -endif() - -find_package(PkgConfig REQUIRED) - -############# Check system for kvspic ############# -set(CMAKE_FIND_DEBUG_MODE ON) - - -pkg_check_modules(KVSPIC libkvspicUtils) -if(KVSPIC_FOUND) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${KVSPIC_INCLUDE_DIRS}) - message("PIC found: ${KVSPIC_INCLUDE_DIRS}") - - link_directories(${KVSPIC_LIBRARY_DIRS}) -else() - message("PIC NOT found") - ############# fetch repos that we need do add_subdirectory ############ - # repos that we will build using add_subdirectory will be stored in this path - set(DEPENDENCY_DOWNLOAD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/dependency) - set(BUILD_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) - fetch_repo(kvspic ${BUILD_ARGS}) - add_subdirectory("${DEPENDENCY_DOWNLOAD_PATH}/libkvspic/kvspic-src") - file(GLOB PIC_HEADERS "${pic_project_SOURCE_DIR}/src/*/include") - include_directories("${PIC_HEADERS}") - - ############# fetch repos that we need do add_subdirectory done ############ -endif() - -############# Check system for kvspic done ############# - -############# find dependent libraries ############ - -find_package(Threads) - -if(USE_OPENSSL) - find_package(OpenSSL) - if(NOT OPENSSL_FOUND AND NOT BUILD_DEPENDENCIES) - message(FATAL_ERROR "OpenSSL is not found. Make sure to export PKG_CONFIG_PATH to where OpenSSL's pc file is") - endif() - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) -elseif(USE_MBEDTLS) - find_package(MbedTLS REQUIRED) - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${MBEDTLS_INCLUDE_DIRS}) -else() - message(FATAL_ERROR "No crypto library selected.") -endif() - -if(BUILD_COMMON_CURL) - if (WIN32) - find_package(CURL REQUIRED) - set(CURL_LIBRARIES CURL::libcurl) - else() - pkg_check_modules(CURL REQUIRED libcurl) - endif() - - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS}) - link_directories(${CURL_LIBRARY_DIRS}) -endif() - -if (BUILD_COMMON_LWS) - if (WIN32) - find_package(LIBWEBSOCKETS REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) - else() - pkg_check_modules(LIBWEBSOCKETS REQUIRED libwebsockets) - endif() - - set(OPEN_SRC_INCLUDE_DIRS ${OPEN_SRC_INCLUDE_DIRS} ${LIBWEBSOCKETS_INCLUDE_DIRS}) - link_directories(${LIBWEBSOCKETS_LIBRARY_DIRS}) -endif() - -############# find dependent libraries end ############ - -if(CMAKE_SIZEOF_VOID_P STREQUAL 4) - message(STATUS "Bitness 32 bits") - set(KINESIS_VIDEO_BUILD_BITNESS "x86") - set(KINESIS_VIDEO_BUILD_BITNESS_TYPE "Win32") - set(KINESIS_VIDEO_BUILD_BITNESS_NAME "x86") -elseif(CMAKE_SIZEOF_VOID_P STREQUAL 8) - message(STATUS "Bitness 64 bits") - set(KINESIS_VIDEO_BUILD_BITNESS "x64") - set(KINESIS_VIDEO_BUILD_BITNESS_TYPE "x64") - set(KINESIS_VIDEO_BUILD_BITNESS_NAME "x86_64") -else() - message(FATAL_ERROR "Unknown bitness") -endif() - -if(${CMAKE_C_COMPILER_ID} MATCHES "GNU|Clang") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") - - if(ADD_MUCLIBC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -muclibc") - endif() - - if(CODE_COVERAGE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fprofile-arcs -ftest-coverage") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") - endif() - function(enableSanitizer SANITIZER) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer" PARENT_SCOPE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g -fsanitize=${SANITIZER} -fno-omit-frame-pointer -fno-optimize-sibling-calls" PARENT_SCOPE) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=${SANITIZER}" PARENT_SCOPE) - endfunction() - if(ADDRESS_SANITIZER) - enableSanitizer("address") - endif() - if(MEMORY_SANITIZER) - enableSanitizer("memory") - endif() - if(THREAD_SANITIZER) - enableSanitizer("thread") - endif() - if(UNDEFINED_BEHAVIOR_SANITIZER) - enableSanitizer("undefined") - endif() -endif() - -if(MSVC) - add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) -endif() - -file(GLOB KVS_COMMON_SOURCE_FILES_BASE "src/source/Common/*.c") -file(GLOB KVS_COMMON_SOURCE_FILES_LWS "src/source/Common/Lws/*.c") -file(GLOB KVS_COMMON_SOURCE_FILES_CURL "src/source/Common/Curl/*.c") -file(GLOB PRODUCER_C_SOURCE_FILES "src/source/*.c") - -include_directories(${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include) -include_directories(${OPEN_SRC_INCLUDE_DIRS}) - -if(ALIGNED_MEMORY_MODEL) - add_definitions(-DALIGNED_MEMORY_MODEL) -endif() - -if(SET_SSL_CALLBACKS) - add_definitions(-DSET_SSL_CALLBACKS) -endif() - - -# use openssl by default -set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_OPENSSL) - -set(PRODUCER_CRYPTO_LIBRARY - OpenSSL::Crypto - OpenSSL::SSL) -if (USE_MBEDTLS) - set(CPRODUCER_COMMON_TLS_OPTION KVS_USE_MBEDTLS) - set(PRODUCER_CRYPTO_LIBRARY - MbedTLS - MbedCrypto) -endif() - -install( - DIRECTORY ${KINESIS_VIDEO_PRODUCER_C_SRC}/src/include - DESTINATION .) - -if(BUILD_COMMON_LWS) - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonLws.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc" @ONLY) - - if (WIN32) - add_library(kvsCommonLws STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) - else() - add_library(kvsCommonLws ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_LWS}) - endif() - target_compile_definitions(kvsCommonLws PRIVATE KVS_BUILD_WITH_LWS ${CPRODUCER_COMMON_TLS_OPTION}) - if(NOT BUILD_STATIC) - set_target_properties(kvsCommonLws PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - target_link_libraries(kvsCommonLws - ${OPENSSL_CRYPTO_LIBRARY} - ${OPENSSL_SSL_LIBRARY} - ${LIBWEBSOCKETS_LIBRARIES} - kvspicUtils) - - install( - TARGETS kvsCommonLws - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonLws.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") -endif() - -if(BUILD_COMMON_CURL) - # producer only uses curl right now - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libkvsCommonCurl.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc" @ONLY) - - if(BUILD_STATIC) - # Curl will enable ZLIB as part of its build if it finds - # the package. We need to therefore link it for static builds. - find_package(ZLIB) - if(ZLIB_FOUND) - list(APPEND CURL_LIBRARIES z) - endif() - endif() - - if (WIN32) - add_library(kvsCommonCurl STATIC ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - else() - add_library(kvsCommonCurl ${TYPE_OF_LIB} ${KVS_COMMON_SOURCE_FILES_BASE} ${KVS_COMMON_SOURCE_FILES_CURL}) - endif() - target_compile_definitions(kvsCommonCurl PRIVATE KVS_BUILD_WITH_CURL ${CPRODUCER_COMMON_TLS_OPTION}) - if(NOT BUILD_STATIC) - set_target_properties(kvsCommonCurl PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - target_link_libraries(kvsCommonCurl - kvspicUtils - ${CURL_LIBRARIES} - ${PRODUCER_CRYPTO_LIBRARY}) - - install( - TARGETS kvsCommonCurl - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libkvsCommonCurl.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - - configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/libcproducer.pc.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc" @ONLY) - - - if (WIN32) - add_library(cproducer STATIC ${PRODUCER_C_SOURCE_FILES}) - else() - add_library(cproducer ${TYPE_OF_LIB} ${PRODUCER_C_SOURCE_FILES}) - endif() - if(NOT BUILD_STATIC) - set_target_properties(cproducer PROPERTIES VERSION ${KINESIS_VIDEO_PRODUCER_C_VERSION} SOVERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}) - endif() - target_link_libraries(cproducer PUBLIC kvsCommonCurl kvspic) - - # target_include_directories(cproducer PUBLIC "/usr/local/include") - - message("CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}") - install( - TARGETS cproducer - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/libcproducer.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - - add_executable(kvsVideoOnlyRealtimeStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyRealtimeStreamingSample.c) - target_link_libraries(kvsVideoOnlyRealtimeStreamingSample cproducer) - - add_executable(kvsVideoOnlyOfflineStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsVideoOnlyOfflineStreamingSample.c) - target_link_libraries(kvsVideoOnlyOfflineStreamingSample cproducer) - - add_executable(kvsAudioVideoStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioVideoStreamingSample.c) - target_link_libraries(kvsAudioVideoStreamingSample cproducer) - - add_executable(kvsAudioOnlyStreamingSample ${KINESIS_VIDEO_PRODUCER_C_SRC}/samples/KvsAudioOnlyStreamingSample.c) - target_link_libraries(kvsAudioOnlyStreamingSample cproducer) - - if (BUILD_TEST) - add_subdirectory(tst) - endif() -endif() From a9541a19761cbccf110ec46ab9c9200af3c247d3 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 25 Mar 2024 09:27:51 -0700 Subject: [PATCH 91/94] Update CI tests --- .github/workflows/ci.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4ac7c11c0..564204463 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,6 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew install pkgconfig brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build mkdir build && cd build cmake .. --trace -DBUILD_TEST=TRUE @@ -66,7 +65,6 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew install pkgconfig brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build mkdir build && cd build cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE @@ -95,10 +93,9 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew install pkgconfig brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build mkdir build && cd build - sh -c 'cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++;cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++' + cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++ make - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1-node16 @@ -112,7 +109,7 @@ jobs: cd build ./tst/producer_test - mac-os-build-gcc-local-openssl: + mac-os-build-gcc-system-deps: runs-on: macos-11 permissions: id-token: write @@ -131,7 +128,7 @@ jobs: run: | brew info openssl mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DLOCAL_OPENSSL_BUILD=ON + cmake .. -DBUILD_TEST=TRUE -DBUILD_DEPENDENCIES=FALSE make - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1-node16 @@ -145,7 +142,7 @@ jobs: cd build ./tst/producer_test - mac-os-build-clang-local-openssl: + mac-os-build-clang-system-deps: runs-on: macos-latest env: AWS_KVS_LOG_LEVEL: 2 @@ -162,7 +159,7 @@ jobs: run: | brew info openssl mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DLOCAL_OPENSSL_BUILD=ON + cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DBUILD_DEPENDENCIES=FALSE make - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1-node16 @@ -435,6 +432,7 @@ jobs: cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic64 make file libcproducer.so + linux-aarch64-cross-compilation: runs-on: ubuntu-20.04 env: @@ -454,6 +452,7 @@ jobs: cmake .. -DBUILD_TEST=TRUE -DBUILD_OPENSSL_PLATFORM=linux-aarch64 make file libcproducer.so + arm32-cross-compilation: runs-on: ubuntu-20.04 env: From aa8ea9e63957c6956876fff695bbd3498f6c5e91 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 25 Mar 2024 09:35:06 -0700 Subject: [PATCH 92/94] Install GTest --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 564204463..92136fba9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -126,6 +126,7 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | + brew install googletest brew info openssl mkdir build && cd build cmake .. -DBUILD_TEST=TRUE -DBUILD_DEPENDENCIES=FALSE @@ -157,6 +158,7 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | + brew install googletest brew info openssl mkdir build && cd build cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DBUILD_DEPENDENCIES=FALSE From 58da8fe73c56b2977770e01fb647c9c6a3ebf8c0 Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Mon, 25 Mar 2024 15:40:29 -0700 Subject: [PATCH 93/94] Add tests --- .github/workflows/ci.yml | 71 ++++++++++++++++++++++++++++++++-------- CMakeLists.txt | 27 ++++++++++++++- tst/CMakeLists.txt | 1 + 3 files changed, 85 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 92136fba9..8419befc5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ on: - master jobs: clang-format-check: - runs-on: macos-11 + runs-on: macos-latest steps: - name: Clone repository uses: actions/checkout@v3 @@ -24,13 +24,13 @@ jobs: bash scripts/check-clang.sh mac-os-build-gcc: - runs-on: macos-12 + runs-on: macos-latest permissions: id-token: write contents: read env: - CC: /usr/local/bin/gcc-13 - CXX: /usr/local/bin/g++-13 + CC: gcc-13 + CXX: g++-13 AWS_KVS_LOG_LEVEL: 2 steps: - name: Clone repository @@ -54,7 +54,7 @@ jobs: ./tst/producer_test mac-os-build-clang: - runs-on: macos-11 + runs-on: macos-latest env: AWS_KVS_LOG_LEVEL: 2 permissions: @@ -109,14 +109,14 @@ jobs: cd build ./tst/producer_test - mac-os-build-gcc-system-deps: - runs-on: macos-11 + mac-os-build-gcc-system-openssl: + runs-on: macos-latest permissions: id-token: write contents: read env: - CC: /usr/local/bin/gcc-13 - CXX: /usr/local/bin/g++-13 + CC: gcc-13 + CXX: g++-13 AWS_KVS_LOG_LEVEL: 2 LDFLAGS: -L/usr/local/opt/openssl@3/lib CPPFLAGS: -I/usr/local/opt/openssl@3/include @@ -126,10 +126,9 @@ jobs: uses: actions/checkout@v3 - name: Build repository run: | - brew install googletest brew info openssl mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DBUILD_DEPENDENCIES=FALSE + cmake .. -DBUILD_TEST=TRUE -DBUILD_CRYPTO=FALSE make - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1-node16 @@ -143,7 +142,7 @@ jobs: cd build ./tst/producer_test - mac-os-build-clang-system-deps: + mac-os-build-clang-system-openssl: runs-on: macos-latest env: AWS_KVS_LOG_LEVEL: 2 @@ -161,7 +160,7 @@ jobs: brew install googletest brew info openssl mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DBUILD_DEPENDENCIES=FALSE + cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DBUILD_CRYPTO=FALSE make - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1-node16 @@ -175,6 +174,52 @@ jobs: cd build ./tst/producer_test + # Producer is not compatible with latest CURL, so build only, don't run tests. + mac-os-build-gcc-system-deps: + runs-on: macos-latest + permissions: + id-token: write + contents: read + env: + CC: gcc-13 + CXX: g++-13 + AWS_KVS_LOG_LEVEL: 2 + LDFLAGS: -L/usr/local/opt/openssl@3/lib + CPPFLAGS: -I/usr/local/opt/openssl@3/include + OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + brew install googletest + brew info openssl + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DBUILD_DEPENDENCIES=FALSE + make + + # Producer is not compatible with latest CURL, so build only, don't run tests. + mac-os-build-clang-system-deps: + runs-on: macos-latest + env: + AWS_KVS_LOG_LEVEL: 2 + LDFLAGS: -L/usr/local/opt/openssl@3/lib + CPPFLAGS: -I/usr/local/opt/openssl@3/include + OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ + permissions: + id-token: write + contents: read + steps: + - name: Clone repository + uses: actions/checkout@v3 + - name: Build repository + run: | + brew install googletest + brew info openssl + mkdir build && cd build + cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DBUILD_DEPENDENCIES=FALSE + make + ubuntu-os-gcc-build-lws-mbedtls: runs-on: ubuntu-20.04 env: diff --git a/CMakeLists.txt b/CMakeLists.txt index c9357767a..89f10931a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,7 +129,7 @@ if(BUILD_DEPENDENCIES) endif() # If building KVS Producer C Common LWS, build libwebsockets. - # NOTE: This version of LWS does not build on Mac + # NOTE: This version of LWS does not build succesfully on Mac due to a LWS bug. if (BUILD_COMMON_LWS AND BUILD_LWS) set(BUILD_ARGS -DBUILD_STATIC=${BUILD_STATIC} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} @@ -144,6 +144,31 @@ if(BUILD_DEPENDENCIES) endif() message(STATUS "Finished building dependencies.") + +# GTest MUST be built if using GCC compiler because Mac system-built GTest uses Clang. +# Clang-built GTest is not compatible with GCC-built libraries. This check expects the +# CC env var to be set in the following format: "export CC=/gcc-". +# We currently only test with BUILD_DEPENDENCIES=OFF on Mac CI. +elseif(BUILD_TEST AND APPLE AND DEFINED ENV{CC}) + # Set directory where to build the dependencies. + if (NOT OPEN_SRC_INSTALL_PREFIX) + set(OPEN_SRC_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/open-source) + set(ENV{PKG_CONFIG_PATH} + "$ENV{PKG_CONFIG_PATH}:${OPEN_SRC_INSTALL_PREFIX}/lib/pkgconfig") + set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${OPEN_SRC_INSTALL_PREFIX}) + endif() + + # Create the dependency directory if it doesn't exist. + if(NOT EXISTS ${OPEN_SRC_INSTALL_PREFIX}) + file(MAKE_DIRECTORY ${OPEN_SRC_INSTALL_PREFIX}) + endif() + + # Check if CC env var starts with "gcc". + string(STRIP $ENV{CC} CC_NAME) + message(${CC_NAME}) + if(${CC_NAME} MATCHES ".*gcc-.*") + build_dependency(gtest) + endif() endif() find_package(PkgConfig REQUIRED) diff --git a/tst/CMakeLists.txt b/tst/CMakeLists.txt index 50e3c738a..de374ff6e 100644 --- a/tst/CMakeLists.txt +++ b/tst/CMakeLists.txt @@ -7,6 +7,7 @@ set(KINESIS_VIDEO_PRODUCER_C_SRC "${CMAKE_CURRENT_SOURCE_DIR}/..") if (OPEN_SRC_INSTALL_PREFIX) find_package(GTest REQUIRED PATHS ${OPEN_SRC_INSTALL_PREFIX}) + set(GTEST_INCLUDE_DIRS ${OPEN_SRC_INSTALL_PREFIX}/include) else() find_package(GTest REQUIRED) endif() From 1216f3d3fd8326b0a8493a5b5e6b43baace3cfbb Mon Sep 17 00:00:00 2001 From: Stefan Kieszkowski <85728496+stefankiesz@users.noreply.github.com> Date: Wed, 21 Aug 2024 10:28:15 -0700 Subject: [PATCH 94/94] Revert "Merge branch 'master' into cmake-cleanup" This reverts commit ec5c13ffd60414f50b2236b1b48950753226a5f7, reversing changes made to 58da8fe73c56b2977770e01fb647c9c6a3ebf8c0. --- .github/workflows/ci.yml | 73 +-------------------- CMake/Dependencies/libcurl-CMakeLists.txt | 2 - CMake/Dependencies/libkvspic-CMakeLists.txt | 2 +- CMakeLists.txt | 6 +- README.md | 1 + 5 files changed, 5 insertions(+), 79 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7c9b797d5..8419befc5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,8 +29,8 @@ jobs: id-token: write contents: read env: - CC: /usr/local/bin/gcc-13 - CXX: /usr/local/bin/g++-13 + CC: gcc-13 + CXX: g++-13 AWS_KVS_LOG_LEVEL: 2 steps: - name: Clone repository @@ -88,75 +88,6 @@ jobs: permissions: id-token: write contents: read - steps: - - name: Clone repository - uses: actions/checkout@v3 - - name: Build repository - run: | - brew install pkgconfig - brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build - mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE -DCMAKE_C_COMPILER=$(brew --prefix llvm@15)/bin/clang -DCMAKE_CXX_COMPILER=$(brew --prefix llvm@15)/bin/clang++ - make - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - cd build - ./tst/producer_test - - mac-os-m1-build-gcc: - runs-on: macos-13-xlarge - env: - CC: /opt/homebrew/bin/gcc-13 - CXX: /opt/homebrew/bin/g++-13 - AWS_KVS_LOG_LEVEL: 2 - permissions: - id-token: write - contents: read - steps: - - name: Setup XCode version 15.2 - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: '15.2' - - name: Clone repository - uses: actions/checkout@v3 - - name: Build repository - run: | - brew install pkgconfig - brew unlink openssl # it seems the libcurl is trying to access this openssl despite explicitly setting it to our build - mkdir build && cd build - cmake .. -DBUILD_TEST=TRUE -DCOMPILER_WARNINGS=TRUE - make - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1-node16 - with: - role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} - role-session-name: ${{ secrets.AWS_ROLE_SESSION_NAME }} - aws-region: ${{ secrets.AWS_REGION }} - role-duration-seconds: 10800 - - name: Run tests - run: | - cd build - ./tst/producer_test - - mac-os-build-gcc-local-openssl: - runs-on: macos-11 - permissions: - id-token: write - contents: read - env: - CC: /usr/local/bin/gcc-13 - CXX: /usr/local/bin/g++-13 - AWS_KVS_LOG_LEVEL: 2 - LDFLAGS: -L/usr/local/opt/openssl@3/lib - CPPFLAGS: -I/usr/local/opt/openssl@3/include - OPENSSL_ROOT_DIR: /usr/local/opt/openssl@3/ steps: - name: Clone repository uses: actions/checkout@v3 diff --git a/CMake/Dependencies/libcurl-CMakeLists.txt b/CMake/Dependencies/libcurl-CMakeLists.txt index 74e44b520..4248dafc3 100644 --- a/CMake/Dependencies/libcurl-CMakeLists.txt +++ b/CMake/Dependencies/libcurl-CMakeLists.txt @@ -2,8 +2,6 @@ cmake_minimum_required(VERSION 3.6.3) project(libcurl-download LANGUAGES C) -find_program(MAKE_EXE NAMES make) - if (DEFINED CMAKE_OSX_SYSROOT AND NOT CMAKE_OSX_SYSROOT STREQUAL "") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -isysroot${CMAKE_OSX_SYSROOT}") endif() diff --git a/CMake/Dependencies/libkvspic-CMakeLists.txt b/CMake/Dependencies/libkvspic-CMakeLists.txt index d02b73675..51b80ba6d 100644 --- a/CMake/Dependencies/libkvspic-CMakeLists.txt +++ b/CMake/Dependencies/libkvspic-CMakeLists.txt @@ -7,7 +7,7 @@ include(ExternalProject) # clone repo only ExternalProject_Add(libkvspic-download GIT_REPOSITORY https://github.com/awslabs/amazon-kinesis-video-streams-pic.git - GIT_TAG v1.1.0 + GIT_TAG develop SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/kvspic-src" BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/kvspic-build" CMAKE_ARGS diff --git a/CMakeLists.txt b/CMakeLists.txt index 20f1c8c60..89f10931a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,12 +3,8 @@ cmake_minimum_required(VERSION 3.6.3) # Include custom utilites. set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") include(Utilities) -project(KinesisVideoProducerC VERSION 1.5.2 LANGUAGES C) -set(KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION 1) -set(KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION 5) -set(KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION 2) -set(KINESIS_VIDEO_PRODUCER_C_VERSION ${KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION}.${KINESIS_VIDEO_PRODUCER_C_PATCH_VERSION}) +project(KinesisVideoProducerC VERSION 1.5.1 LANGUAGES C) set(KINESIS_VIDEO_PRODUCER_C_MAJOR_VERSION 1) set(KINESIS_VIDEO_PRODUCER_C_MINOR_VERSION 5) diff --git a/README.md b/README.md index ff2bd3464..fbf04263c 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ You can pass the following options to `cmake ..`. * `-DALIGNED_MEMORY_MODEL` Build for aligned memory model only devices. Default is OFF. * `-DLOCAL_OPENSSL_BUILD` Whether or not to use local OpenSSL build. Default is OFF. * `-DCONSTRAINED_DEVICE` -- Change thread stack size to 0.5Mb, needed for Alpine. +* `-DKVS_DEFAULT_STACK_SIZE` -- Change thread stack size to given value, overrides CONSTRAINED_DEVICE flag DMEMORY_SANITIZER, DTHREAD_SANITIZER etc. flags works only with clang compiler