public inbox for linux-kbuild@vger.kernel.org
 help / color / mirror / Atom feed
* [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