lkml.org 
[lkml]   [2018]   [Feb]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: [PATCH v2 0/3] kbuild: fix host progs build with libs in non standard locations
2018-02-28 2:45 GMT+09:00 Josh Poimboeuf <jpoimboe@redhat.com>:
> On Mon, Feb 26, 2018 at 07:41:45PM +0100, Robin Jarry wrote:
>> This patchset allows to build host programs that depend on external libs
>> installed in non standard locations (i.e. not in /usr/include, /usr/lib,
>> etc.). For now, the only way is to force HOSTCC to include both the
>> path to the host compiler and the build flags.
>>
>> I have encountered this issue when building linux into the buildroot
>> framework. host-* versions of libs may be compiled and installed in a
>> host staging dir removing the need to install them on the build system.
>>
>> I'm not really satisfied with the new HOST_{C,LD}FLAGS variables. They
>> are too similar to HOST{C,LD}FLAGS and I find them confusing. However,
>> HOST_EXTRA*FLAGS are already reserved for local use in makefiles (see
>> Documentation/kbuild/makefiles.txt). And I didn't want to have even
>> longer USER_HOST_*FLAGS. If someone has a better proposition, I'll
>> happily make a v3.
>
> In Documentation/kbuild/kbuild.txt, we have the following environment
> variables:
>
> KCFLAGS
> --------------------------------------------------
> Additional options to the C compiler (for built-in and modules).
>
> CFLAGS_KERNEL
> --------------------------------------------------
> Additional options for $(CC) when used to compile
> code that is compiled as built-in.
>
> CFLAGS_MODULE
> --------------------------------------------------
> Additional module specific options to use for $(CC).
>
> LDFLAGS_MODULE
> --------------------------------------------------
> Additional options used for $(LD) when linking modules.
>
> LDFLAGS_vmlinux
> --------------------------------------------------
> Additional options passed to final link of vmlinux.
>
> So instead of
>
> HOST_CFLAGS
> HOST_LDFLAGS
>
> maybe it would be more consistent to call them
>
> CFLAGS_HOST
> LDFLAGS_HOST
>
> ?
>
> Also, the new environment variables should be documented in the above
> file.
>
> --
> Josh



A generic rule I see is almost like this:


[1] "KBUILD_" + (Executable Name) + "FLAGS" = (Internal-use Variable)

[2] (Executable Name) + "FLAGS" = (User Interface via Command Line)


They also derive

[3] (Internal-use Variable) =
"KBUILD_" + (User Interface via Command Line)


The following is the current situation:


[1] Flags for $(CC)

Internal use User interface via command line
---------------------------------------------------------------------------
(common) KBUILD_CFLAGS KCFLAGS
(builtin) KBUILD_CFLAGS_KERNEL CFLAGS_KERNEL
(module) KBUILD_CFLAGS_MODULE CFLAGS_MODULE



[2] Flags for $(AS)

Internal use User interface via command line
--------------------------------------------------------------------------
(common) KBUILD_AFLAGS KAFLAGS
(builtin) KBUILD_AFLAGS_KERNEL AFLAGS_KERNEL
(module) KBUILD_AFLAGS_MODULE AFLAGS_MODULE


[3] Flags for $(CPP)

Internal use User interface via command line
--------------------------------------------------------------------------
(common) KBUILD_CPPFLAGS KCPPFLAGS



[4] Flags for $(LD)

Internal use User interface via command line
--------------------------------------------------------------------------

(builtin) [None] #1 [None]
(module) KBUILD_LDFLAGS_MODULE LDFLAGS_MODULE


#1 (LDFLAGS_vmlinux is used for internal variable for builtin)


[5] Flags for HOSTCC, HOSTCXX

Internal use User interface via command line
-----------------------------------------------------------------------------
C HOSTCFLAGS [None]
C++ HOSTCXXFLAGS [None]
Link HOSTLDFLAGS [None]
Library HOST_LOADLIBES [None]



KCFLAGS, KAFLAGS, KCPPFLAGS are exceptions.
[5] is also an exception.




A consistent way could be

[5] Flags for HOSTCC, HOSTCXX

Internal use User interface via command line
-----------------------------------------------------------------------------
C KBUILD_HOSTCFLAGS HOSTCFLAGS
C++ KBUILD_HOSTCXXFLAGS HOSTCXXFLAGS
Link KBUILD_HOSTLDFLAGS HOSTLDFLAGS
Lib KBUILD_HOSTLDLIBS HOSTLDLIBS




Documentation/kbuild/kbuild.txt lists user interface parameters.
It is difficult to change them. (probably, not allowed)



Documentation/kbuild/makefiles.txt lists Make variables
used in kernel sources. So, it is easier to rename them.

Only the problem would be external modules that compile
their own host-programs with own flags. It is rare.
Anyway, external modules are often broken
when the kernel version is updated.


So, my idea is to rename existing

HOSTCFLAGS -> KBUILD_HOSTCFLAGS
HOSTCXXFLAGS -> KBUILD_HOSTCXXFLAGS
HOSTLDFLAGS -> KBUILD_HOSTLDFLAGS
HOST_LOADLIBES -> KBUILD_HOSTLDLIBS


("LOADLIBES" is too long, so rename it to "LDLIBS")


Then, re-add no-prefix ones as user interface.



--
Best Regards
Masahiro Yamada

\
 
 \ /
  Last update: 2018-02-28 11:24    [W:0.107 / U:62.644 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site