openembedded-core.lists.openembedded.org archive mirror
 help / color / mirror / Atom feed
From: Jose Quaresma <quaresma.jose@gmail.com>
To: Khem Raj <raj.khem@gmail.com>
Cc: Jose Quaresma <jose.quaresma@foundries.io>,
	openembedded-core@lists.openembedded.org
Subject: Re: [OE-core][PATCH 1/2] go: Drop the linkmode completely
Date: Mon, 22 Apr 2024 12:47:02 +0100	[thread overview]
Message-ID: <CANPvuRnfz3-r-6BY0PuLZA0P-c=6a=ZXrQXLqjWh2aGCp_Sv0g@mail.gmail.com> (raw)
In-Reply-To: <CAMKF1sovfs=zK7tz+u8DuK9zijswcyR0Nkx3PnHpRFUN=5yE1A@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 4719 bytes --]

Khem Raj <raj.khem@gmail.com> escreveu (sexta, 19/04/2024 à(s) 21:43):

>
>
> On Fri, Apr 19, 2024 at 11:28 AM Jose Quaresma <quaresma.jose@gmail.com>
> wrote:
>
>>
>>
>> Khem Raj <raj.khem@gmail.com> escreveu (sexta, 19/04/2024 à(s) 19:17):
>>
>>> On Fri, Apr 19, 2024 at 10:53 AM Jose Quaresma via
>>> lists.openembedded.org
>>> <quaresma.jose=gmail.com@lists.openembedded.org> wrote:
>>> >
>>> > This will make possible to restore the default dynamic linking globally
>>> > which is what we had before the 1.20.X release.
>>> >
>>>
>>> Looks good overall. how do we support the static linking if user wanted ?
>>>
>>
>> To disable the dynamic linking, which is the default, we need to unset
>> the GO_DYNLINK
>> but this needs to be done with a machine arch override otherwise has no
>> effect.
>>
>> GO_DYNLINK:machine_arch = ""
>>
>> As an example the below patch enables the static linkiging for all the
>> architectures
>>
>> https://git.yoctoproject.org/poky/commit/meta/classes-recipe/goarch.bbclass?id=fd2e5e0b89d9c69acc9f813f07cd052630596ad5
>>
>>
>
> I wonder if it makes sense to have a variable for doing static linking now
> that dynamic linking is default anyway and remove it
>

To do this, we would have to remove all the logic based on the GO_DYNLINK and
add this new variable to the static linking.

Just to clarify, the default upstream golang linking is the static way but
in OE we prefer the dynamic linking maybe because
the binary size but I did some tests and surprisingly the result can even
be better in terms of binary size when we link statically
as can be see on this https://github.com/foundriesio/lmp-manifest/pull/425

This toolchain is also a bit particular in the sense that the go-runtime
conditions all other packages afterwards.
For example, by having a static go-runtime we are conditioning everything
to be linked in the same way,
the opposite is no longer true and we can have the go-runtime dynamically
but then have packages linked statically.
The reason is because the /usr/lib/go/pkg/linux_amd64_dynlink/libstd.so
only exists when the go-runtime is dynamically linked.

Jose


>
>
>> Jose
>>
>>
>>> > Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
>>> > ---
>>> >  meta/classes-recipe/go.bbclass          | 2 --
>>> >  meta/recipes-devtools/go/go-runtime.inc | 2 +-
>>> >  2 files changed, 1 insertion(+), 3 deletions(-)
>>> >
>>> > diff --git a/meta/classes-recipe/go.bbclass
>>> b/meta/classes-recipe/go.bbclass
>>> > index cc3564c36a..d32509aa6d 100644
>>> > --- a/meta/classes-recipe/go.bbclass
>>> > +++ b/meta/classes-recipe/go.bbclass
>>> > @@ -48,8 +48,6 @@ GO_RPATH:class-native = "${@'-r
>>> ${STAGING_LIBDIR_NATIVE}/go/pkg/${TARGET_GOTUPLE
>>> >  GO_RPATH_LINK:class-native =
>>> "${@'-Wl,-rpath-link=${STAGING_LIBDIR_NATIVE}/go/pkg/${TARGET_GOTUPLE}_dynlink'
>>> if d.getVar('GO_DYNLINK') else ''}"
>>> >  GO_EXTLDFLAGS ?= "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}
>>> ${GO_RPATH_LINK} ${LDFLAGS}"
>>> >  GO_LINKMODE ?= ""
>>> > -GO_LINKMODE:class-nativesdk = "--linkmode=external"
>>> > -GO_LINKMODE:class-native = "--linkmode=external"
>>> >  GO_EXTRA_LDFLAGS ?= ""
>>> >  GO_LINUXLOADER ?= "-I ${@get_linuxloader(d)}"
>>> >  # Use system loader. If uninative is used, the uninative loader will
>>> be patched automatically
>>> > diff --git a/meta/recipes-devtools/go/go-runtime.inc
>>> b/meta/recipes-devtools/go/go-runtime.inc
>>> > index 3f1e795dd9..413cf6d33f 100644
>>> > --- a/meta/recipes-devtools/go/go-runtime.inc
>>> > +++ b/meta/recipes-devtools/go/go-runtime.inc
>>> > @@ -15,7 +15,7 @@ export CGO_LDFLAGS = "${@ ' '.join(filter(lambda f:
>>> not f.startswith('-fdebug-pr
>>> >  export GOCACHE = "${B}/.cache"
>>> >
>>> >  GO_EXTLDFLAGS ?= "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} ${LDFLAGS}"
>>> > -GO_SHLIB_LDFLAGS ?= '-ldflags="--linkmode=external -extldflags
>>> '${GO_EXTLDFLAGS}'"'
>>> > +GO_SHLIB_LDFLAGS ?= '-ldflags="-extldflags '${GO_EXTLDFLAGS}'"'
>>> >
>>> >  do_configure() {
>>> >         :
>>> > --
>>> > 2.44.0
>>> >
>>> >
>>> > -=-=-=-=-=-=-=-=-=-=-=-
>>> > Links: You receive all messages sent to this group.
>>> > View/Reply Online (#198558):
>>> https://lists.openembedded.org/g/openembedded-core/message/198558
>>> > Mute This Topic: https://lists.openembedded.org/mt/105623011/1997914
>>> > Group Owner: openembedded-core+owner@lists.openembedded.org
>>> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
>>> [raj.khem@gmail.com]
>>> > -=-=-=-=-=-=-=-=-=-=-=-
>>> >
>>>
>>
>>
>> --
>> Best regards,
>>
>> José Quaresma
>>
>

-- 
Best regards,

José Quaresma

[-- Attachment #2: Type: text/html, Size: 8139 bytes --]

  reply	other threads:[~2024-04-22 11:47 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-19 17:53 [OE-core][PATCH 1/2] go: Drop the linkmode completely Jose Quaresma
2024-04-19 17:53 ` [OE-core][PATCH 2/2] Revert "goarch: disable dynamic linking globally" Jose Quaresma
2024-04-19 18:17 ` [OE-core][PATCH 1/2] go: Drop the linkmode completely Khem Raj
2024-04-19 18:28   ` Jose Quaresma
2024-04-19 20:43     ` Khem Raj
2024-04-22 11:47       ` Jose Quaresma [this message]
2024-04-22 15:38         ` Khem Raj

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CANPvuRnfz3-r-6BY0PuLZA0P-c=6a=ZXrQXLqjWh2aGCp_Sv0g@mail.gmail.com' \
    --to=quaresma.jose@gmail.com \
    --cc=jose.quaresma@foundries.io \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=raj.khem@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).