aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Shamanin <andrei.shamanin@orioninc.com>2020-07-07 14:09:45 +0300
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2020-07-20 14:30:32 +0000
commit0326ee5c14813694df3c026217abaa7c78539a0a (patch)
tree5b23db7922f98050489c952044cd3a4cef1fb8f7
parente5310229bf79f12d34e3d3595f9880261d02648c (diff)
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 <andrei.shamanin@orioninc.com> Change-Id: I0d4923cd8541e7be89580b32ed6c68fcb10c1ce7 Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/24950 Tested-by: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org> ci-image-build: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org> ci-image-boot-test: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org> Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/aws-iot-device-sdk-embedded-c.bb40
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/Makefile.aws62
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/aws_iot_config.h58
-rw-r--r--meta-agl-bsp/meta-iot-cloud/recipes-aws/aws-iot-device-sdk-embedded-c/files/awsiotsdk.pc27
4 files changed, 187 insertions, 0 deletions
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