# 项目信息 project (QCloud_IoT_SDK C) # CMake 最低版本号要求 cmake_minimum_required (VERSION 3.5) ######################CONFIG BEGIN#################################### # 编译类型: release/debug set(BUILD_TYPE "release") # 代码抽取,ON表示根据配置抽取源码到ouput/qcloud_iot_c_sdk目录 set(EXTRACT_SRC OFF) # 编译工具链 set(COMPILE_TOOLS "gcc") set(PLATFORM "linux") #set(COMPILE_TOOLS "MSVC") #set(PLATFORM "windows") # 是否打开MQTT通道的总开关 set(FEATURE_MQTT_COMM_ENABLED ON) # 是否打开设备影子的总开关 set(FEATURE_MQTT_DEVICE_SHADOW ON) # 是否打开CoAP通道的总开关 set(FEATURE_COAP_COMM_ENABLED OFF) # 是否打开MQTT通道网关功能 set(FEATURE_GATEWAY_ENABLED ON) # 是否打开OTA固件升级总开关 set(FEATURE_OTA_COMM_ENABLED ON) # OTA信令通道类型:MQTT/COAP set(FEATURE_OTA_SIGNAL_CHANNEL "MQTT") # MQTT/CoAP接入认证方式,使用证书认证:CERT;使用密钥认证:KEY set(FEATURE_AUTH_MODE "KEY") # 接入认证是否不使用TLS,证书方式必须选择使用TLS,密钥认证可选择不使用TLS set(FEATURE_AUTH_WITH_NOTLS OFF) # 是否打开多线程功能支持 set(FEATURE_MULTITHREAD_ENABLED ON) # 是否使能设备动态注册 set(FEATURE_DEV_DYN_REG_ENABLED ON) # 是否打开日志上报云端功能 set(FEATURE_LOG_UPLOAD_ENABLED OFF) # 是否打开代码中获取设备信息功能,OFF时将从device_info.json中读取设备信息 set(FEATURE_DEBUG_DEV_INFO_USED OFF) # 是否打开获取iot后台时间功能 set(FEATURE_SYSTEM_COMM_ENABLED ON) # 是否使用HTTPS下载固件 set(FEATURE_OTA_USE_HTTPS ON) # 是否打开AT模组TCP功能 set(FEATURE_AT_TCP_ENABLED OFF) # 设置AT模组设备(目前只支持esp8266) set(AT_DEVICE_NAME "esp8266") # 是否打开AT模组中断接收功能 set(FEATURE_AT_UART_RECV_IRQ OFF) # 是否打开AT模组多线程功能 set(FEATURE_AT_OS_USED OFF) # 是否打开AT模组调试功能 set(FEATURE_AT_DEBUG OFF) ######################CONFIG END###################################### # 设置CMAKE使用编译工具及编译选项 if (PLATFORM STREQUAL "linux" AND COMPILE_TOOLS STREQUAL "gcc") set(CMAKE_C_COMPILER ${COMPILE_TOOLS}) if(${BUILD_TYPE} STREQUAL "release") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项 elseif(${BUILD_TYPE} STREQUAL "debug") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项 endif() elseif (PLATFORM STREQUAL "linux" AND COMPILE_TOOLS STREQUAL "arm-none-linux-gnueabi-gcc") set(CMAKE_C_COMPILER ${COMPILE_TOOLS}) if(${BUILD_TYPE} STREQUAL "release") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项 elseif(${BUILD_TYPE} STREQUAL "debug") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项 endif() elseif (PLATFORM STREQUAL "windows" AND COMPILE_TOOLS STREQUAL "MSVC") # 去除相应的警告 add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_USE_32BIT_TIME_T) if(CMAKE_C_FLAGS MATCHES "/W[0-4]") string(REGEX REPLACE "/W[0-4]" "/W2" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W2") endif() else () #用户自定义 set(CMAKE_C_COMPILER ${COMPILE_TOOLS}) # 编译工具 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os") # 编译选项 message(WARNING "User defined platform or compile tools!") endif() # 解析配置 if(${BUILD_TYPE} STREQUAL "release") option(IOT_DEBUG "Enable IOT_DEBUG" OFF) elseif(${BUILD_TYPE} STREQUAL "debug") option(IOT_DEBUG "Enable IOT_DEBUG" ON) else() message(FATAL_ERROR "INVAILD BUILD_TYPE:${BUILD_TYPE}!") endif() if(${FEATURE_AUTH_MODE} STREQUAL "KEY") option(AUTH_MODE_KEY "Enable AUTH_MODE_KEY" ON) option(AUTH_MODE_CERT "Enable AUTH_MODE_CERT" OFF) elseif(${FEATURE_AUTH_MODE} STREQUAL "CERT" AND ${FEATURE_AUTH_WITH_NOTLS} STREQUAL "OFF") option(AUTH_MODE_KEY "Enable AUTH_MODE_KEY" OFF) option(AUTH_MODE_CERT "Enable AUTH_MODE_CERT" ON) option(AUTH_WITH_NOTLS "Enable AUTH_WITH_NOTLS" OFF) else() message(FATAL_ERROR "INVAILD AUTH_MODE:${FEATURE_AUTH_MODE} WITH AUTH_WITH_NOTLS:${FEATURE_AUTH_WITH_NOTLS}!") endif() if(${FEATURE_OTA_COMM_ENABLED} STREQUAL "ON") if(${FEATURE_OTA_SIGNAL_CHANNEL} STREQUAL "MQTT" AND ${FEATURE_MQTT_COMM_ENABLED} STREQUAL "ON" ) option(OTA_MQTT_CHANNEL "Enable TA_MQTT_CHANNEL" ON) elseif(${FEATURE_OTA_SIGNAL_CHANNEL} STREQUAL "COAP" AND ${FEATURE_COAP_COMM_ENABLED} STREQUAL "ON") option(OTA_MQTT_CHANNEL "Enable TA_MQTT_CHANNEL" OFF) else() message(FATAL_ERROR "INVAILD OTA_SIGNAL_CHANNEL:${FEATURE_OTA_SIGNAL_CHANNEL} OR DISABLED OTA_COMM, MQTT_COMM, COAP_COMM!") endif() endif() option(GATEWAY_ENABLED "Enable GATEWAY" ${FEATURE_GATEWAY_ENABLED}) option(AUTH_WITH_NOTLS "Enable AUTH_WITH_NOTLS" ${FEATURE_AUTH_WITH_NOTLS}) option(COAP_COMM_ENABLED "Enable COAP_COMM" ${FEATURE_COAP_COMM_ENABLED}) option(SYSTEM_COMM "Enable SYSTEM_COMM" ${FEATURE_SYSTEM_COMM_ENABLED}) option(MULTITHREAD_ENABLED "Enable Multi-thread support" ${FEATURE_MULTITHREAD_ENABLED}) option(DEV_DYN_REG_ENABLED "Enable DEV_DYN_REG" ${FEATURE_DEV_DYN_REG_ENABLED}) option(LOG_UPLOAD "Enable LOG_UPLOAD" ${FEATURE_LOG_UPLOAD_ENABLED}) option(DEBUG_DEV_INFO_USED "Enable DEBUG_DEV_INFO_USED" ${FEATURE_DEBUG_DEV_INFO_USED}) option(OTA_USE_HTTPS "Enable OTA_USE_HTTPS" ${FEATURE_OTA_USE_HTTPS}) option(AT_TCP_ENABLED "Enable AT_TCP" ${FEATURE_AT_TCP_ENABLED}) if(AT_TCP_ENABLED STREQUAL "ON") option(AT_UART_RECV_IRQ "Enable AT_UART_RECV_IRQ" ${FEATURE_AT_UART_RECV_IRQ}) option(AT_OS_USED "Enable AT_UART_RECV_IRQ" ${FEATURE_AT_OS_USED}) option(AT_DEBUG "Enable AT_DEBUG" ${FEATURE_AT_DEBUG}) else() option(AT_UART_RECV_IRQ "Enable AT_UART_RECV_IRQ" OFF) option(AT_OS_USED "Enable AT_UART_RECV_IRQ" OFF) option(AT_DEBUG "Enable AT_DEBUG" OFF) endif() configure_file ( "${PROJECT_SOURCE_DIR}/tools/cmake_scripts/config.h.in" "${PROJECT_SOURCE_DIR}/include/config.h" @ONLY ) # 头文件目录 include_directories(${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/include/exports ${PROJECT_SOURCE_DIR}/platform/at_device/esp8266 ${PROJECT_SOURCE_DIR}/sdk_src/internal_inc ${PROJECT_SOURCE_DIR}/external_libs/mbedtls/include) file(GLOB src_include ${PROJECT_SOURCE_DIR}/include/*.h) file(GLOB src_inc_export ${PROJECT_SOURCE_DIR}/include/exports/*.h) file(COPY ${src_include} DESTINATION ${PROJECT_SOURCE_DIR}/output/${BUILD_TYPE}/include) file(COPY ${src_inc_export} DESTINATION ${PROJECT_SOURCE_DIR}/output/${BUILD_TYPE}/include/exports) if(${EXTRACT_SRC} STREQUAL "ON" AND NOT DEFINED SAMPLE_ONLY) file(GLOB src_internal_inc ${PROJECT_SOURCE_DIR}/sdk_src/internal_inc/*.h) file(COPY ${src_include} DESTINATION ${PROJECT_SOURCE_DIR}/output/qcloud_iot_c_sdk/include) file(COPY ${src_inc_export} DESTINATION ${PROJECT_SOURCE_DIR}/output/qcloud_iot_c_sdk/include/exports) file(COPY ${src_internal_inc} DESTINATION ${PROJECT_SOURCE_DIR}/output/qcloud_iot_c_sdk/sdk_src/internal_inc) if(AT_TCP_ENABLED STREQUAL "ON") file(GLOB src_at_inc ${PROJECT_SOURCE_DIR}/platform/at_device/${AT_DEVICE_NAME}/*.h) file(COPY ${src_at_inc} DESTINATION ${PROJECT_SOURCE_DIR}/output/qcloud_iot_c_sdk/platform) endif() endif() # 添加源代码目录 if(NOT DEFINED SAMPLE_ONLY) add_subdirectory(${PROJECT_SOURCE_DIR}/sdk_src) add_subdirectory(${PROJECT_SOURCE_DIR}/platform) add_subdirectory(${PROJECT_SOURCE_DIR}/external_libs/mbedtls) endif() add_subdirectory(${PROJECT_SOURCE_DIR}/samples) if(SAMPLE_ONLY STREQUAL "ON") message(STATUS "Only compile samples!") endif() # 证书及设备信息 if(NOT DEFINED SAMPLE_ONLY) file(COPY ${PROJECT_SOURCE_DIR}/certs DESTINATION ${PROJECT_SOURCE_DIR}/output/${BUILD_TYPE}/bin) file(COPY ${PROJECT_SOURCE_DIR}/device_info.json DESTINATION ${PROJECT_SOURCE_DIR}/output/${BUILD_TYPE}/bin) endif()