* [PATCH v3 0/5] kbuild: Clean-up and bug fixes of scripts/Makefile.host
@ 2014-07-16 7:12 Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 1/5] kbuild: fix a typo in scripts/Makefile.host Masahiro Yamada
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Masahiro Yamada @ 2014-07-16 7:12 UTC (permalink / raw)
To: linux-kbuild; +Cc: Sam Ravnborg, Michal Marek, Masahiro Yamada
Masahiro Yamada (5):
kbuild: fix a typo in scripts/Makefile.host
kbuild: fix a bug of C++ host program handling
kbuild: drop shared library support from Makefile.host
kbuild: clean up scripts/Makefile.host
kbuild: clean-up and bug fix of scripts/Makefile.host
Documentation/kbuild/makefiles.txt | 39 +++++-------------------
scripts/Makefile.host | 61 ++++++--------------------------------
2 files changed, 17 insertions(+), 83 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 1/5] kbuild: fix a typo in scripts/Makefile.host
2014-07-16 7:12 [PATCH v3 0/5] kbuild: Clean-up and bug fixes of scripts/Makefile.host Masahiro Yamada
@ 2014-07-16 7:12 ` Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 2/5] kbuild: fix a bug of C++ host program handling Masahiro Yamada
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Masahiro Yamada @ 2014-07-16 7:12 UTC (permalink / raw)
To: linux-kbuild; +Cc: Sam Ravnborg, Michal Marek, Masahiro Yamada
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
---
Changes in v3: None
Changes in v2: None
scripts/Makefile.host | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index 6689364..395a240 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -44,7 +44,7 @@ host-cmulti := $(foreach m,$(__hostprogs),\
host-cobjs := $(sort $(foreach m,$(__hostprogs),$($(m)-objs)))
# C++ code
-# C++ executables compiled from at least on .cc file
+# C++ executables compiled from at least one .cc file
# and zero or more .c files
host-cxxmulti := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 2/5] kbuild: fix a bug of C++ host program handling
2014-07-16 7:12 [PATCH v3 0/5] kbuild: Clean-up and bug fixes of scripts/Makefile.host Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 1/5] kbuild: fix a typo in scripts/Makefile.host Masahiro Yamada
@ 2014-07-16 7:12 ` Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 3/5] kbuild: drop shared library support from Makefile.host Masahiro Yamada
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Masahiro Yamada @ 2014-07-16 7:12 UTC (permalink / raw)
To: linux-kbuild; +Cc: Sam Ravnborg, Michal Marek, Masahiro Yamada
The comment claims:
C++ executables compiled from at least one .cc file
and zero or more .c files
But C++ executables with zero .c file fail in build.
For example, assume we have a Makefile like this:
hostprogs-y := foo
foo-cxxobjs := bar.o
In this case, foo is treated as host-csingle
and Kbuild tries to search non-existing foo.c source.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
---
Changes in v3: None
Changes in v2: None
scripts/Makefile.host | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index 395a240..bf44e79 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -34,7 +34,8 @@ __hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
# C code
# Executables compiled from a single .c file
-host-csingle := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
+host-csingle := $(foreach m,$(__hostprogs), \
+ $(if $($(m)-objs)$($(m)-cxxobjs),,$(m)))
# C executables linked based on several .o files
host-cmulti := $(foreach m,$(__hostprogs),\
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 3/5] kbuild: drop shared library support from Makefile.host
2014-07-16 7:12 [PATCH v3 0/5] kbuild: Clean-up and bug fixes of scripts/Makefile.host Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 1/5] kbuild: fix a typo in scripts/Makefile.host Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 2/5] kbuild: fix a bug of C++ host program handling Masahiro Yamada
@ 2014-07-16 7:12 ` Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 4/5] kbuild: clean up scripts/Makefile.host Masahiro Yamada
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Masahiro Yamada @ 2014-07-16 7:12 UTC (permalink / raw)
To: linux-kbuild; +Cc: Sam Ravnborg, Michal Marek, Masahiro Yamada
The shared library feature in Makefile.host is no longer used.
Rip it off to keep the build infrastucture simple.
Update Documentation/kbuild/makefiles.txt too.
The section "4.3 Definition shared libraries" should be removed
and the following sections should be re-numbered.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Suggested-by: Sam Ravnborg <sam@ravnborg.org>
---
Changes in v3:
- Update Documentation/kbuild/makefile.txt
Changes in v2:
- Newly added
Documentation/kbuild/makefiles.txt | 39 +++++++---------------------------
scripts/Makefile.host | 43 +++-----------------------------------
2 files changed, 11 insertions(+), 71 deletions(-)
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index c600e2f..764f599 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -23,11 +23,10 @@ This document describes the Linux kernel Makefiles.
=== 4 Host Program support
--- 4.1 Simple Host Program
--- 4.2 Composite Host Programs
- --- 4.3 Defining shared libraries
- --- 4.4 Using C++ for host programs
- --- 4.5 Controlling compiler options for host programs
- --- 4.6 When host programs are actually built
- --- 4.7 Using hostprogs-$(CONFIG_FOO)
+ --- 4.3 Using C++ for host programs
+ --- 4.4 Controlling compiler options for host programs
+ --- 4.5 When host programs are actually built
+ --- 4.6 Using hostprogs-$(CONFIG_FOO)
=== 5 Kbuild clean infrastructure
@@ -643,29 +642,7 @@ Both possibilities are described in the following.
Finally, the two .o files are linked to the executable, lxdialog.
Note: The syntax <executable>-y is not permitted for host-programs.
---- 4.3 Defining shared libraries
-
- Objects with extension .so are considered shared libraries, and
- will be compiled as position independent objects.
- Kbuild provides support for shared libraries, but the usage
- shall be restricted.
- In the following example the libkconfig.so shared library is used
- to link the executable conf.
-
- Example:
- #scripts/kconfig/Makefile
- hostprogs-y := conf
- conf-objs := conf.o libkconfig.so
- libkconfig-objs := expr.o type.o
-
- Shared libraries always require a corresponding -objs line, and
- in the example above the shared library libkconfig is composed by
- the two objects expr.o and type.o.
- expr.o and type.o will be built as position independent code and
- linked as a shared library libkconfig.so. C++ is not supported for
- shared libraries.
-
---- 4.4 Using C++ for host programs
+--- 4.3 Using C++ for host programs
kbuild offers support for host programs written in C++. This was
introduced solely to support kconfig, and is not recommended
@@ -688,7 +665,7 @@ Both possibilities are described in the following.
qconf-cxxobjs := qconf.o
qconf-objs := check.o
---- 4.5 Controlling compiler options for host programs
+--- 4.4 Controlling compiler options for host programs
When compiling host programs, it is possible to set specific flags.
The programs will always be compiled utilising $(HOSTCC) passed
@@ -716,7 +693,7 @@ Both possibilities are described in the following.
When linking qconf, it will be passed the extra option
"-L$(QTDIR)/lib".
---- 4.6 When host programs are actually built
+--- 4.5 When host programs are actually built
Kbuild will only build host-programs when they are referenced
as a prerequisite.
@@ -747,7 +724,7 @@ Both possibilities are described in the following.
This will tell kbuild to build lxdialog even if not referenced in
any rule.
---- 4.7 Using hostprogs-$(CONFIG_FOO)
+--- 4.6 Using hostprogs-$(CONFIG_FOO)
A typical pattern in a Kbuild file looks like this:
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index bf44e79..1c2e570 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -20,16 +20,6 @@
# Will compile qconf as a C++ program, and menu as a C program.
# They are linked as C++ code to the executable qconf
-# hostprogs-y := conf
-# conf-objs := conf.o libkconfig.so
-# libkconfig-objs := expr.o type.o
-# Will create a shared library named libkconfig.so that consists of
-# expr.o and type.o (they are both compiled as C code and the object files
-# are made as position independent code).
-# conf.c is compiled as a C program, and conf.o is linked together with
-# libkconfig.so as the executable conf.
-# Note: Shared libraries consisting of C++ files are not supported
-
__hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
# C code
@@ -52,15 +42,6 @@ host-cxxmulti := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
# C++ Object (.o) files compiled from .cc files
host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
-# Shared libaries (only .c supported)
-# Shared libraries (.so) - all .so files referenced in "xxx-objs"
-host-cshlib := $(sort $(filter %.so, $(host-cobjs)))
-# Remove .so files from "xxx-objs"
-host-cobjs := $(filter-out %.so,$(host-cobjs))
-
-#Object (.o) files used by the shared libaries
-host-cshobjs := $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs))))
-
# output directory for programs/.o files
# hostprogs-y := tools/build may have been specified. Retrieve directory
host-objdirs := $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f))))
@@ -82,8 +63,6 @@ host-cmulti := $(addprefix $(obj)/,$(host-cmulti))
host-cobjs := $(addprefix $(obj)/,$(host-cobjs))
host-cxxmulti := $(addprefix $(obj)/,$(host-cxxmulti))
host-cxxobjs := $(addprefix $(obj)/,$(host-cxxobjs))
-host-cshlib := $(addprefix $(obj)/,$(host-cshlib))
-host-cshobjs := $(addprefix $(obj)/,$(host-cshobjs))
host-objdirs := $(addprefix $(obj)/,$(host-objdirs))
obj-dirs += $(host-objdirs)
@@ -124,7 +103,7 @@ quiet_cmd_host-cmulti = HOSTLD $@
cmd_host-cmulti = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \
$(addprefix $(obj)/,$($(@F)-objs)) \
$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
-$(host-cmulti): $(obj)/%: $(host-cobjs) $(host-cshlib) FORCE
+$(host-cmulti): $(obj)/%: $(host-cobjs) FORCE
$(call if_changed,host-cmulti)
# Create .o file from a single .c file
@@ -141,7 +120,7 @@ quiet_cmd_host-cxxmulti = HOSTLD $@
$(foreach o,objs cxxobjs,\
$(addprefix $(obj)/,$($(@F)-$(o)))) \
$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
-$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE
+$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) FORCE
$(call if_changed,host-cxxmulti)
# Create .o file from a single .cc (C++) file
@@ -150,21 +129,5 @@ quiet_cmd_host-cxxobjs = HOSTCXX $@
$(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE
$(call if_changed_dep,host-cxxobjs)
-# Compile .c file, create position independent .o file
-# host-cshobjs -> .o
-quiet_cmd_host-cshobjs = HOSTCC -fPIC $@
- cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $<
-$(host-cshobjs): $(obj)/%.o: $(src)/%.c FORCE
- $(call if_changed_dep,host-cshobjs)
-
-# Link a shared library, based on position independent .o files
-# *.o -> .so shared library (host-cshlib)
-quiet_cmd_host-cshlib = HOSTLLD -shared $@
- cmd_host-cshlib = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \
- $(addprefix $(obj)/,$($(@F:.so=-objs))) \
- $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
-$(host-cshlib): $(obj)/%: $(host-cshobjs) FORCE
- $(call if_changed,host-cshlib)
-
targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\
- $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs)
+ $(host-cxxmulti) $(host-cxxobjs)
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 4/5] kbuild: clean up scripts/Makefile.host
2014-07-16 7:12 [PATCH v3 0/5] kbuild: Clean-up and bug fixes of scripts/Makefile.host Masahiro Yamada
` (2 preceding siblings ...)
2014-07-16 7:12 ` [PATCH v3 3/5] kbuild: drop shared library support from Makefile.host Masahiro Yamada
@ 2014-07-16 7:12 ` Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 5/5] kbuild: clean-up and bug fix of scripts/Makefile.host Masahiro Yamada
2014-07-16 15:29 ` [PATCH v3 0/5] kbuild: Clean-up and bug fixes " Michal Marek
5 siblings, 0 replies; 7+ messages in thread
From: Masahiro Yamada @ 2014-07-16 7:12 UTC (permalink / raw)
To: linux-kbuild; +Cc: Sam Ravnborg, Michal Marek, Masahiro Yamada
The directory creation can be more simplified by two levels.
[1] Drop $(dir ...)
$(dir $(f)) always returns non-empty string.
So, $(if $(dir $(f)),$(dir $(f)) is equivalent to $(dir $(f)).
[2] Unroll $(foreach ...) loop
$(dir ...) can take one or more arguments and returns a list of
directories of them.
$(foreach f, $(progs), $(dir $(f))) can be unrolled as $(dir $(progs)).
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
---
Changes in v3: None
Changes in v2:
- Further more clean-up by enrolling $(foreach ) loop
scripts/Makefile.host | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index 1c2e570..bb6a11f 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -44,15 +44,11 @@ host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
# output directory for programs/.o files
# hostprogs-y := tools/build may have been specified. Retrieve directory
-host-objdirs := $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f))))
+host-objdirs := $(dir $(__hostprogs))
# directory of .o files from prog-objs notation
-host-objdirs += $(foreach f,$(host-cmulti), \
- $(foreach m,$($(f)-objs), \
- $(if $(dir $(m)),$(dir $(m)))))
+host-objdirs += $(dir $(foreach f,$(host-cmulti), $($(f)-objs)))
# directory of .o files from prog-cxxobjs notation
-host-objdirs += $(foreach f,$(host-cxxmulti), \
- $(foreach m,$($(f)-cxxobjs), \
- $(if $(dir $(m)),$(dir $(m)))))
+host-objdirs += $(dir $(foreach f,$(host-cxxmulti), $($(f)-cxxobjs)))
host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs))))
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 5/5] kbuild: clean-up and bug fix of scripts/Makefile.host
2014-07-16 7:12 [PATCH v3 0/5] kbuild: Clean-up and bug fixes of scripts/Makefile.host Masahiro Yamada
` (3 preceding siblings ...)
2014-07-16 7:12 ` [PATCH v3 4/5] kbuild: clean up scripts/Makefile.host Masahiro Yamada
@ 2014-07-16 7:12 ` Masahiro Yamada
2014-07-16 15:29 ` [PATCH v3 0/5] kbuild: Clean-up and bug fixes " Michal Marek
5 siblings, 0 replies; 7+ messages in thread
From: Masahiro Yamada @ 2014-07-16 7:12 UTC (permalink / raw)
To: linux-kbuild; +Cc: Sam Ravnborg, Michal Marek, Masahiro Yamada
Assume we have a Makefile like this:
hostprogs-y := foo
foo-cxxobjs := bar/baz.o
foo-objs := qux/quux.o
In this case, Kbuild creates bar/ directory,
but fails to create qux/ directory.
This commit re-writes directory creation more simply,
fixing that bug.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
---
Changes in v3:
- Compute host-objdirs more simply
Changes in v2:
- More simplify host-objdirs
scripts/Makefile.host | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index bb6a11f..ab5980f 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -43,12 +43,9 @@ host-cxxmulti := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
# output directory for programs/.o files
-# hostprogs-y := tools/build may have been specified. Retrieve directory
-host-objdirs := $(dir $(__hostprogs))
-# directory of .o files from prog-objs notation
-host-objdirs += $(dir $(foreach f,$(host-cmulti), $($(f)-objs)))
-# directory of .o files from prog-cxxobjs notation
-host-objdirs += $(dir $(foreach f,$(host-cxxmulti), $($(f)-cxxobjs)))
+# hostprogs-y := tools/build may have been specified.
+# Retrieve also directory of .o files from prog-objs or prog-cxxobjs notation
+host-objdirs := $(dir $(__hostprogs) $(host-cobjs) $(host-cxxobjs))
host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs))))
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 0/5] kbuild: Clean-up and bug fixes of scripts/Makefile.host
2014-07-16 7:12 [PATCH v3 0/5] kbuild: Clean-up and bug fixes of scripts/Makefile.host Masahiro Yamada
` (4 preceding siblings ...)
2014-07-16 7:12 ` [PATCH v3 5/5] kbuild: clean-up and bug fix of scripts/Makefile.host Masahiro Yamada
@ 2014-07-16 15:29 ` Michal Marek
5 siblings, 0 replies; 7+ messages in thread
From: Michal Marek @ 2014-07-16 15:29 UTC (permalink / raw)
To: Masahiro Yamada, linux-kbuild; +Cc: Sam Ravnborg
On 2014-07-16 09:12, Masahiro Yamada wrote:
> Masahiro Yamada (5):
> kbuild: fix a typo in scripts/Makefile.host
> kbuild: fix a bug of C++ host program handling
> kbuild: drop shared library support from Makefile.host
> kbuild: clean up scripts/Makefile.host
> kbuild: clean-up and bug fix of scripts/Makefile.host
>
> Documentation/kbuild/makefiles.txt | 39 +++++-------------------
> scripts/Makefile.host | 61 ++++++--------------------------------
> 2 files changed, 17 insertions(+), 83 deletions(-)
Applied to kbuild.git#kbuild, thanks!
Michal
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-07-16 15:29 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-16 7:12 [PATCH v3 0/5] kbuild: Clean-up and bug fixes of scripts/Makefile.host Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 1/5] kbuild: fix a typo in scripts/Makefile.host Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 2/5] kbuild: fix a bug of C++ host program handling Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 3/5] kbuild: drop shared library support from Makefile.host Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 4/5] kbuild: clean up scripts/Makefile.host Masahiro Yamada
2014-07-16 7:12 ` [PATCH v3 5/5] kbuild: clean-up and bug fix of scripts/Makefile.host Masahiro Yamada
2014-07-16 15:29 ` [PATCH v3 0/5] kbuild: Clean-up and bug fixes " Michal Marek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox