From 0326ee5c14813694df3c026217abaa7c78539a0a Mon Sep 17 00:00:00 2001 From: Andrey Shamanin Date: Tue, 7 Jul 2020 14:09:45 +0300 Subject: Add AWS embedded C SDK AWS embedded C SDK allows to create applications for communication with AWS cloud. Commit includes a new recipe and patches for AWS SDK compilation. Fix review comment (use mbedTLS from external recipes). Bug-AGL: SPEC-3479 Signed-off-by: Andrey Shamanin Change-Id: I0d4923cd8541e7be89580b32ed6c68fcb10c1ce7 Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/24950 Tested-by: Jenkins Job builder account ci-image-build: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account Reviewed-by: Jan-Simon Moeller --- .../aws-iot-device-sdk-embedded-c.bb | 40 ++++++++++++++ .../files/Makefile.aws | 62 ++++++++++++++++++++++ .../files/aws_iot_config.h | 58 ++++++++++++++++++++ .../files/awsiotsdk.pc | 27 ++++++++++ 4 files changed, 187 insertions(+) create mode 100644 meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb create mode 100644 meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws create mode 100644 meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h create mode 100644 meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb new file mode 100644 index 000000000..a3f67004e --- /dev/null +++ b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb @@ -0,0 +1,40 @@ +DESCRIPTION = "AWS IoT device SDK for embedded C" +AUTHOR = "AWS" +HOMEPAGE = "https://github.com/aws/aws-iot-device-sdk-embedded-C" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=acc7a1bf87c055789657b148939e4b40" + +SRC_URI = "\ + git://github.com/aws/aws-iot-device-sdk-embedded-C.git;protocol=https \ + file://Makefile.aws \ + file://aws_iot_config.h \ + file://awsiotsdk.pc \ +" +SRCREV = "d039f075e1cc2a2a7fc20edc6868f328d8d36b2f" + +S = "${WORKDIR}/git" +B = "${WORKDIR}/build" + +DEPENDS = "mbedtls" +RDEPENDS_${PN} += "mbedtls" + +do_configure_prepend() { + cp ${WORKDIR}/Makefile.aws ${S}/src + cp ${WORKDIR}/aws_iot_config.h ${S}/include + cp ${WORKDIR}/awsiotsdk.pc ${S} +} + +do_compile() { + cd ${S}/src + oe_runmake -f ./Makefile.aws DESTDIR=${D} all +} + +do_install() { + cd ${S}/src + oe_runmake -f ./Makefile.aws DESTDIR=${D} install +} + +BBCLASSEXTEND = "native nativesdk" + +ALLOW_EMPTY_${PN} = "1" + diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws new file mode 100644 index 000000000..d4f18c0f9 --- /dev/null +++ b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws @@ -0,0 +1,62 @@ +########################################################################### +# Copyright 2020 MERA +# +# 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. +########################################################################### + +# Generated library name +NAME := awsiotsdk + +SRC = . +AWS_SDK_DIR = $(SRC)/.. +PLATFORM_DIR = $(AWS_SDK_DIR)/platform/linux/mbedtls +PLATFORM_COMMON_DIR = $(AWS_SDK_DIR)/platform/linux/common +AWS_INSTALL_HEADERS_DIR = /usr/include/awsiotsdk + + +CFLAGS += -I $(AWS_SDK_DIR)/include +CFLAGS += -I $(AWS_SDK_DIR)/external_libs/jsmn +CFLAGS += -I $(PLATFORM_COMMON_DIR) +CFLAGS += -I $(PLATFORM_DIR) +CFLAGS += -DENABLE_IOT_DEBUG -DENABLE_IOT_INFO -DENABLE_IOT_WARN -DENABLE_IOT_ERROR + + +# Source to compile +SRCS += $(wildcard $(SRC)/*.c) +SRCS += $(wildcard $(AWS_SDK_DIR)/external_libs/jsmn/*.c) +SRCS += $(wildcard $(PLATFORM_DIR)/*.c) +SRCS += $(wildcard $(PLATFORM_COMMON_DIR)/*.c) + +OBJS = $(SRCS:.c=.o) + + +.PHONY: all +all: lib$(NAME).a + +lib$(NAME).a: $(OBJS) + $(AR) -rcs $@ $(OBJS) + +.PHONY: install +install: lib$(NAME).a + install -D -m 0644 lib$(NAME).a $(DESTDIR)/usr/lib/lib$(NAME).a + install -d $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR) + install -m 0644 $(AWS_SDK_DIR)/include/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/ + install -m 0644 $(AWS_SDK_DIR)/external_libs/jsmn/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/ + install -m 0644 $(PLATFORM_COMMON_DIR)/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/ + install -m 0644 $(PLATFORM_DIR)/*.h $(DESTDIR)$(AWS_INSTALL_HEADERS_DIR)/ + install -d $(DESTDIR)/usr/lib/pkgconfig + install -m 0644 ../awsiotsdk.pc $(DESTDIR)/usr/lib/pkgconfig/ + +.PHONY: clean +clean: + -rm -f lib$(NAME).a $(OBJS) diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h new file mode 100644 index 000000000..e01189332 --- /dev/null +++ b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h @@ -0,0 +1,58 @@ +/* + * Copyright 2010-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file 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. + */ + +/** + * @file aws_iot_config.h + * @brief AWS IoT specific configuration file + */ + +#ifndef AWS_IOT_CONFIG_H_ +#define AWS_IOT_CONFIG_H_ + +// Get from console +// ================================================= +#define AWS_IOT_MQTT_HOST "" ///< Customer specific MQTT HOST. The same will be used for Thing Shadow +#define AWS_IOT_MQTT_PORT 443 ///< default port for MQTT/S +#define AWS_IOT_MQTT_CLIENT_ID "" ///< MQTT client ID should be unique for every device +#define AWS_IOT_MY_THING_NAME "" ///< Thing Name of the Shadow this device is associated with +#define AWS_IOT_ROOT_CA_FILENAME "" ///< Root CA file name +#define AWS_IOT_CERTIFICATE_FILENAME "" ///< device signed certificate file name +#define AWS_IOT_PRIVATE_KEY_FILENAME "" ///< Device private key filename +// ================================================= + +// MQTT PubSub +#define AWS_IOT_MQTT_TX_BUF_LEN 10240 ///< Any time a message is sent out through the MQTT layer. The message is copied into this buffer anytime a publish is done. This will also be used in the case of Thing Shadow +#define AWS_IOT_MQTT_RX_BUF_LEN 10240 ///< Any message that comes into the device should be less than this buffer size. If a received message is bigger than this buffer size the message will be dropped. +#define AWS_IOT_MQTT_NUM_SUBSCRIBE_HANDLERS 5 ///< Maximum number of topic filters the MQTT client can handle at any given time. This should be increased appropriately when using Thing Shadow + +// Thing Shadow specific configs +#define SHADOW_MAX_SIZE_OF_RX_BUFFER (AWS_IOT_MQTT_RX_BUF_LEN+1) ///< Maximum size of the SHADOW buffer to store the received Shadow message, including terminating NULL byte. +#define MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES 80 ///< Maximum size of the Unique Client Id. For More info on the Client Id refer \ref response "Acknowledgments" +#define MAX_SIZE_CLIENT_ID_WITH_SEQUENCE MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES + 10 ///< This is size of the extra sequence number that will be appended to the Unique client Id +#define MAX_SIZE_CLIENT_TOKEN_CLIENT_SEQUENCE MAX_SIZE_CLIENT_ID_WITH_SEQUENCE + 20 ///< This is size of the the total clientToken key and value pair in the JSON +#define MAX_ACKS_TO_COMEIN_AT_ANY_GIVEN_TIME 10 ///< At Any given time we will wait for this many responses. This will correlate to the rate at which the shadow actions are requested +#define MAX_THINGNAME_HANDLED_AT_ANY_GIVEN_TIME 10 ///< We could perform shadow action on any thing Name and this is maximum Thing Names we can act on at any given time +#define MAX_JSON_TOKEN_EXPECTED 120 ///< These are the max tokens that is expected to be in the Shadow JSON document. Include the metadata that gets published +#define MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME 60 ///< All shadow actions have to be published or subscribed to a topic which is of the format $aws/things/{thingName}/shadow/update/accepted. This refers to the size of the topic without the Thing Name +#define MAX_SIZE_OF_THING_NAME 30 ///< The Thing Name should not be bigger than this value. Modify this if the Thing Name needs to be bigger +#define MAX_SHADOW_TOPIC_LENGTH_BYTES MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME + MAX_SIZE_OF_THING_NAME ///< This size includes the length of topic with Thing Name + +// Auto Reconnect specific config +#define AWS_IOT_MQTT_MIN_RECONNECT_WAIT_INTERVAL 1000 ///< Minimum time before the First reconnect attempt is made as part of the exponential back-off algorithm +#define AWS_IOT_MQTT_MAX_RECONNECT_WAIT_INTERVAL 128000 ///< Maximum time interval after which exponential back-off will stop attempting to reconnect. + +#define DISABLE_METRICS true ///< Disable the collection of metrics by setting this to true + +#endif /* AWS_IOT_CONFIG_H_ */ diff --git a/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc new file mode 100644 index 000000000..f8384993b --- /dev/null +++ b/meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc @@ -0,0 +1,27 @@ +########################################################################### +# Copyright 2020 MERA +# +# 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. +########################################################################### + +prefix=/usr +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include/awsiotsdk + +Name: AWS IoT Device SDK for Embedded C +Description: AWS IoT SDK compiled into library (includes mbedTLS and jsmn code) +Version: 3.0.1 + +Cflags: -I${includedir} -DENABLE_IOT_DEBUG -DENABLE_IOT_INFO -DENABLE_IOT_WARN -DENABLE_IOT_ERROR +Libs: -L${libdir} -lawsiotsdk -lmbedtls -lmbedcrypto -lmbedx509 -- cgit 1.2.3-korg