diff mbox series

[yocto-docs,v2,2/2] migration-5.2: add virtual provider change

Message ID 20250131-migration-5-2-updates-v2-2-4ce688a74bfd@bootlin.com
State Superseded
Headers show
Series migration-5.2: Add entries for virtual provider and multiconfig changes | expand

Commit Message

Antonin Godard Jan. 31, 2025, 11:14 a.m. UTC
The commit 4ccc3bc8266c ("classes/recipes: Switch virtual/XXX-gcc to
virtual/cross-cc (and c++/binutils)") in OE-Core changes the
virtual/XXX-gcc to virtual/cross-cc (and c++/binutils) syntax. Add it to
the migration manual.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
---
 documentation/migration-guides/migration-5.2.rst | 29 ++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

Comments

Quentin Schulz Jan. 31, 2025, 12:18 p.m. UTC | #1
Hi Antonin,

On 1/31/25 12:14 PM, Antonin Godard via lists.yoctoproject.org wrote:
> The commit 4ccc3bc8266c ("classes/recipes: Switch virtual/XXX-gcc to
> virtual/cross-cc (and c++/binutils)") in OE-Core changes the
> virtual/XXX-gcc to virtual/cross-cc (and c++/binutils) syntax. Add it to
> the migration manual.
> 
> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
> ---
>   documentation/migration-guides/migration-5.2.rst | 29 ++++++++++++++++++++++++
>   1 file changed, 29 insertions(+)
> 
> diff --git a/documentation/migration-guides/migration-5.2.rst b/documentation/migration-guides/migration-5.2.rst
> index a60e3e9a8..b29cb2052 100644
> --- a/documentation/migration-guides/migration-5.2.rst
> +++ b/documentation/migration-guides/migration-5.2.rst
> @@ -105,6 +105,35 @@ some obscure bugs.
>   Any logic based on ``BB_CURRENT_MC`` equalling to ``default`` by default should
>   be changed to be equal to an empty string.
>   
> +Virtual toolchain provider changes
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +Support was added for virtual providers on a per-recipe basis for specific
> +key toolchain providers listed in ``BB_VIRTUAL_RECIPE_PROVIDERS``. As part of
> +that support, the ``cross`` providers were simplified to remove the triplet
> +prefix (:term:`TARGET_PREFIX`, :term:`SDK_PREFIX` and :term:`HOST_PREFIX`) and
> +generalise the naming. Here are example of how references to these variables
> +should be changed to use the new ``cross`` syntax::
> +
> +   virtual/${HOST_PREFIX}binutils -> virtual/cross-binutils
> +   virtual/${TARGET_PREFIX}binutils -> virtual/cross-binutils
> +
> +   virtual/${HOST_PREFIX}gcc -> virtual/cross-cc
> +   virtual/${TARGET_PREFIX}gcc -> virtual/cross-cc
> +   virtual/${SDK_PREFIX}gcc -> virtual/nativesdk-cross-cc
> +
> +   virtual/${HOST_PREFIX}compilerlibs -> virtual/compilerlibs
> +   virtual/${TARGET_PREFIX}compilerlibs -> virtual/compilerlibs
> +   virtual/nativesdk-${SDK_PREFIX}compilerlibs -> virtual/nativesdk-compilerlibs
> +
> +   virtual/${TARGET_PREFIX}g++ -> virtual/cross-c++
> +

I am not sure this rule applies everywhere looking at the commit that 
makes the change? (see below for related comment)

> +A :term:`PREFERRED_PROVIDER` assignment should be transformed as follows::
> +
> +   PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils -> PREFERRED_PROVIDER_virtual/cross-binutils
> +   PREFERRED_PROVIDER_virtual/${SDK_PREFIX}binutils -> PREFERRED_PROVIDER_virtual/cross-binutils:class-nativesdk
> +   PREFERRED_PROVIDER_virtual/${SDK_PREFIX}g++ -> PREFERRED_PROVIDER_virtual/nativesdk-cross-c++
> +

I believe all PREFERRED_PROVIDER would replace TARGET_PREFIX with cross- 
(and rename gcc to cc, g++ to c++).

SDK_PREFIX would be replace following the same pattern as TARGET_PREFIX 
except that an override with :class-nativesdk should be provided. Though 
it seems there's now a second variable for each PREFERRED_PROVIDER which 
had an SDK_PREFIX, it'll also need nativesdk- prefix added to the same 
pattern used for TARGET_PREFIX. Except for compilerlibs which only gets 
the one with the nativesdk- prefix.

c.f. from 90e0a0f7f4536e1aeb311ab2b061be71b4129e4e in poky:

-PREFERRED_PROVIDER_virtual/${SDK_PREFIX}binutils ?= 
"binutils-crosssdk-${SDK_SYS}"
-PREFERRED_PROVIDER_virtual/${SDK_PREFIX}gcc = "gcc-crosssdk-${SDK_SYS}"
-PREFERRED_PROVIDER_virtual/${SDK_PREFIX}g++ = "gcc-crosssdk-${SDK_SYS}"
-PREFERRED_PROVIDER_virtual/${SDK_PREFIX}compilerlibs = 
"nativesdk-gcc-runtime"
+PREFERRED_PROVIDER_virtual/cross-binutils:class-nativesdk ?= 
"binutils-crosssdk-${SDK_SYS}"
+PREFERRED_PROVIDER_virtual/cross-cc:class-nativesdk = 
"gcc-crosssdk-${SDK_SYS}"
+PREFERRED_PROVIDER_virtual/cross-c++:class-nativesdk = 
"gcc-crosssdk-${SDK_SYS}"
+
+PREFERRED_PROVIDER_virtual/nativesdk-cross-binutils ?= 
"binutils-crosssdk-${SDK_SYS}"
+PREFERRED_PROVIDER_virtual/nativesdk-cross-cc = "gcc-crosssdk-${SDK_SYS}"
+PREFERRED_PROVIDER_virtual/nativesdk-cross-c++ = "gcc-crosssdk-${SDK_SYS}"
+PREFERRED_PROVIDER_virtual/nativesdk-compilerlibs = "nativesdk-gcc-runtime"

Now looking a bit more into the changes made in this commit, there isn't 
a simple search and replace that can be used, sometimes it's replacing a 
variable with one value, sometimes with another. Depends on the recipe 
the change is made in I guess?

Cheers,
Quentin
Antonin Godard Jan. 31, 2025, 1:07 p.m. UTC | #2
Hi Quentin,

On Fri Jan 31, 2025 at 1:18 PM CET, Quentin Schulz wrote:
> Hi Antonin,
>
> On 1/31/25 12:14 PM, Antonin Godard via lists.yoctoproject.org wrote:
>> The commit 4ccc3bc8266c ("classes/recipes: Switch virtual/XXX-gcc to
>> virtual/cross-cc (and c++/binutils)") in OE-Core changes the
>> virtual/XXX-gcc to virtual/cross-cc (and c++/binutils) syntax. Add it to
>> the migration manual.
>> 
>> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
>> Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
>> ---
>>   documentation/migration-guides/migration-5.2.rst | 29 ++++++++++++++++++++++++
>>   1 file changed, 29 insertions(+)
>> 
>> diff --git a/documentation/migration-guides/migration-5.2.rst b/documentation/migration-guides/migration-5.2.rst
>> index a60e3e9a8..b29cb2052 100644
>> --- a/documentation/migration-guides/migration-5.2.rst
>> +++ b/documentation/migration-guides/migration-5.2.rst
>> @@ -105,6 +105,35 @@ some obscure bugs.
>>   Any logic based on ``BB_CURRENT_MC`` equalling to ``default`` by default should
>>   be changed to be equal to an empty string.
>>   
>> +Virtual toolchain provider changes
>> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> +
>> +Support was added for virtual providers on a per-recipe basis for specific
>> +key toolchain providers listed in ``BB_VIRTUAL_RECIPE_PROVIDERS``. As part of
>> +that support, the ``cross`` providers were simplified to remove the triplet
>> +prefix (:term:`TARGET_PREFIX`, :term:`SDK_PREFIX` and :term:`HOST_PREFIX`) and
>> +generalise the naming. Here are example of how references to these variables
>> +should be changed to use the new ``cross`` syntax::
>> +
>> +   virtual/${HOST_PREFIX}binutils -> virtual/cross-binutils
>> +   virtual/${TARGET_PREFIX}binutils -> virtual/cross-binutils
>> +
>> +   virtual/${HOST_PREFIX}gcc -> virtual/cross-cc
>> +   virtual/${TARGET_PREFIX}gcc -> virtual/cross-cc
>> +   virtual/${SDK_PREFIX}gcc -> virtual/nativesdk-cross-cc
>> +
>> +   virtual/${HOST_PREFIX}compilerlibs -> virtual/compilerlibs
>> +   virtual/${TARGET_PREFIX}compilerlibs -> virtual/compilerlibs
>> +   virtual/nativesdk-${SDK_PREFIX}compilerlibs -> virtual/nativesdk-compilerlibs
>> +
>> +   virtual/${TARGET_PREFIX}g++ -> virtual/cross-c++
>> +
>
> I am not sure this rule applies everywhere looking at the commit that 
> makes the change? (see below for related comment)
>
>> +A :term:`PREFERRED_PROVIDER` assignment should be transformed as follows::
>> +
>> +   PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils -> PREFERRED_PROVIDER_virtual/cross-binutils
>> +   PREFERRED_PROVIDER_virtual/${SDK_PREFIX}binutils -> PREFERRED_PROVIDER_virtual/cross-binutils:class-nativesdk
>> +   PREFERRED_PROVIDER_virtual/${SDK_PREFIX}g++ -> PREFERRED_PROVIDER_virtual/nativesdk-cross-c++
>> +
>
> I believe all PREFERRED_PROVIDER would replace TARGET_PREFIX with cross- 
> (and rename gcc to cc, g++ to c++).
>
> SDK_PREFIX would be replace following the same pattern as TARGET_PREFIX 
> except that an override with :class-nativesdk should be provided. Though 
> it seems there's now a second variable for each PREFERRED_PROVIDER which 
> had an SDK_PREFIX, it'll also need nativesdk- prefix added to the same 
> pattern used for TARGET_PREFIX. Except for compilerlibs which only gets 
> the one with the nativesdk- prefix.
>
> c.f. from 90e0a0f7f4536e1aeb311ab2b061be71b4129e4e in poky:
>
> -PREFERRED_PROVIDER_virtual/${SDK_PREFIX}binutils ?= 
> "binutils-crosssdk-${SDK_SYS}"
> -PREFERRED_PROVIDER_virtual/${SDK_PREFIX}gcc = "gcc-crosssdk-${SDK_SYS}"
> -PREFERRED_PROVIDER_virtual/${SDK_PREFIX}g++ = "gcc-crosssdk-${SDK_SYS}"
> -PREFERRED_PROVIDER_virtual/${SDK_PREFIX}compilerlibs = 
> "nativesdk-gcc-runtime"
> +PREFERRED_PROVIDER_virtual/cross-binutils:class-nativesdk ?= 
> "binutils-crosssdk-${SDK_SYS}"
> +PREFERRED_PROVIDER_virtual/cross-cc:class-nativesdk = 
> "gcc-crosssdk-${SDK_SYS}"
> +PREFERRED_PROVIDER_virtual/cross-c++:class-nativesdk = 
> "gcc-crosssdk-${SDK_SYS}"
> +
> +PREFERRED_PROVIDER_virtual/nativesdk-cross-binutils ?= 
> "binutils-crosssdk-${SDK_SYS}"
> +PREFERRED_PROVIDER_virtual/nativesdk-cross-cc = "gcc-crosssdk-${SDK_SYS}"
> +PREFERRED_PROVIDER_virtual/nativesdk-cross-c++ = "gcc-crosssdk-${SDK_SYS}"
> +PREFERRED_PROVIDER_virtual/nativesdk-compilerlibs = "nativesdk-gcc-runtime"
>
> Now looking a bit more into the changes made in this commit, there isn't 
> a simple search and replace that can be used, sometimes it's replacing a 
> variable with one value, sometimes with another. Depends on the recipe 
> the change is made in I guess?

I guess so. It's probably going to be different based on the recipe, but I
wouldn't know how to phrase it here. I just gave some more examples to
illustrate the changes. Any idea on a better way to explain this?

Antonin
Quentin Schulz Feb. 6, 2025, 9:25 a.m. UTC | #3
Hi Antonin,

On 1/31/25 2:07 PM, Antonin Godard wrote:
> Hi Quentin,
> 
> On Fri Jan 31, 2025 at 1:18 PM CET, Quentin Schulz wrote:
>> Hi Antonin,
>>
>> On 1/31/25 12:14 PM, Antonin Godard via lists.yoctoproject.org wrote:
>>> The commit 4ccc3bc8266c ("classes/recipes: Switch virtual/XXX-gcc to
>>> virtual/cross-cc (and c++/binutils)") in OE-Core changes the
>>> virtual/XXX-gcc to virtual/cross-cc (and c++/binutils) syntax. Add it to
>>> the migration manual.
>>>
>>> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
>>> Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
>>> ---
>>>    documentation/migration-guides/migration-5.2.rst | 29 ++++++++++++++++++++++++
>>>    1 file changed, 29 insertions(+)
>>>
>>> diff --git a/documentation/migration-guides/migration-5.2.rst b/documentation/migration-guides/migration-5.2.rst
>>> index a60e3e9a8..b29cb2052 100644
>>> --- a/documentation/migration-guides/migration-5.2.rst
>>> +++ b/documentation/migration-guides/migration-5.2.rst
>>> @@ -105,6 +105,35 @@ some obscure bugs.
>>>    Any logic based on ``BB_CURRENT_MC`` equalling to ``default`` by default should
>>>    be changed to be equal to an empty string.
>>>    
>>> +Virtual toolchain provider changes
>>> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> +
>>> +Support was added for virtual providers on a per-recipe basis for specific
>>> +key toolchain providers listed in ``BB_VIRTUAL_RECIPE_PROVIDERS``. As part of
>>> +that support, the ``cross`` providers were simplified to remove the triplet
>>> +prefix (:term:`TARGET_PREFIX`, :term:`SDK_PREFIX` and :term:`HOST_PREFIX`) and
>>> +generalise the naming. Here are example of how references to these variables
>>> +should be changed to use the new ``cross`` syntax::
>>> +
>>> +   virtual/${HOST_PREFIX}binutils -> virtual/cross-binutils
>>> +   virtual/${TARGET_PREFIX}binutils -> virtual/cross-binutils
>>> +
>>> +   virtual/${HOST_PREFIX}gcc -> virtual/cross-cc
>>> +   virtual/${TARGET_PREFIX}gcc -> virtual/cross-cc
>>> +   virtual/${SDK_PREFIX}gcc -> virtual/nativesdk-cross-cc
>>> +
>>> +   virtual/${HOST_PREFIX}compilerlibs -> virtual/compilerlibs
>>> +   virtual/${TARGET_PREFIX}compilerlibs -> virtual/compilerlibs
>>> +   virtual/nativesdk-${SDK_PREFIX}compilerlibs -> virtual/nativesdk-compilerlibs
>>> +
>>> +   virtual/${TARGET_PREFIX}g++ -> virtual/cross-c++
>>> +
>>
>> I am not sure this rule applies everywhere looking at the commit that
>> makes the change? (see below for related comment)
>>
>>> +A :term:`PREFERRED_PROVIDER` assignment should be transformed as follows::
>>> +
>>> +   PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils -> PREFERRED_PROVIDER_virtual/cross-binutils
>>> +   PREFERRED_PROVIDER_virtual/${SDK_PREFIX}binutils -> PREFERRED_PROVIDER_virtual/cross-binutils:class-nativesdk
>>> +   PREFERRED_PROVIDER_virtual/${SDK_PREFIX}g++ -> PREFERRED_PROVIDER_virtual/nativesdk-cross-c++
>>> +
>>
>> I believe all PREFERRED_PROVIDER would replace TARGET_PREFIX with cross-
>> (and rename gcc to cc, g++ to c++).
>>
>> SDK_PREFIX would be replace following the same pattern as TARGET_PREFIX
>> except that an override with :class-nativesdk should be provided. Though
>> it seems there's now a second variable for each PREFERRED_PROVIDER which
>> had an SDK_PREFIX, it'll also need nativesdk- prefix added to the same
>> pattern used for TARGET_PREFIX. Except for compilerlibs which only gets
>> the one with the nativesdk- prefix.
>>
>> c.f. from 90e0a0f7f4536e1aeb311ab2b061be71b4129e4e in poky:
>>
>> -PREFERRED_PROVIDER_virtual/${SDK_PREFIX}binutils ?=
>> "binutils-crosssdk-${SDK_SYS}"
>> -PREFERRED_PROVIDER_virtual/${SDK_PREFIX}gcc = "gcc-crosssdk-${SDK_SYS}"
>> -PREFERRED_PROVIDER_virtual/${SDK_PREFIX}g++ = "gcc-crosssdk-${SDK_SYS}"
>> -PREFERRED_PROVIDER_virtual/${SDK_PREFIX}compilerlibs =
>> "nativesdk-gcc-runtime"
>> +PREFERRED_PROVIDER_virtual/cross-binutils:class-nativesdk ?=
>> "binutils-crosssdk-${SDK_SYS}"
>> +PREFERRED_PROVIDER_virtual/cross-cc:class-nativesdk =
>> "gcc-crosssdk-${SDK_SYS}"
>> +PREFERRED_PROVIDER_virtual/cross-c++:class-nativesdk =
>> "gcc-crosssdk-${SDK_SYS}"
>> +
>> +PREFERRED_PROVIDER_virtual/nativesdk-cross-binutils ?=
>> "binutils-crosssdk-${SDK_SYS}"
>> +PREFERRED_PROVIDER_virtual/nativesdk-cross-cc = "gcc-crosssdk-${SDK_SYS}"
>> +PREFERRED_PROVIDER_virtual/nativesdk-cross-c++ = "gcc-crosssdk-${SDK_SYS}"
>> +PREFERRED_PROVIDER_virtual/nativesdk-compilerlibs = "nativesdk-gcc-runtime"
>>
>> Now looking a bit more into the changes made in this commit, there isn't
>> a simple search and replace that can be used, sometimes it's replacing a
>> variable with one value, sometimes with another. Depends on the recipe
>> the change is made in I guess?
> 
> I guess so. It's probably going to be different based on the recipe, but I
> wouldn't know how to phrase it here. I just gave some more examples to
> illustrate the changes. Any idea on a better way to explain this?
> 

The issue is that the example implies that the change is simple and 
automatic, it is not I'm afraid. For the variables that we know can be 
changed automatically then it's fine, I believe that's the case for 
PREFERRED_PROVIDER with TARGET_PREFIX. For the others, maybe stating 
that one replacement could be X -> Y but it depends, so rather see <link 
to commit> to check for yourself.

Don't have a better suggestion than that unfortunately.

Cheers,
Quentin
Antonin Godard Feb. 7, 2025, 8:18 a.m. UTC | #4
Hi Quentin,

On Thu Feb 6, 2025 at 10:25 AM CET, Quentin Schulz wrote:
[...]
>>> +
>>> +PREFERRED_PROVIDER_virtual/nativesdk-cross-cc = "gcc-crosssdk-${SDK_SYS}"
>>> +PREFERRED_PROVIDER_virtual/nativesdk-cross-c++ = "gcc-crosssdk-${SDK_SYS}"
>>> +PREFERRED_PROVIDER_virtual/nativesdk-compilerlibs = "nativesdk-gcc-runtime"
>>>
>>> Now looking a bit more into the changes made in this commit, there isn't
>>> a simple search and replace that can be used, sometimes it's replacing a
>>> variable with one value, sometimes with another. Depends on the recipe
>>> the change is made in I guess?
>> 
>> I guess so. It's probably going to be different based on the recipe, but I
>> wouldn't know how to phrase it here. I just gave some more examples to
>> illustrate the changes. Any idea on a better way to explain this?
>> 
>
> The issue is that the example implies that the change is simple and 
> automatic, it is not I'm afraid. For the variables that we know can be 
> changed automatically then it's fine, I believe that's the case for 
> PREFERRED_PROVIDER with TARGET_PREFIX. For the others, maybe stating 
> that one replacement could be X -> Y but it depends, so rather see <link 
> to commit> to check for yourself.
>
> Don't have a better suggestion than that unfortunately.

I get what you mean, thanks. I think I will rephrase this is bit, stating that
those are examples, but should not be taken as a simple grep & replace. I'll
also link to the commit in question.

Antonin
diff mbox series

Patch

diff --git a/documentation/migration-guides/migration-5.2.rst b/documentation/migration-guides/migration-5.2.rst
index a60e3e9a8..b29cb2052 100644
--- a/documentation/migration-guides/migration-5.2.rst
+++ b/documentation/migration-guides/migration-5.2.rst
@@ -105,6 +105,35 @@  some obscure bugs.
 Any logic based on ``BB_CURRENT_MC`` equalling to ``default`` by default should
 be changed to be equal to an empty string.
 
+Virtual toolchain provider changes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Support was added for virtual providers on a per-recipe basis for specific
+key toolchain providers listed in ``BB_VIRTUAL_RECIPE_PROVIDERS``. As part of
+that support, the ``cross`` providers were simplified to remove the triplet
+prefix (:term:`TARGET_PREFIX`, :term:`SDK_PREFIX` and :term:`HOST_PREFIX`) and
+generalise the naming. Here are example of how references to these variables
+should be changed to use the new ``cross`` syntax::
+
+   virtual/${HOST_PREFIX}binutils -> virtual/cross-binutils
+   virtual/${TARGET_PREFIX}binutils -> virtual/cross-binutils
+
+   virtual/${HOST_PREFIX}gcc -> virtual/cross-cc
+   virtual/${TARGET_PREFIX}gcc -> virtual/cross-cc
+   virtual/${SDK_PREFIX}gcc -> virtual/nativesdk-cross-cc
+
+   virtual/${HOST_PREFIX}compilerlibs -> virtual/compilerlibs
+   virtual/${TARGET_PREFIX}compilerlibs -> virtual/compilerlibs
+   virtual/nativesdk-${SDK_PREFIX}compilerlibs -> virtual/nativesdk-compilerlibs
+
+   virtual/${TARGET_PREFIX}g++ -> virtual/cross-c++
+
+A :term:`PREFERRED_PROVIDER` assignment should be transformed as follows::
+
+   PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils -> PREFERRED_PROVIDER_virtual/cross-binutils
+   PREFERRED_PROVIDER_virtual/${SDK_PREFIX}binutils -> PREFERRED_PROVIDER_virtual/cross-binutils:class-nativesdk
+   PREFERRED_PROVIDER_virtual/${SDK_PREFIX}g++ -> PREFERRED_PROVIDER_virtual/nativesdk-cross-c++
+
 Recipe changes
 ~~~~~~~~~~~~~~