On 11/26/25 10:45 PM, Peter Kjellerstedt via lists.openembedded.org wrote:
-----Original Message-----
From: [email protected] 
<[email protected]> On Behalf Of Mark Hatle
Sent: den 27 november 2025 02:02
To: Steve Sakoman <[email protected]>; [email protected]
Subject: Re: [OE-core][scarthgap 14/21] lib/oe/go: document map_arch, and raise 
an error on unknown architecture

I have a possible workaround, for microblaze, for this.

Basically it's to force include a class that does:

python __anonymous() {
      if bb.data.inherits_class('goarch', d):
          if d.getVar('TARGET_ARCH') in ['microblaze', 'microblazeel', 
'microblazeeb']:
              raise bb.parse.SkipRecipe("Go does not support microblaze.")
}

What if you make the map_arch() function raise bb.parse.SkipRecipe rather
than KeyError? Wouldn't that achieve the same without having to hardcode
a solution for each architecture that is not supported by Go?

_I_ can't make map_arch raise skiprecipe because it's part of oe-core and there is no easy way to override it in a layer.

But with that, said, raising an exception in map_arch() of KeyError really feels anti-social. Changing THAT exception to a SkipRecipe would make a lot more sense and prevent anyone from using go that wasn't supported.

Alternatively the caller of map_arch could catch the key error and raise the skiprecipe with an appropriate message as well.

I have a similar chunk like that anonymous python for rust for a similar reason. That might be another candidate to do some sort of automatic raise if it's unsupported.

In any case, I think there are really two issues here.

1) Raising KeyError is antisocial to architectures that are out of tree and don't support go.

2) There should be a way for out of tree architectures to _easily_ add themselves to the arch list, should they be supported by go.

--Mark

//Peter

On 11/26/25 6:40 PM, Mark Hatle wrote:
This patch breaks Microblaze for me.

Microblazeel is not in the list of course, but go doesn't support this 
architecture.

During parsing of various things, instead of the component not being available I
now get many many lines similar to:

WARNING: <recipe>: Exception during build_dependencies for GOARCH
WARNING: <recipe>: Error during finalize of <multiconfig>
ERROR: ExpansionError during parsing <recipe>
bb.data_smart.ExceptionError: Failure expanding TARGET_GOARCH, expression was
${go_map_arch(d.getVar('TARGET_ARCH'), d)} which triggered exception KeyError:
'Cannot map architecture microblazeel'
The variable dependency chain for the failure is: TARGET_GOARCH -> GOARCH

(at which point parsing stops)

I see no obvious way here to add an architecture that OE/Poky does not support,
which now makes this a hard error for any architecture not supported by the core
of OE and/or go.  (in the case of microblaze, rust and go are likely to never be
supported.  So there has to be a way for me to avoid the parse error in these
cases.)

On 11/22/25 4:14 PM, Steve Sakoman wrote:
From: Ross Burton <[email protected]>

Add a comment explaining what this function does and where the values
come from.

If the architecture isn't know, instead of returning an empty string
which could fail mysteriously, raise a KeyError so it fails quickly.

(From OE-Core rev: 025414c16319b068df1cd757ad9a3c987a6b871d)

Signed-off-by: Ross Burton <[email protected]>
Signed-off-by: Richard Purdie <[email protected]>
Signed-off-by: Peter Marko <[email protected]>
Signed-off-by: Steve Sakoman <[email protected]>
---
    meta/lib/oe/go.py | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/meta/lib/oe/go.py b/meta/lib/oe/go.py
index dfd957d157..4559dc63b2 100644
--- a/meta/lib/oe/go.py
+++ b/meta/lib/oe/go.py
@@ -7,6 +7,10 @@
    import re

    def map_arch(a):
+    """
+    Map our architecture names to Go's GOARCH names.
+    See 
https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go for 
the complete list.
+    """
        if re.match('i.86', a):
            return '386'
        elif a == 'x86_64':
@@ -31,4 +35,4 @@ def map_arch(a):
            return 'riscv64'
        elif a == 'loongarch64':
            return 'loong64'
-    return ''
+    raise KeyError(f"Cannot map architecture {a}")





-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#226844): 
https://lists.openembedded.org/g/openembedded-core/message/226844
Mute This Topic: https://lists.openembedded.org/mt/116430143/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to