linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Masahiro Yamada <yamada.masahiro@socionext.com>
To: Josh Poimboeuf <jpoimboe@redhat.com>,
	Robin Jarry <robin.jarry@6wind.com>
Cc: Michal Marek <michal.lkml@markovi.net>,
	Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 0/3] kbuild: fix host progs build with libs in non standard locations
Date: Wed, 28 Feb 2018 19:22:26 +0900	[thread overview]
Message-ID: <CAK7LNAQLDRefb34KzF=3UUBdRLsDXtaZhRVQjRE2ZMaqNEb4LA@mail.gmail.com> (raw)
In-Reply-To: <20180227174518.qzw6eqmuyggcvjl6@treble>

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

  parent reply	other threads:[~2018-02-28 10:23 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-23 14:22 [PATCH 0/2] objtool: fix libelf detection in non-standard locations Robin Jarry
2018-02-23 14:22 ` [PATCH 1/2] kbuild: introduce HOST_EXTRALDFLAGS Robin Jarry
2018-02-23 14:22 ` [PATCH 2/2] objtool: use host flags to detect if libelf is missing Robin Jarry
2018-02-23 15:37   ` Josh Poimboeuf
2018-02-23 16:22     ` Robin Jarry
2018-02-23 16:34       ` Josh Poimboeuf
2018-02-26 18:41 ` [PATCH v2 0/3] kbuild: fix host progs build with libs in non standard locations Robin Jarry
2018-02-26 18:41   ` [PATCH v2 1/3] kbuild: introduce HOST_{C,LD}FLAGS Robin Jarry
2018-02-26 18:41   ` [PATCH v2 2/3] kbuild: use HOSTLDFLAGS for single .c executables Robin Jarry
2018-04-05 14:23     ` Masahiro Yamada
2018-02-26 18:41   ` [PATCH v2 3/3] objtool: use global host flags for compilation Robin Jarry
2018-02-27 17:49     ` Josh Poimboeuf
2018-02-27 20:55       ` Robin Jarry
2018-02-27 21:41         ` Josh Poimboeuf
2018-02-27 17:45   ` [PATCH v2 0/3] kbuild: fix host progs build with libs in non standard locations Josh Poimboeuf
2018-02-27 20:52     ` Robin Jarry
2018-02-27 21:38       ` Josh Poimboeuf
2018-02-28  0:23         ` Randy Dunlap
2018-02-28 10:22     ` Masahiro Yamada [this message]
2018-02-28 17:24       ` Robin Jarry

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='CAK7LNAQLDRefb34KzF=3UUBdRLsDXtaZhRVQjRE2ZMaqNEb4LA@mail.gmail.com' \
    --to=yamada.masahiro@socionext.com \
    --cc=jpoimboe@redhat.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michal.lkml@markovi.net \
    --cc=robin.jarry@6wind.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).