Patchwork gcc: skip core pass 1 when it is unnecessary

login
register
mail settings
Submitter Trevor Woerner
Date Feb. 26, 2014, 4:15 p.m.
Message ID <e9f99d9bd902414c8e3f.1393431331@openSUSE-i7>
Download mbox | patch
Permalink /patch/324505/
State Superseded
Headers show

Comments

Trevor Woerner - Feb. 26, 2014, 4:15 p.m.
# HG changeset patch
# User Trevor Woerner <trevor.woerner@linaro.org>
# Date 1393431218 18000
#      Wed Feb 26 11:13:38 2014 -0500
# Node ID e9f99d9bd902414c8e3f3c6fc36c0fc67f3a7593
# Parent  c727adf1b7bd2c1e891db512871dbe7b26797fa6
gcc: skip core pass 1 when it is unnecessary

If neither the Linux headers nor the libc start files are required, skip gcc's
core pass 1 since the build will simply move from pass 1 to pass 2 without
doing any work in between.

Signed-off-by: Trevor Woerner <trevor.woerner@linaro.org>


--
For unsubscribe information see http://sourceware.org/lists.html#faq
Yann E. MORIN - May 5, 2014, 8:09 p.m.
Trevor, All,

Sorry for the delay... :-(

On 2014-02-26 11:15 -0500, Trevor Woerner spake thusly:
> # HG changeset patch
> # User Trevor Woerner <trevor.woerner@linaro.org>
> # Date 1393431218 18000
> #      Wed Feb 26 11:13:38 2014 -0500
> # Node ID e9f99d9bd902414c8e3f3c6fc36c0fc67f3a7593
> # Parent  c727adf1b7bd2c1e891db512871dbe7b26797fa6
> gcc: skip core pass 1 when it is unnecessary
> 
> If neither the Linux headers nor the libc start files are required, skip gcc's
> core pass 1 since the build will simply move from pass 1 to pass 2 without
> doing any work in between.
> 
> Signed-off-by: Trevor Woerner <trevor.woerner@linaro.org>
> 
> diff -r c727adf1b7bd -r e9f99d9bd902 scripts/build/cc/gcc.sh
> --- a/scripts/build/cc/gcc.sh	Tue Feb 25 13:34:48 2014 -0500
> +++ b/scripts/build/cc/gcc.sh	Wed Feb 26 11:13:38 2014 -0500
> @@ -88,6 +88,14 @@
>          return 0
>      fi
>  
> +    # skip gcc pass 1 if there are no Linux kernel headers
> +    # nor libc start files to build/process
> +    if [ "${CT_LIBC}" = "none" -o "${CT_LIBC}" = "newlib" ]; then
> +        if [ "${CT_BARE_METAL}" = "y" ]; then
> +            return 0

There is already an escape-point a few lines above:
    if [ "${CT_CC_CORE_PASSES_NEEDED}" != "y" ]; then
        return 0
    fi

Also, LIBC == none or LIBC == newlib is only possible for bare-metal to
start with. So, this would be equivalent to not select CC_CORE_PASSES_NEEDED
for newlib, right?

Regards,
Yann E. MORIN.

> +        fi
> +    fi
> +
>      core_opts+=( "mode=static" )
>      core_opts+=( "host=${CT_BUILD}" )
>      core_opts+=( "complibs=${CT_BUILDTOOLS_PREFIX_DIR}" )
Yann E. MORIN - May 5, 2014, 8:59 p.m.
Trevor, All,

On 2014-05-05 22:09 +0200, Yann E. MORIN spake thusly:
> On 2014-02-26 11:15 -0500, Trevor Woerner spake thusly:
> > # HG changeset patch
> > # User Trevor Woerner <trevor.woerner@linaro.org>
> > # Date 1393431218 18000
> > #      Wed Feb 26 11:13:38 2014 -0500
> > # Node ID e9f99d9bd902414c8e3f3c6fc36c0fc67f3a7593
> > # Parent  c727adf1b7bd2c1e891db512871dbe7b26797fa6
> > gcc: skip core pass 1 when it is unnecessary
> > 
> > If neither the Linux headers nor the libc start files are required, skip gcc's
> > core pass 1 since the build will simply move from pass 1 to pass 2 without
> > doing any work in between.
> > 
> > Signed-off-by: Trevor Woerner <trevor.woerner@linaro.org>
> > 
> > diff -r c727adf1b7bd -r e9f99d9bd902 scripts/build/cc/gcc.sh
> > --- a/scripts/build/cc/gcc.sh	Tue Feb 25 13:34:48 2014 -0500
> > +++ b/scripts/build/cc/gcc.sh	Wed Feb 26 11:13:38 2014 -0500
> > @@ -88,6 +88,14 @@
> >          return 0
> >      fi
> >  
> > +    # skip gcc pass 1 if there are no Linux kernel headers
> > +    # nor libc start files to build/process
> > +    if [ "${CT_LIBC}" = "none" -o "${CT_LIBC}" = "newlib" ]; then
> > +        if [ "${CT_BARE_METAL}" = "y" ]; then
> > +            return 0
> 
> There is already an escape-point a few lines above:
>     if [ "${CT_CC_CORE_PASSES_NEEDED}" != "y" ]; then
>         return 0
>     fi
> 
> Also, LIBC == none or LIBC == newlib is only possible for bare-metal to
> start with. So, this would be equivalent to not select CC_CORE_PASSES_NEEDED
> for newlib, right?

Ah, no, in fact. CC_CORE_PASSES_NEEDED just disables both passes, when
we only want to disable pass-1.

I'll see what we can do...

Regards,
Yann E. MORIN.
Yann E. MORIN - May 5, 2014, 9:42 p.m.
Trevor, All,

On 2014-02-26 11:15 -0500, Trevor Woerner spake thusly:
> # HG changeset patch
> # User Trevor Woerner <trevor.woerner@linaro.org>
> # Date 1393431218 18000
> #      Wed Feb 26 11:13:38 2014 -0500
> # Node ID e9f99d9bd902414c8e3f3c6fc36c0fc67f3a7593
> # Parent  c727adf1b7bd2c1e891db512871dbe7b26797fa6
> gcc: skip core pass 1 when it is unnecessary
> 
> If neither the Linux headers nor the libc start files are required, skip gcc's
> core pass 1 since the build will simply move from pass 1 to pass 2 without
> doing any work in between.
> 
> Signed-off-by: Trevor Woerner <trevor.woerner@linaro.org>
> 
> diff -r c727adf1b7bd -r e9f99d9bd902 scripts/build/cc/gcc.sh
> --- a/scripts/build/cc/gcc.sh	Tue Feb 25 13:34:48 2014 -0500
> +++ b/scripts/build/cc/gcc.sh	Wed Feb 26 11:13:38 2014 -0500
> @@ -88,6 +88,14 @@
>          return 0
>      fi
>  
> +    # skip gcc pass 1 if there are no Linux kernel headers
> +    # nor libc start files to build/process
> +    if [ "${CT_LIBC}" = "none" -o "${CT_LIBC}" = "newlib" ]; then
> +        if [ "${CT_BARE_METAL}" = "y" ]; then
> +            return 0
> +        fi
> +    fi

I've pushed a different set of changes that should do what you want,
now:
    cc: add options to differentiate the need for pass-1 and pass-2
    cc/gcc: only build required core passes
    libc/newlib: only requires core pass-2

Thanks for the report! :-)

Regards,
Yann E. MORIN.
Trevor Woerner - May 6, 2014, 3:25 a.m.
Hi Yann, All,

On 05/05/14 17:42, Yann E. MORIN wrote:
> Trevor, All,
>
> On 2014-02-26 11:15 -0500, Trevor Woerner spake thusly:
>> # HG changeset patch
>> # User Trevor Woerner <trevor.woerner@linaro.org>
>> # Date 1393431218 18000
>> #      Wed Feb 26 11:13:38 2014 -0500
>> # Node ID e9f99d9bd902414c8e3f3c6fc36c0fc67f3a7593
>> # Parent  c727adf1b7bd2c1e891db512871dbe7b26797fa6
>> gcc: skip core pass 1 when it is unnecessary
> I've pushed a different set of changes that should do what you want,
> now:
>     cc: add options to differentiate the need for pass-1 and pass-2
>     cc/gcc: only build required core passes
>     libc/newlib: only requires core pass-2
>
> Thanks for the report! :-)

Thank you :-) I'll take a look shortly.

--
For unsubscribe information see http://sourceware.org/lists.html#faq

Patch

diff -r c727adf1b7bd -r e9f99d9bd902 scripts/build/cc/gcc.sh
--- a/scripts/build/cc/gcc.sh	Tue Feb 25 13:34:48 2014 -0500
+++ b/scripts/build/cc/gcc.sh	Wed Feb 26 11:13:38 2014 -0500
@@ -88,6 +88,14 @@ 
         return 0
     fi
 
+    # skip gcc pass 1 if there are no Linux kernel headers
+    # nor libc start files to build/process
+    if [ "${CT_LIBC}" = "none" -o "${CT_LIBC}" = "newlib" ]; then
+        if [ "${CT_BARE_METAL}" = "y" ]; then
+            return 0
+        fi
+    fi
+
     core_opts+=( "mode=static" )
     core_opts+=( "host=${CT_BUILD}" )
     core_opts+=( "complibs=${CT_BUILDTOOLS_PREFIX_DIR}" )