Thoughts about introducing OPTIMIZATION_CFLAG
diff mbox

Message ID CA+icZUVEs_+XiWeqtJ+34HBSx5LJYyEgoo2DLFzVr6yc9oxx2Q@mail.gmail.com
State New
Headers show

Commit Message

Sedat Dilek Jan. 4, 2016, 10:54 a.m. UTC
[ Not sure if I have addressed all the correct people and mailing-lists ]

Hi,

while still digging into a llvmlinux issue with workqueue I saw that
the wrong optimization compiler-flag was used on x86 architecture and
acpi subsystem.

CLANG requires '-Oz' whereas GCC requires '-Os'.

As acpi-daemon was throwing out the regression I looked by accident
over the *_CFLAGS.
As said... I checked only for x86 and acpi only.

For example '-Os' is hardcoded in...

arch/x86/Makefile
arch/x86/purgatory/Makefile

drivers/acpi/Makefile
drivers/acpi/acpica/Makefile

For acpi part we have currently both used '-O2' and '-Os' ('-Oz' for
llvmlinux) in approx 200 make-lines.

$ grep '\-O2' build-log_4.4.0-rc8-2-llvmlinux-amd64.txt | grep acpi | wc -l
226
$ grep '\-Oz' build-log_4.4.0-rc8-2-llvmlinux-amd64.txt | grep acpi |
grep '\-O2' | wc -l
200

So, which optimization-cflags is now used if I have both in one
make-line (and how can I check this)?

[ EXAMPLE ]

$ mycompiler --version
clang version 3.7.0 (tags/RELEASE_370/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix

$  mycompiler -Wp,-MD,drivers/acpi/.video_detect.o.d  -nostdinc
-isystem /opt/llvm-toolchain-3.7.0/bin/../lib/clang/3.7.0/include
-nostdinc -isystem
/opt/llvm-toolchain-3.7.0/bin/../lib/clang/3.7.0/include
-I./arch/x86/include -Iarch/x86/include/generated/uapi
-Iarch/x86/include/generated  -Iinclude -I./arch/x86/include/uapi
-Iarch/x86/include/generated/uapi -I./include/uapi
-Iinclude/generated/uapi -include ./include/linux/kconfig.h
-D__KERNEL__ -Qunused-arguments -Wno-unknown-warning-option -Wall
-Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing
-fno-common -Werror-implicit-function-declaration -Wno-format-security
-std=gnu89 -no-integrated-as -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
-mno-avx -m64 -mtune=generic -mno-red-zone -mcmodel=kernel
-funit-at-a-time -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1
-DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1
-DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1
-DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare
-fno-asynchronous-unwind-tables *** -O2 *** -Wframe-larger-than=1024
-fno-stack-protector -Wno-unused-variable
-Wno-format-invalid-specifier -Wno-gnu -Wno-asm-operand-widths
-Wno-initializer-overrides -fno-builtin -Wno-tautological-compare
-mno-global-merge -fno-omit-frame-pointer -fno-optimize-sibling-calls
-pg -Wdeclaration-after-statement -Wno-pointer-sign
-fno-strict-overflow -Werror=implicit-int -Werror=strict-prototypes
-Werror=date-time -Wno-initializer-overrides -Wno-unused-value
-Wno-format -Wno-unknown-warning-option -Wno-sign-compare
-Wno-format-zero-length -Wno-uninitialized *** -Oz *** -DMODULE
-D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(video_detect)"
-D"KBUILD_MODNAME=KBUILD_STR(video)" -c -o
drivers/acpi/.tmp_video_detect.o drivers/acpi/video_detect.c

How can I switch a optimization-cflags for certain code-parts in the
Linux-kernel (with or without the kbuild-system)?
( So the default optimization-cflags is '-O2' whereas parts wants '-Os'. )

What to do when using CONFIG_CC_OPTIMIZE_FOR_SIZE=y which sets '-Os' explicitly?

Below tools/ directory we have also an OPTIMIZATION variable used.

Something like a "global" solution is desired from my side.

I have attached a patchset on top of my llvmlinux-amd64-fixes-4.4,
hope this helps a bit to see what I mean.
It is not doing what I desire - still WIP.

Thoughts?

Thanks in advance.

Regards,
- Sedat -

Comments

Sedat Dilek Jan. 4, 2016, 11:25 a.m. UTC | #1
On Mon, Jan 4, 2016 at 11:54 AM, Sedat Dilek <sedat.dilek@gmail.com> wrote:
> [ Not sure if I have addressed all the correct people and mailing-lists ]
>
> Hi,
>
> while still digging into a llvmlinux issue with workqueue I saw that
> the wrong optimization compiler-flag was used on x86 architecture and
> acpi subsystem.
>
> CLANG requires '-Oz' whereas GCC requires '-Os'.
>
> As acpi-daemon was throwing out the regression I looked by accident
> over the *_CFLAGS.
> As said... I checked only for x86 and acpi only.
>
> For example '-Os' is hardcoded in...
>
> arch/x86/Makefile
> arch/x86/purgatory/Makefile
>
> drivers/acpi/Makefile
> drivers/acpi/acpica/Makefile
>
> For acpi part we have currently both used '-O2' and '-Os' ('-Oz' for
> llvmlinux) in approx 200 make-lines.
>
> $ grep '\-O2' build-log_4.4.0-rc8-2-llvmlinux-amd64.txt | grep acpi | wc -l
> 226
> $ grep '\-Oz' build-log_4.4.0-rc8-2-llvmlinux-amd64.txt | grep acpi |
> grep '\-O2' | wc -l
> 200
>
> So, which optimization-cflags is now used if I have both in one
> make-line (and how can I check this)?
>
> [ EXAMPLE ]
>
> $ mycompiler --version
> clang version 3.7.0 (tags/RELEASE_370/final)
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
>
> $  mycompiler -Wp,-MD,drivers/acpi/.video_detect.o.d  -nostdinc
> -isystem /opt/llvm-toolchain-3.7.0/bin/../lib/clang/3.7.0/include
> -nostdinc -isystem
> /opt/llvm-toolchain-3.7.0/bin/../lib/clang/3.7.0/include
> -I./arch/x86/include -Iarch/x86/include/generated/uapi
> -Iarch/x86/include/generated  -Iinclude -I./arch/x86/include/uapi
> -Iarch/x86/include/generated/uapi -I./include/uapi
> -Iinclude/generated/uapi -include ./include/linux/kconfig.h
> -D__KERNEL__ -Qunused-arguments -Wno-unknown-warning-option -Wall
> -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing
> -fno-common -Werror-implicit-function-declaration -Wno-format-security
> -std=gnu89 -no-integrated-as -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
> -mno-avx -m64 -mtune=generic -mno-red-zone -mcmodel=kernel
> -funit-at-a-time -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1
> -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1
> -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1
> -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare
> -fno-asynchronous-unwind-tables *** -O2 *** -Wframe-larger-than=1024
> -fno-stack-protector -Wno-unused-variable
> -Wno-format-invalid-specifier -Wno-gnu -Wno-asm-operand-widths
> -Wno-initializer-overrides -fno-builtin -Wno-tautological-compare
> -mno-global-merge -fno-omit-frame-pointer -fno-optimize-sibling-calls
> -pg -Wdeclaration-after-statement -Wno-pointer-sign
> -fno-strict-overflow -Werror=implicit-int -Werror=strict-prototypes
> -Werror=date-time -Wno-initializer-overrides -Wno-unused-value
> -Wno-format -Wno-unknown-warning-option -Wno-sign-compare
> -Wno-format-zero-length -Wno-uninitialized *** -Oz *** -DMODULE
> -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(video_detect)"
> -D"KBUILD_MODNAME=KBUILD_STR(video)" -c -o
> drivers/acpi/.tmp_video_detect.o drivers/acpi/video_detect.c
>
> How can I switch a optimization-cflags for certain code-parts in the
> Linux-kernel (with or without the kbuild-system)?
> ( So the default optimization-cflags is '-O2' whereas parts wants '-Os'. )
>
> What to do when using CONFIG_CC_OPTIMIZE_FOR_SIZE=y which sets '-Os' explicitly?
>
> Below tools/ directory we have also an OPTIMIZATION variable used.
>
> Something like a "global" solution is desired from my side.
>
> I have attached a patchset on top of my llvmlinux-amd64-fixes-4.4,
> hope this helps a bit to see what I mean.
> It is not doing what I desire - still WIP.
>
> Thoughts?
>
> Thanks in advance.
>

We have also hardcoded '-O2' in arch/x86...

$ grep '\-O2' -nr arch/x86/
arch/x86/boot/compressed/Makefile:24:KBUILD_CFLAGS := -m$(BITS)
-D__KERNEL__ $(LINUX_INCLUDE) -O2
arch/x86/entry/vdso/Makefile:67:CFL := $(PROFILING) -mcmodel=small
-fPIC -O2 -fasynchronous-unwind-tables -m64 \
arch/x86/um/vdso/Makefile:40:CFL := $(PROFILING) -mcmodel=small -fPIC
-O2 -fasynchronous-unwind-tables -m64 \

Is that explicitly required?

- Sedat -
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Alan Cox Jan. 4, 2016, 11:33 a.m. UTC | #2
> As said... I checked only for x86 and acpi only.
> 
> For example '-Os' is hardcoded in...
> 
> arch/x86/Makefile
> arch/x86/purgatory/Makefile
> 
> drivers/acpi/Makefile
> drivers/acpi/acpica/Makefile
> 
> For acpi part we have currently both used '-O2' and '-Os' ('-Oz' for
> llvmlinux) in approx 200 make-lines.

Certain parts of the kernel are built in particular ways for specific
reasons where the tradeoffs vary, or where people happen to know that -Os
is the best choice with gcc. Of course those may not be the same trade
offs for llvm.

> 
> $ grep '\-O2' build-log_4.4.0-rc8-2-llvmlinux-amd64.txt | grep acpi | wc -l
> 226
> $ grep '\-Oz' build-log_4.4.0-rc8-2-llvmlinux-amd64.txt | grep acpi |
> grep '\-O2' | wc -l
> 200
> 
> So, which optimization-cflags is now used if I have both in one
> make-line (and how can I check this)?

Consult the documentation for your compiler. GCC has an 810 page manual
that answers your question quite specifically

  "If you use multiple -O options with or without level numbers, the last
   such option is the one that is effective"


Don't assume they are contradictory options either. If you have other
optimnisations directly set then if those are after it they will take
effect

eg -Os -fprefetch-loop-arrays

is quite valid.

The GCC manual lists each optimisation it supports and documents exactly
which ones are enabled for each option. From that you should be able to
match them up with llvm.

> How can I switch a optimization-cflags for certain code-parts in the
> Linux-kernel (with or without the kbuild-system)?
> ( So the default optimization-cflags is '-O2' whereas parts wants '-Os'. )

Not sure I follow - that's exactly what the current Makefiles are doing.

> What to do when using CONFIG_CC_OPTIMIZE_FOR_SIZE=y which sets '-Os' explicitly?

That's something you'd need to work out as you regression test and profile
the codebase. A first guess would be to echo what gcc does but deal with
the unfortunate option difference between llvm and gcc.

It may also depend what "optimising for size" means to llvm. Some
compilers take it as a hint to favour smaller but still fast code, others
take it as an instruction to generate very tight but way slower code.
That will change which bits need which options.

Alan


--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sedat Dilek Jan. 4, 2016, 11:47 a.m. UTC | #3
On Mon, Jan 4, 2016 at 12:33 PM, One Thousand Gnomes
<gnomes@lxorguk.ukuu.org.uk> wrote:
>> As said... I checked only for x86 and acpi only.
>>
>> For example '-Os' is hardcoded in...
>>
>> arch/x86/Makefile
>> arch/x86/purgatory/Makefile
>>
>> drivers/acpi/Makefile
>> drivers/acpi/acpica/Makefile
>>
>> For acpi part we have currently both used '-O2' and '-Os' ('-Oz' for
>> llvmlinux) in approx 200 make-lines.
>
> Certain parts of the kernel are built in particular ways for specific
> reasons where the tradeoffs vary, or where people happen to know that -Os
> is the best choice with gcc. Of course those may not be the same trade
> offs for llvm.
>
>>
>> $ grep '\-O2' build-log_4.4.0-rc8-2-llvmlinux-amd64.txt | grep acpi | wc -l
>> 226
>> $ grep '\-Oz' build-log_4.4.0-rc8-2-llvmlinux-amd64.txt | grep acpi |
>> grep '\-O2' | wc -l
>> 200
>>
>> So, which optimization-cflags is now used if I have both in one
>> make-line (and how can I check this)?
>
> Consult the documentation for your compiler. GCC has an 810 page manual
> that answers your question quite specifically
>
>   "If you use multiple -O options with or without level numbers, the last
>    such option is the one that is effective"
>
>
> Don't assume they are contradictory options either. If you have other
> optimnisations directly set then if those are after it they will take
> effect
>
> eg -Os -fprefetch-loop-arrays
>
> is quite valid.
>
> The GCC manual lists each optimisation it supports and documents exactly
> which ones are enabled for each option. From that you should be able to
> match them up with llvm.
>
>> How can I switch a optimization-cflags for certain code-parts in the
>> Linux-kernel (with or without the kbuild-system)?
>> ( So the default optimization-cflags is '-O2' whereas parts wants '-Os'. )
>
> Not sure I follow - that's exactly what the current Makefiles are doing.
>
>> What to do when using CONFIG_CC_OPTIMIZE_FOR_SIZE=y which sets '-Os' explicitly?
>
> That's something you'd need to work out as you regression test and profile
> the codebase. A first guess would be to echo what gcc does but deal with
> the unfortunate option difference between llvm and gcc.
>
> It may also depend what "optimising for size" means to llvm. Some
> compilers take it as a hint to favour smaller but still fast code, others
> take it as an instruction to generate very tight but way slower code.
> That will change which bits need which options.
>

Thanks for your reply.

But I think you did not get my problem - to have two different
optimization-levels for a compiler in *one* make-line makes no sense
to me.

So, the kbuild-system adds optimization compiler-flags automatically -
see the upper/root Makefile.
Sort of "inheritance".

My question is how to set *one* optimization-level for whatever
compiler I use to build my Linux-kernel source.

-O1 || -O2 || -O3 || -O4 || -Os ('1..4' and 's' are so-called "optlevels")

It's still not clear if my problem is a compiler bug or not (see [1]
for the details).

Now a bit clearer?

- Sedat -

[1] http://marc.info/?t=144179442100006&r=1&w=1
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek Jan. 4, 2016, 10:37 p.m. UTC | #4
Dne 4.1.2016 v 12:47 Sedat Dilek napsal(a):
> But I think you did not get my problem - to have two different
> optimization-levels for a compiler in *one* make-line makes no sense
> to me.

That we sometimes have -O2 ... -Os on the command line is not a problem,
since any same unix tool parses its options so that the last one of
mutually exclusive options wins. As to -Os vs. -Oz, to my knowledge
clang accepts both and -Oz means to reduce size by any means. If -Oz is
more appropriate for the CONFIG_CC_OPTIMIZE_FOR_SIZE case and/or for the
individual object files, feel free to change it, but please do not
introduce another variable holding compiler options.

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sedat Dilek Jan. 8, 2016, 10:03 a.m. UTC | #5
On Mon, Jan 4, 2016 at 11:37 PM, Michal Marek <mmarek@suse.cz> wrote:
> Dne 4.1.2016 v 12:47 Sedat Dilek napsal(a):
>> But I think you did not get my problem - to have two different
>> optimization-levels for a compiler in *one* make-line makes no sense
>> to me.
>
> That we sometimes have -O2 ... -Os on the command line is not a problem,
> since any same unix tool parses its options so that the last one of
> mutually exclusive options wins.

That is new to me and I haven't tested this by dropping arguments in
my make-line(s).

From where do have this information - sort of "business-life-experience" :-)?
Is that documented somewhere in the Linux-sources?

What means "last one" - last one seen from the begin-of-(make)-line?

Do you agree that it is confusing to have two optlevel arguments in
one make-line?

Linus suggested me to use a wrapper-script in case of using two
different compiler and passing arguments...

[  /usr/bin/mycompiler ]
#!/bin/bash

gcc-4.9 "$@"
- EOF -

According to your statement passing an optlevel here in this script
will never-ever be recognized - as it is at the begin-of-(make)-line.

So how should someone change the Linux-sources to test a different
optlevel than -O2?

I have also seen that below arch/x86 there exists hardcoded -O2 and
-Os which are placed after -O2 (default value from the
toplevel-Makefile).

Thoughts?

> As to -Os vs. -Oz, to my knowledge
> clang accepts both and -Oz means to reduce size by any means. If -Oz is
> more appropriate for the CONFIG_CC_OPTIMIZE_FOR_SIZE case and/or for the
> individual object files, feel free to change it, but please do not
> introduce another variable holding compiler options.
>

JUST FYI...
I was able to compile a llvmlinux-patched Linux v4.4.-rc8 with -Os and
CLANG v3.7.1.
Dunno the difference between -Os and -Oz.
The bug-line still exists with both.

Still I want to know if the problem exists with a different optlevel
like -O0 or -O1 or -O3.
Cannot say if all clang-specific compiler-flags will be available in
these optlevels.
( Testing with hardcoded -O0 ended in a build-breakage. )
That would be helpful to check if it is a compiler-optimization bug.

Can you help me in having a switchable value for the "default"
optlevel (which is currently -O2) in the Kconfig system?

We have CC_OPTIMIZE_FOR_SIZE in init/Kconfig.

What about a CC_OPTIMIZE_DEFAULT as a string in init/Kconfig?

[ init/Kconfig ]

config CC_OPTIMIZE_DEFAULT
        string
        default="-O2"

config CC_OPTIMIZE_FOR_SIZE
        bool "Optimize for size"
        help
          Enabling this option will pass "-Os" instead of "-O2" to
          your compiler resulting in a smaller kernel.

          If unsure, say N.

[ Makefile (top-level ]

OPTIMIZE_CFLAGS := $(subst $(quote),,$(CC_OPTIMIZE_DEFAULT))
...
KCONFIG_CFLAGS += $(OPTIMIZE_CFLAGS)
...

Unfortunately, that is not working as expected.

Something like the above would help not to hack in the Linux-sources
and pass elegantly a default-optlevel via Kconfig-system.

If there is an easier way of passing and using a different optlevel,
then please let me know.

Still digging in the dark on how to change to have one single optlevel.

Is it in general possible to "override" the default -O2
(toplevel-Makefile) for a specific part/subsystem?
Other possibilities than via the Kconfig-system?

Thanks in advance.

- Sedat -
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek Jan. 8, 2016, 11:31 a.m. UTC | #6
On 2016-01-08 11:03, Sedat Dilek wrote:
> On Mon, Jan 4, 2016 at 11:37 PM, Michal Marek <mmarek@suse.cz> wrote:
>> Dne 4.1.2016 v 12:47 Sedat Dilek napsal(a):
>>> But I think you did not get my problem - to have two different
>>> optimization-levels for a compiler in *one* make-line makes no sense
>>> to me.
>>
>> That we sometimes have -O2 ... -Os on the command line is not a problem,
>> since any same unix tool parses its options so that the last one of
>> mutually exclusive options wins.
> 
> That is new to me and I haven't tested this by dropping arguments in
> my make-line(s).
> 
> From where do have this information - sort of "business-life-experience" :-)?
> Is that documented somewhere in the Linux-sources?

You override a previously set option by appending one with different value:

$ yes | head -n 10 -n 999 -n 2
y
y
$

This pattern is used all over in Makefiles.


> Do you agree that it is confusing to have two optlevel arguments in
> one make-line?

It probably is, but fixing this problem would make the Makefiles unreadable.


> Linus suggested me to use a wrapper-script in case of using two
> different compiler and passing arguments...
> 
> [  /usr/bin/mycompiler ]
> #!/bin/bash
> 
> gcc-4.9 "$@"
> - EOF -
> 
> According to your statement passing an optlevel here in this script
> will never-ever be recognized - as it is at the begin-of-(make)-line.

Pass it as the last argument.


> So how should someone change the Linux-sources to test a different
> optlevel than -O2?

make KCFLAGS=-O3

However, per-directory and per-file cflags set in Makefiles will take
precedence. If you want to override these as well, use the wrapper.

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sedat Dilek Jan. 8, 2016, 11:49 a.m. UTC | #7
On Fri, Jan 8, 2016 at 12:31 PM, Michal Marek <mmarek@suse.cz> wrote:
> On 2016-01-08 11:03, Sedat Dilek wrote:
>> On Mon, Jan 4, 2016 at 11:37 PM, Michal Marek <mmarek@suse.cz> wrote:
>>> Dne 4.1.2016 v 12:47 Sedat Dilek napsal(a):
>>>> But I think you did not get my problem - to have two different
>>>> optimization-levels for a compiler in *one* make-line makes no sense
>>>> to me.
>>>
>>> That we sometimes have -O2 ... -Os on the command line is not a problem,
>>> since any same unix tool parses its options so that the last one of
>>> mutually exclusive options wins.
>>
>> That is new to me and I haven't tested this by dropping arguments in
>> my make-line(s).
>>
>> From where do have this information - sort of "business-life-experience" :-)?
>> Is that documented somewhere in the Linux-sources?
>
> You override a previously set option by appending one with different value:
>
> $ yes | head -n 10 -n 999 -n 2
> y
> y
> $
>
> This pattern is used all over in Makefiles.
>
>
>> Do you agree that it is confusing to have two optlevel arguments in
>> one make-line?
>
> It probably is, but fixing this problem would make the Makefiles unreadable.
>
>
>> Linus suggested me to use a wrapper-script in case of using two
>> different compiler and passing arguments...
>>
>> [  /usr/bin/mycompiler ]
>> #!/bin/bash
>>
>> gcc-4.9 "$@"
>> - EOF -
>>
>> According to your statement passing an optlevel here in this script
>> will never-ever be recognized - as it is at the begin-of-(make)-line.
>
> Pass it as the last argument.
>

How do I do that?

- Sedat -

>
>> So how should someone change the Linux-sources to test a different
>> optlevel than -O2?
>
> make KCFLAGS=-O3
>
> However, per-directory and per-file cflags set in Makefiles will take
> precedence. If you want to override these as well, use the wrapper.
>
> Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek Jan. 8, 2016, 12:30 p.m. UTC | #8
On 2016-01-08 12:49, Sedat Dilek wrote:
> On Fri, Jan 8, 2016 at 12:31 PM, Michal Marek <mmarek@suse.cz> wrote:
>> On 2016-01-08 11:03, Sedat Dilek wrote:
>>> On Mon, Jan 4, 2016 at 11:37 PM, Michal Marek <mmarek@suse.cz> wrote:
>>>> Dne 4.1.2016 v 12:47 Sedat Dilek napsal(a):
>>> gcc-4.9 "$@"
>>> - EOF -
>>>
>>> According to your statement passing an optlevel here in this script
>>> will never-ever be recognized - as it is at the begin-of-(make)-line.
>>
>> Pass it as the last argument.
>>
> 
> How do I do that?

gcc-4.9 "$@" -O3

Michal

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sedat Dilek Jan. 8, 2016, 1:25 p.m. UTC | #9
On Fri, Jan 8, 2016 at 1:30 PM, Michal Marek <mmarek@suse.cz> wrote:
> On 2016-01-08 12:49, Sedat Dilek wrote:
>> On Fri, Jan 8, 2016 at 12:31 PM, Michal Marek <mmarek@suse.cz> wrote:
>>> On 2016-01-08 11:03, Sedat Dilek wrote:
>>>> On Mon, Jan 4, 2016 at 11:37 PM, Michal Marek <mmarek@suse.cz> wrote:
>>>>> Dne 4.1.2016 v 12:47 Sedat Dilek napsal(a):
>>>> gcc-4.9 "$@"
>>>> - EOF -
>>>>
>>>> According to your statement passing an optlevel here in this script
>>>> will never-ever be recognized - as it is at the begin-of-(make)-line.
>>>
>>> Pass it as the last argument.
>>>
>>
>> How do I do that?
>
> gcc-4.9 "$@" -O3
>

Hmm, with that modification and my attached build-script I don't see
any -O3 passed to my generated make-lines.

[ /usr/bin/mycompiler ]
#!/bin/bash

clang "$@" -O3
- EOF -

What's wrong?

- Sedat -

Patch
diff mbox

From 3ed0fdeafd219518ceff601cbb4df562c09374da Mon Sep 17 00:00:00 2001
From: Sedat Dilek <sedat.dilek@gmail.com>
Date: Mon, 4 Jan 2016 11:42:58 +0100
Subject: [PATCH 3/3] acpi: llvmlinux: Use OPTIMIZATION_CFLAGS

Signed-off-by: Sedat Dilek <sedat.dilek@gmail.com>
---
 drivers/acpi/Makefile        | 4 +++-
 drivers/acpi/acpica/Makefile | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
index 675eaf337178..8a52558da32d 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -2,7 +2,9 @@ 
 # Makefile for the Linux ACPI interpreter
 #
 
-ccflags-y			:= -Os
+OPTIMIZATION_CFLAGS 		:= $(call cc-option,-Oz,-Os)
+
+ccflags-y			:= $(OPTIMIZATION_CFLAGS)
 ccflags-$(CONFIG_ACPI_DEBUG)	+= -DACPI_DEBUG_OUTPUT
 
 #
diff --git a/drivers/acpi/acpica/Makefile b/drivers/acpi/acpica/Makefile
index 885936f79542..44b4648ccb46 100644
--- a/drivers/acpi/acpica/Makefile
+++ b/drivers/acpi/acpica/Makefile
@@ -2,7 +2,9 @@ 
 # Makefile for ACPICA Core interpreter
 #
 
-ccflags-y			:= -Os -DBUILDING_ACPICA
+OPTIMIZATION_CFLAGS		:= $(call cc-option,-Oz,-Os)
+
+ccflags-y			:= $(OPTIMIZATION_CFLAGS) -DBUILDING_ACPICA
 ccflags-$(CONFIG_ACPI_DEBUG)	+= -DACPI_DEBUG_OUTPUT
 
 # use acpi.o to put all files here into acpi.o modparam namespace
-- 
2.6.4