summaryrefslogtreecommitdiffstats
path: root/recipes-devtools
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2024-03-18 22:23:51 -0400
committerScott Murray <scott.murray@konsulko.com>2024-03-19 11:44:32 +0000
commitbf169df3f483264385555de1ccb691e8904ec8c7 (patch)
treebb27b17e249bec97fa39827ab9a423dfb09c84ea /recipes-devtools
parent24c523366dd47a888af689ac50f31065c4cb186f (diff)
python3-grpcio: add bbappend
Add bbappend to tweak the LDFLAGS used when building for RISC-V so that libatomic gets linked as is required. See the comment in the .inc file for more information. Bug-AGL: SPEC-5011 Change-Id: I90f839be8cbaf527c11508476ab6dd5ab6eb8799 Signed-off-by: Scott Murray <scott.murray@konsulko.com> Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl-demo/+/29746 Tested-by: Jenkins Job builder account ci-image-build: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account
Diffstat (limited to 'recipes-devtools')
-rw-r--r--recipes-devtools/python/python3-grpcio_1.45.0.bbappend1
-rw-r--r--recipes-devtools/python/python3-grpcio_agldemo.inc17
2 files changed, 18 insertions, 0 deletions
diff --git a/recipes-devtools/python/python3-grpcio_1.45.0.bbappend b/recipes-devtools/python/python3-grpcio_1.45.0.bbappend
new file mode 100644
index 000000000..26036fc88
--- /dev/null
+++ b/recipes-devtools/python/python3-grpcio_1.45.0.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('AGL_FEATURES', 'agldemo', 'python3-grpcio_agldemo.inc', '', d)}
diff --git a/recipes-devtools/python/python3-grpcio_agldemo.inc b/recipes-devtools/python/python3-grpcio_agldemo.inc
new file mode 100644
index 000000000..8236a341b
--- /dev/null
+++ b/recipes-devtools/python/python3-grpcio_agldemo.inc
@@ -0,0 +1,17 @@
+# For some reason the atomics presence test in the grpc build
+# passes on RISC-V even though linking with libatomic is actually
+# needed. There are some mentions on the web of some atomics
+# support incorrectly being in the libc stub on RISC-V, so a
+# fix could be tracking down if that is the case and if it has
+# been fixed in newer libc. Otherwise, the compile test in grpc
+# will need to be changed to some other function that is known to
+# only be in libatomic on RISC-V.
+#
+# The next problem is that setting GRPC_PYTHON_LDFLAGS to any value
+# ends up not adding linking with pthread due to the way the logic
+# is set up, so we need to actually add it explicitly. The upstream
+# recipe seems slightly broken in this respect.
+
+GRPC_LDFLAGS ?= " -lpthread"
+GRPC_LDFLAGS:append:riscv64 = " -latomic"
+export GRPC_PYTHON_LDFLAGS = "${GRPC_LDFLAGS}"
{ color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
#include <stdio.h>
#include <pb_encode.h>
#include <pb_decode.h>
#include "simple.pb.h"

int main()
{
    /* This is the buffer where we will store our message. */
    uint8_t buffer[128];
    size_t message_length;
    bool status;
    
    /* Encode our message */
    {
        /* Allocate space on the stack to store the message data.
         *
         * Nanopb generates simple struct definitions for all the messages.
         * - check out the contents of simple.pb.h!
         * It is a good idea to always initialize your structures
         * so that you do not have garbage data from RAM in there.
         */
        SimpleMessage message = SimpleMessage_init_zero;
        
        /* Create a stream that will write to our buffer. */
        pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
        
        /* Fill in the lucky number */
        message.lucky_number = 13;
        
        /* Now we are ready to encode the message! */
        status = pb_encode(&stream, SimpleMessage_fields, &message);
        message_length = stream.bytes_written;
        
        /* Then just check for any errors.. */
        if (!status)
        {
            printf("Encoding failed: %s\n", PB_GET_ERROR(&stream));
            return 1;
        }
    }
    
    /* Now we could transmit the message over network, store it in a file or
     * wrap it to a pigeon's leg.
     */

    /* But because we are lazy, we will just decode it immediately. */
    
    {
        /* Allocate space for the decoded message. */
        SimpleMessage message = SimpleMessage_init_zero;
        
        /* Create a stream that reads from the buffer. */
        pb_istream_t stream = pb_istream_from_buffer(buffer, message_length);
        
        /* Now we are ready to decode the message. */
        status = pb_decode(&stream, SimpleMessage_fields, &message);
        
        /* Check for errors... */
        if (!status)
        {
            printf("Decoding failed: %s\n", PB_GET_ERROR(&stream));
            return 1;
        }
        
        /* Print the data contained in the message. */
        printf("Your lucky number was %d!\n", message.lucky_number);
    }
    
    return 0;
}