configs/azure_iot_sdksFunctions.cmake (193 lines of code) (raw):
#Copyright (c) Microsoft. All rights reserved.
#Licensed under the MIT license. See LICENSE file in the project root for full license information.
function(getIoTSDKVersion)
# First find the applicable line in the file
file (STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/iothub_client/inc/iothub_client_version.h" iotsdkverstr
REGEX "^[\t ]*#[\t ]*define[\t ]*IOTHUB_SDK_VERSION[\t ]*\"([0-9]+)[\\.]([0-9]+)[\\.]([0-9]+)\"")
if (!MATCHES)
message(FATAL_ERROR "Unable to find version in ${CMAKE_SOURCE_DIR}/iothub_client/inc/iothub_client_version.h")
else(!MATCHES)
# Parse out the three version identifiers
set(CMAKE_MATCH_3 "")
string(REGEX MATCH "^[\t ]*#[\t ]*define[\t ]*IOTHUB_SDK_VERSION[\t ]*\"([0-9]+)[\\.]([0-9]+)[\\.]([0-9]+)\"" temp "${iotsdkverstr}")
if (NOT "${CMAKE_MATCH_3}" STREQUAL "")
set (_IOT_SDK_VERSION_MAJOR "${CMAKE_MATCH_1}")
set (_IOT_SDK_VERSION_MINOR "${CMAKE_MATCH_2}")
set (_IOT_SDK_VERSION_FIX "${CMAKE_MATCH_3}")
set (IOT_SDK_VERSION_MAJOR ${_IOT_SDK_VERSION_MAJOR} PARENT_SCOPE)
set (IOT_SDK_VERSION_MINOR ${_IOT_SDK_VERSION_MINOR} PARENT_SCOPE)
set (IOT_SDK_VERSION_FIX ${_IOT_SDK_VERSION_FIX} PARENT_SCOPE)
set (IOT_SDK_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" PARENT_SCOPE)
# Keep the name "IOT_SDK_VERION_*" around because previous versions of this script
# had a mispelling and public scope means other projects may be relying on that.
set (IOT_SDK_VERION_MAJOR ${_IOT_SDK_VERSION_MAJOR} PARENT_SCOPE)
set (IOT_SDK_VERION_MINOR ${_IOT_SDK_VERSION_MINOR} PARENT_SCOPE)
set (IOT_SDK_VERION_FIX ${_IOT_SDK_VERSION_FIX} PARENT_SCOPE)
else ()
message(FATAL_ERROR "Unable to find version in ${iotsdkverstr}")
endif()
endif(!MATCHES)
endfunction(getIoTSDKVersion)
function(getProvSDKVersion)
# First find the applicable line in the file \inc\azure_prov_client
file (STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/provisioning_client/inc/azure_prov_client/prov_client_const.h" provsdkverstr
REGEX "^[\t ]*#[\t ]*define[\t ]*PROV_DEVICE_CLIENT_VERSION[\t ]*\"([0-9]+)[\\.]([0-9]+)[\\.]([0-9]+)\"")
if (!MATCHES)
message(FATAL_ERROR "Unable to find version in ${CMAKE_SOURCE_DIR}/provisioning_client/inc/azure_prov_client/prov_client_const.h")
else(!MATCHES)
# Parse out the three version identifiers
set(CMAKE_MATCH_3 "")
string(REGEX MATCH "^[\t ]*#[\t ]*define[\t ]*PROV_DEVICE_CLIENT_VERSION[\t ]*\"([0-9]+)[.]([0-9]+)[.]([0-9]+)\"" temp "${provsdkverstr}")
if (NOT "${CMAKE_MATCH_3}" STREQUAL "")
set (PROV_SDK_VERSION_MAJOR "${CMAKE_MATCH_1}" PARENT_SCOPE)
set (PROV_SDK_VERSION_MINOR "${CMAKE_MATCH_2}" PARENT_SCOPE)
set (PROV_SDK_VERSION_FIX "${CMAKE_MATCH_3}" PARENT_SCOPE)
set (PROV_SDK_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" PARENT_SCOPE)
else ()
message(FATAL_ERROR "Unable to find version in ${provsdkverstr}")
endif()
endif(!MATCHES)
endfunction(getProvSDKVersion)
function(linkUAMQP whatExecutableIsBuilding)
include_directories(${UAMQP_INC_FOLDER})
if(WIN32)
#windows needs this define
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-DGB_MEASURE_MEMORY_FOR_THIS -DGB_DEBUG_ALLOC)
target_link_libraries(${whatExecutableIsBuilding} uamqp aziotsharedutil ws2_32 secur32)
if(${use_openssl})
target_link_libraries(${whatExecutableIsBuilding} $ENV{OpenSSLDir}/lib/ssleay32.lib $ENV{OpenSSLDir}/lib/libeay32.lib)
file(COPY $ENV{OpenSSLDir}/bin/libeay32.dll DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Debug)
file(COPY $ENV{OpenSSLDir}/bin/ssleay32.dll DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Debug)
file(COPY $ENV{OpenSSLDir}/bin/libeay32.dll DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Release)
file(COPY $ENV{OpenSSLDir}/bin/ssleay32.dll DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Release)
endif()
else()
target_link_libraries(${whatExecutableIsBuilding} uamqp aziotsharedutil ${OPENSSL_LIBRARIES})
endif()
endfunction(linkUAMQP)
function(includeMqtt)
include_directories(${MQTT_INC_FOLDER})
endfunction(includeMqtt)
function(linkMqttLibrary whatExecutableIsBuilding)
includeMqtt()
target_link_libraries(${whatExecutableIsBuilding} umqtt)
endfunction(linkMqttLibrary)
function(linkUHTTP whatExecutableIsBuilding)
include_directories(${UHTTP_C_INC_FOLDER})
target_link_libraries(${whatExecutableIsBuilding} uhttp)
endfunction(linkUHTTP)
function(includeHttp)
endfunction(includeHttp)
function(linkHttp whatExecutableIsBuilding)
includeHttp()
if(WIN32)
target_link_libraries(${whatExecutableIsBuilding} winhttp.lib)
else()
target_link_libraries(${whatExecutableIsBuilding} curl)
endif()
endfunction(linkHttp)
function(linkSharedUtil whatIsBuilding)
target_link_libraries(${whatIsBuilding} aziotsharedutil)
endfunction(linkSharedUtil)
function(add_unittest_directory test_directory)
if (${run_unittests})
add_subdirectory(${test_directory})
endif()
endfunction()
function(add_e2etest_directory test_directory)
if (${run_e2e_tests})
add_subdirectory(${test_directory})
endif()
endfunction()
function(add_sfctest_directory test_directory)
if (${run_sfc_tests})
add_subdirectory(${test_directory})
endif()
endfunction()
# XCode warns about unused variables and unused static functions,
# both of which are produced by serializer
function(usePermissiveRulesForSdkSamplesAndTests)
if(XCODE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-variable -Wno-unused-function -Wno-overloaded-virtual -Wno-missing-braces" PARENT_SCOPE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-variable -Wno-unused-function -Wno-overloaded-virtual -Wno-missing-braces" PARENT_SCOPE)
endif()
endfunction()
function(add_longhaul_test_directory test_directory)
if (${run_longhaul_tests})
add_subdirectory(${test_directory})
endif()
endfunction()
# For targets which set warning switches as project properties (e.g. XCode)
function(applyXcodeBuildFlagsIfNeeded stbp_target)
if(XCODE)
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_BOOL_CONVERSION "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_COMMA "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_CONSTANT_CONVERSION "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_EMPTY_BODY "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_ENUM_CONVERSION "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_INFINITE_RECURSION "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_INT_CONVERSION "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_NON_LITERAL_NULL_CONVERSION "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_OBJC_LITERAL_CONVERSION "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_OBJC_ROOT_CLASS "YES_ERROR")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_RANGE_LOOP_ANALYSIS "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_STRICT_PROTOTYPES "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_SUSPICIOUS_MOVE "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN_UNREACHABLE_CODE "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_CLANG_WARN__DUPLICATE_METHOD_MATCH "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_GCC_WARN_64_TO_32_BIT_CONVERSION "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_GCC_WARN_ABOUT_RETURN_TYPE "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_GCC_WARN_UNDECLARED_SELECTOR "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_GCC_WARN_UNINITIALIZED_AUTOS "YES_AGGRESSIVE")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_GCC_WARN_UNUSED_FUNCTION "YES")
set_target_properties(${stbp_target} PROPERTIES XCODE_ATTRIBUTE_GCC_WARN_UNUSED_VARIABLE "YES")
endif()
endfunction()
macro(generate_cppunittest_wrapper whatIsBuilding)
if (${use_cppunittest} AND WIN32)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${whatIsBuilding}.cxx "#include \"${CMAKE_CURRENT_SOURCE_DIR}/${whatIsBuilding}.c\"")
set(${whatIsBuilding}_test_files ${CMAKE_CURRENT_BINARY_DIR}/${whatIsBuilding}.cxx)
#CPP compiler on windows likes to complain about unused local function removed (C4505)
#C compiler doesn't like to complain about the same thing
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4505")
else()
set(${whatIsBuilding}_test_files ${whatIsBuilding}.c)
endif()
endmacro(generate_cppunittest_wrapper)
macro(compileAsC99)
if (CMAKE_VERSION VERSION_LESS "3.1")
if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
set (CMAKE_C_FLAGS "--std=c99 ${CMAKE_C_FLAGS}")
if (NOT IN_OPENWRT)
set (CMAKE_CXX_FLAGS "--std=c++11 ${CMAKE_CXX_FLAGS}")
endif()
endif()
else()
set (CMAKE_C_STANDARD 99)
set (CMAKE_CXX_STANDARD 11)
endif()
endmacro(compileAsC99)
macro(compileAsC11)
if (CMAKE_VERSION VERSION_LESS "3.1")
if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
set (CMAKE_C_FLAGS "--std=c11 ${CMAKE_C_FLAGS}")
set (CMAKE_C_FLAGS "-D_POSIX_C_SOURCE=200112L ${CMAKE_C_FLAGS}")
set (CMAKE_CXX_FLAGS "--std=c++11 ${CMAKE_CXX_FLAGS}")
endif()
else()
set (CMAKE_C_STANDARD 11)
set (CMAKE_CXX_STANDARD 11)
endif()
endmacro(compileAsC11)
macro(enable_address_sanitize)
if(WIN32)
if((${CMAKE_BUILD_TYPE} STREQUAL "Debug") AND (${MSVC_VERSION} GREATER_EQUAL 1930))
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address")
endif()
endif()
endmacro(enable_address_sanitize)