2018-02-28 2:45 GMT+09:00 Josh Poimboeuf <jpoimboe@xxxxxxxxxx>: > 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 -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html