All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bruce Ashfield <bruce.ashfield@gmail.com>
To: Khem Raj <raj.khem@gmail.com>
Cc: Patches and discussions about the oe-core layer
	<openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH 1/1] kernel: restore scripts in the sysroot
Date: Tue, 19 Nov 2013 17:37:12 -0500	[thread overview]
Message-ID: <CADkTA4ODwRaRMVehxmjjoA=iozbH2LhBKqiHyNLwvB_9n_D_mg@mail.gmail.com> (raw)
In-Reply-To: <5E5EE01A-4572-41FA-88DC-9F08DA17B040@gmail.com>

On Tue, Nov 19, 2013 at 5:29 PM, Khem Raj <raj.khem@gmail.com> wrote:
>
> On Nov 19, 2013, at 10:17 AM, Bruce Ashfield <bruce.ashfield@gmail.com> wrote:
>
>> Adding Khem.
>>
>> Khem .. see below.
>>
>> On Tue, Nov 19, 2013 at 12:54 PM, Bruce Ashfield
>> <bruce.ashfield@gmail.com> wrote:
>>> On Tue, Nov 19, 2013 at 12:46 PM, Phil Blundell <pb@pbcl.net> wrote:
>>>> On Tue, 2013-11-19 at 17:37 +0000, Mike Crowe wrote:
>>>>> On Tuesday 08 October 2013 at 17:12:54 -0400, Bruce Ashfield wrote:
>>>>>> When building against the sysroot, out of tree modules can require modpost
>>>>>> and other utilities normally found in the kernel's scripts directory. For
>>>>>> the kernel source in the staging dir, these scripts have been removed to
>>>>>> avoid mixing archiectures when packaging kernel-dev (among other things).
>>>>>>
>>>>>> Rather than further complicate the kernel's install rule, or its packaging,
>>>>>> we can restore the scripts by building them in the kernel staging directory
>>>>>> after the sstate is installed, making them available to packages that need them.
>>>>>>
>>>>>> Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
>>>>>> ---
>>>>>> meta/classes/kernel.bbclass | 11 +++++++++++
>>>>>> 1 file changed, 11 insertions(+)
>>>>>>
>>>>>> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
>>>>>> index 4acfb7e..d5fa801 100644
>>>>>> --- a/meta/classes/kernel.bbclass
>>>>>> +++ b/meta/classes/kernel.bbclass
>>>>>> @@ -292,6 +292,17 @@ kernel_do_install() {
>>>>>> }
>>>>>> do_install[prefuncs] += "package_get_auto_pr"
>>>>>>
>>>>>> +
>>>>>> +SSTATEPOSTINSTFUNCS += "kernelscripts_sstate_postinst"
>>>>>> +kernelscripts_sstate_postinst () {
>>>>>> +   if [ "${BB_CURRENTTASK}" = "populate_sysroot" -o "${BB_CURRENTTASK}" = "populate_sysroot_setscene" ]; then
>>>>>> +           (
>>>>>> +             cd ${STAGING_KERNEL_DIR}
>>>>>> +             oe_runmake scripts
>>>>>> +           )
>>>>>> +   fi
>>>>>> +}
>>>>>> +
>>>>>> sysroot_stage_all_append() {
>>>>>>    sysroot_stage_dir ${D}${KERNEL_SRC_PATH} ${SYSROOT_DESTDIR}${KERNEL_SRC_PATH}
>>>>>> }
>>>>>
>>>>> This sstate_postinst fails for me when the compiler isn't already present
>>>>> in the sysroot.
>>>>>
>>>>> Also, I notice that the environment and parameters passed to oe_runmake are
>>>>> not the same as those used by kernel_do_compile etc.
>>>>
>>>> Also note that module.bbclass already does "make scripts" before
>>>> do_compile() so out-of-tree modules should already have access to all
>>>> the files that they need.
>>>
>>> Ah, but they didn't. Otherwise we wouldn't have mucked about in the routines.
>>> Khem was building out of the sysroot and the support scripts weren't present,
>>> something which we were able to consistently reproduce.
>>>
>>> Perhaps the whole problem was just a misordering of the tasks. I'll take another
>>> look.
>>>
>>> But yes, we need one way or the other .. not both. I'd prefer to not fiddle with
>>> sstate, so I'll go back and see why the module.bbclass code wasn't working
>>> for the reported error.
>>
>> Khem: I wasn't working from a bugzilla when making these changes, so I
>> can't find your original reproducer for the missing recordmcount script.
>>
>> Do you recall what it was ? I'm revisiting this and would like to understand
>> why the make scripts in module-base.bbclass wasn't properly restoring
>> the support scripts for your build.
>>
>> I'm leaning towards reverting the whole mess, but without the reproducing
>> case, I can't be sure that I'm not breaking you again.
>
> Well reproducer case is that build from sstate but such that an external module needs to be rebuilt
> if external module also comes from sstate then it all is fine. Its only when everything is coming from
> sstate except this external module which needs to be rebuilt then you see this problem.
>

Right.

> now, I see the code in module-base.class
>
> #
> # Ensure the hostprogs are available for module compilation. Modules that
> # inherit this recipe and override do_compile() should be sure to call
> # do_make_scripts() or ensure the scripts are built independently.
> #
> do_make_scripts() {
>         unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
>         make CC="${KERNEL_CC}" LD="${KERNEL_LD}" AR="${KERNEL_AR}" \
>                    -C ${STAGING_KERNEL_DIR} scripts
> }
>
> so it expects that, do_make_scripts is explicitly called by external module recipes
>

Exactly. And I had windriver bug with the same symptoms as yours. It
was a package
that built its own modules, and hence never called this either.

> and my recipes did override module_do_compile task but not do_compile like below
>
> module_do_compile() {
>         oe_runmake
> }
>
> so, is comment wrong there should it say module_do_compile instead ?
>
> will it work with sstate always ?
>
> it will be OK to revert it if thats the case.

I'll come up with something that works in all cases. The sstate fix is
better from the point
of view that it is transparent to the recipes, and they don't need to
do anything special
for the support.

So my proposal is this:

 - fix the new bug at hand by making the sstate change depend on the
toolchain (I agree
   that patching the scripts to not reference the target toolchain
isn't a good idea since not
  all kernels get the rix).

 - remove the modules-base.bbclass scripts recreation, so we only have
one scripts
   restore in the tree.

Alternatively, recipes need to be fixed to call the
modules-base.bbclass routine to restore
scripts, and I think it is obvious that won't work in all cases.

I'll wait for comments/concensus before sending a new patch (which
needs to be tested
on all the cases), but in the meantime, the patches to the list to fix
the sstate solution
are good to be applied.

Cheers,

Bruce

>
>>
>> Bruce
>>
>>>
>>> Bruce
>>>
>>>
>>>>
>>>> If we're going to make a policy decision that the kernel is responsible
>>>> for making scripts then I guess that's fine (modulo the implementation
>>>> problems that Mike describes) but in that case the code in
>>>> module{-base}.bbclass is redundant and ought to be removed.
>>>>
>>>> p.
>>>>
>>>>
>>>> _______________________________________________
>>>> Openembedded-core mailing list
>>>> Openembedded-core@lists.openembedded.org
>>>> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>>>
>>>
>>>
>>> --
>>> "Thou shalt not follow the NULL pointer, for chaos and madness await
>>> thee at its end"
>>
>>
>>
>> --
>> "Thou shalt not follow the NULL pointer, for chaos and madness await
>> thee at its end"
>



-- 
"Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end"


  parent reply	other threads:[~2013-11-19 22:37 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-08 21:12 [PATCH 0/1] kernel: restore scripts in the sysroot Bruce Ashfield
2013-10-08 21:12 ` [PATCH 1/1] " Bruce Ashfield
2013-11-19 17:37   ` Mike Crowe
2013-11-19 17:37     ` [PATCH 1/2] kernel.bbclass: Ensure compiler is available for do_populate_sysroot_setscene Mike Crowe
2013-11-19 17:37       ` [PATCH 2/2] kernel.bbclass: Call make with correct variables in kernelscripts_sstate_postinst Mike Crowe
2013-11-19 17:41         ` Bruce Ashfield
2013-11-19 17:46           ` Richard Purdie
2013-11-19 17:56             ` Bruce Ashfield
2013-11-19 17:49           ` Mike Crowe
2013-11-19 17:59             ` Phil Blundell
2013-11-19 17:47       ` [PATCH 1/2] kernel.bbclass: Ensure compiler is available for do_populate_sysroot_setscene Bruce Ashfield
2013-11-19 17:46     ` [PATCH 1/1] kernel: restore scripts in the sysroot Phil Blundell
2013-11-19 17:54       ` Bruce Ashfield
2013-11-19 18:17         ` Bruce Ashfield
2013-11-19 22:29           ` Khem Raj
2013-11-19 22:36             ` Richard Purdie
2013-11-19 22:39               ` Khem Raj
2013-11-19 22:45                 ` Richard Purdie
2013-11-20  2:59                   ` Khem Raj
2013-11-20  4:43                     ` Bruce Ashfield
2013-11-19 22:37             ` Bruce Ashfield [this message]
2013-11-19 22:42               ` Richard Purdie
2013-11-19 22:46                 ` Bruce Ashfield
2013-11-19 23:44               ` Phil Blundell
2013-11-19 22:48                 ` Bruce Ashfield
2013-11-19 23:41             ` Phil Blundell
  -- strict thread matches above, loose matches on Subject: below --
2013-10-04  0:02 [PATCH 0/1] kernel: provide " Bruce Ashfield
2013-10-04  0:02 ` [PATCH 1/1] kernel: restore " Bruce Ashfield
2013-10-04  0:58   ` Khem Raj
2013-10-04  0:59     ` Bruce Ashfield
2013-10-04  7:46   ` Richard Purdie
2013-10-04 12:42     ` Bruce Ashfield
2013-10-04 20:23       ` Khem Raj
2013-10-07  5:02     ` Bruce Ashfield
2013-10-07  9:58       ` Richard Purdie
2013-10-07 15:20         ` Bruce Ashfield
2013-10-07 16:18           ` Richard Purdie
2013-10-07 16:20             ` Bruce Ashfield

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='CADkTA4ODwRaRMVehxmjjoA=iozbH2LhBKqiHyNLwvB_9n_D_mg@mail.gmail.com' \
    --to=bruce.ashfield@gmail.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.