From 9a48db893bd16ae6f1aae6838b33ff74a6d9977b Mon Sep 17 00:00:00 2001 From: Li Cheng Date: Tue, 7 Aug 2018 21:58:27 +0800 Subject: [PATCH] [linkkit] add linkkit sdk source code --- .gitignore | 1 - .../linkkit/sdk/iotx-sdk-c_clone/.gitignore | 35 + .../sdk/iotx-sdk-c_clone/CMakeLists.txt | 100 + .../linkkit/sdk/iotx-sdk-c_clone/LICENSE | 14 + .../linkkit/sdk/iotx-sdk-c_clone/README.md | 172 + .../linkkit/sdk/iotx-sdk-c_clone/aos.makefile | 149 + .../build-rules/_rules-complib.mk | 55 + .../build-rules/_rules-coverage.mk | 41 + .../build-rules/_rules-dist.mk | 36 + .../build-rules/_rules-flat.mk | 148 + .../build-rules/_rules-kmod.mk | 35 + .../build-rules/_rules-libs.mk | 95 + .../build-rules/_rules-modinfo.mk | 56 + .../build-rules/_rules-origin.mk | 120 + .../build-rules/_rules-prefix.mk | 20 + .../build-rules/_rules-prog.mk | 65 + .../build-rules/_rules-repo.mk | 16 + .../build-rules/_rules-submods.mk | 155 + .../build-rules/_rules-top.mk | 221 + .../build-rules/docs/Build-System-Config.md | 41 + .../build-rules/docs/Build-System-Debug.md | 16 + .../docs/Build-System-Introduction.md | 124 + .../build-rules/docs/Build-System-Proj.md | 39 + .../build-rules/docs/Build-System-Units.md | 130 + .../iotx-sdk-c_clone/build-rules/docs/Help.md | 23 + .../sdk/iotx-sdk-c_clone/build-rules/funcs.mk | 172 + .../build-rules/hooks/pre-commit | 23 + .../build-rules/misc/Doxyfile.tpl | 2426 ++++++ .../build-rules/misc/config.generic.cmake | 12 + .../build-rules/misc/config.generic.default | 2 + .../iotx-sdk-c_clone/build-rules/misc/cut.c | 159 + .../iotx-sdk-c_clone/build-rules/misc/cut.h | 247 + .../iotx-sdk-c_clone/build-rules/pre-build.sh | 194 + .../sdk/iotx-sdk-c_clone/build-rules/rules.mk | 178 + .../build-rules/scripts/add_license.sh | 40 + .../build-rules/scripts/del_license.sh | 10 + .../build-rules/scripts/exe_coverage_progs.sh | 25 + .../build-rules/scripts/gen_lcov_report.sh | 82 + .../build-rules/scripts/gen_one_makefile.sh | 124 + .../build-rules/scripts/gen_sub_cmake.sh | 111 + .../build-rules/scripts/gen_top_cmake.sh | 113 + .../build-rules/scripts/ops_repository.sh | 65 + .../build-rules/scripts/stats_static_lib.sh | 69 + .../iotx-sdk-c_clone/build-rules/settings.mk | 85 + .../doc/config.mdm9206.sim7000c | 20 + .../doc/export.sdk.demo/coap.mk | 6 + .../doc/export.sdk.demo/head.mk | 13 + .../doc/export.sdk.demo/http.mk | 6 + .../doc/export.sdk.demo/http2.mk | 6 + .../doc/export.sdk.demo/mqtt.mk | 6 + .../iotx-sdk-c_clone/examples/CMakeLists.txt | 167 + .../examples/coap/coap-example.c | 242 + .../examples/device-shadow/shadow-example.c | 202 + .../examples/http/http-example.c | 129 + .../examples/http2/http2-example.c | 213 + .../sdk/iotx-sdk-c_clone/examples/iot.mk | 102 + .../iotx-sdk-c_clone/examples/linkkit/cJSON.c | 2629 ++++++ .../iotx-sdk-c_clone/examples/linkkit/cJSON.h | 255 + .../examples/linkkit/example_tsl_solo.data | 41 + .../iotx-sdk-c_clone/examples/linkkit/light.c | 302 + .../iotx-sdk-c_clone/examples/linkkit/light.h | 8 + .../linkkit/linkkit_example_gateway.c | 468 + .../examples/linkkit/linkkit_example_sched.c | 607 ++ .../examples/linkkit/linkkit_example_solo.c | 705 ++ .../examples/mqtt/mqtt-example.c | 364 + .../examples/mqtt/mqtt_multi_thread-example.c | 433 + .../examples/mqtt/mqtt_rrpc-example.c | 313 + .../examples/subdev/readme.txt | 28 + .../examples/subdev/subdev-example.c | 1091 +++ .../examples/subdev/subdev_example_api.c | 2178 +++++ .../examples/subdev/subdev_example_api.h | 897 ++ .../examples/uOTA/ota_coap-example.c | 214 + .../examples/uOTA/ota_mqtt-example.c | 326 + .../examples/uOTA/ota_service.h | 37 + .../examples/uOTA/uota_app-example.c | 50 + .../include/exports/iot_export_alcs.h | 270 + .../include/exports/iot_export_coap.h | 214 + .../include/exports/iot_export_errno.h | 253 + .../include/exports/iot_export_event.h | 59 + .../exports/iot_export_file_uploader.h | 114 + .../include/exports/iot_export_http.h | 143 + .../include/exports/iot_export_http2.h | 120 + .../include/exports/iot_export_mqtt.h | 299 + .../include/exports/iot_export_ota.h | 277 + .../include/exports/iot_export_shadow.h | 244 + .../include/exports/iot_export_subdev.h | 409 + .../include/exports/linkkit_export.h | 381 + .../include/exports/linkkit_gateway_export.h | 419 + .../include/imports/iot_import_awss.h | 468 + .../include/imports/iot_import_coap.h | 27 + .../include/imports/iot_import_config.h | 40 + .../include/imports/iot_import_crypt.h | 162 + .../include/imports/iot_import_dtls.h | 139 + .../include/imports/iot_import_product.h | 156 + .../sdk/iotx-sdk-c_clone/include/iot_export.h | 210 + .../sdk/iotx-sdk-c_clone/include/iot_import.h | 800 ++ .../sdk/iotx-sdk-c_clone/make.settings | 82 + .../linkkit/sdk/iotx-sdk-c_clone/makefile | 39 + .../prebuilt/mdm9206/example/iotkit_demo.c | 498 ++ .../prebuilt/mdm9206/example/iotkit_hal.c | 70 + .../prebuilt/mdm9206/include/qapi_ali_iot.h | 334 + .../mdm9206/include/qapi_ali_iot_txm_base.h | 20 + .../prebuilt/mdm9206/include/qapi_txm_base.h | 105 + .../prebuilt/mdm9206/include/txm_module.h | 43 + .../prebuilt/ubuntu/include/.gitkeep | 0 .../prebuilt/ubuntu/libs/libalicrypto.a | Bin 0 -> 278568 bytes .../prebuilt/ubuntu/libs/libid2client.a | Bin 0 -> 57374 bytes .../prebuilt/ubuntu/libs/libitls.a | Bin 0 -> 187754 bytes .../prebuilt/ubuntu/libs/libkm.a | Bin 0 -> 255940 bytes .../prebuilt/ubuntu/libs/libmbedcrypto.a | Bin 0 -> 132568 bytes .../prebuilt/ubuntu/libs/libplat_gen.a | Bin 0 -> 8234 bytes .../prebuilt/win7/32bit-libs/libeay32.lib | Bin 0 -> 3814494 bytes .../prebuilt/win7/32bit-libs/libpthread.a | Bin 0 -> 93480 bytes .../prebuilt/win7/32bit-libs/ssleay32.lib | Bin 0 -> 712314 bytes .../prebuilt/win7/include/.gitkeep | 0 .../prebuilt/win7/libs/libpthread.a | Bin 0 -> 93692 bytes .../linkkit/sdk/iotx-sdk-c_clone/project.mk | 16 + .../src/board/config.macos.make | 21 + .../src/board/config.rhino.make | 28 + .../src/board/config.ubuntu.x86 | 36 + .../src/board/config.win7.mingw32 | 8 + .../src/infra/log/CMakeLists.txt | 14 + .../sdk/iotx-sdk-c_clone/src/infra/log/iot.mk | 3 + .../iotx-sdk-c_clone/src/infra/log/iotx_log.c | 342 + .../iotx-sdk-c_clone/src/infra/log/iotx_log.h | 100 + .../src/infra/log/iotx_log_config.h | 24 + .../src/infra/log/iotx_log_internal.h | 36 + .../src/infra/system/CMakeLists.txt | 23 + .../iotx-sdk-c_clone/src/infra/system/ca.c | 57 + .../src/infra/system/device.c | 76 + .../src/infra/system/guider.c | 752 ++ .../iotx-sdk-c_clone/src/infra/system/iot.mk | 4 + .../src/infra/system/iotx_system.h | 67 + .../src/infra/system/iotx_system_internal.h | 121 + .../src/infra/system/report.c | 103 + .../src/infra/utils/CMakeLists.txt | 31 + .../src/infra/utils/digest/utils_base64.c | 156 + .../src/infra/utils/digest/utils_base64.h | 31 + .../src/infra/utils/digest/utils_hmac.c | 279 + .../src/infra/utils/digest/utils_hmac.h | 45 + .../src/infra/utils/digest/utils_md5.c | 339 + .../src/infra/utils/digest/utils_md5.h | 99 + .../src/infra/utils/digest/utils_sha1.c | 341 + .../src/infra/utils/digest/utils_sha1.h | 94 + .../src/infra/utils/digest/utils_sha256.c | 339 + .../src/infra/utils/digest/utils_sha256.h | 87 + .../iotx-sdk-c_clone/src/infra/utils/iot.mk | 3 + .../src/infra/utils/iotx_utils.h | 156 + .../src/infra/utils/iotx_utils_config.h | 38 + .../src/infra/utils/iotx_utils_internal.h | 42 + .../src/infra/utils/misc/json_parser.c | 268 + .../src/infra/utils/misc/json_parser.h | 187 + .../src/infra/utils/misc/json_token.c | 832 ++ .../src/infra/utils/misc/linked_list.c | 225 + .../src/infra/utils/misc/linked_list.h | 30 + .../src/infra/utils/misc/lite-cjson.c | 1965 +++++ .../src/infra/utils/misc/lite-cjson.h | 118 + .../src/infra/utils/misc/lite-list.h | 498 ++ .../src/infra/utils/misc/lite_queue.c | 244 + .../src/infra/utils/misc/lite_queue.h | 27 + .../src/infra/utils/misc/mem_stats.c | 608 ++ .../src/infra/utils/misc/mem_stats.h | 46 + .../src/infra/utils/misc/string_utils.c | 197 + .../src/infra/utils/misc/string_utils.h | 27 + .../src/infra/utils/misc/utils_epoch_time.c | 244 + .../src/infra/utils/misc/utils_epoch_time.h | 41 + .../src/infra/utils/misc/utils_event.c | 26 + .../src/infra/utils/misc/utils_httpc.c | 882 ++ .../src/infra/utils/misc/utils_httpc.h | 121 + .../src/infra/utils/misc/utils_list.c | 304 + .../src/infra/utils/misc/utils_list.h | 97 + .../src/infra/utils/misc/utils_net.c | 313 + .../src/infra/utils/misc/utils_net.h | 67 + .../src/infra/utils/misc/utils_sysinfo.h | 92 + .../src/infra/utils/misc/utils_timer.c | 107 + .../src/infra/utils/misc/utils_timer.h | 46 + .../src/protocol/alcs/CMakeLists.txt | 34 + .../src/protocol/alcs/CoAPDeserialize.c | 151 + .../src/protocol/alcs/CoAPDeserialize.h | 34 + .../src/protocol/alcs/CoAPExport.c | 256 + .../src/protocol/alcs/CoAPExport.h | 289 + .../src/protocol/alcs/CoAPInternal.h | 61 + .../src/protocol/alcs/CoAPMessage.c | 893 ++ .../src/protocol/alcs/CoAPMessage.h | 100 + .../src/protocol/alcs/CoAPNetwork.c | 151 + .../src/protocol/alcs/CoAPNetwork.h | 77 + .../src/protocol/alcs/CoAPObserve.c | 382 + .../src/protocol/alcs/CoAPObserve.h | 75 + .../src/protocol/alcs/CoAPPlatform.c | 107 + .../src/protocol/alcs/CoAPPlatform.h | 86 + .../src/protocol/alcs/CoAPResource.c | 199 + .../src/protocol/alcs/CoAPResource.h | 67 + .../src/protocol/alcs/CoAPSerialize.c | 234 + .../src/protocol/alcs/CoAPSerialize.h | 36 + .../src/protocol/alcs/CoAPServer.c | 299 + .../src/protocol/alcs/CoAPServer.h | 48 + .../src/protocol/alcs/alcs_adapter.c | 950 ++ .../src/protocol/alcs/alcs_adapter.h | 61 + .../src/protocol/alcs/alcs_api.c | 609 ++ .../src/protocol/alcs/alcs_api.h | 156 + .../src/protocol/alcs/alcs_api_internal.h | 170 + .../src/protocol/alcs/alcs_client.c | 581 ++ .../src/protocol/alcs/alcs_coap.c | 394 + .../src/protocol/alcs/alcs_coap.h | 84 + .../src/protocol/alcs/alcs_mqtt.c | 584 ++ .../src/protocol/alcs/alcs_mqtt.h | 56 + .../src/protocol/alcs/alcs_server.c | 568 ++ .../iotx-sdk-c_clone/src/protocol/alcs/iot.mk | 4 + .../src/protocol/coap/CMakeLists.txt | 23 + .../src/protocol/coap/CoAPDeserialize.c | 150 + .../src/protocol/coap/CoAPDeserialize.h | 28 + .../src/protocol/coap/CoAPExport.c | 266 + .../src/protocol/coap/CoAPExport.h | 224 + .../src/protocol/coap/CoAPMessage.c | 489 ++ .../src/protocol/coap/CoAPMessage.h | 62 + .../src/protocol/coap/CoAPNetwork.c | 201 + .../src/protocol/coap/CoAPNetwork.h | 71 + .../src/protocol/coap/CoAPSerialize.c | 234 + .../src/protocol/coap/CoAPSerialize.h | 29 + .../src/protocol/coap/README.md | 4 + .../iotx-sdk-c_clone/src/protocol/coap/iot.mk | 3 + .../src/protocol/coap/iotx_ca_cert.c | 51 + .../src/protocol/coap/iotx_coap_api.c | 961 ++ .../src/protocol/http/CMakeLists.txt | 17 + .../src/protocol/http/http_debug.h | 32 + .../iotx-sdk-c_clone/src/protocol/http/iot.mk | 3 + .../src/protocol/http/iotx_http_api.c | 790 ++ .../src/protocol/http2/CMakeLists.txt | 39 + .../src/protocol/http2/h2_debug.h | 32 + .../src/protocol/http2/iot.mk | 4 + .../src/protocol/http2/iotx_http2_api.c | 716 ++ .../src/protocol/http2/nghttp2/nghttp2.h | 5380 ++++++++++++ .../src/protocol/http2/nghttp2/nghttp2ver.h | 42 + .../src/protocol/http2/nghttp2_buf.c | 525 ++ .../src/protocol/http2/nghttp2_buf.h | 412 + .../src/protocol/http2/nghttp2_callbacks.c | 175 + .../src/protocol/http2/nghttp2_callbacks.h | 125 + .../src/protocol/http2/nghttp2_debug.c | 60 + .../src/protocol/http2/nghttp2_debug.h | 43 + .../src/protocol/http2/nghttp2_frame.c | 996 +++ .../src/protocol/http2/nghttp2_frame.h | 575 ++ .../src/protocol/http2/nghttp2_hd.c | 2336 +++++ .../src/protocol/http2/nghttp2_hd.h | 432 + .../src/protocol/http2/nghttp2_hd_huffman.c | 231 + .../src/protocol/http2/nghttp2_hd_huffman.h | 77 + .../protocol/http2/nghttp2_hd_huffman_data.c | 4961 +++++++++++ .../src/protocol/http2/nghttp2_helper.c | 551 ++ .../src/protocol/http2/nghttp2_helper.h | 122 + .../src/protocol/http2/nghttp2_http.c | 596 ++ .../src/protocol/http2/nghttp2_http.h | 97 + .../src/protocol/http2/nghttp2_int.h | 58 + .../src/protocol/http2/nghttp2_map.c | 189 + .../src/protocol/http2/nghttp2_map.h | 144 + .../src/protocol/http2/nghttp2_mem.c | 75 + .../src/protocol/http2/nghttp2_mem.h | 45 + .../src/protocol/http2/nghttp2_net.c | 66 + .../src/protocol/http2/nghttp2_net.h | 63 + .../src/protocol/http2/nghttp2_npn.c | 57 + .../src/protocol/http2/nghttp2_npn.h | 34 + .../src/protocol/http2/nghttp2_option.c | 114 + .../src/protocol/http2/nghttp2_option.h | 126 + .../protocol/http2/nghttp2_outbound_item.c | 124 + .../protocol/http2/nghttp2_outbound_item.h | 166 + .../src/protocol/http2/nghttp2_pq.c | 184 + .../src/protocol/http2/nghttp2_pq.h | 130 + .../protocol/http2/nghttp2_priority_spec.c | 52 + .../protocol/http2/nghttp2_priority_spec.h | 42 + .../src/protocol/http2/nghttp2_queue.c | 85 + .../src/protocol/http2/nghttp2_queue.h | 51 + .../src/protocol/http2/nghttp2_rcbuf.c | 102 + .../src/protocol/http2/nghttp2_rcbuf.h | 80 + .../src/protocol/http2/nghttp2_session.c | 7522 ++++++++++++++++ .../src/protocol/http2/nghttp2_session.h | 879 ++ .../src/protocol/http2/nghttp2_stream.c | 1004 +++ .../src/protocol/http2/nghttp2_stream.h | 436 + .../src/protocol/http2/nghttp2_submit.c | 731 ++ .../src/protocol/http2/nghttp2_submit.h | 34 + .../src/protocol/http2/nghttp2_version.c | 38 + .../src/protocol/http2/nghttp2ver.h | 42 + .../src/protocol/mqtt/CMakeLists.txt | 26 + .../protocol/mqtt/MQTTPacket/MQTTConnect.h | 141 + .../mqtt/MQTTPacket/MQTTConnectClient.c | 206 + .../mqtt/MQTTPacket/MQTTDeserializePublish.c | 102 + .../src/protocol/mqtt/MQTTPacket/MQTTPacket.c | 401 + .../src/protocol/mqtt/MQTTPacket/MQTTPacket.h | 134 + .../protocol/mqtt/MQTTPacket/MQTTPublish.h | 38 + .../mqtt/MQTTPacket/MQTTSerializePublish.c | 164 + .../protocol/mqtt/MQTTPacket/MQTTSubscribe.h | 39 + .../mqtt/MQTTPacket/MQTTSubscribeClient.c | 132 + .../mqtt/MQTTPacket/MQTTUnsubscribe.h | 38 + .../mqtt/MQTTPacket/MQTTUnsubscribeClient.c | 101 + .../src/protocol/mqtt/client/mqtt_client.c | 3180 +++++++ .../src/protocol/mqtt/client/mqtt_instance.c | 343 + .../src/protocol/mqtt/client/mqtt_instance.h | 128 + .../iotx-sdk-c_clone/src/protocol/mqtt/iot.mk | 3 + .../src/protocol/mqtt/iotx_mqtt.h | 119 + .../src/protocol/mqtt/iotx_mqtt_config.h | 41 + .../src/protocol/mqtt/iotx_mqtt_internal.h | 55 + .../src/ref-impl/hal/CMakeLists.txt | 44 + .../iotx-sdk-c_clone/src/ref-impl/hal/iot.mk | 24 + .../src/ref-impl/hal/iotx_hal_internal.h | 32 + .../ref-impl/hal/os/macos/HAL_Crypt_MacOS.c | 132 + .../src/ref-impl/hal/os/macos/HAL_OS_MacOS.c | 641 ++ .../src/ref-impl/hal/os/macos/HAL_TCP_MacOS.c | 259 + .../src/ref-impl/hal/os/macos/HAL_UDP_MacOS.c | 457 + .../ref-impl/hal/os/ubuntu/HAL_Crypt_Linux.c | 132 + .../src/ref-impl/hal/os/ubuntu/HAL_OS_linux.c | 788 ++ .../ref-impl/hal/os/ubuntu/HAL_TCP_linux.c | 259 + .../ref-impl/hal/os/ubuntu/HAL_UDP_linux.c | 460 + .../src/ref-impl/hal/os/ubuntu/base64.c | 161 + .../src/ref-impl/hal/os/ubuntu/base64.h | 10 + .../src/ref-impl/hal/os/ubuntu/cJSON.c | 2629 ++++++ .../src/ref-impl/hal/os/ubuntu/cJSON.h | 255 + .../src/ref-impl/hal/os/ubuntu/kv.c | 290 + .../src/ref-impl/hal/os/ubuntu/kv.h | 17 + .../src/ref-impl/hal/os/win7/HAL_OS_win7.c | 440 + .../src/ref-impl/hal/os/win7/HAL_TCP_win7.c | 233 + .../src/ref-impl/hal/ssl/itls/HAL_TLS_itls.c | 437 + .../hal/ssl/mbedtls/HAL_DTLS_mbedtls.c | 493 ++ .../hal/ssl/mbedtls/HAL_TLS_mbedtls.c | 554 ++ .../hal/ssl/openssl/HAL_TLS_openssl.c | 370 + .../src/ref-impl/tls/CMakeLists.txt | 55 + .../src/ref-impl/tls/include/.gitignore | 4 + .../src/ref-impl/tls/include/mbedtls/aes.h | 353 + .../src/ref-impl/tls/include/mbedtls/asn1.h | 342 + .../src/ref-impl/tls/include/mbedtls/base64.h | 88 + .../src/ref-impl/tls/include/mbedtls/bignum.h | 717 ++ .../src/ref-impl/tls/include/mbedtls/bn_mul.h | 885 ++ .../tls/include/mbedtls/check_config.h | 660 ++ .../src/ref-impl/tls/include/mbedtls/cipher.h | 709 ++ .../tls/include/mbedtls/cipher_internal.h | 109 + .../src/ref-impl/tls/include/mbedtls/config.h | 2663 ++++++ .../ref-impl/tls/include/mbedtls/ctr_drbg.h | 290 + .../src/ref-impl/tls/include/mbedtls/debug.h | 231 + .../src/ref-impl/tls/include/mbedtls/des.h | 306 + .../src/ref-impl/tls/include/mbedtls/ecp.h | 684 ++ .../ref-impl/tls/include/mbedtls/entropy.h | 287 + .../tls/include/mbedtls/entropy_poll.h | 109 + .../src/ref-impl/tls/include/mbedtls/error.h | 107 + .../src/ref-impl/tls/include/mbedtls/md.h | 354 + .../src/ref-impl/tls/include/mbedtls/md5.h | 136 + .../tls/include/mbedtls/md_internal.h | 114 + .../src/ref-impl/tls/include/mbedtls/net.h | 31 + .../tls/include/mbedtls/net_sockets.h | 225 + .../src/ref-impl/tls/include/mbedtls/oid.h | 570 ++ .../src/ref-impl/tls/include/mbedtls/pem.h | 129 + .../src/ref-impl/tls/include/mbedtls/pk.h | 616 ++ .../tls/include/mbedtls/pk_internal.h | 114 + .../ref-impl/tls/include/mbedtls/platform.h | 295 + .../src/ref-impl/tls/include/mbedtls/rsa.h | 652 ++ .../src/ref-impl/tls/include/mbedtls/sha1.h | 136 + .../src/ref-impl/tls/include/mbedtls/sha256.h | 141 + .../src/ref-impl/tls/include/mbedtls/ssl.h | 2594 ++++++ .../tls/include/mbedtls/ssl_ciphersuites.h | 321 + .../ref-impl/tls/include/mbedtls/ssl_cookie.h | 108 + .../tls/include/mbedtls/ssl_internal.h | 500 ++ .../src/ref-impl/tls/include/mbedtls/timing.h | 141 + .../tls/include/mbedtls/uOTA_required/hash.h | 181 + .../tls/include/mbedtls/uOTA_required/hmac.h | 50 + .../mbedtls/uOTA_required/mbed_crypto.h | 134 + .../include/mbedtls/uOTA_required/sha512.h | 141 + .../src/ref-impl/tls/include/mbedtls/x509.h | 331 + .../ref-impl/tls/include/mbedtls/x509_crl.h | 173 + .../ref-impl/tls/include/mbedtls/x509_crt.h | 654 ++ .../iotx-sdk-c_clone/src/ref-impl/tls/iot.mk | 9 + .../src/ref-impl/tls/library/.gitignore | 4 + .../src/ref-impl/tls/library/Makefile | 169 + .../src/ref-impl/tls/library/aes.c | 1495 ++++ .../src/ref-impl/tls/library/asn1parse.c | 393 + .../src/ref-impl/tls/library/base64.c | 295 + .../src/ref-impl/tls/library/bignum.c | 2449 ++++++ .../src/ref-impl/tls/library/cipher.c | 917 ++ .../src/ref-impl/tls/library/cipher_wrap.c | 1451 ++++ .../src/ref-impl/tls/library/ctr_drbg.c | 596 ++ .../src/ref-impl/tls/library/debug.c | 368 + .../src/ref-impl/tls/library/entropy.c | 657 ++ .../src/ref-impl/tls/library/entropy_poll.c | 268 + .../src/ref-impl/tls/library/error.c | 707 ++ .../src/ref-impl/tls/library/md.c | 471 + .../src/ref-impl/tls/library/md5.c | 404 + .../src/ref-impl/tls/library/md_wrap.c | 575 ++ .../src/ref-impl/tls/library/net_sockets.c | 586 ++ .../src/ref-impl/tls/library/oid.c | 710 ++ .../src/ref-impl/tls/library/pem.c | 449 + .../src/ref-impl/tls/library/pk.c | 383 + .../src/ref-impl/tls/library/pk_wrap.c | 513 ++ .../src/ref-impl/tls/library/pkparse.c | 1293 +++ .../src/ref-impl/tls/library/platform.c | 307 + .../src/ref-impl/tls/library/rsa.c | 1860 ++++ .../src/ref-impl/tls/library/sha1.c | 450 + .../src/ref-impl/tls/library/sha256.c | 460 + .../ref-impl/tls/library/ssl_ciphersuites.c | 1857 ++++ .../src/ref-impl/tls/library/ssl_cli.c | 3405 ++++++++ .../src/ref-impl/tls/library/ssl_cookie.c | 260 + .../src/ref-impl/tls/library/ssl_tls.c | 7699 +++++++++++++++++ .../src/ref-impl/tls/library/timing.c | 579 ++ .../ref-impl/tls/library/uOTA_required/hash.c | 401 + .../ref-impl/tls/library/uOTA_required/ssl.c | 431 + .../src/ref-impl/tls/library/x509.c | 1098 +++ .../src/ref-impl/tls/library/x509_crt.c | 2403 +++++ .../src/sdk-impl/CMakeLists.txt | 17 + .../sdk/iotx-sdk-c_clone/src/sdk-impl/iot.mk | 3 + .../iotx-sdk-c_clone/src/sdk-impl/sdk-impl.c | 103 + .../src/sdk-impl/sdk-impl_internal.h | 11 + .../src/security/pro/crypto/ali_crypto.h | 736 ++ .../security/pro/crypto/ali_crypto_types.h | 28 + .../src/security/pro/id2/error_code.h | 33 + .../src/security/pro/id2/id2_client.h | 184 + .../src/security/pro/itls/check_config.h | 669 ++ .../src/security/pro/itls/cipher.h | 709 ++ .../src/security/pro/itls/config.h | 89 + .../src/security/pro/itls/debug.h | 228 + .../src/security/pro/itls/mbedtls_auth.h | 40 + .../src/security/pro/itls/md.h | 354 + .../src/security/pro/itls/net.h | 31 + .../src/security/pro/itls/net_sockets.h | 225 + .../src/security/pro/itls/platform.h | 351 + .../src/security/pro/itls/platform_alt.h | 27 + .../src/security/pro/itls/ssl.h | 2642 ++++++ .../src/security/pro/itls/ssl_ciphersuites.h | 494 ++ .../iotx-sdk-c_clone/src/security/pro/km/km.h | 417 + .../src/services/file_upload/CMakeLists.txt | 75 + .../services/file_upload/fs_upload_debug.h | 32 + .../src/services/file_upload/iot.mk | 2 + .../file_upload/iotx_file_upload_api.c | 1170 +++ .../src/services/linkkit/cm/CMakeLists.txt | 30 + .../services/linkkit/cm/example/cm_example.c | 914 ++ .../src/services/linkkit/cm/iot.mk | 8 + .../src/services/linkkit/cm/iotx_cm.h | 607 ++ .../src/services/linkkit/cm/iotx_cm_api.c | 1201 +++ .../services/linkkit/cm/iotx_cm_cloud_conn.c | 1229 +++ .../services/linkkit/cm/iotx_cm_cloud_conn.h | 65 + .../src/services/linkkit/cm/iotx_cm_common.c | 1304 +++ .../src/services/linkkit/cm/iotx_cm_common.h | 437 + .../services/linkkit/cm/iotx_cm_conn_coap.c | 247 + .../services/linkkit/cm/iotx_cm_conn_coap.h | 23 + .../services/linkkit/cm/iotx_cm_conn_http.c | 150 + .../services/linkkit/cm/iotx_cm_conn_http.h | 19 + .../services/linkkit/cm/iotx_cm_conn_mqtt.c | 594 ++ .../services/linkkit/cm/iotx_cm_conn_mqtt.h | 34 + .../services/linkkit/cm/iotx_cm_connection.h | 201 + .../linkkit/cm/iotx_cm_connectivity.c | 665 ++ .../linkkit/cm/iotx_cm_connectivity.h | 166 + .../services/linkkit/cm/iotx_cm_local_conn.c | 1493 ++++ .../services/linkkit/cm/iotx_cm_local_conn.h | 69 + .../src/services/linkkit/cm/iotx_cm_log.c | 106 + .../linkkit/cm/iotx_local_conn_alcs.c | 302 + .../linkkit/cm/iotx_local_conn_alcs.h | 36 + .../src/services/linkkit/dm/CMakeLists.txt | 37 + .../src/services/linkkit/dm/dm_api.c | 1544 ++++ .../src/services/linkkit/dm/dm_api.h | 20 + .../src/services/linkkit/dm/dm_cm_wrapper.c | 559 ++ .../src/services/linkkit/dm/dm_cm_wrapper.h | 27 + .../src/services/linkkit/dm/dm_conn.c | 89 + .../src/services/linkkit/dm/dm_conn.h | 20 + .../src/services/linkkit/dm/dm_cota.c | 218 + .../src/services/linkkit/dm/dm_cota.h | 14 + .../src/services/linkkit/dm/dm_dispatch.c | 1293 +++ .../src/services/linkkit/dm/dm_dispatch.h | 167 + .../src/services/linkkit/dm/dm_fota.c | 188 + .../src/services/linkkit/dm/dm_fota.h | 13 + .../src/services/linkkit/dm/dm_ipc.c | 121 + .../src/services/linkkit/dm/dm_ipc.h | 32 + .../src/services/linkkit/dm/dm_manager.c | 2249 +++++ .../src/services/linkkit/dm/dm_manager.h | 123 + .../src/services/linkkit/dm/dm_message.c | 2978 +++++++ .../src/services/linkkit/dm/dm_message.h | 130 + .../services/linkkit/dm/dm_message_cache.c | 155 + .../services/linkkit/dm/dm_message_cache.h | 29 + .../src/services/linkkit/dm/dm_opt.c | 67 + .../src/services/linkkit/dm/dm_opt.h | 19 + .../src/services/linkkit/dm/dm_ota.c | 76 + .../src/services/linkkit/dm/dm_ota.h | 14 + .../src/services/linkkit/dm/dm_shadow.c | 2652 ++++++ .../src/services/linkkit/dm/dm_shadow.h | 672 ++ .../src/services/linkkit/dm/dm_subscribe.c | 407 + .../src/services/linkkit/dm/dm_subscribe.h | 16 + .../src/services/linkkit/dm/dm_tsl_alink.c | 1288 +++ .../src/services/linkkit/dm/dm_tsl_alink.h | 18 + .../src/services/linkkit/dm/dm_utils.c | 369 + .../src/services/linkkit/dm/dm_utils.h | 91 + .../services/linkkit/dm/example/dm_example.c | 392 + .../src/services/linkkit/dm/iot.mk | 15 + .../src/services/linkkit/dm/iotx_dm.h | 213 + .../src/services/linkkit/dm/iotx_dm_config.h | 7 + .../services/linkkit/dm/iotx_dm_internal.h | 38 + .../src/services/linkkit/dm/linkkit_api.c | 1099 +++ .../linkkit/dm/linkkit_gateway_legacy.c | 2202 +++++ .../linkkit/dm/linkkit_gateway_legacy.h | 58 + .../src/services/shadow/CMakeLists.txt | 20 + .../src/services/shadow/iot.mk | 3 + .../src/services/shadow/shadow.c | 488 ++ .../src/services/shadow/shadow.h | 30 + .../src/services/shadow/shadow_common.c | 406 + .../src/services/shadow/shadow_common.h | 107 + .../src/services/shadow/shadow_config.h | 29 + .../src/services/shadow/shadow_debug.h | 32 + .../src/services/shadow/shadow_delta.c | 174 + .../src/services/shadow/shadow_delta.h | 42 + .../src/services/shadow/shadow_update.c | 208 + .../src/services/shadow/shadow_update.h | 49 + .../src/services/subdev/CMakeLists.txt | 76 + .../src/services/subdev/iot.mk | 2 + .../src/services/subdev/iotx_subdev_api.c | 1767 ++++ .../src/services/subdev/iotx_subdev_common.c | 845 ++ .../src/services/subdev/iotx_subdev_common.h | 326 + .../src/services/subdev/subdev_debug.h | 32 + .../src/services/uOTA/CMakeLists.txt | 49 + .../src/services/uOTA/hal/ota_hal_module.c | 75 + .../src/services/uOTA/hal/ota_hal_os.c | 1005 +++ .../src/services/uOTA/hal/ota_hal_os.h | 101 + .../src/services/uOTA/hal/ota_hal_plat.c | 84 + .../src/services/uOTA/hal/ota_hal_plat.h | 164 + .../src/services/uOTA/inc/ali_crypto.h | 736 ++ .../src/services/uOTA/inc/ali_crypto_types.h | 28 + .../src/services/uOTA/inc/list.h | 338 + .../src/services/uOTA/inc/network.h | 47 + .../src/services/uOTA/inc/types.h | 53 + .../iotx-sdk-c_clone/src/services/uOTA/iot.mk | 34 + .../services/uOTA/src/download/ota_download.h | 18 + .../uOTA/src/download/ota_download_coap.c | 214 + .../uOTA/src/download/ota_download_http.c | 284 + .../services/uOTA/src/download/ota_manifest.c | 311 + .../services/uOTA/src/download/ota_manifest.h | 26 + .../services/uOTA/src/download/ota_socket.c | 121 + .../services/uOTA/src/download/ota_socket.h | 16 + .../src/services/uOTA/src/otalib/ota.c | 972 +++ .../src/services/uOTA/src/otalib/ota_coap.c | 180 + .../src/services/uOTA/src/otalib/ota_fetch.c | 105 + .../services/uOTA/src/otalib/ota_internal.h | 45 + .../src/services/uOTA/src/otalib/ota_lib.c | 313 + .../src/services/uOTA/src/otalib/ota_mqtt.c | 305 + .../src/services/uOTA/src/service/ota_log.h | 30 + .../services/uOTA/src/service/ota_service.c | 163 + .../services/uOTA/src/service/ota_service.h | 37 + .../services/uOTA/src/service/ota_version.c | 74 + .../services/uOTA/src/service/ota_version.h | 50 + .../uOTA/src/transport/ota_transport.h | 76 + .../uOTA/src/transport/ota_transport_coap.c | 577 ++ .../uOTA/src/transport/ota_transport_mqtt.c | 440 + .../src/services/uOTA/src/utility/crc/crc.c | 124 + .../src/services/uOTA/src/utility/crc/crc.h | 163 + .../src/services/uOTA/src/verify/ota_util.c | 145 + .../src/services/uOTA/src/verify/ota_util.h | 101 + .../src/services/uOTA/src/verify/ota_verify.c | 213 + .../src/services/uOTA/src/verify/ota_verify.h | 33 + .../iotx-sdk-c_clone/src/tools/add_license.sh | 40 + .../src/tools/default_settings.mk | 58 + .../iotx-sdk-c_clone/src/tools/del_license.sh | 10 + .../src/tools/generate_lcov_report.sh | 78 + .../src/tools/internal_make_funcs.mk | 72 + .../tools/linkkit_tsl_convert/CMakeLists.txt | 23 + .../tools/linkkit_tsl_convert/include/cJSON.h | 268 + .../linkkit_tsl_convert/include/common.h | 13 + .../linkkit_tsl_convert/include/tsl_file.h | 26 + .../include/tsl_format_export.h | 17 + .../include/tsl_opt_impl.h | 16 + .../src/tools/linkkit_tsl_convert/iot.mk | 1 + .../linkkit_tsl_convert/linkkit_tsl_convert.c | 87 + .../src/tools/linkkit_tsl_convert/src/cJSON.c | 2263 +++++ .../tools/linkkit_tsl_convert/src/tsl_file.c | 94 + .../src/tsl_format_export.c | 18 + .../linkkit_tsl_convert/src/tsl_opt_impl.c | 298 + .../src/tools/mock_build_options.mk | 19 + .../src/tools/parse_make_settings.mk | 177 + .../src/tools/walk_through_examples.sh | 32 + .../sdk/iotx-sdk-c_clone/tests/CMakeLists.txt | 37 + .../sdk/iotx-sdk-c_clone/tests/dm_test.c | 362 + .../sdk/iotx-sdk-c_clone/tests/hal-os.c | 25 + .../sdk/iotx-sdk-c_clone/tests/http2_test.c | 95 + .../linkkit/sdk/iotx-sdk-c_clone/tests/iot.mk | 21 + .../tests/lite-utils_testsuites.c | 181 + .../iotx-sdk-c_clone/tests/sdk-testsuites.c | 35 + .../tests/sdk-testsuites_internal.h | 36 + .../sdk/iotx-sdk-c_clone/tests/ut_debug.h | 32 + 575 files changed, 202182 insertions(+), 1 deletion(-) create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/.gitignore create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/LICENSE create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/README.md create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/aos.makefile create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-complib.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-coverage.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-dist.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-flat.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-kmod.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-libs.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-modinfo.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-origin.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-prefix.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-prog.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-repo.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-submods.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-top.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Config.md create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Debug.md create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Introduction.md create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Proj.md create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Units.md create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Help.md create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/funcs.mk create mode 100755 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/hooks/pre-commit create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/misc/Doxyfile.tpl create mode 100755 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/misc/config.generic.cmake create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/misc/config.generic.default create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/misc/cut.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/misc/cut.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/pre-build.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/rules.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/scripts/add_license.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/scripts/del_license.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/scripts/exe_coverage_progs.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/scripts/gen_lcov_report.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/scripts/gen_one_makefile.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/scripts/gen_sub_cmake.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/scripts/gen_top_cmake.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/scripts/ops_repository.sh create mode 100755 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/scripts/stats_static_lib.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/settings.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/doc/config.mdm9206.sim7000c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/doc/export.sdk.demo/coap.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/doc/export.sdk.demo/head.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/doc/export.sdk.demo/http.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/doc/export.sdk.demo/http2.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/doc/export.sdk.demo/mqtt.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/coap/coap-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/device-shadow/shadow-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/http/http-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/http2/http2-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/linkkit/cJSON.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/linkkit/cJSON.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/linkkit/example_tsl_solo.data create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/linkkit/light.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/linkkit/light.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/linkkit/linkkit_example_gateway.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/linkkit/linkkit_example_sched.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/linkkit/linkkit_example_solo.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/mqtt/mqtt-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/mqtt/mqtt_multi_thread-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/mqtt/mqtt_rrpc-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/subdev/readme.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/subdev/subdev-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/subdev/subdev_example_api.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/subdev/subdev_example_api.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/uOTA/ota_coap-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/uOTA/ota_mqtt-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/uOTA/ota_service.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/examples/uOTA/uota_app-example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_alcs.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_coap.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_errno.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_event.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_file_uploader.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_http.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_http2.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_mqtt.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_ota.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_shadow.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/iot_export_subdev.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/linkkit_export.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/exports/linkkit_gateway_export.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/imports/iot_import_awss.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/imports/iot_import_coap.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/imports/iot_import_config.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/imports/iot_import_crypt.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/imports/iot_import_dtls.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/imports/iot_import_product.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/iot_export.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/include/iot_import.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/make.settings create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/makefile create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/mdm9206/example/iotkit_demo.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/mdm9206/example/iotkit_hal.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/mdm9206/include/qapi_ali_iot.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/mdm9206/include/qapi_ali_iot_txm_base.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/mdm9206/include/qapi_txm_base.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/mdm9206/include/txm_module.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/ubuntu/include/.gitkeep create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/ubuntu/libs/libalicrypto.a create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/ubuntu/libs/libid2client.a create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/ubuntu/libs/libitls.a create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/ubuntu/libs/libkm.a create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/ubuntu/libs/libmbedcrypto.a create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/ubuntu/libs/libplat_gen.a create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/win7/32bit-libs/libeay32.lib create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/win7/32bit-libs/libpthread.a create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/win7/32bit-libs/ssleay32.lib create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/win7/include/.gitkeep create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/prebuilt/win7/libs/libpthread.a create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/project.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/board/config.macos.make create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/board/config.rhino.make create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/board/config.ubuntu.x86 create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/board/config.win7.mingw32 create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/log/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/log/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/log/iotx_log.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/log/iotx_log.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/log/iotx_log_config.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/log/iotx_log_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/system/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/system/ca.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/system/device.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/system/guider.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/system/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/system/iotx_system.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/system/iotx_system_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/system/report.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/digest/utils_base64.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/digest/utils_base64.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/digest/utils_hmac.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/digest/utils_hmac.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/digest/utils_md5.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/digest/utils_md5.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/digest/utils_sha1.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/digest/utils_sha1.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/digest/utils_sha256.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/digest/utils_sha256.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/iotx_utils.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/iotx_utils_config.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/iotx_utils_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/json_parser.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/json_parser.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/json_token.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/linked_list.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/linked_list.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/lite-cjson.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/lite-cjson.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/lite-list.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/lite_queue.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/lite_queue.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/mem_stats.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/mem_stats.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/string_utils.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/string_utils.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_epoch_time.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_epoch_time.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_event.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_httpc.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_httpc.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_list.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_list.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_net.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_net.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_sysinfo.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_timer.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/infra/utils/misc/utils_timer.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPDeserialize.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPDeserialize.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPExport.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPExport.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPInternal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPMessage.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPMessage.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPNetwork.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPNetwork.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPObserve.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPObserve.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPPlatform.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPPlatform.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPResource.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPResource.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPSerialize.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPSerialize.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPServer.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/CoAPServer.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_adapter.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_adapter.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_api.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_api.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_api_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_client.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_coap.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_coap.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_mqtt.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_mqtt.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/alcs_server.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/alcs/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CoAPDeserialize.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CoAPDeserialize.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CoAPExport.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CoAPExport.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CoAPMessage.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CoAPMessage.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CoAPNetwork.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CoAPNetwork.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CoAPSerialize.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/CoAPSerialize.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/README.md create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/iotx_ca_cert.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/coap/iotx_coap_api.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http/http_debug.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http/iotx_http_api.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/h2_debug.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/iotx_http2_api.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2/nghttp2.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2/nghttp2ver.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_buf.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_buf.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_callbacks.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_callbacks.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_debug.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_debug.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_frame.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_frame.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_hd.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_hd.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_hd_huffman.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_hd_huffman.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_hd_huffman_data.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_helper.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_helper.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_http.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_http.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_int.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_map.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_map.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_mem.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_mem.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_net.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_net.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_npn.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_npn.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_option.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_option.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_outbound_item.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_outbound_item.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_pq.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_pq.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_priority_spec.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_priority_spec.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_queue.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_queue.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_rcbuf.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_rcbuf.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_session.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_session.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_stream.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_stream.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_submit.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_submit.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2_version.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/http2/nghttp2ver.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTConnect.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTConnectClient.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTDeserializePublish.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTPacket.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTPacket.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTPublish.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTSerializePublish.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTSubscribe.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTSubscribeClient.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTUnsubscribe.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/MQTTPacket/MQTTUnsubscribeClient.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/client/mqtt_client.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/client/mqtt_instance.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/client/mqtt_instance.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/iotx_mqtt.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/iotx_mqtt_config.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/protocol/mqtt/iotx_mqtt_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/iotx_hal_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/macos/HAL_Crypt_MacOS.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/macos/HAL_OS_MacOS.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/macos/HAL_TCP_MacOS.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/macos/HAL_UDP_MacOS.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/ubuntu/HAL_Crypt_Linux.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/ubuntu/HAL_OS_linux.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/ubuntu/HAL_TCP_linux.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/ubuntu/HAL_UDP_linux.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/ubuntu/base64.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/ubuntu/base64.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/ubuntu/cJSON.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/ubuntu/cJSON.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/ubuntu/kv.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/ubuntu/kv.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/win7/HAL_OS_win7.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/os/win7/HAL_TCP_win7.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/ssl/itls/HAL_TLS_itls.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/ssl/mbedtls/HAL_DTLS_mbedtls.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/ssl/mbedtls/HAL_TLS_mbedtls.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/hal/ssl/openssl/HAL_TLS_openssl.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/.gitignore create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/aes.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/asn1.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/base64.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/bignum.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/bn_mul.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/check_config.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/cipher.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/cipher_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/config.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/ctr_drbg.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/debug.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/des.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/ecp.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/entropy.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/entropy_poll.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/error.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/md.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/md5.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/md_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/net.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/net_sockets.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/oid.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/pem.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/pk.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/pk_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/platform.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/rsa.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/sha1.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/sha256.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/ssl.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/ssl_ciphersuites.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/ssl_cookie.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/ssl_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/timing.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/uOTA_required/hash.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/uOTA_required/hmac.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/uOTA_required/mbed_crypto.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/uOTA_required/sha512.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/x509.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/x509_crl.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/include/mbedtls/x509_crt.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/.gitignore create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/Makefile create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/aes.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/asn1parse.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/base64.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/bignum.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/cipher.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/cipher_wrap.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/ctr_drbg.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/debug.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/entropy.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/entropy_poll.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/error.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/md.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/md5.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/md_wrap.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/net_sockets.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/oid.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/pem.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/pk.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/pk_wrap.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/pkparse.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/platform.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/rsa.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/sha1.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/sha256.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/ssl_ciphersuites.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/ssl_cli.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/ssl_cookie.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/ssl_tls.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/timing.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/uOTA_required/hash.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/uOTA_required/ssl.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/x509.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/ref-impl/tls/library/x509_crt.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/sdk-impl/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/sdk-impl/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/sdk-impl/sdk-impl.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/sdk-impl/sdk-impl_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/crypto/ali_crypto.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/crypto/ali_crypto_types.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/id2/error_code.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/id2/id2_client.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/check_config.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/cipher.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/config.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/debug.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/mbedtls_auth.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/md.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/net.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/net_sockets.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/platform.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/platform_alt.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/ssl.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/itls/ssl_ciphersuites.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/security/pro/km/km.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/file_upload/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/file_upload/fs_upload_debug.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/file_upload/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/file_upload/iotx_file_upload_api.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/example/cm_example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_api.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_cloud_conn.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_cloud_conn.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_common.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_common.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_conn_coap.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_conn_coap.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_conn_http.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_conn_http.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_conn_mqtt.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_conn_mqtt.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_connection.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_connectivity.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_connectivity.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_local_conn.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_local_conn.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_cm_log.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_local_conn_alcs.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/cm/iotx_local_conn_alcs.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_api.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_api.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_cm_wrapper.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_cm_wrapper.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_conn.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_conn.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_cota.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_cota.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_dispatch.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_dispatch.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_fota.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_fota.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_ipc.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_ipc.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_manager.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_manager.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_message.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_message.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_message_cache.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_message_cache.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_opt.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_opt.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_ota.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_ota.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_shadow.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_shadow.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_subscribe.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_subscribe.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_tsl_alink.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_tsl_alink.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_utils.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/dm_utils.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/example/dm_example.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/iotx_dm.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/iotx_dm_config.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/iotx_dm_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/linkkit_api.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/linkkit_gateway_legacy.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/linkkit/dm/linkkit_gateway_legacy.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/shadow.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/shadow.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/shadow_common.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/shadow_common.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/shadow_config.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/shadow_debug.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/shadow_delta.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/shadow_delta.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/shadow_update.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/shadow/shadow_update.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/subdev/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/subdev/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/subdev/iotx_subdev_api.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/subdev/iotx_subdev_common.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/subdev/iotx_subdev_common.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/subdev/subdev_debug.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/hal/ota_hal_module.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/hal/ota_hal_os.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/hal/ota_hal_os.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/hal/ota_hal_plat.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/hal/ota_hal_plat.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/inc/ali_crypto.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/inc/ali_crypto_types.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/inc/list.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/inc/network.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/inc/types.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/download/ota_download.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/download/ota_download_coap.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/download/ota_download_http.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/download/ota_manifest.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/download/ota_manifest.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/download/ota_socket.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/download/ota_socket.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/otalib/ota.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/otalib/ota_coap.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/otalib/ota_fetch.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/otalib/ota_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/otalib/ota_lib.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/otalib/ota_mqtt.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/service/ota_log.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/service/ota_service.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/service/ota_service.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/service/ota_version.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/service/ota_version.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/transport/ota_transport.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/transport/ota_transport_coap.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/transport/ota_transport_mqtt.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/utility/crc/crc.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/utility/crc/crc.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/verify/ota_util.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/verify/ota_util.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/verify/ota_verify.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/services/uOTA/src/verify/ota_verify.h create mode 100755 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/add_license.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/default_settings.mk create mode 100755 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/del_license.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/generate_lcov_report.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/internal_make_funcs.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/include/cJSON.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/include/common.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/include/tsl_file.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/include/tsl_format_export.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/include/tsl_opt_impl.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/linkkit_tsl_convert.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/src/cJSON.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/src/tsl_file.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/src/tsl_format_export.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/linkkit_tsl_convert/src/tsl_opt_impl.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/mock_build_options.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/parse_make_settings.mk create mode 100755 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/src/tools/walk_through_examples.sh create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/tests/CMakeLists.txt create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/tests/dm_test.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/tests/hal-os.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/tests/http2_test.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/tests/iot.mk create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/tests/lite-utils_testsuites.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/tests/sdk-testsuites.c create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/tests/sdk-testsuites_internal.h create mode 100644 framework/protocol/linkkit/sdk/iotx-sdk-c_clone/tests/ut_debug.h diff --git a/.gitignore b/.gitignore index 285167ee9a..af4cfcb26d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -framework/protocol/linkkit/sdk/iotx-sdk-c_clone trace_test activate out diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/.gitignore b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/.gitignore new file mode 100644 index 0000000000..0df8413ce7 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/.gitignore @@ -0,0 +1,35 @@ +*.so +*.exe +.settings/ +*.cproject +*.project +*.o +*.d +*.lo +*.gcno +*.gcda +/INSTALL +cscope.* +*.swp +*.swo +ltmain.sh +*.kv +*.bak +/Default/ +.O/ +.config +output/ +ota.bin +src/packages/*.git/hooks/*.sample +vs_build/ +.vs/ +doc/html/ +compile.log +CMakeLists.txt.user +qt_build/ +.vscode/ +GPATH +GRTAGS +GTAGS +iotx-sdk-c-test/ +aos_board_conf.mk diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/CMakeLists.txt b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/CMakeLists.txt new file mode 100644 index 0000000000..a1462174c1 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/CMakeLists.txt @@ -0,0 +1,100 @@ +if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + MESSAGE (FATAL_ERROR "in-tree build not allowded") +endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + +CMAKE_MINIMUM_REQUIRED (VERSION 2.8) +PROJECT (iotkit-embedded-V2.2 C) + +SET (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) +SET (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) +SET (CMAKE_C_FLAGS " -Os -Wall") + +IF (WIN32) + SET (CMAKE_EXE_LINKER_FLAGS "-L${PROJECT_SOURCE_DIR}/prebuilt/win7/libs") +ENDIF (WIN32) + +MESSAGE ("---------------------------------------------------------------------") +MESSAGE ("Project Name : " ${PROJECT_NAME}) +MESSAGE ("Source Dir : " ${PROJECT_SOURCE_DIR}) +MESSAGE ("Binary Dir : " ${PROJECT_BINARY_DIR}) +MESSAGE ("System Processor : " ${CMAKE_SYSTEM_PROCESSOR}) +MESSAGE ("System Platform : " ${CMAKE_SYSTEM}) +MESSAGE ("C Compiler : " ${CMAKE_C_COMPILER}) +MESSAGE ("Executable Dir : " ${EXECUTABLE_OUTPUT_PATH}) +MESSAGE ("Library Dir : " ${LIBRARY_OUTPUT_PATH}) +MESSAGE ("SDK Version : " V2.2) +MESSAGE ("") + +IF (WIN32) + MESSAGE ("Building on WINDOWS ...") +ELSE (WIN32) + MESSAGE ("Building on LINUX ...") +ENDIF (WIN32) +MESSAGE ("---------------------------------------------------------------------") + +FILE (REMOVE_RECURSE ${PROJECT_SOURCE_DIR}/../iotx-sdk-c.pkgs) +FILE (MAKE_DIRECTORY ${PROJECT_SOURCE_DIR}/../iotx-sdk-c.pkgs) + + +ADD_DEFINITIONS (-D_IS_LINKKIT_) +ADD_DEFINITIONS (-DALCS_ENABLED) +ADD_DEFINITIONS (-DCMP_VIA_MQTT_DIRECT) +ADD_DEFINITIONS (-DCM_ENABLED) +ADD_DEFINITIONS (-DCM_VIA_CLOUD_CONN) +ADD_DEFINITIONS (-DCM_VIA_CLOUD_CONN_MQTT) +ADD_DEFINITIONS (-DCOAP_OBSERVE_CLIENT_SUPPORTED) +ADD_DEFINITIONS (-DCOAP_OBSERVE_SERVER_SUPPORTED) +ADD_DEFINITIONS (-DCOAP_SERV_MULTITHREAD) +ADD_DEFINITIONS (-DCOAP_USE_PLATFORM_LOG) +ADD_DEFINITIONS (-DCOAP_USE_PLATFORM_MEMORY) +ADD_DEFINITIONS (-DCONFIG_DM_DEVTYPE_SINGLE) +ADD_DEFINITIONS (-DCONFIG_DM_DEVTYPE_SINGLE) +ADD_DEFINITIONS (-DCONFIG_GUIDER_AUTH_TIMEOUT=500) +ADD_DEFINITIONS (-DCONFIG_HTTP_AUTH_TIMEOUT=500) +ADD_DEFINITIONS (-DCONFIG_MID_HTTP_TIMEOUT=500) +ADD_DEFINITIONS (-DDM_ENABLED) +ADD_DEFINITIONS (-DFORCE_SSL_VERIFY) +ADD_DEFINITIONS (-DHTTP_COMM_ENABLED) +ADD_DEFINITIONS (-DMQTT_COMM_ENABLED) +ADD_DEFINITIONS (-DMQTT_DIRECT) +ADD_DEFINITIONS (-DOTA_ENABLED) +ADD_DEFINITIONS (-DOTA_SIGNAL_CHANNEL=1) +ADD_DEFINITIONS (-DSDK_ENHANCE) +ADD_DEFINITIONS (-DSERVICE_OTA_ENABLED) +ADD_DEFINITIONS (-DSUPPORT_TLS) +ADD_DEFINITIONS (-DUSING_UTILS_JSON) +ADD_DEFINITIONS (-D_PLATFORM_IS_HOST_) + +ADD_SUBDIRECTORY (src/infra/utils) +ADD_SUBDIRECTORY (src/infra/log) +ADD_SUBDIRECTORY (src/infra/system) +ADD_SUBDIRECTORY (src/sdk-impl) +ADD_SUBDIRECTORY (src/protocol/mqtt) +ADD_SUBDIRECTORY (src/services/uOTA) +ADD_SUBDIRECTORY (src/protocol/http) +ADD_SUBDIRECTORY (src/protocol/alcs) +ADD_SUBDIRECTORY (src/services/linkkit/cm) +ADD_SUBDIRECTORY (src/services/linkkit/dm) + +ADD_SUBDIRECTORY (src/ref-impl/hal) +ADD_SUBDIRECTORY (examples) +ADD_SUBDIRECTORY (tests) +ADD_SUBDIRECTORY (src/ref-impl/tls) +ADD_SUBDIRECTORY (src/tools/linkkit_tsl_convert) + +ADD_LIBRARY (iot_sdk STATIC + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ +) +if(WIN32) + TARGET_LINK_LIBRARIES (iot_sdk ws2_32) +endif(WIN32) + diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/LICENSE b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/LICENSE new file mode 100644 index 0000000000..7ba09d64ea --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/LICENSE @@ -0,0 +1,14 @@ +Copyright (c) 2014-2016 Alibaba Group. All rights reserved. +License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); you may +not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/README.md b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/README.md new file mode 100644 index 0000000000..607df02ff9 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/README.md @@ -0,0 +1,172 @@ +# 阿里云物联网套件 + +物联网套件是阿里云专门为物联网领域的开发人员推出的, 其目的是帮助开发者搭建安全且性能强大的数据通道, 方便终端(如传感器, 执行器, 嵌入式设备或智能家电等等)和云端的双向通信. + +- **[官方代码首页](https://github.com/aliyun/iotkit-embedded)** +- **[官方维基首页](https://github.com/aliyun/iotkit-embedded/wiki)** + +# 快速开始 + +本节描述如何申请自己的设备, 并结合本SDK快速体验该设备通过`MQTT`+`TLS/SSL`协议连接到阿里云, 上报和接收业务报文. 关于SDK的更多使用方式, 请访问[官方WiKi](https://github.com/aliyun/iotkit-embedded/wiki) + +> 实现原理: +> +> `MQTT协议`(`Message Queuing Telemetry Transport`, 消息队列遥测传输)是IBM开发的一个即时通讯协议, 是为大量计算能力有限, 且工作在低带宽, 不可靠的网络的远程传感器和控制设备通讯而设计的协议 +> +> 利用MQTT协议是一种基于二进制消息的发布/订阅编程模式的消息协议, 下面的应用程序先在阿里云IoT平台订阅(`Subscribe`)一个`Topic`成功, 然后自己向该`Topic`做发布(`Publish`)动作 +> 阿里云IoT平台收到之后, 就会原样推送回这个应用程序, 因为该程序之前已经通过订阅(`Subscribe`)动作成为该`Topic`的一个接收者, 发布到这个`Topic`上的任何消息, 都会被推送到已订阅该`Topic`的所有终端上 + +## 一. 开发环境准备 + +#### **1. 安装Ubuntu16.04** + +本SDK的编译环境是`64位`的`Ubuntu16.04`, 在其它Linux上尚未测试过, 所以推荐安装与阿里开发者一致的发行版 + +如果您使用`Windows`操作系统, 建议安装虚拟机软件`Virtualbox`, 下载地址: [https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads) + +然后安装64位的desktop版本`Ubuntu 16.04.x LTS`, 下载地址: [https://www.ubuntu.com/download/desktop](https://www.ubuntu.com/download/desktop) + +#### **2. 安装必备软件** + +本SDK的开发编译环境使用如下软件: `make-4.1`, `git-2.7.4`, `gcc-5.4.0`, `gcov-5.4.0`, `lcov-1.12`, `bash-4.3.48`, `tar-1.28`, `mingw-5.3.1` + +可使用如下命令行安装必要的软件: + + apt-get install -y build-essential make git gcc + +## 二. 在控制台创建设备 + +#### **1. 注册/登录阿里云账号** + +访问阿里云[登录页面](https://account.aliyun.com/login/login.htm), 点击[免费注册](https://account.aliyun.com/register/register.htm), 免费获得一个阿里云账号. 若您已有账号, 可直接登录 + +#### **2. 访问物联网套件控制台** + +登入之后, 鼠标悬停在**产品**上, 弹出层叠菜单 + +![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/iotconsole-product.png) + +然后向下滚动页面, 点击**物联网套件** + +![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/iotconsole-iotkit.png) + +或直接访问[https://www.aliyun.com/product/iot](https://www.aliyun.com/product/iot), 之后点击**立即开通**, 或者**管理控制台**, 登入[控制台主界面](https://iot.console.aliyun.com/) + +#### **3. 创建产品和设备** + +点击页面右上角的**创建产品**按钮, 创建一个品类, 然后在左侧导航栏点击**设备管理**, 再到页面右侧点**添加设备**, 创建该品类下的一个设备, 如下图则得到创建成功后的**设备标识三元组** + +- `productKey`: 标识产品的品类 +- `deviceName`: 标识品类下的具体设备 +- `deviceSecret`: 该设备的密钥, 需填写到SDK中, 用于连接阿里云服务器时完成认证 + +![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/iotconsole-devinfo.png) + +#### **4. 创建可订阅可发布的Topic** + +点击左侧导航栏的**消息通信**, 再到页面右侧点**定义Topic类**, 创建一个新的`/${productKey}/${deviceName}/data`, 并设置为**可订阅可发布**权限 + +![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/iotconsole-subpub.png) + +## 三. 编译样例程序 + +#### **1. 下载SDK** + +登录Linux, 运行如下命令从github克隆代码, 或者访问最新地址[下载页面](https://github.com/aliyun/iotkit-embedded/releases/latest), **将下载到的压缩包在Linux上解压缩** + + $ git clone https://github.com/aliyun/iotkit-embedded + +#### **2. 填入设备信息** + +编辑文件`sample/mqtt/mqtt-example.c`, 编辑如下代码段, 填入之前**创建产品和设备**步骤中得到的**设备标识三元组**: + +![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/sdk-devinfo.png) + +#### **3. 编译SDK产生样例程序** + +运行如下命令: + + $ make distclean + $ make + +编译成功完成后, 生成的样例程序在当前目录的`output/release/bin`目录下: + + $ tree output/release + output/release + ├── bin + │   ├── coap-example + │   ├── http-example + │   ├── mqtt-example + │   ├── mqtt_rrpc-example + │   ├── ota_mqtt-example + │   ├── sdk-testsuites + │   ├── shadow-testsuites + │   └── subdev-example + ... + ... + +## 四. 运行样例程序 + +#### **1. 执行样例程序** + + $ ./output/release/bin/mqtt-example + [inf] iotx_device_info_init(40): device_info created successfully! + [dbg] iotx_device_info_set(50): start to set device info! + [dbg] iotx_device_info_set(64): device_info set successfully! + [dbg] _calc_hmac_signature(57): | source: clientId2UCRZpAbCGC.ExampleDevdeviceNameExampleDevproductKey2UCRZpAbCGCtimestamp2524608000000 (93) + [dbg] _calc_hmac_signature(58): | secret: fbh47lGBSayncmTHEjF1E5x4CZdeJTO9 (32) + [dbg] _calc_hmac_signature(61): | method: hmacsha1 + [dbg] _calc_hmac_signature(74): | signature: 326a4a6ed38b1bd5ddb6a5d11d27928bfb5a62d0 (40) + [dbg] guider_print_dev_guider_info(236): .................................................... + [dbg] guider_print_dev_guider_info(237): ProductKey : 2UCRZpAbCGC + [dbg] guider_print_dev_guider_info(238): DeviceName : ExampleDev + [dbg] guider_print_dev_guider_info(239): DeviceID : 2UCRZpAbCGC.ExampleDev + [dbg] guider_print_dev_guider_info(240): DeviceSecret : fbh47lGBSayncmTHEjF1E5x4CZdeJTO9 + [dbg] guider_print_dev_guider_info(241): .................................................... + ... + ... + _demo_message_arrive|136 :: ---- + _demo_message_arrive|140 :: Topic: '/2UCRZpAbCGC/ExampleDev/data' (Length: 28) + _demo_message_arrive|144 :: Payload: '{"attr_name":"temperature", "attr_value":"1"}' (Length: 45) + _demo_message_arrive|145 :: ---- + [inf] iotx_mc_unsubscribe(1416): mqtt unsubscribe success,topic = /2UCRZpAbCGC/ExampleDev/data! + [dbg] iotx_mc_disconnect(2106): rc = MQTTDisconnect() = 0 + [inf] _network_ssl_disconnect(413): ssl_disconnect + [inf] iotx_mc_disconnect(2114): mqtt disconnect! + [inf] iotx_mc_release(2160): mqtt release! + + --------------------------------------------------- + . bytes_total_allocated: 1292 + . bytes_total_freed: 1292 + . bytes_total_in_use: 0 + . bytes_max_allocated: 560 + . bytes_max_in_use: 1066 + . iterations_allocated: 20 + . iterations_freed: 20 + . iterations_in_use: 0 + . iterations_max_in_use: 11 + --------------------------------------------------- + main|441 :: out of sample! + +#### **2. 观察消息上报** + +如下日志信息显示样例程序正在通过`MQTT`的`Publish`类型消息, 上报业务数据到`/${prodcutKey}/${deviceName}/data` + + mqtt_client|256 :: packet-id=3, publish topic msg={"attr_name":"temperature", "attr_value":"1"} + +#### **3. 观察消息下推** + +如下日志信息显示该消息因为是到达已被订阅的`Topic`, 所以又被服务器原样推送到样例程序, 并进入相应的回调函数 + + _demo_message_arrive|136 :: ---- + _demo_message_arrive|140 :: Topic: '/2UCRZpAbCGC/ExampleDev/data' (Length: 28) + _demo_message_arrive|144 :: Payload: '{"attr_name":"temperature", "attr_value":"1"}' (Length: 45) + _demo_message_arrive|145 :: ---- + +#### **4. 观察控制台日志** + +可以登录物联网套件控制台, 到[设备页面](https://iot.console.aliyun.com/#/product/detail), 找到刚才填写在SDK中的设备并点击进入, 点左边导航栏的**日志服务**, 可以看到刚才被上报的消息 + +![image](https://raw.githubusercontent.com/wiki/aliyun/iotkit-embedded/pics/iotconsole-publog.png) + +# 关于SDK的更多使用方式, 请访问[官方WiKi](https://github.com/aliyun/iotkit-embedded/wiki) diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/aos.makefile b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/aos.makefile new file mode 100644 index 0000000000..db3408c5b6 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/aos.makefile @@ -0,0 +1,149 @@ +include build-rules/funcs.mk +include aos_board_conf.mk + +CROSS_PREFIX := $(strip $(CROSS_PREFIX)) + +SHELL := bash +Q ?= @ +VPATH := .O/src/infra/utils .O/src/infra/log .O/src/infra/system .O/src/sdk-impl .O/src/protocol/mqtt .O/src/protocol/http .O/src/protocol/alcs .O/src/services/linkkit/cm .O/src/services/linkkit/dm + +.PHONY: all +all: .O/usr/lib/libiot_sdk.a + $(Q)cp -rf include/iot_import.h include/iot_export.h include/imports include/exports .O/usr/include 2>/dev/null || true + @rm -f *.gcda *.gcno $$(find build-rules -name "*.o") + +.O/usr/lib/libiot_sdk.a: \ + .O/src/infra/utils/misc/linked_list.o \ + .O/src/infra/utils/misc/json_token.o \ + .O/src/infra/utils/misc/utils_list.o \ + .O/src/infra/utils/misc/json_parser.o \ + .O/src/infra/utils/misc/string_utils.o \ + .O/src/infra/utils/misc/utils_epoch_time.o \ + .O/src/infra/utils/misc/utils_event.o \ + .O/src/infra/utils/misc/utils_httpc.o \ + .O/src/infra/utils/misc/mem_stats.o \ + .O/src/infra/utils/misc/utils_timer.o \ + .O/src/infra/utils/misc/lite_queue.o \ + .O/src/infra/utils/misc/lite-cjson.o \ + .O/src/infra/utils/misc/utils_net.o \ + .O/src/infra/utils/digest/utils_hmac.o \ + .O/src/infra/utils/digest/utils_md5.o \ + .O/src/infra/utils/digest/utils_sha256.o \ + .O/src/infra/utils/digest/utils_base64.o \ + .O/src/infra/utils/digest/utils_sha1.o \ + .O/src/infra/log/iotx_log.o \ + .O/src/infra/system/guider.o \ + .O/src/infra/system/report.o \ + .O/src/infra/system/device.o \ + .O/src/infra/system/ca.o \ + .O/src/sdk-impl/sdk-impl.o \ + .O/src/protocol/mqtt/client/mqtt_client.o \ + .O/src/protocol/mqtt/client/mqtt_instance.o \ + .O/src/protocol/mqtt/MQTTPacket/MQTTPacket.o \ + .O/src/protocol/mqtt/MQTTPacket/MQTTSerializePublish.o \ + .O/src/protocol/mqtt/MQTTPacket/MQTTSubscribeClient.o \ + .O/src/protocol/mqtt/MQTTPacket/MQTTDeserializePublish.o \ + .O/src/protocol/mqtt/MQTTPacket/MQTTUnsubscribeClient.o \ + .O/src/protocol/mqtt/MQTTPacket/MQTTConnectClient.o \ + .O/src/protocol/http/iotx_http_api.o \ + .O/src/protocol/alcs/CoAPSerialize.o \ + .O/src/protocol/alcs/alcs_mqtt.o \ + .O/src/protocol/alcs/CoAPObserve.o \ + .O/src/protocol/alcs/alcs_api.o \ + .O/src/protocol/alcs/alcs_adapter.o \ + .O/src/protocol/alcs/CoAPNetwork.o \ + .O/src/protocol/alcs/CoAPExport.o \ + .O/src/protocol/alcs/alcs_client.o \ + .O/src/protocol/alcs/CoAPResource.o \ + .O/src/protocol/alcs/CoAPServer.o \ + .O/src/protocol/alcs/CoAPPlatform.o \ + .O/src/protocol/alcs/CoAPDeserialize.o \ + .O/src/protocol/alcs/CoAPMessage.o \ + .O/src/protocol/alcs/alcs_server.o \ + .O/src/protocol/alcs/alcs_coap.o \ + .O/src/services/linkkit/cm/iotx_cm_api.o \ + .O/src/services/linkkit/cm/iotx_cm_cloud_conn.o \ + .O/src/services/linkkit/cm/iotx_cm_common.o \ + .O/src/services/linkkit/cm/iotx_cm_conn_coap.o \ + .O/src/services/linkkit/cm/iotx_cm_connectivity.o \ + .O/src/services/linkkit/cm/iotx_cm_conn_http.o \ + .O/src/services/linkkit/cm/iotx_cm_conn_mqtt.o \ + .O/src/services/linkkit/cm/iotx_cm_local_conn.o \ + .O/src/services/linkkit/cm/iotx_cm_log.o \ + .O/src/services/linkkit/cm/iotx_local_conn_alcs.o \ + .O/src/services/linkkit/dm/dm_api.o \ + .O/src/services/linkkit/dm/dm_cm_wrapper.o \ + .O/src/services/linkkit/dm/dm_conn.o \ + .O/src/services/linkkit/dm/dm_cota.o \ + .O/src/services/linkkit/dm/dm_dispatch.o \ + .O/src/services/linkkit/dm/dm_fota.o \ + .O/src/services/linkkit/dm/dm_ipc.o \ + .O/src/services/linkkit/dm/dm_manager.o \ + .O/src/services/linkkit/dm/dm_message.o \ + .O/src/services/linkkit/dm/dm_message_cache.o \ + .O/src/services/linkkit/dm/dm_opt.o \ + .O/src/services/linkkit/dm/dm_ota.o \ + .O/src/services/linkkit/dm/dm_shadow.o \ + .O/src/services/linkkit/dm/dm_subscribe.o \ + .O/src/services/linkkit/dm/dm_tsl_alink.o \ + .O/src/services/linkkit/dm/dm_utils.o \ + .O/src/services/linkkit/dm/linkkit_api.o \ + ./.O/src/services/linkkit/dm/linkkit_gateway_legacy.o \ + + $(Q)mkdir -p $$(dirname $@) + $(Q)$(call Brief_Log,"AR",$$(basename $@),"...") + $(Q)$(CROSS_PREFIX)ar -rcs $@ $^ + +%.o: + $(Q)$(call Brief_Log,"CC",$$(basename $@),"...") + $(Q)mkdir -p $$(dirname $@) + $(Q)S=$$(echo $@|sed 's,.O,.,1'); \ + $(CROSS_PREFIX)gcc -c \ + -o $@ \ + -D_IS_LINKKIT_ -DFORCE_SSL_VERIFY -DCOAP_OBSERVE_SERVER_SUPPORTED -DCOAP_OBSERVE_CLIENT_SUPPORTED -DCOAP_SERV_MULTITHREAD -DCOAP_USE_PLATFORM_MEMORY -DCOAP_USE_PLATFORM_LOG -DALCS_ENABLED -DHTTP_COMM_ENABLED -DMQTT_COMM_ENABLED -DMQTT_DIRECT -DSDK_ENHANCE -DSUPPORT_TLS -DCM_ENABLED -DDM_ENABLED -DCONFIG_DM_DEVTYPE_SINGLE -DCMP_VIA_MQTT_DIRECT $(CONFIG_ENV_CFLAGS) -g3 -DBUILD_AOS -DIOTX_NET_INIT_WITH_PK_EXT -DCM_VIA_CLOUD_CONN -DCM_VIA_CLOUD_CONN_MQTT -DCM_SUPPORT_MULTI_THREAD_VIA_HAL -I../../../../../include -I../../../../activation -DCM_SUPPORT_LOCAL_CONN -DCONFIG_DM_SUPPORT_LOCAL_CONN -DCONFIG_HTTP_AUTH_TIMEOUT=500 -DCONFIG_MID_HTTP_TIMEOUT=500 -DCONFIG_GUIDER_AUTH_TIMEOUT=500 -DCONFIG_MQTT_TX_MAXLEN=640 -DCONFIG_MQTT_RX_MAXLEN=1200 \ + -Isrc/infra/utils \ + -Isrc/infra/utils/misc \ + -Isrc/infra/utils/digest \ + -Isrc/infra/log \ + -Isrc/infra/system \ + -Isrc/sdk-impl \ + -Isrc/protocol/mqtt \ + -Isrc/protocol/mqtt/MQTTPacket \ + -Isrc/protocol/mqtt/client \ + -Isrc/protocol/http \ + -Isrc/protocol/alcs \ + -Isrc/services/linkkit/cm \ + -Isrc/services/linkkit/cm/example \ + -Isrc/services/linkkit/dm \ + -Isrc/services/linkkit/dm/example \ + -Iinclude \ + -Iinclude/imports \ + -Iinclude/exports \ + -Isrc/ref-impl/tls \ + -Isrc/ref-impl/tls/include \ + -Isrc/ref-impl/tls/include/mbedtls \ + -Isrc/ref-impl/tls/include/mbedtls/uOTA_required \ + -Isrc/ref-impl/tls/library \ + -Isrc/ref-impl/tls/library/uOTA_required \ + -Isrc/security/pro \ + -Isrc/security/pro/crypto \ + -Isrc/security/pro/id2 \ + -Isrc/security/pro/itls \ + -Isrc/security/pro/km \ + -Isrc/tools/linkkit_tsl_convert/include \ + -Ibuild-rules \ + -Ibuild-rules/misc \ + -Ibuild-rules/hooks \ + -Ibuild-rules/docs \ + -Ibuild-rules/scripts \ + -Isrc/ref-impl/hal \ + -Isrc/ref-impl/hal/os \ + -Isrc/ref-impl/hal/os/macos \ + -Isrc/ref-impl/hal/os/ubuntu \ + -Isrc/ref-impl/hal/os/win7 \ + -Isrc/ref-impl/hal/ssl \ + -Isrc/ref-impl/hal/ssl/mbedtls \ + -Isrc/ref-impl/hal/ssl/openssl \ + -Isrc/ref-impl/hal/ssl/itls \ + $${S//.o/.c} + diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-complib.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-complib.mk new file mode 100644 index 0000000000..dc7bab6128 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-complib.mk @@ -0,0 +1,55 @@ +.PHONY: comp-lib + +ifdef COMP_LIB +ifeq (dynamic,$(CONFIG_LIB_EXPORT)) +define Finalize_CompLib +( \ + $(CC) -shared -Os -o $(2)/lib$(3).so $(1) $(LDFLAGS); \ +) +endef +define Info_CompLib +( \ + EXIST_OBJS="$$(ls $(2) 2>/dev/null)"; \ +\ + echo -ne "\033[1;32m"; \ + printf "\r%-40s%s\n" "[AR] lib$(1).a" "<= "; \ + for i in $${EXIST_OBJS}; do \ + printf "%-40s%s\n" "" " $${i}"|$(SED) 's,$(LIBOBJ_TMPDIR)/,,g'; \ + done; \ + echo -ne "\033[0m"; \ +) +endef +else +define Finalize_CompLib +( \ + EXIST_OBJS="$$(ls $(1) 2>/dev/null)"; \ +\ + if [ "$${EXIST_OBJS}" != "" ]; then \ + $(AR) -rcs $(2)/lib$(3).a $${EXIST_OBJS}; \ + fi \ +) +endef +define Info_CompLib +( \ + EXIST_OBJS="$$(ls $(2) 2>/dev/null)"; \ +\ + echo -ne "\033[1;35m"; \ + printf "\r%-40s%s\n" "[AR] lib$(1).a" "<= "; \ + for i in $${EXIST_OBJS}; do \ + printf "%-40s%s\n" "" " $${i}"|$(SED) 's,$(LIBOBJ_TMPDIR)/,,g'; \ + done; \ + echo -ne "\033[0m"; \ +) +endef +endif # dynamic +endif # COMP_LIB + +comp-lib: toolchain +ifdef COMP_LIB + $(TOP_Q)+( \ + if [ -f $(STAMP_PRJ_CFG) ]; then true; else \ + $(call Build_CompLib,FORCE) \ + fi) +else + $(Q)true +endif diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-coverage.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-coverage.mk new file mode 100644 index 0000000000..fa723cae8f --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-coverage.mk @@ -0,0 +1,41 @@ +.PHONY: coverage lcov test + +ifneq (,$(COVERAGE_LIST)) +COVERAGE_PROGS := \( +COVERAGE_PROGS += $(COVERAGE_LIST) +COVERAGE_PROGS += \) +COVERAGE_CMD := $(RULE_DIR)/scripts/exe_coverage_progs.sh +endif + +ifeq (,$(COVERAGE_CMD)) +coverage lcov test: + @echo "COVERAGE_CMD not defined, skip" +else +coverage lcov test: all $(UTEST_RECP) +# +# SKIP --coverage existing in $(CFLAGS) check for now +# + $(Q)rm -rf $(OUTPUT_DIR)/$(LCOV_DIR) $(DIST_DIR)/$(LCOV_DIR) + $(Q)rm -f $(OUTPUT_DIR)/{files,tests,all,final}.info + $(Q)find $(OUTPUT_DIR) -name "*.gcno" -o -name "*.gcda" -exec rm -f {} \; + $(Q)OUTPUT_DIR=$(OUTPUT_DIR) bash <($(SED) '2iPROGS=$(COVERAGE_PROGS)' $(COVERAGE_CMD)) || true + $(Q)lcov --quiet \ + --capture --initial --directory $(OUTPUT_DIR)/ \ + -o $(OUTPUT_DIR)/files.info + $(Q)lcov --quiet \ + --capture --directory $(OUTPUT_DIR) \ + -o $(OUTPUT_DIR)/tests.info + $(Q)lcov --quiet \ + --add-tracefile $(OUTPUT_DIR)/files.info \ + --add-tracefile $(OUTPUT_DIR)/tests.info \ + -o $(OUTPUT_DIR)/all.info + $(Q)lcov --quiet \ + --remove $(OUTPUT_DIR)/all.info \ + -o $(OUTPUT_DIR)/final.info '*.h' + $(Q)genhtml --quiet \ + --legend --no-branch-coverage -o $(OUTPUT_DIR)/$(LCOV_DIR) $(OUTPUT_DIR)/final.info + $(Q)cp -rf $(OUTPUT_DIR)/$(LCOV_DIR) $(DIST_DIR)/$(LCOV_DIR) + $(Q)cd $(DIST_DIR)/$(LCOV_DIR) && \ + $(SED) -i 's:\(coverFile.*\)>$(OUTPUT_DIR)/:\1>:g' index.html + $(Q)bash $(RULE_DIR)/scripts/gen_lcov_report.sh $(DIST_DIR)/$(LCOV_DIR) +endif diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-dist.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-dist.mk new file mode 100644 index 0000000000..f4682e123a --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-dist.mk @@ -0,0 +1,36 @@ + +final-out: sub-mods +ifneq (,$(COMP_LIB_NAME)) + $(TOP_Q) \ + if [ ! -f $(SYSROOT_LIB)/lib$(COMP_LIB_NAME).a ] && \ + [ ! -f $(SYSROOT_LIB)/lib$(COMP_LIB_NAME).so ]; then \ + $(call Build_CompLib, FORCE) \ + fi; +endif + + $(TOP_Q) \ + if [ -f $(STAMP_PRJ_CFG) ]; then true; else \ + rm -rf $(DIST_DIR); \ + mkdir -p $(DIST_DIR) $(FINAL_DIR); \ + for i in bin lib include; do \ + if [ -d $(OUTPUT_DIR)/usr/$${i} ]; then \ + cp -rf $(OUTPUT_DIR)/usr/$${i} $(FINAL_DIR); \ + fi; \ + done; \ + VDR_NAME=$$(grep -m 1 "VENDOR *:" $(CONFIG_TPL) 2>/dev/null|awk '{ print $$NF }'); \ + if [ "$$(ls $(IMPORT_DIR)/$${VDR_NAME}/$(PREBUILT_LIBDIR)/lib* 2>/dev/null)" != "" ]; then \ + cp -f $(IMPORT_DIR)/$${VDR_NAME}/$(PREBUILT_LIBDIR)/lib* $(FINAL_DIR)/lib; \ + fi; \ + fi + + $(TOP_Q) \ + if [ "$$(ls $(FINAL_DIR)/bin/ 2>/dev/null)" != "" ]; then \ + $(STRIP) $(FINAL_DIR)/bin/* 2>/dev/null || (echo "$(STRIP) $(FINAL_DIR)/bin/* failed!" && exit 1); \ + fi + $(TOP_Q) \ + if [ "$$(ls $(FINAL_DIR)/lib/*.so 2>/dev/null)" != "" ]; then \ + $(STRIP) $(STRIP_DBGOPT) $(FINAL_DIR)/lib/*.so 2>/dev/null || (echo "$(STRIP) $(FINAL_DIR)/lib/*.so failed!" && exit 1); \ + fi +ifeq ($(strip $(HAS_POST_HOOK)), 1) + $(TOP_Q)+$(call $(POST_FINAL_OUT_HOOK)) +endif diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-flat.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-flat.mk new file mode 100644 index 0000000000..2d065b4ac2 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-flat.mk @@ -0,0 +1,148 @@ +ifneq ($(TOP_DIR),$(CURDIR)) +INTERNAL_INCLUDES += -I$(SYSROOT_INC) +INTERNAL_INCLUDES += $(foreach d, $(shell find $(SYSROOT_INC) -type d), -I$(d)) +INTERNAL_INCLUDES += -I$(TOP_DIR) +INTERNAL_INCLUDES += $(foreach d, $(shell find $(TOP_DIR)/$(EXPORT_DIR) -type d), -I$(d)) +INTERNAL_INCLUDES += \ +$(foreach d, \ + $(shell [ -d $(IMPORT_DIR)/$(CONFIG_VENDOR)/include ] && find -L $(IMPORT_DIR)/$(CONFIG_VENDOR)/include -type d), \ + -I$(d) \ +) +INTERNAL_INCLUDES += $(foreach mod, $(MODULE_NAME) $(HDR_REFS), \ + $(foreach d, \ + $(shell [ -d $(TOP_DIR)/$(mod) ] && \ + find -L $(TOP_DIR)/$(mod)/ -type d \ + -a -name "[^.]*" \ + -not -path "*.git*"), \ + -I$(d) \ + ) \ +) + +# INTERNAL_INCLUDES += \ + $(foreach d, \ + $(shell find $(OUTPUT_DIR)/$(MODULE_NAME) -type d -a -name "[^.]*"), \ + -I$(d) \ + ) + +INTERNAL_INCLUDES := $(strip $(sort $(INTERNAL_INCLUDES))) + +EXTERNAL_INCLUDES += $(foreach mod, $(DEPENDS), \ + $(foreach d, \ + $(shell $(SHELL_DBG) find \ + $(SYSROOT_INC)/$(mod)/ -maxdepth 2 -type d 2>/dev/null) \ + $(shell $(SHELL_DBG) find \ + $(IMPORT_VDRDIR)/include/$(mod)/ -maxdepth 2 -type d 2>/dev/null), \ + -I$(d) \ + ) \ +) +EXTERNAL_INCLUDES := $(strip $(EXTERNAL_INCLUDES)) +endif # ifneq ($(TOP_DIR),$(CURDIR)) + +ifeq (dynamic,$(strip $(CONFIG_LIB_EXPORT))) +CFLAGS += -fPIC +endif + +# CFLAGS := $(sort $(strip $(CFLAGS))) + +LDFLAGS += -L$(SYSROOT_LIB) +ifeq (y,$(shell [ -d $(TOP_DIR)/$(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR) ] && echo y)) +LDFLAGS += -L$(TOP_DIR)/$(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR) +endif + +LDFLAGS += $(foreach d,$(DEPENDS_$(MODULE_NAME)),$(REF_LDFLAGS_$(d))) + +WATCHED_VARS = \ + TARGET \ + CFLAGS \ + CC \ + LDFLAGS \ + CURDIR \ + INTERNAL_INCLUDES \ + DEPENDS \ + MAKECMDGOALS \ + EXTERNAL_INCLUDES \ + LIBA_TARGET \ + LIBSO_TARGET \ + +ALL_TARGETS := $(TARGET) $(LIBSO_TARGET) $(LIBA_TARGET) $(firstword $(KMOD_TARGET)) + +ifneq (,$(strip $(PKG_SWITCH))) +all: $(ALL_TARGETS) +else +all: + $(Q)true +endif + +clean: + $(Q)rm -f \ + $(strip \ + $(ALL_TARGETS) $(OBJS) $(LIB_OBJS) \ + $(OBJS:.o=.d) $(LIB_OBJS:.o=.d) \ + $(LIB_OBJS:.o=.gcno) $(LIB_OBJS:.o=.gcda) \ + ) \ + *.o.e *.d *.o *.a *.so *.log *.gc* + +%.o: %.c $(HD_MAKEFILE) + @$(call Brief_Log,"CC") + $(call Inspect_Env,$(WATCHED_VARS)) + $(Q) \ + set -o pipefail; \ + $(CC) -I$(CURDIR) \ + $(INTERNAL_INCLUDES) \ + $(EXTERNAL_INCLUDES) \ + $(CFLAGS) \ + -c -o $@ $< +ifneq (,$(OBJCOPY_FLAGS)) + $(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) $@ +endif + +NODEP_LIST = \ + $(SYSROOT_INC)/git_version.h \ + $(SYSROOT_INC)/platform.h \ + $(SYSROOT_INC)/product.h \ + $(SYSROOT_INC)/product_config.h \ + +ifneq (,$(findstring gcc,$(CC))) +ifeq (,$(filter modinfo,$(MAKECMDGOALS))) +%.d: %.c + @ \ +( \ + D=$$(dirname $<|$(SED) 's,$(TOP_DIR),$(OUTPUT_DIR),1'); \ + F=$$(basename $<); \ + mkdir -p $${D}; \ + $(CC) -MM -I$(CURDIR) \ + $(INTERNAL_INCLUDES) \ + $(EXTERNAL_INCLUDES) \ + $(CFLAGS) \ + $< > $${D}/$${F}.$$$$; \ + $(SED) -i 's!$(shell basename $*)\.o[ :]!$*.o:!1' $${D}/$${F}.$$$$; \ + mv $${D}/$${F}.$$$$ $@; \ +) +endif +endif + +%.o: %.cpp + @$(call Brief_Log,"CC") + $(call Inspect_Env,$(WATCHED_VARS)) + $(Q)$(CXX) -I$(CURDIR) \ + $(INTERNAL_INCLUDES) \ + $(EXTERNAL_INCLUDES) \ + $(CFLAGS) \ + -c -o $@ $< + +ifneq (,$(findstring gcc,$(CC))) +%.d: %.cpp + @ \ + $(CXX) -MM -I$(CURDIR) \ + $(INTERNAL_INCLUDES) \ + $(EXTERNAL_INCLUDES) \ + $(CFLAGS) \ + $< > $@.$$$$; \ + $(foreach D,$(NODEP_LIST),$(SED) -i 's,$(D),,g' $@.$$$$;) \ + $(SED) 's,\($*\)\.o[ :]*,\1.o $@: ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$; +endif + +include $(RULE_DIR)/_rules-libs.mk +include $(RULE_DIR)/_rules-prog.mk +include $(RULE_DIR)/_rules-kmod.mk diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-kmod.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-kmod.mk new file mode 100644 index 0000000000..8df3d3ca96 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-kmod.mk @@ -0,0 +1,35 @@ +ifdef KMOD_TARGET +KMOD_NAME := $(subst .o,,$(obj-m)) +KMOD_OBJS := $(foreach mod, $(KMOD_NAME), $($(mod)-objs)) +KMOD_SRCS := $(subst .o,.c,$(KMOD_OBJS)) +KMOD_BUILD_DIR := $(CURDIR)/build-$(shell $(SHELL_DBG) basename $(CURDIR))-kmod +KMOD_MAKEFILE := $(KMOD_BUILD_DIR)/Makefile + +$(firstword $(KMOD_TARGET)): $(KMOD_SRCS) + $(Q)rm -rf $(KMOD_BUILD_DIR) && mkdir -p $(KMOD_BUILD_DIR) + $(Q)cp -f $(KMOD_SRCS) $(KMOD_BUILD_DIR) + $(Q)echo "EXTRA_CFLAGS += " \ + "-I$(CURDIR)" \ + "$(INTERNAL_INCLUDES)" \ + | $(SED) 's/-I/\\\n -I/g' \ + >> $(KMOD_MAKEFILE) + $(Q)echo "" >> $(KMOD_MAKEFILE) + $(Q)echo "obj-m := $(obj-m)" >> $(KMOD_MAKEFILE) + $(Q)echo "" >> $(KMOD_MAKEFILE) + $(Q) \ + $(foreach mod, $(KMOD_NAME), \ + echo "$(mod)-objs := $($(mod)-objs)" \ + | $(SED) 's/ [_a-z]*\.o/ \\\n &/g' \ + >> $(KMOD_MAKEFILE); \ + echo "" >> $(KMOD_MAKEFILE); \ + ) + @$(call Brief_Log,"CC",$(KMOD_TARGET)) + $(Q) \ + LDFLAGS=""; \ + $(MAKE) -C $(KERNEL_DIR) M=$(KMOD_BUILD_DIR) CROSS_COMPILE=$(CROSS_PREFIX) modules + $(Q)cp -f $(KMOD_BUILD_DIR)/*.ko $(CURDIR) + $(Q)mkdir -p $(SYSROOT_LIB) + $(Q)install -m 0755 $(KMOD_BUILD_DIR)/*.ko $(SYSROOT_LIB) + +endif # ifdef KMOD_TARGET + diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-libs.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-libs.mk new file mode 100644 index 0000000000..4b79f7aae8 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-libs.mk @@ -0,0 +1,95 @@ +VPATH := $(TOP_DIR)/$(MODULE_NAME) +LIB_SRCS ?= $(foreach M,*.c */*.c */*/*.c,$(wildcard $(TOP_DIR)/$(MODULE_NAME)/$(M))) $(wildcard *.c) +LIB_OBJS := $(LIB_SRCS:.c=.o) +LIB_OBJS := $(subst $(TOP_DIR)/$(MODULE_NAME)/,,$(LIB_OBJS)) + +.PHONY : cmake + +cmake: + + @$(foreach V,$(INFO_ENV_VARS),$(subst -,_,$(V))="$($(V))") \ + $(foreach V,$(TARGET),$(subst -,_,SRCS_$(V))="$(SRCS_$(V))") \ + bash $(RULE_DIR)/scripts/gen_sub_cmake.sh $(TOP_DIR)/${MODULE_NAME}/CMakeLists.txt + +ifdef Extra_CMake_Head + @rm -f $(OUTPUT_DIR)/$(STAMP_CMAKE) + @$(call Extra_CMake_Head, >> $(OUTPUT_DIR)/$(STAMP_CMAKE)) + @cat $(TOP_DIR)/${MODULE_NAME}/CMakeLists.txt >> $(OUTPUT_DIR)/$(STAMP_CMAKE) + @mv $(OUTPUT_DIR)/$(STAMP_CMAKE) $(TOP_DIR)/${MODULE_NAME}/CMakeLists.txt +endif + +ifdef LIB_SRCS_PATTERN +SRC_LIST := $(foreach M,$(LIB_SRCS_PATTERN),$(shell ls $(TOP_DIR)/$(MODULE_NAME)/$(M) 2>/dev/null)) +LIB_SRCS := $(SRC_LIST) +LIB_OBJS := $(SRC_LIST:.c=.o) +LIB_OBJS := $(subst $(TOP_DIR)/$(MODULE_NAME)/,,$(LIB_OBJS)) +endif + +sinclude $(LIB_OBJS:.o=.d) + +ifdef LIBA_TARGET +.PHONY: StaticLib_Install + +ifeq (1,$(words $(LIBA_TARGET))) + +$(LIBA_TARGET) :: $(LIB_OBJS) + @$(call Brief_Log,"AR") + $(call Inspect_Env,$(WATCHED_VARS)) + $(Q)rm -f $@ +ifdef CONFIG_LIBOBJ_STRIP + @$(call Brief_Log,"ST") + $(TOP_Q)$(STRIP) $(STRIP_DBGOPT) $(LIB_OBJS) +endif + $(TOP_Q) \ + if [ "$$(echo "$(LIB_OBJS)"|awk '{ print NF }')" != "0" ]; then \ + $(AR) -rcs $@ $(LIB_OBJS); \ + fi + +$(LIBA_TARGET) :: StaticLib_Install + $(Q)mkdir -p $(LIBOBJ_TMPDIR)/$(MODULE_NAME) +ifneq (,$(strip $(LIB_OBJS))) +ifneq ($(LIBA_TARGET),$(LIBA_SKIP_COMBO)) + $(Q)cp -f $(LIB_OBJS) $(LIBOBJ_TMPDIR)/$(MODULE_NAME) 2>/dev/null || true +endif +endif + $(Q)mkdir -p $(SYSROOT_LIB) + $(Q)if [ -f $@ ]; then cp -f $@ $(SYSROOT_LIB); fi + $(call Copy_Headers, $(LIB_HEADERS),$(SYSROOT_INC),$(LIB_HDRS_DIR)) + +else + +$(foreach t,$(sort $(LIBA_TARGET)),$(t)): FORCE + $(Q) \ + $(MAKE) LIBA_TARGET=$@ \ + LIB_SRCS="$(LIB_SRCS_$(subst .a,,$(subst lib,,$@)))" \ + LIB_SRCS_PATTERN="$(LIB_SRCS_PATTERN_$(subst .a,,$(subst lib,,$@)))" \ + + +endif # ifeq (1,$(words $(LIBA_TARGET))) + +endif # ifdef LIBA_TARGET + +ifdef LIBSO_TARGET +.PHONY: DynamicLib_Install + +$(LIBSO_TARGET) :: SELF_LIBNAME = $(subst lib,,$(subst .so,,$(LIBSO_TARGET))) +$(LIBSO_TARGET) :: LDFLAGS := $(filter-out -l$(SELF_LIBNAME), $(LDFLAGS)) +$(LIBSO_TARGET) :: $(LIB_OBJS) $(foreach d,$(DEPENDS_$(MODULE_NAME)),$(SYSROOT_LIB)/$(LIBA_TARGET_$(d))) + @$(call Brief_Log,"CC") + $(call Inspect_Env,$(WATCHED_VARS)) + $(Q)$(CC) -shared -Os \ + $(CFLAGS) \ + $(RPATH_CFLAGS) \ + -o $@ \ + $(LIB_OBJS) \ + -Wl,--start-group $(LDFLAGS) -Wl,--end-group + +$(LIBSO_TARGET) :: DynamicLib_Install + $(Q)mkdir -p $(LIBOBJ_TMPDIR)/$(shell $(SHELL_DBG) basename $(CURDIR)) + $(Q)cp -f $(LIB_OBJS) $(LIBOBJ_TMPDIR)/$(shell $(SHELL_DBG) basename $(CURDIR)) + $(Q)mkdir -p $(SYSROOT_LIB) + $(Q)install -m 0755 $@ $(SYSROOT_LIB) + $(call Copy_Headers, $(LIB_HEADERS),$(SYSROOT_INC),$(LIB_HDRS_DIR)) + +endif # ifdef LIBSO_TARGET + diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-modinfo.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-modinfo.mk new file mode 100644 index 0000000000..a0a5a11e75 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-modinfo.mk @@ -0,0 +1,56 @@ +.PHONY: modinfo + +modinfo: + @true + +MODINFO_VARS := \ + EXTRA_SRCS \ + PKG_SWITCH \ + ORIGIN \ + PKG_SOURCE \ + PKG_BRANCH \ + PKG_REVISION \ + PKG_UPSTREAM \ + REF_CFLAGS \ + REF_LDFLAGS \ + LDFLAGS \ + LIBA_TARGET \ + LIB_OBJS \ + TARGET \ + LIBSO_TARGET \ + +ifneq (,$(CONFIG_$(MODULE_NAME))) +$(if $(filter modinfo,$(MAKECMDGOALS)), \ + $(if $(strip $(DEPENDS)), \ + $(info DEPENDS_$(MODULE_NAME) = $(strip $(DEPENDS))) \ + $(info CONFIG_$(MODULE_NAME) = $(CONFIG_$(MODULE_NAME))) \ + ) \ +) + +$(if $(filter modinfo,$(MAKECMDGOALS)), \ + $(foreach v, $(MODINFO_VARS), \ + $(if $(strip $($(v))), \ + $(info $(v)_$(MODULE_NAME) = $(strip $($(v)))) \ + ) \ + ) \ +) + +ifeq (0,$(words $(TARGET))) +else +ifeq (1,$(words $(TARGET))) + +$(if $(filter modinfo,$(MAKECMDGOALS)), \ + $(info SRCS_$(TARGET) = $(subst $(TOP_DIR)/,,$(SRCS))) \ +) + +else + +$(if $(filter modinfo,$(MAKECMDGOALS)), \ + $(foreach v, $(TARGET), \ + $(info SRCS_$(v) = $(SRCS_$(v))) \ + ) \ +) + +endif +endif +endif diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-origin.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-origin.mk new file mode 100644 index 0000000000..5efea638c2 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-origin.mk @@ -0,0 +1,120 @@ +CFLAGS := $(filter-out -Werror,$(CFLAGS)) +LDFLAGS := + +.PHONY: config build install post-install + +ORIGIN_Q ?= @ +ifeq ($(strip $(PKG_SWITCH)),y) +all : +ifeq ($(PKG_SOURCE),) +$(error PKG_SOURCE for $(PKG_NAME) cannot be found!) +endif + + $(ORIGIN_Q) \ + MESSAGE=$(strip $(if $(filter 0 1,$(MAKELEVEL)), \ + "\r$(PKG_NAME) already pre-built at $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)\n","")); \ + if [ "$(LIBA_TARGET)" != "" -a -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(LIBA_TARGET) ] || \ + [ "$(LIBSO_TARGET)" != "" -a -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(LIBSO_TARGET) ]; then \ + echo -ne $${MESSAGE}; \ + cp -P -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/{$(LIBA_TARGET),$(LIBSO_TARGET)*} \ + $(SYSROOT_LIB) 2>/dev/null; \ + for t in $(TARGET); do \ + cp -f $(IMPORT_VDRDIR)/$(PREBUILT_BINDIR)/$${t} $(SYSROOT_BIN); \ + done; \ + touch $(STAMP_SHIELD); \ + fi + + $(ORIGIN_Q) \ + MESSAGE=$(if $(filter 0 1,$(MAKELEVEL)),"\r$(PKG_NAME) already unpacked\n",""); \ + if [ -f $(STAMP_SHIELD) ]; then true; \ + elif [ -f $(STAMP_UNPACK) ]; then \ + echo -ne $${MESSAGE}; \ + else \ + rm -rf $(PKG_NAME)* && \ + if [ -f $(PKG_SOURCE) ]; then \ + tar xf $(PKG_SOURCE) -C . && \ + for i in $(wildcard *.patch); do \ + cd $(PKG_NAME)* && patch -d . -p 1 < ../$${i} && cd $${OLDPWD}; \ + done \ + fi \ + && touch $(STAMP_UNPACK); \ + fi + + $(ORIGIN_Q) \ + MESSAGE=$(if $(filter 0 1,$(MAKELEVEL)),"\r$(PKG_NAME) already configured\n",""); \ + if [ -f $(STAMP_SHIELD) ]; then true; \ + elif [ -f $(STAMP_CONFIG) ]; then \ + echo -ne $${MESSAGE}; \ + else \ + if grep -q 'config *:' $(HD_MAKEFILE); then \ + export SHELL=$(SHELL); \ + $(MAKE) config -f $(HD_MAKEFILE); \ + else \ + cd $(PKG_NAME)* && ( \ + ./configure \ + --prefix=$(OUTPUT_DIR)/usr \ + --host=$(HOST) \ + --target=$(shell $(SHELL_DBG) basename $(CROSS_PREFIX) 2>/dev/null) \ + --enable-static --enable-shared \ + || \ + ./configure \ + --prefix=$(OUTPUT_DIR)/usr \ + --host=$(HOST) \ + --target=$(shell $(SHELL_DBG) basename $(CROSS_PREFIX) 2>/dev/null|cut -d'-' -f1) \ + --enable-static --enable-shared \ + ) && cd $${OLDPWD}; \ + fi \ + && touch $(STAMP_CONFIG); \ + fi + + $(ORIGIN_Q) \ + MESSAGE=$(if $(filter 0 1,$(MAKELEVEL)),"\r$(PKG_NAME) already built\n",""); \ + if [ -f $(STAMP_SHIELD) ]; then true; \ + elif [ -f $(STAMP_BUILD) ]; then \ + echo -ne $${MESSAGE}; \ + else \ + if grep -q 'build *:' $(HD_MAKEFILE); then \ + $(MAKE) build -f $(HD_MAKEFILE); \ + else \ + if [ -d $(PKG_NAME)* ]; then \ + cd $(PKG_NAME)* && $(MAKE) -j8 all && cd ..; \ + fi \ + fi \ + && touch $(STAMP_BUILD); \ + fi + + $(ORIGIN_Q) \ + MESSAGE=$(if $(filter 0 1,$(MAKELEVEL)),"\r$(PKG_NAME) already installed\n",""); \ + if [ -f $(STAMP_SHIELD) ]; then true; \ + elif [ -f $(STAMP_INSTALL) ]; then \ + echo -ne $${MESSAGE}; \ + else \ + if grep -q 'install *:' $(HD_MAKEFILE); then \ + $(MAKE) install -f $(HD_MAKEFILE); \ + else \ + if [ -d $(PKG_NAME)* ]; then \ + cd $(PKG_NAME)* && $(MAKE) install && cd ..; \ + fi \ + fi \ + && touch $(STAMP_INSTALL); \ + fi + + $(ORIGIN_Q) \ + MESSAGE=$(if $(filter 0 1,$(MAKELEVEL)),"\r$(PKG_NAME) already post-installed\n",""); \ + if [ -f $(STAMP_POSTINS) ]; then \ + echo -ne $${MESSAGE}; \ + else \ + if grep -q 'post-install *:' $(HD_MAKEFILE); then \ + $(MAKE) post-install -f $(HD_MAKEFILE); \ + fi \ + && touch $(STAMP_POSTINS); \ + fi + +clean-prepare: + $(Q)rm -f $(STAMP_BUILD) $(STAMP_INSTALL) $(STAMP_POSTINS) +else +all: + $(Q)true +clean: + $(Q)true +endif # ifeq ($(strip $(PKG_SWITCH)),y) diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-prefix.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-prefix.mk new file mode 100644 index 0000000000..4939c2744b --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-prefix.mk @@ -0,0 +1,20 @@ +CFLAGS := "$(CFLAGS) $(CONFIG_ENV_CFLAGS)" +LDFLAGS := $(sort $(LDFLAGS) $(CONFIG_ENV_LDFLAGS)) + +ifeq (dynamic,$(CONFIG_LIB_EXPORT)) +CFLAGS := $(filter-out --coverage,$(CFLAGS)) +endif + +MAKE_ENV_VARS := \ +$(foreach v, \ + $(shell grep -o 'CONFIG_ENV_[_A-Z]*' $(CONFIG_TPL) 2>/dev/null), \ + $(subst CONFIG_ENV_,,$(v)) \ +) + +# $(eval ...) causes '$' in CFLAGS lost +MAKE_ENV_VARS := $(sort $(filter-out CFLAGS LDFLAGS,$(MAKE_ENV_VARS))) + +$(foreach V, \ + $(MAKE_ENV_VARS), \ + $(eval export $(V) := $(sort $(CONFIG_ENV_$(V)))) \ +) diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-prog.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-prog.mk new file mode 100644 index 0000000000..84535906d3 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-prog.mk @@ -0,0 +1,65 @@ +VPATH := $(TOP_DIR)/$(MODULE_NAME) +SRCS ?= $(foreach M,*.c */*.c */*/*.c,$(wildcard $(TOP_DIR)/$(MODULE_NAME)/$(M))) $(wildcard *.c) +OBJS := $(SRCS:.c=.o) +OBJS := $(subst $(TOP_DIR)/$(MODULE_NAME)/,,$(OBJS)) + +ifdef SRCS_PATTERN +PROG_LIST := $(foreach M,$(SRCS_PATTERN),$(shell ls $(TOP_DIR)/$(MODULE_NAME)/$(M) 2>/dev/null)) +SRCS := $(PROG_LIST) +OBJS := $(PROG_LIST:.c=.o) +OBJS := $(subst $(TOP_DIR)/$(MODULE_NAME)/,,$(OBJS)) +endif + +ifdef TARGET + +ifneq (modinfo,$(MAKECMDGOALS)) +ifneq (clean,$(MAKECMDGOALS)) +sinclude $(OBJS:.o=.d) +endif +endif + +ifdef LIBA_TARGET +$(TARGET): $(LIBA_TARGET) + +LDFLAGS := -l$(subst .a,,$(subst lib,,$(LIBA_TARGET))) $(LDFLAGS) +endif + +ifdef LIBSO_TARGET +$(TARGET): $(LIBSO_TARGET) + +LDFLAGS := -l$(subst .so,,$(subst lib,,$(LIBSO_TARGET))) $(LDFLAGS) +endif + +LDFLAGS += $(sort $(CONFIG_ENV_LDFLAGS)) + +ifneq (,$(filter %.cpp %.cc,$(SRCS))) +CCLD := $(CXX) +else +CCLD := $(CC) +endif + +ifeq (1,$(words $(TARGET))) + +$(TARGET): $(OBJS) FORCE + $(call Inspect_Env,$(WATCHED_VARS)) + $(Q) \ +( \ + if [ "$(strip $(CC))" = "gcc" ] || [ "$(filter -D_PLATFORM_IS_LINUX_,$(CFLAGS))" != "" ]; then \ + $(call Brief_Log,"LD"); \ + mkdir -p $(OUTPUT_DIR)${bindir}; \ + $(CCLD) $(CFLAGS) -o $@ \ + $(RPATH_CFLAGS) \ + $(OBJS) \ + $(LDFLAGS) && \ + cp -f $@ $(OUTPUT_DIR)${bindir}; \ + fi; \ +) + +else + +$(foreach t,$(sort $(TARGET)),$(t)): FORCE + $(Q)$(MAKE) TARGET=$@ OBJS="$(SRCS_$@:.c=.o)" + +endif + +endif # ifdef TARGET diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-repo.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-repo.mk new file mode 100644 index 0000000000..a97d20715b --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-repo.mk @@ -0,0 +1,16 @@ +OPS_CMDLINE_V := \ + PACKAGE_DIR \ + TOP_DIR \ + STAMP_BLD_VAR \ + +OPS_SCRIPT := \ + $(strip $(foreach V, $(OPS_CMDLINE_V), $(V)="$($(V))")) \ + $(SHELL) \ + $(RULE_DIR)/scripts/ops_repository.sh \ + $(STAMP_BLD_VAR) + +repo-list: config + $(TOP_Q)$(OPS_SCRIPT) list + +repo-update: config + $(TOP_Q)$(OPS_SCRIPT) update diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-submods.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-submods.mk new file mode 100644 index 0000000000..f99fac6dc2 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-submods.mk @@ -0,0 +1,155 @@ +SUB_LOG_OPTION := $(if $(Q),,| tee -a $(OUTPUT_DIR)/$${i}/$(COMPILE_LOG)) +ALL_LOG_OPTION := $(if $(Q),,| tee -a $(COMPILE_LOG)) + +sub-mods: toolchain + $(Q) \ + if [ -f $(STAMP_ONE_MK) ] && [ "$(MAKECMDGOALS)" = "" ]; then \ + CORE_NUM=$$(cat /proc/cpuinfo 2>/dev/null| grep processor | tail -1 | awk '{ print $$NF }'); \ + JOBS_NUM=32; \ + if [ "$${CORE_NUM}" != "" ]; then JOBS_NUM=$${CORE_NUM}; fi; \ + if [ "$(Q)" != "@" ]; then JOBS_NUM=0; fi; \ + $(MAKE) --no-print-directory clean && \ + $(MAKE) --no-print-directory -j$$((JOBS_NUM + 1)) -f $(STAMP_ONE_MK) && \ + TMPD=$$(mktemp -d) && \ + rm -rf $(LIBOBJ_TMPDIR) $${TMPD} && \ + cp -rf $(OUTPUT_DIR) $${TMPD} && \ + rm -rf $${TMPD}/{usr,stamps} && \ + mv $${TMPD} $(LIBOBJ_TMPDIR); \ + else \ + if [ -f $(STAMP_PRJ_CFG) ]; then true; else \ + set -o pipefail; \ + for i in \ + $$(echo $(IMPORT_DIR)|$(SED) 's,$(TOP_DIR)/*,,g')/$(CONFIG_VENDOR)/platform \ + $(SUBDIRS); do \ + if [ ! -d $${i} ]; then continue; fi; \ + $(MAKE) --no-print-directory Q=$(Q) $${i} 2>&1 $(SUB_LOG_OPTION); \ + RETVAL=$$?; \ + if [ $${RETVAL} != 0 ]; then exit $${RETVAL}; fi; \ + done 2>&1 $(ALL_LOG_OPTION); \ + fi; \ + fi + +TOP_BUILD_VARS := \ + CC LD AR \ + CFLAGS LDFLAGS \ + PACKAGE_DIR \ + IMPORT_DIR \ + EXPORT_DIR \ + TOP_DIR \ + RULE_DIR \ + CONFIG_VENDOR \ + COMP_LIB \ + COMP_LIB_COMPONENTS \ + $(CROSS_CANDIDATES) \ + $(MAKE_ENV_VARS) \ + INSTALL_DIR \ + INSTALL_LIB_DIR \ + SYSROOT_INC \ + KERNEL_DIR \ + MAKE_ENV_VARS \ + CROSS_PREFIX \ + CROSS_CANDIDATES \ + ALL_SUB_DIRS \ + WIN32_CMAKE_SKIP \ + NOEXEC_CMAKE_DIRS \ + +CMDLINE_VARS := \ + HD_MAKEFILE \ + MAKE_SEGMENT \ + OUTPUT_DIR \ + PACKAGE_DIR \ + STAMP_BLD_ENV \ + STAMP_UNPACK \ + TOP_DIR \ + RULE_DIR \ + +# When TOP_BUILD_VARS like $(CFLAGS) contains special character '$' +# simply echo its value into 'Makefile' will cause '$' lost when GNU make read in again +# +$(STAMP_BLD_ENV): $(TOP_DIR)/makefile $(shell ls $(CONFIG_TPL) 2>/dev/null) \ + $(wildcard $(RULE_DIR)/*.mk) \ + $(shell grep "^ *include" $(TOP_DIR)/$(TOP_MAKEFILE)|awk '{ print $$NF }'|$(SED) '/^\$$/d') + @rm -f $@ + @$(foreach V, \ + $(sort $(TOP_BUILD_VARS)), \ + echo "$(V) := $(sort $($(V)))"|$(SED) 's:\$$:$$$$:g' >> $(STAMP_BLD_ENV); \ + ) + @echo "COMP_LIB_FILES := $(foreach V,$(COMP_LIB_COMPONENTS), $(LIBA_TARGET_$(V)))" >> $@ + +# note: +# $(SED) -i "/CONFIG_$${i//\//\\/}.*/d" $(CONFIG_TPL); +# above +# $(SED) -i "1iCONFIG_$${i} = y" $(CONFIG_TPL) +# was removed since modules will be skipped in some cases + +$(STAMP_BLD_VAR): $(foreach d,$(ALL_SUB_DIRS),$(d)/$(MAKE_SEGMENT)) $(STAMP_BLD_ENV) $(wildcard $(RULE_DIR)/*.mk) + $(TOP_Q) \ +( \ + if [ ! -f $(STAMP_BLD_VAR) ]; then echo ""; VERBOSE=1; fi; \ + rm -f $(STAMP_BLD_VAR); \ + for i in $(shell echo "$(ALL_SUB_DIRS)"|tr ' ' '\n'|sort -u); do \ + if [ "$${VERBOSE}" != "" ]; then \ + if [ ! -L $${i} ]; then \ + printf "CONFIGURE .............................. [%s]\n" $${i}; \ + fi; \ + $(SED) -i "1iCONFIG_$${i} = y" $(CONFIG_TPL); \ + echo "target-$${i}:; @true" >> $(STAMP_POST_RULE); \ + fi; \ + $(foreach V, $(CMDLINE_VARS), $(V)="$($(V))") \ + bash $(RULE_DIR)/pre-build.sh $${i} makefile-only > /dev/null; \ + if [ -d $(OUTPUT_DIR)/$${i} ]; then \ + $(MAKE) -s -C $(OUTPUT_DIR)/$${i} modinfo > /dev/null; \ + if [ $$? = 0 ]; then \ + $(MAKE) --no-print-directory -s -C $(OUTPUT_DIR)/$${i} modinfo >> $(STAMP_BLD_VAR); \ + else \ + echo ""; \ + echo "ERROR detected in '$${i}/$(MAKE_SEGMENT)'..."|grep --color '.*'; \ + echo ""; \ + rm -f $(STAMP_BLD_VAR) $(STAMP_PRJ_CFG); \ + exit 13; \ + fi \ + fi \ + done; \ + sort -o $(STAMP_BLD_VAR) $(STAMP_BLD_VAR); \ + if [ "$${VERBOSE}" != "" ]; then echo ""; fi; \ +) + +pre-build: MOD = $(subst target-,,$(filter-out $@,$(MAKECMDGOALS))) +pre-build: $(STAMP_BLD_ENV) + $(TOP_Q)rm -f $(OUTPUT_DIR)/$(MOD)/$(STAMP_UNPACK) + $(if $(filter 0,$(MAKELEVEL)),,@) \ + $(strip $(foreach V, $(CMDLINE_VARS), $(V)="$($(V))") \ + PKG_SOURCE="$(PKG_SOURCE_$(MOD))" \ + PKG_BRANCH="$(PKG_BRANCH_$(MOD))" \ + PKG_REVISION="$(PKG_REVISION_$(MOD))" \ + PKG_UPSTREAM="$(PKG_UPSTREAM_$(MOD))" \ + PKG_SWITCH="$(PKG_SWITCH_$(MOD))" \ + ) \ + $(if $(filter 0,$(MAKELEVEL)),VERBOSE_PRE_BLD=1) \ + bash $(RULE_DIR)/pre-build.sh $(subst target-,,$(filter-out $@,$(MAKECMDGOALS))) + +.PHONY: $(ALL_SUB_DIRS) + +$(ALL_SUB_DIRS): ALL_LOG_OPT = $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG)) +$(ALL_SUB_DIRS): SUB_LOG_OPT = $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$@/$(COMPILE_LOG)) + +$(ALL_SUB_DIRS): $(if $(filter 0,$(MAKELEVEL)),toolchain) $(STAMP_BLD_VAR) + $(TOP_Q)rm -f $(STAMP_PRJ_CFG) + $(TOP_Q)$(MAKE) --no-print-directory pre-build target-$@ +ifeq (0,$(MAKELEVEL)) + $(TOP_Q)$(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$@ clean +endif + $(TOP_Q) \ + if [ "$$( $(call Require_Build,$@) )" = "TRUE" ]; then \ + $(call Build_Depends,$@) && \ + $(call Build_CompLib,$@) && \ + $(call Update_Extra_Srcs,$(EXTRA_SRCS_$@),$@) && \ + $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$@ all $(SUB_LOG_OPT) $(ALL_LOG_OPT) && \ + if [ "$$(echo $(ORIGIN_$@))" != "" ]; then \ + touch $(OUTPUT_DIR)/$@/{$(STAMP_UNPACK),$(STAMP_CONFIG),$(STAMP_BUILD),$(STAMP_INSTALL)}; \ + fi \ + else \ + echo -ne "\r$$(printf '%40s' '')\r"; \ + fi + + @mkdir -p $(STAMP_DIR) && touch $(STAMP_DIR)/$$(echo "$@"|$(SED) 's:/:~:g').build.done diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-top.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-top.mk new file mode 100644 index 0000000000..0522bad9e4 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/_rules-top.mk @@ -0,0 +1,221 @@ +.PHONY: doc detect config reconfig toolchain sub-mods final-out env cmake one help + +all: detect config toolchain sub-mods final-out + $(TOP_Q) \ + if [ -f $(STAMP_PRJ_CFG) ]; then \ + $(RECURSIVE_MAKE) toolchain; \ + rm -f $(STAMP_PRJ_CFG); \ + fi + @rm -rf $(STAMP_DIR) + +RESET_ENV_VARS := \ + CROSS_PREFIX \ + CFLAGS \ + HOST \ + LDFLAGS \ + +help: + @echo -e "\033[1;37m[$(RULE_DIR)/docs]\e[0m" + @echo "" + @cat $(RULE_DIR)/docs/Help.md + @echo "" + +doc: + $(TOP_Q)rm -rf $(DOXYGEN_DIR)/html; mkdir -p $(DOXYGEN_DIR) + $(TOP_Q) \ + $(SED) \ + -e 's:^PROJECT_NAME.*:PROJECT_NAME = $(PRJ_NAME):g;' \ + -e 's:^PROJECT_NUMBER.*:PROJECT_NUMBER = $(PRJ_VERSION):g;' \ + -e 's:^OUTPUT_DIRECTORY.*:OUTPUT_DIRECTORY = $(DOXYGEN_DIR):g;' \ + build-rules/misc/Doxyfile.tpl > $(OUTPUT_DIR)/.doxygen.cfg + $(TOP_Q)doxygen $(OUTPUT_DIR)/.doxygen.cfg + +detect: + @if [ -d .git ]; then \ + mkdir -p .git/hooks; \ + for i in $(RULE_DIR)/hooks/*; do \ + cp -f $$i .git/hooks && chmod a+x .git/hooks/$$(basename $$i); \ + done; \ + fi + +prune: + @echo "$(TOP_DIR).pkgs directory removed!"|grep --color ".*" + @rm -rf $(TOP_DIR).pkgs + @$(MAKE) --no-print-directory distclean + +unzip: config $(STAMP_BLD_VAR) + @echo "Components: " + @echo "" + @for i in $(ALL_SUB_DIRS); do \ + $(MAKE) --no-print-directory pre-build target-$${i} ; \ + echo -ne "\r. $${i}"; \ + echo -e " "; \ + done + @echo "" + +cmake: + @$(MAKE) -s distclean + @$(MAKE) -s DEFAULT_BLD=$(RULE_DIR)/misc/config.generic.cmake config + @$(foreach V,$(filter-out CFLAGS,$(INFO_ENV_VARS)),$(V)="$($(V))") \ + SEP_LIBS="$$(grep -m 1 '^COMP_LIB_FILES' $(STAMP_BLD_ENV) | cut -d' ' -f3-)" \ + CFLAGS=$(CFLAGS) \ + bash $(RULE_DIR)/scripts/gen_top_cmake.sh $(TOP_DIR)/CMakeLists.txt + @for D in $(ALL_SUB_DIRS); do \ + echo "+ $${D}"; \ + $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$${D} cmake; \ + done + @echo "" + +one: COMP_LIB_OBJS = $(foreach V,$(COMP_LIB_COMPONENTS),$(foreach U,$(LIB_OBJS_$(V)),$(V)/$(U))) +one: + @$(foreach V,$(filter-out CFLAGS,$(INFO_ENV_VARS)),$(V)="$($(V))") \ + ALL_LIBS="$(strip $(foreach V,$(SUBDIRS),$(LIBA_TARGET_$(V))))" \ + ALL_PROG="$(strip $(foreach V,$(SUBDIRS),$(TARGET_$(V))))" \ + COMP_LIB_OBJS="$(foreach V,$(COMP_LIB_OBJS),$(OUTPUT_DIR)/$(V))" \ + CFLAGS=$(CFLAGS) \ + bash $(RULE_DIR)/scripts/gen_one_makefile.sh $(STAMP_ONE_MK) + +config: + + @mkdir -p $(OUTPUT_DIR) $(STAMP_DIR) $(INSTALL_DIR) + @mkdir -p $(SYSROOT_BIN) $(SYSROOT_INC) $(SYSROOT_LIB) + + $(TOP_Q) \ + if [ -f $(STAMP_BLD_VAR) ]; then \ + if [ "$$($(SED) '/[-_/a-zA-Z0-9]* = ..*/d' $(STAMP_BLD_VAR)|wc -l|$(SED) 's:^ *::g')" != "0" ]; then \ + rm -f $(STAMP_BLD_VAR); \ + fi \ + fi + + $(TOP_Q)+( \ + if [ -f $(CONFIG_TPL) ]; then \ + if [ "$(filter comp-lib,$(MAKECMDGOALS))" = "" ]; then \ + printf "BUILDING WITH EXISTING CONFIGURATION:\n\n"; \ + command grep -m 1 "VENDOR *:" $(CONFIG_TPL)|cut -c 3-; \ + command grep -m 1 "MODEL *:" $(CONFIG_TPL)|cut -c 3-; \ + echo ""; \ + fi \ + else \ + if [ "$(DEFAULT_BLD)" != "" ] && [ -f $(DEFAULT_BLD) ] && \ + ([ "$(DEFAULT_BLD)" = "$(RULE_DIR)/misc/config.generic.default" ] \ + || [ "$(MAKECMDGOALS)" = "" ] || [ "$(MAKECMDGOALS)" = "config" ]); then \ + printf "# Automatically Generated Section End\n\n" >> $(CONFIG_TPL); \ + printf "# %-10s %s\n" "VENDOR :" $$(basename $(DEFAULT_BLD)|cut -d. -f2) >> $(CONFIG_TPL); \ + printf "# %-10s %s\n" "MODEL :" $$(basename $(DEFAULT_BLD)|cut -d. -f3) >> $(CONFIG_TPL); \ + cat $(DEFAULT_BLD) >> $(CONFIG_TPL); \ + else \ + printf "SELECT A CONFIGURATION:\n\n"; \ + LIST=$$(for i in $(CONFIG_DIR)/config.*.*; do basename $${i}; done|sort); \ + select V in $${LIST}; do \ + echo ""; \ + printf "# Automatically Generated Section End\n\n" >> $(CONFIG_TPL); \ + printf "# %-10s %s\n" "VENDOR :" $$(echo $${V}|cut -d. -f2) >> $(CONFIG_TPL); \ + printf "# %-10s %s\n" "MODEL :" $$(echo $${V}|cut -d. -f3) >> $(CONFIG_TPL); \ + cp -f -P $(IMPORT_DIR)/$$(echo $${V}|cut -d. -f2)/$(PREBUILT_LIBDIR)/*.so* $(SYSROOT_LIB) 2>/dev/null; \ + cat $(CONFIG_DIR)/$${V} >> $(CONFIG_TPL); \ + break; \ + done; \ + fi && \ + printf "SELECTED CONFIGURATION:\n\n" && \ + command grep -m 1 "VENDOR *:" $(CONFIG_TPL)|cut -c 3- && \ + command grep -m 1 "MODEL *:" $(CONFIG_TPL)|cut -c 3- && \ + echo ""; \ + if [ "$(MAKECMDGOALS)" = "config" ]; then true; else \ + if [ "$(DEFAULT_BLD)" = "" ]; then \ + touch $(STAMP_PRJ_CFG); \ + fi; \ + fi; \ + for i in $(RESET_ENV_VARS); do unset $${i}; done; \ + $(MAKE) --no-print-directory -f $(TOP_MAKEFILE) $(STAMP_BLD_VAR) unzip; \ + fi) + + @$(MAKE) --no-print-directory one + +toolchain: VSP_TARBALL = $(shell $(SHELL_DBG) basename $(CONFIG_TOOLCHAIN_RPATH)) +toolchain: config +ifneq ($(CONFIG_TOOLCHAIN_NAME),) +ifeq (,$(CONFIG_TOOLCHAIN_RPATH)) + @echo "Error! CONFIG_TOOLCHAIN_NAME defined, but CONFIG_TOOLCHAIN_RPATH undefined!" && exit 1 +else + $(TOP_Q) \ +( \ + if [ -e $(OUTPUT_DIR)/$(CONFIG_TOOLCHAIN_NAME) ]; then \ + exit 0; \ + fi; \ +\ + if [ ! -d /tmp/$(CONFIG_TOOLCHAIN_NAME) -a -f /tmp/$(VSP_TARBALL) ]; then \ + echo "De-compressing Cached ToolChain ..." && \ + tar xf /tmp/$(VSP_TARBALL) -C /tmp; \ + fi; \ + if [ -d /tmp/$(CONFIG_TOOLCHAIN_NAME) ]; then \ + echo "Using Cached ToolChain ..." && \ + ln -sf /tmp/$(CONFIG_TOOLCHAIN_NAME) $(OUTPUT_DIR)/$(CONFIG_TOOLCHAIN_NAME); \ + exit 0; \ + fi; \ +\ + echo "Downloading ToolChain ..." && \ + wget -O $(OUTPUT_DIR)/$(VSP_TARBALL) $(CONFIG_VSP_WEBSITE)/$(CONFIG_TOOLCHAIN_RPATH) && \ + echo "De-compressing ToolChain ..." && \ + tar xf $(OUTPUT_DIR)/$(VSP_TARBALL) -C $(OUTPUT_DIR); \ + cp -f $(OUTPUT_DIR)/$(VSP_TARBALL) /tmp; \ + rm -rf /tmp/$(CONFIG_TOOLCHAIN_NAME); \ + tar xf /tmp/$(VSP_TARBALL) -C /tmp; \ +) +endif +endif + +reconfig: distclean + $(TOP_Q)+( \ + if [ -d $(CONFIG_DIR) ]; then \ + $(RECURSIVE_MAKE) config DEFAULT_BLD=not-exist-actually; \ + else \ + $(RECURSIVE_MAKE) config; \ + fi) + $(TOP_Q)rm -f $(STAMP_PRJ_CFG) + + +# for i in $(SUBDIRS) $(COMP_LIB_COMPONENTS); do \ +# if [ -d $(OUTPUT_DIR)/$${i} ]; then \ +# $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$${i} clean; \ +# fi \ +# done + +clean: + $(TOP_Q) \ + + $(TOP_Q) \ + rm -rf \ + $(LIBOBJ_TMPDIR) \ + $(COMPILE_LOG) \ + $(DIST_DIR)/* \ + $(STAMP_DIR) \ + $(SYSROOT_INC)/* $(SYSROOT_LIB)/* $(SYSROOT_LIB)/../bin/* \ + $(shell $(SHELL_DBG) find $(OUTPUT_DIR) -name "$(COMPILE_LOG)" \ + -or -name "$(WARNING_LOG)" \ + -or -name "$(STAMP_BUILD)" \ + -or -name "$(STAMP_INSTALL)" \ + -or -name "$(STAMP_POSTINS)" \ + -or -name "*.so" \ + -or -name "*.a" \ + -or -name "*.o" \ + -or -name "*.d" \ + -or -name "*.gc*" \ + 2>/dev/null) + +distclean: + $(TOP_Q) \ + rm -rf \ + $(CONFIG_TPL) $(COMPILE_LOG) \ + $(STAMP_PRJ_CFG) $(STAMP_BLD_ENV) $(STAMP_BLD_VAR) $(STAMP_POST_RULE) \ + $(DIST_DIR) $(STAMP_DIR) \ + + $(TOP_Q) \ + if [ -d $(OUTPUT_DIR) ]; then \ + cd $(OUTPUT_DIR); \ + if [ "$(CONFIG_TOOLCHAIN_NAME)" = "" ]; then \ + rm -rf *; \ + else \ + rm -rf $$(ls -I $(CONFIG_TOOLCHAIN_NAME)); \ + fi \ + fi + diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Config.md b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Config.md new file mode 100644 index 0000000000..da85205256 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Config.md @@ -0,0 +1,41 @@ +# 构建系统配置 + +## 定制目录排布 + +默认情况下, 构建系统采用如下的目录排布: + + CONFIG_DIR ?= $(TOP_DIR)/configs + DIST_DIR ?= $(TOP_DIR)/output + FINAL_DIR ?= $(DIST_DIR)/release + IMPORT_DIR ?= $(TOP_DIR)/import + LCOV_DIR ?= Coverage + MAKE_SEGMENT ?= iot.mk + OUTPUT_DIR ?= $(TOP_DIR)/.O + PACKAGE_DIR ?= $(TOP_DIR)/packages + RULE_DIR ?= $(TOP_DIR)/build-rules + TOP_DIR ?= $(CURDIR) + +含义如下: + +| 变量名 | 说明 | +|-------------------|-------------------------------------------| +| `CONFIG_DIR` | *硬件平台配置文件*的存放目录, 其中的文件需要以`config.XXX.YYY`形式命名, 其中`XXX`一般表示操作系统, `YYY`一般表示具体的硬件型号 | +| `DIST_DIR` | 最终的编译产物, 例如可执行程序, SDK的总库等, 存放的顶层目录 | +| `FINAL_DIR` | 最终的编译产物摆放时, 会放在`$(FINAL_DIR)`下, 这个变量可以指定最终摆放位置在顶层目录下的子目录路径 | +| `IMPORT_DIR` | 输入目录, 用于摆放预编译的二进制库, 以及使用这些预编译库对应的头文件 | +| `LCOV_DIR` | 覆盖率文件产生目录, 用于存放`lcov`软件产生的中间文件和最终的`HTML`格式图形化文件 | +| `MAKE_SEGMENT` | 构建单元中的片段文件, 开发者唯一需要编辑的文件, 指导构建系统如何编译该文件所在的构建单元 | +| `OUTPUT_DIR` | 编译树中间目录 | +| `PACKAGE_DIR` | 打包目录, 其中可以存放其它组件, 也可以存放压缩包形式的第三方软件, 例如`openssl-0.9.8.tar.gz`等 | +| `RULE_DIR` | 构建系统核心目录, 如果不喜欢`build-rules`存放在自己的工程里, 完全可以通过这个变量把它移出去 | +| `TOP_DIR` | 工程的顶级目录, 默认就是顶层`makefile`所在的路径, 极少改动 | + +可以完全不对它们做任何改动, 依照上文的含义和默认值来排布自己工程 + +--- +也可以通过顶层目录的`project.mk`, 可以改动它们, 例如: + + $ cat project.mk + MAKE_SEGMENT := alink.mk + +则表示在每个构建单元中, 指导构建过程的片段文件不再是默认的`iot.mk`, 而是`alink.mk` diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Debug.md b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Debug.md new file mode 100644 index 0000000000..e6dd0d8d3b --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Debug.md @@ -0,0 +1,16 @@ +# 构建系统调试 + +## 调试开关 + +* 在`make ...`命令行中, 设置`TOP_Q`变量为空, 可打印工程顶层的执行逻辑, 例如硬件平台的选择, SDK主库的生成等 + + make .... TOP_Q= + +* 在`make ...`命令行中, 设置`Q`变量为空, 可打印模块内部的构建过程, 例如目标文件的生成, 头文件搜寻路径的组成等 + + make .... Q= + +## 对单个构建单元调试 + +* 可以用`make foo/bar`单独对`foo/bar`进行构建, 不过, 这可能需要先执行`make reconfig` +* 可以进入`.O/foo/bar`路径, 看到完整的编译临时目录, 有makefile和全部源码, 所以在这里执行`make`, 效果和`make foo/bar`等同 \ No newline at end of file diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Introduction.md b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Introduction.md new file mode 100644 index 0000000000..be36118570 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Introduction.md @@ -0,0 +1,124 @@ +# 如何获取 + +* 可访问样板组件`LITE-utils`的仓库: [*git@gitlab.alibaba-inc.com:iot-middleware/LITE-utils.git*](http://gitlab.alibaba-inc.com/iot-middleware/LITE-utils) +* 从`master`分支的`build-rules`目录复制得到构建系统的最新副本 +* 也可以直接在`LITE-utils`中体验构建系统的工作方式和观察工作过程 + +# 常用命令 + +| 命令 | 解释 | +|-----------------------|-----------------------------------------------------------------------------------| +| `make distclean` | **清除一切构建过程产生的中间文件, 使当前目录仿佛和刚刚clone下来一样** | +| `make [all]` | **使用默认的平台配置文件开始编译** | +| `make reconfig` | **弹出多平台选择菜单, 用户可按数字键选择, 然后根据相应的硬件平台配置开始编译** | +| `make config` | **显示当前被选择的平台配置文件** | +| `make help` | **打印帮助文本** | +| `make ` | **单独编译被指定的目录, 或者叫构建单元** | + +# 如何开发 + +* 访问[**构建系统配置**](https://code.aliyun.com/edward.yangx/public-docs/wikis/build/build-system-config), 了解如何配置来影响构建系统的行为 +* 访问[**构建工程说明**](https://code.aliyun.com/edward.yangx/public-docs/wikis/build/build-system-proj), 了解如何定制工程全局的编译 +* 访问[**构建单元说明**](https://code.aliyun.com/edward.yangx/public-docs/wikis/build/build-system-units), 了解如何增删改查你自己的构建单元 +* 访问[**构建系统调试**](https://code.aliyun.com/edward.yangx/public-docs/wikis/build/build-system-debug), 了解在定制构建单元时, 如何自己调试 + +# 高级命令 + +| 命令 | 解释 | +|-----------------------|-------------------------------------------------------------------------------------------| +| `make test` | **运行指定的测试集程序, 统计显示测试例的通过率和源代码的覆盖率** | +| `make doc` | **扫描源码目录中以`Doxygen`格式或者`Markdown`格式编写的注释, 在`html`目录产生帮助文档** | +| `make repo-list` | **列出当前工程引用的外部组件和它们的云端仓库地址** | +| `make repo-update` | **对所有引用到的外部组件, 用云端仓库更新本地仓库** | + +# 组成部分 + + LITE-utils$ tree -A -L 1 + . + +-- build-rules # 构建系统核心 + +-- example + +-- external + +-- makefile # 工程的makefile + +-- packages + +-- project.mk # 工程设置文件 + +-- src + +-- testsuites + +> 以`LITE-utils`为例, 对整个构建过程需要知道的只有如上三个部分: + +| 组成部分 | 说明 | +|---------------|-------------------------------------------------------------------------------| +| `project.mk` | 本工程的目录排布, 工程名称, 版本信息等, 可选 | +| `makefile` | 本工程的makefile, 基于`GNU Make`, 通常只含有极少的内容, 指定编译的范围, 必选 | +| `build-rules` | 构建系统核心, 指定编译的规则, 不需要关注 | + +# 工作过程 + +可以从一个简单的`makefile`样例看起 + + 1 sinclude project.mk + 2 sinclude $(CONFIG_TPL) + 3 + 4 SUBDIRS += \ + 5 external/cut \ + 6 src \ + 7 example \ + 8 testsuites \ + 9 + 10 include $(RULE_DIR)/rules.mk + +0. 构建系统是基于`GNU Make`的简化系统, 所以工作过程的起点仍然是顶层的`makefile` +1. 读取`project.mk`, 如果当前工程的目录排布和默认的不一样, 则用当前设置, 可选 +2. 读取`.config`文件, 这个文件其实是构建系统运行时所有输入的集合, 也称为*硬件平台配置文件*, 可选 +3. 读取`SUBDIRS`变量, 这个变量指定了编译的范围, 必选 +4. 读取`CFLAGS`或者`LDFLAGS`等变量, 顶层`makefile`的变量会被应用到每个构建单元的编译和链接, 可选 +5. 读取`.../rules.mk`文件, 开始进入构建系统核心, 必选, 这又可以细分为如下过程 + +## 详细工作过程 + +* 产生*硬件平台配置文件*, 这个过程是为了产生顶层的`.config`文件, 也就是所谓的`$(CONFIG_TPL)` +* 识别构建单元, 所谓构建单元在构建系统看来就是一个又一个包含`iot.mk`的目录, 如果不希望用`iot.mk`作为每个单元的编译片段文件, 在`project.mk`中设置`MAKE_SEGMENT`变量即可 +* 从`$(SUBDIRS)`变量从前往后逐个编译每个构建单元 +* 构建单元如果有依赖到其它构建单元, 则先去编译被依赖的单元; 若后者又有依赖的其它的单元, 则同样, 递归的先去编译其依赖; 以此类推 + +# 高级命令示例 + +- **make test: 运行指定的测试集程序, 统计显示测试例的通过率和源代码的覆盖率** + +![image](https://yuncodeweb.oss-cn-hangzhou.aliyuncs.com/uploads/edward.yangx/public-docs/52c806dd879f18cd7ea855a8549461f6/image.png) + +- **make doc: 扫描源码目录中以`Doxygen`格式或者`Markdown`格式编写的注释, 在`html`目录产生帮助文档** + + LITE-utils $ make doc + ... + ... + Patching output file 15/16 + Patching output file 16/16 + lookup cache used 256/65536 hits=882 misses=258 + finished... + +![image](https://yuncodeweb.oss-cn-hangzhou.aliyuncs.com/uploads/edward.yangx/public-docs/b9ea5662e866913efcaca28549d9f033/image.png) + +- **make repo-list: 列出当前工程引用的外部组件和它们的云端仓库地址** + + LITE-utils $ make repo-list + [external/log] git@gitlab.alibaba-inc.com:iot-middleware/LITE-log.git + +> 以上输出表示在构建单元`external/log`, 引用了云端仓库位于`git@gitlab.alibaba-inc.com:iot-middleware/LITE-log.git`的外部组件`LITE-log` + +- **make repo-update: 将所有引用的外部组件用云端仓库更新本地仓库** + + LITE-utils $ make repo-update + [ LITE-log.git ] <= : git@gitlab.alibaba-inc.com:iot-middleware/LITE-log.git :: master + + cd /home/edward/srcs/iot-middleware/LITE-utils/packages + + rm -rf LITE-log.git + + git clone -q --bare -b master --single-branch git@gitlab.alibaba-inc.com:iot-middleware/LITE-log.git LITE-log.git + + rm -rf LITE-log.git/hooks/ + + mkdir -p LITE-log.git/hooks/ + + touch LITE-log.git/hooks/.gitkeep + + touch LITE-log.git/refs/heads/.gitkeep LITE-log.git/refs/tags/.gitkeep + + rm -rf /home/edward/srcs/iot-middleware/LITE-utils.pkgs/LITE-log + + cd /home/edward/srcs/iot-middleware/LITE-utils + + set +x + +> 以上输出表示从`git@gitlab.alibaba-inc.com:iot-middleware/LITE-log.git`拉取最新的云端仓库, 更新到本地仓库`packages/LITE-log.git` diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Proj.md b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Proj.md new file mode 100644 index 0000000000..33a7cfcd12 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Proj.md @@ -0,0 +1,39 @@ +# 定制工程全局的编译行为 + +## 增加硬件平台配置文件 + +在默认的`configs`目录, 或者在指定的`$(CONFIG_DIR)`目录下, 文件名形式为`config..`的文本文件, 会被构建系统认为是硬件平台配置文件, 每个文件对应一个嵌入式软硬件平台 + +* 其中部分, 一般是指明嵌入式平台的软件OS提供方, 如`mxchip`, `ubuntu`, `win7`等. 另外, 这也会导致构建系统到`$(IMPORT_DIR)/`目录下寻找预编译库的二进制库文件和头文件 +* 其中部分, 一般是标明嵌入式平台的具体硬件型号, 如`mtk7687`, `qcom4004`等, 不过也可以写上其它信息, 因为构建系统不会去理解它, 比如`mingw32`, `x86-64`等 + +> 例如`config.mxchip.3080c`文件, 如果在`make reconfig`的时候被选择, 则会导致: + +* 构建系统在`import/mxchip/`目录下寻找预编译库的二进制库文件和头文件 +* 构建系统使用该文件内的变量指导编译行为, 具体来说, 可以根据说明使用如下变量 + +| 变量 | 说明 | +|-----------------------|-------------------------------------------| +| `CONFIG_ENV_CFLAGS` | 指定全局的`CFLAGS`编译选项, 传给`compiler`, 例如`CONFIG_ENV_CFLAGS += -DDEBUG` | +| `CONFIG_ENV_LDFLAGS` | 指定全局的`LDFLAGS`链接选项, 传给`linker`, 例如`CONFIG_ENV_LDFLAGS += -lcrypto` | +| `CROSS_PREFIX` | 指定交叉编译工具链共有的前缀, 例如`CROSS_PREFIX := arm-none-eabi-`, 会导致构建系统使用`arm-none-eabi-gcc`和`arm-none-eabi-ar`, 以及`arm-none-eabi-strip`等 | +| `OVERRIDE_CC` | 当交叉工具链没有共有的前缀或者前缀不符合`prefix+gcc|ar|strip`类型时, 例如`armcc`, 可用`OVERRIDE_CC = armcc`单独指定C编译器 | +| `OVERRIDE_AR` | 当交叉工具链没有共有的前缀或者前缀不符合`prefix+gcc|ar|strip`类型时, 例如`armar`, 可用`OVERRIDE_AR = armar`单独指定库压缩器 | +| `OVERRIDE_STRIP` | 当交叉工具链没有共有的前缀或者前缀不符合`prefix+gcc|ar|strip`类型时, 例如`armcc`没有对应的strip程序, 可用`OVERRIDE_STRIP = true`单独指定strip程序不执行 | + +## 定制单元测试 + +如果你的工程含有配合构建系统的单元测试用例, 则可以在顶层`makefile`中添写类似如下语句, 告诉构建系统在`make test`命令中执行它们做单元测试, 并统计源码覆盖率 + + UTEST_PROG := utils-tests + +> 以上面的`LITE-utils`为例, 其中的`utils-tests`就是它的单元测试程序, 这是在构建单元`testsuites`中产生的一个`Linux`下可执行程序 + + $ cat testsuites/iot.mk -n + 1 TARGET := utils-tests + 2 DEPENDS += external/cut src + 3 HDR_REFS := src + 4 + 5 LDFLAGS += -llite-utils -llite-log -llite-cut + +为什么如上的一个简单`iot.mk`片段文件, 就能指导构建系统生成可执行程序`utils-tests`, 可以访问[**构建单元说明**](https://code.aliyun.com/edward.yangx/public-docs/wikis/build/build-system-units) diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Units.md b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Units.md new file mode 100644 index 0000000000..8c6be36656 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Build-System-Units.md @@ -0,0 +1,130 @@ +# 构建单元说明 + +## 定义 + +* 片段文件: 用来指导某个具体的文件夹下源码应如何获取和编译以及链接的makefile文本片段, 基本只包含变量的赋值 +* 默认的片段文件是名为`iot.mk`的文本文件, 可以在工程顶层目录`project.mk`里, 用`MAKE_SEGMENT := `更改片段文件名 +* 从工程顶层目录以下, 每一个含有`iot.mk`的子目录, 都被构建系统认为是一个构建单元 + +> 举例来说: + +> 假设在/path/to/project/project.mk文件中有 +> +> MAKE_SEGEMENT := build.mk + +> 那么, 如下的目录排布 +> +> /path/to/project/bar/build.mk +> /path/to/project/foo/sub1/build.mk +> /path/to/project/foo/sub2/build.mk +> /path/to/project/mmm/nnn/ppp/qqq/build.mk + +> 会导致 +> +> bar +> foo/sub1 +> foo/sub2 +> mmm/nnn/ppp/qqq + +> 都被认为是构建单元, 可以用类似`make bar`, `make foo/bar1`这样的命令单独编译, 也可以调试完成后通过修改顶层`makefile`集成到工程中 + +## 工作过程 + +对整个工程进行构建的过程基本是遍历每个构建单元逐个构建, 而对每个构建单元的构建过程是: + +* 构造编译的临时目录, 例如 `.O/bar` 目录, 对应源码 `bar` 构建单元 +* 在编译的临时目录中动态生成或更新`makefile`和源代码 +* 切换到临时目录中, 编译源代码, 产生目标代码 + +## 开发过程 + +增加一个新的构建单元可以按如下步骤进行: + +* 创建新单元对应的目录, 比如 + + mkdir foo/bar + +* 创建该单元的片段文件, 比如 + + vi foo/bar/iot.mk + 1 LIBA_TARGET := libfoobar.a + +* 为该单元添加一些源码文件, 比如 + + cp .../*.c foo/bar/ + +* 这时, 在工程文件中运行`make reconfig`, 告诉构建系统新增了一个单元, 这个单元就可以被独立编译了 + + make reconfig + make foo/bar + +* 单独的编译和运行没问题之后, 修改工程的`makefile`, 使这个新单元也加入到工程中 + + vi makefile + ... + ... + SUBDIRS += foo/bar + ... + ... + +## 编写片段文件 + +**简化编译的设计思想就是使每一个模块的开发者, 基本只需要编写片段文件就能构建自己的功能模块** + +**而片段文件之所以能够起到简化的效果, 是因为它基本上只是一些"变量赋值"语句的集合, 编写它, 几乎可以不需要学习任何语言的任何语法** + +--- +以下是在片段文件中可以使用的变量名: + +### 输出相关 + +| 变量名 | 用处 | +|-------------------|-----------------------------------------------------------------------------------------------| +| ORIGIN | 如果你的模块希望按自己独特的方式编译, 比如`./configure ...; make; ...`, 需要设置此变量为1 | +| LIBSO_TARGET | 设置本单元被编译出的`Linux`动态库文件名, 对它赋值导致系统帮助你产生`*.so`共享库文件 | +| LIBA_TARGET | 设置本单元被编译出的静态库文件名, 对它赋值导致系统帮助你产生`*.a`静态库文件 | +| TARGET | 设置本单元被编译出的可执行程序文件名, 对它赋值导致系统帮助你产生`Linux`下的可执行程序 | +| KMOD_TARGET | 设置本单元被编译出的内核模块文件名, 对它赋值导致系统帮助你产生`Linux`下的`*.ko`内核模块 | + +**以上变量至少要有一个被设置, 这样构建系统才知道构建的输出是什么, 至多则可以同时被设置, 例如同时产生静态库文件和可执行程序, 甚至内核模块等** + +### 输入相关 + +| 变量名 | 用处 | +|-------------------|-----------------------------------------------------------------------------------------------| +| LIB_SRCS | 可选, 列出哪些`*.c`文件被编译成`*.a`或者`*.so` | +| SRCS | 可选, 列出哪些`*.c`文件被编译成可执行程序 | +| EXTRA_SRCS | 可选, 列出哪些源文件需要在开始编译之前被复制到临时的编译目录 | +| CFLAGS | 可选, 列出需要特别应用在本模块上的编译选项 | +| LDFLAGS | 可选, 列出需要特别应用在本模块上的链接选项 | + +### 组合相关 + +| 变量名 | 用处 | +|-------------------|-----------------------------------------------------------------------------------------------| +| HDR_REFS | 可选, 如果你的模块引用了其它模块的头文件, 那么需要设置这个变量, 列出被引用模块在工程里的相对路径 | +| DEPENDS | 可选, 如果你的模块需要在其它模块构建完成后才能编译, 那么需要设置这个变量, 列出被依赖模块在工程里的相对路径 | + +### 高级用法 + +| 变量名 | 用处 | +|-------------------|-----------------------------------------------------------------------------------------------| +| PKG_SOURCE | 可选, 表示源码来自`*.c`之外的形式, 例如压缩包文件, 或者独立的git仓库等 | +| PKG_BRANCH | 可选, 仅在`PKG_SOURCE`是git仓库的时候才有意义, 指定使用该仓库的哪个分支作为源码输入 | +| PKG_REVISION | 可选, 仅在`PKG_SOURCE`是git仓库的时候才有意义, 指定使用该仓库的哪个分支上的哪个`commit`或者`tag` | +| PKG_UPSTREAM | 可选, 仅在`PKG_SOURCE`是git仓库的时候才有意义, 指定使用哪个云端的git仓库地址来更新本地git仓库 | + + +### 其它 + +#### 产生多个可执行程序 + +* 如果你的模块希望产生单个的可执行程序, 那么对变量`TARGET`和`SRCS`赋值就可以了, 但如果希望产生多个可执行程序, 比如 + + TARGET = prog1 prog2 prog3 + +* 那么需要用`SRCS_`变量对这多个可执行程序分别设定他们的源文件, 比如 + + SRCS_prog1 = prog1.c + SRCS_prog2 = prog2.c library_A.c + SRCS_prog3 = prog3.c library_A.c library_B.c diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Help.md b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Help.md new file mode 100644 index 0000000000..f7b3863f7e --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/docs/Help.md @@ -0,0 +1,23 @@ +常用命令 +--- + +| 命令 | 解释 | +|-----------------------|-----------------------------------------------------------------------------------| +| `make distclean` | **清除一切编译过程产生的中间文件, 使当前目录仿佛和刚刚clone下来一样** | +| `make [all]` | **使用默认的平台配置文件开始编译** | +| `make reconfig` | **弹出多平台选择菜单, 用户可按数字键选择, 然后根据相应的硬件平台配置开始编译** | +| `make config` | **显示当前被选择的平台配置文件** | +| `make help` | **打印帮助文本** | +| `make env` | **打印当前编译的选项和它们的值** | +| `make ` | **单独编译被 指定的目录, 或者叫编译单元** | + +高级命令 +--- + +| 命令 | 解释 | +|-----------------------|-----------------------------------------------------------------------------------| +| `make repo-list` | 列出当前可以更新的组件列表, 所谓组件是跨项目的功能模块, 有独立的`git`仓库 | +| `make repo-update` | 根据输入更新所有组件或单个被选择的组件, 从线上获取其最新的`git`仓库 | +| `make test` | 如果当前项目有编写单元测试主程序和单元测试例, 则执行UT, 统计通过率和覆盖率 | + +o 访问 https://code.aliyun.com/edward.yangx/public-docs/wikis/home 可获得编译系统线上最新和最全的帮助文档 diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/funcs.mk b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/funcs.mk new file mode 100644 index 0000000000..bae227ae96 --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/funcs.mk @@ -0,0 +1,172 @@ +define Dump_Var + NUM=`echo "$(strip $($(1)))"|awk '{ print NF }'`; \ + if (( $${NUM} \> 1 )); then \ + printf -- "-----------------------------------------------------------------\n"; \ + printf "%-24s| %s\n" ". $(1)" `echo "$(strip $($(1)))"|cut -d' ' -f1|$(SED) 's/^ *//'`; \ + for i in `echo "$(strip $($(1)))"|cut -d' ' -f2-`; do \ + printf "%-24s| %s\n" "" "$${i}"; \ + done; \ + printf -- "-----------------------------------------------------------------\n"; \ + else \ + printf "%-24s| %s\n" ". $(1)" "$(strip $($(1)))"; \ + fi; +endef + +ifneq (,$(Q)) +define Inspect_Env +endef +else +define Inspect_Env + @printf -- "-----------------------------------------------------------------\n" + @printf "%-20s| %s\n" ". BUILDING_TARGET" "$@" + @printf -- "-----------------------------------------------------------------\n" + @printf "%-20s| %s\n" ". BUILDING_DEPEND" "$(filter-out FORCE,$^)" + @printf -- "-----------------------------------------------------------------\n" + @$(foreach var,$(1),$(call Dump_Var,$(var))) + @printf -- "-----------------------------------------------------------------\n" +endef +endif + +# 31, red. 32, green. 33, yellow. 34, blue. 35, magenta. 36, cyan. 37, white. +define Brief_Log +( \ + if [ "$1" = "CC" ]; then \ + if echo "$@"|grep -q "\.so$$"; then \ + COLOR_MARK="\033[1;32m"; \ + elif echo "$@"|grep -q "\.ko$$"; then \ + COLOR_MARK="\033[1;35m"; \ + else \ + COLOR_MARK="\033[1;36m"; \ + fi \ + elif [ "$1" = "AR" ]; then \ + COLOR_MARK="\033[1;33m"; \ + elif [ "$1" = "LD" ]; then \ + COLOR_MARK="\033[1;31m"; \ + elif [ "$1" = "ST" ]; then \ + COLOR_MARK="\033[0;33m"; \ + fi; \ + echo -ne "$${COLOR_MARK}"; \ + if [ "$2" = "" ]; then \ + FIRST_DEP="$(firstword $(filter-out FORCE,$?))"; \ + SPACE_BAR=" "; \ + if [ "$${FIRST_DEP}" != "" ]; then \ + FIRST_DEP="$$(basename $${FIRST_DEP})"; \ + fi; \ + printf "\r%-40s%s%s$(3)\n" "[$1] $$(echo -n "$$(basename $@)" | cut -c1-28)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \ + else \ + printf "\r%-40s%s%s$(3)\n" "[$1] $$(echo -n "$(2)" | cut -c1-28)" "<= $${FIRST_DEP} $${SPACE_BAR}"; \ + fi; \ + for i in $(wordlist 2,100,$(filter-out FORCE,$?)); do \ + if [ "$$(echo $${i}|cut -c1)" != "/" ]; then \ + printf "%-40s%s$(3)\n" "" " $$(basename $${i})"; \ + fi \ + done; \ + echo -ne "\033[0m"; \ +) +endef + +define Copy_Headers + $(Q) \ + if [ "$(strip $(1))" != "" ]; then \ + mkdir -p $(2)/$(3); \ + for hdr in $(1); do \ + if [ ! -f $(2)/$(3)/$${hdr} ] || [ $${PWD}/$${hdr} -nt $(2)/$(3)/$${hdr} ]; then \ + mkdir -p $(2)/$(3); \ + cp -f $(TOP_DIR)/$(MODULE_NAME)/$${hdr} $(2)/$(3)/$$(basename $${hdr}); \ + fi; \ + done \ + fi +endef + +define Update_Extra_Srcs +( \ + for ELEM in $(strip $(1)); do \ + DST=$(OUTPUT_DIR)/$(2)/$$(basename $${ELEM}); \ + if [ $${ELEM} -nt $${DST} ]; then \ + cp -Lf $${ELEM} $${DST}; \ + fi; \ + done \ +) +endef + +define Require_Build +( \ + [ "$(PKG_SWITCH_$(1))" != "y" ] && \ + echo "FALSE" && exit; \ +\ + [ "$(LIBA_TARGET_$(1))" != "" ] && \ + $(foreach L,$(LIBA_TARGET_$(1)),[ -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(L) ] && ) \ + echo "FALSE" && exit; \ +\ + [ "$(LIBSO_TARGET_$(1))" != "" ] && \ + [ -f $(IMPORT_VDRDIR)/$(PREBUILT_LIBDIR)/$(LIBSO_TARGET_$(1)) ] && \ + echo "FALSE" && exit; \ +\ + echo "TRUE"; \ +) +endef + +define Build_Depends +( \ + set -o pipefail && \ + for i in $(DEPENDS_$(1)); do \ + STAMP=$(STAMP_DIR)/$$(echo $${i}|$(SED) 's:/:~:g').build.done; \ + if [ -f $${STAMP} ]; then \ + continue; \ + fi; \ + $(MAKE) --no-print-directory $${i} \ + $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$${i}/$(COMPILE_LOG)) \ + $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG)); \ + RETVAL=$$?; \ + if [ $${RETVAL} != 0 ]; then \ + exit $${RETVAL}; \ + fi; \ + done \ +\ +) +endef + +# +# ($(foreach d,$(COMP_LIB_COMPONENTS), \ +# +# $(RECURSIVE_MAKE) pre-build target-$(d) && \ +# $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$(d) $(LIBA_TARGET_$(d)) \ +# $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(d)/$(COMPILE_LOG)) \ +# $(if $(Q),,2>&1|tee -a $(OUTPUT_DIR)/$(COMPILE_LOG)) \ +# ; \ +# +# if [ $$? != 0 ]; then \ +# +# KEEP SEPA-LIBS: +# +# rm -f $(SYSROOT_LIB)/$(firstword $(LIBA_TARGET_$(d))) $(SYSROOT_LIB)/$(firstword $(LIBSO_TARGET_$(d))) 2>/dev/null; \ +# + +ifdef COMP_LIB +define Build_CompLib +( \ + if [ "$(strip $(1))" = "FORCE" ] || \ + [ "$$(echo $(LDFLAGS_$(strip $(1)))|grep -wo -- '-l$(COMP_LIB_NAME)')" != "" ]; then \ + ( \ + $(foreach d,$(COMP_LIB_COMPONENTS), \ + [ -f $(STAMP_DIR)/$(subst /,~,$(d)).build.done ] || \ + set -o pipefail && \ + $(MAKE) --no-print-directory -C $(OUTPUT_DIR)/$(d) $(firstword $(LIBA_TARGET_$(d))) $(firstword $(LIBSO_TARGET_$(d))) && set +x; \ + RETVAL=$$?; \ + if [ $${RETVAL} != 0 ]; then \ + exit $${RETVAL}; \ + fi; \ + ) \ + ); \ + if [ ! -f $(SYSROOT_LIB)/$(COMP_LIB) ]; then \ + $(call Info_CompLib,$(COMP_LIB_NAME),$(COMP_LIB_OBJS)); \ + fi; \ + $(call Finalize_CompLib,$(COMP_LIB_OBJS),$(SYSROOT_LIB),$(COMP_LIB_NAME)); \ + fi \ +) +endef +else +define Build_CompLib +true +endef +endif diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/hooks/pre-commit b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/hooks/pre-commit new file mode 100755 index 0000000000..d1888f108b --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/hooks/pre-commit @@ -0,0 +1,23 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +for i in `git status -s | awk '{ print $NF }'`; do + j=$(echo $(basename $i)|cut -d'.' -f2) + if [ "$j" = "c" -o "$j" = "h" -o "$j" = "md" -o "$j" = "mk" ] || [ "$i" = "makefile" -o "$i" = "make.settings" ]; then + if [ "$(find $i -perm /111 2>/dev/null)" != "" ]; then + chmod a-x $i + echo "[chmod] $i" + if [ "$(git status --short $i|cut -c1)" = "M" ]; then + git add $i + fi + fi + else + echo "[skip ] $i" + fi +done diff --git a/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/misc/Doxyfile.tpl b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/misc/Doxyfile.tpl new file mode 100644 index 0000000000..869123e23e --- /dev/null +++ b/framework/protocol/linkkit/sdk/iotx-sdk-c_clone/build-rules/misc/Doxyfile.tpl @@ -0,0 +1,2426 @@ +# Doxyfile 1.8.11 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = TBD + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = TBD + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = . +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = YES + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = . + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl, +# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js. + +FILE_PATTERNS = *.h + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = NO + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +# CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +# CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /