Re: [PATCH v7 1/6] Shared library support

2016-05-05 Thread Emese Revfy
On Tue, 3 May 2016 23:25:27 +0200
Emese Revfy  wrote:

> > Do you need to change both the top Makefile and Makefile.clean
> > for belt-and-braces cleaning?
> 
> It doesn't delete the *.so files without the hunk from the top Makefile. 
> The mrproper and distclean targets remove them with this patch:
> https://github.com/ephox-gcc-plugins/gcc-plugins_linux-next/commit/f23b7eb247ccc9f1007e53313af343980dd52591
> But I think this isn't the best solution much like doing it from the top 
> Makefile.

Do you think this patch will be good enough? In this case I can resend the 
patch set.

-- 
Emese


Re: [PATCH v7 1/6] Shared library support

2016-05-05 Thread Emese Revfy
On Tue, 3 May 2016 23:25:27 +0200
Emese Revfy  wrote:

> > Do you need to change both the top Makefile and Makefile.clean
> > for belt-and-braces cleaning?
> 
> It doesn't delete the *.so files without the hunk from the top Makefile. 
> The mrproper and distclean targets remove them with this patch:
> https://github.com/ephox-gcc-plugins/gcc-plugins_linux-next/commit/f23b7eb247ccc9f1007e53313af343980dd52591
> But I think this isn't the best solution much like doing it from the top 
> Makefile.

Do you think this patch will be good enough? In this case I can resend the 
patch set.

-- 
Emese


Re: [PATCH v7 1/6] Shared library support

2016-05-05 Thread Emese Revfy
On Wed, 4 May 2016 13:09:05 +0900
Masahiro Yamada  wrote:

> Hi Emese,
> 
> 
> 2016-05-04 6:29 GMT+09:00 Emese Revfy :
> > On Tue, 3 May 2016 11:00:56 +0900
> > Masahiro Yamada  wrote:
> >
> > Hi,
> >
> >> # Compile .c file, create position independent .o file
> >> # host-cxxshobjs -> .o
> >> quiet_cmd_host-cxxshobjs = HOSTCXX -fPIC $@
> >>   cmd_host-cxxshobjs = $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $<
> >>$(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
> >>$(call if_changed_dep,host-cxxshobjs)
> >>
> >>
> >>
> >>
> >> We generally use HOSTCC to compile *.c files,
> >> and HOSTCXX to compile *.cc files.
> >>
> >>
> >> But, here, you mention to use HOSTCXX to compile .c files
> >> such as cyc_complexity_plugin.c, sancov_plugin.c, etc.
> >>
> >> This is not straight-forward.  It is worthwhile to comment the reason.
> >
> > I wrote a comment about it here:
> > https://github.com/ephox-gcc-plugins/gcc-plugins_linux-next/commit/74f6343a7f13c071e00c417332051e25f15009ea
> >
> 
> 
> 
> +# Note that plugin capable gcc versions can be either C or C++ based
> +# therefore plugin source files have to be compilable in both C and C++ mode.
> +# This is why a C++ compiler is invoked on a .c file.
> 
> Thanks.
> 
> Please let me confirm if I understood correctly.
> 
> 
> We generally have to do something with the name-space conflict
> (with 'extern "C"') in the mixture of C/C++.
> 
> Depending on the GCC version,
> GCC-plugin-related libraries could be built for C or C++.
> 
> So, we need to check the GCC version and choose correct one
> from C or C++.

The plugin source files have to be compilable by both versions
because gcc versions 4.5 and 4.6 are compiled by a C compiler,
gcc-4.7 can be compiled by a C or a C++ compiler,
and versions 4.8+ can only be compiled by a C++ compiler.

-- 
Emese


Re: [PATCH v7 1/6] Shared library support

2016-05-05 Thread Emese Revfy
On Wed, 4 May 2016 13:09:05 +0900
Masahiro Yamada  wrote:

> Hi Emese,
> 
> 
> 2016-05-04 6:29 GMT+09:00 Emese Revfy :
> > On Tue, 3 May 2016 11:00:56 +0900
> > Masahiro Yamada  wrote:
> >
> > Hi,
> >
> >> # Compile .c file, create position independent .o file
> >> # host-cxxshobjs -> .o
> >> quiet_cmd_host-cxxshobjs = HOSTCXX -fPIC $@
> >>   cmd_host-cxxshobjs = $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $<
> >>$(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
> >>$(call if_changed_dep,host-cxxshobjs)
> >>
> >>
> >>
> >>
> >> We generally use HOSTCC to compile *.c files,
> >> and HOSTCXX to compile *.cc files.
> >>
> >>
> >> But, here, you mention to use HOSTCXX to compile .c files
> >> such as cyc_complexity_plugin.c, sancov_plugin.c, etc.
> >>
> >> This is not straight-forward.  It is worthwhile to comment the reason.
> >
> > I wrote a comment about it here:
> > https://github.com/ephox-gcc-plugins/gcc-plugins_linux-next/commit/74f6343a7f13c071e00c417332051e25f15009ea
> >
> 
> 
> 
> +# Note that plugin capable gcc versions can be either C or C++ based
> +# therefore plugin source files have to be compilable in both C and C++ mode.
> +# This is why a C++ compiler is invoked on a .c file.
> 
> Thanks.
> 
> Please let me confirm if I understood correctly.
> 
> 
> We generally have to do something with the name-space conflict
> (with 'extern "C"') in the mixture of C/C++.
> 
> Depending on the GCC version,
> GCC-plugin-related libraries could be built for C or C++.
> 
> So, we need to check the GCC version and choose correct one
> from C or C++.

The plugin source files have to be compilable by both versions
because gcc versions 4.5 and 4.6 are compiled by a C compiler,
gcc-4.7 can be compiled by a C or a C++ compiler,
and versions 4.8+ can only be compiled by a C++ compiler.

-- 
Emese


Re: [PATCH v7 1/6] Shared library support

2016-05-03 Thread Masahiro Yamada
Hi Emese,


2016-05-04 6:29 GMT+09:00 Emese Revfy :
> On Tue, 3 May 2016 11:00:56 +0900
> Masahiro Yamada  wrote:
>
> Hi,
>
>> # Compile .c file, create position independent .o file
>> # host-cxxshobjs -> .o
>> quiet_cmd_host-cxxshobjs = HOSTCXX -fPIC $@
>>   cmd_host-cxxshobjs = $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $<
>>$(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
>>$(call if_changed_dep,host-cxxshobjs)
>>
>>
>>
>>
>> We generally use HOSTCC to compile *.c files,
>> and HOSTCXX to compile *.cc files.
>>
>>
>> But, here, you mention to use HOSTCXX to compile .c files
>> such as cyc_complexity_plugin.c, sancov_plugin.c, etc.
>>
>> This is not straight-forward.  It is worthwhile to comment the reason.
>
> I wrote a comment about it here:
> https://github.com/ephox-gcc-plugins/gcc-plugins_linux-next/commit/74f6343a7f13c071e00c417332051e25f15009ea
>



+# Note that plugin capable gcc versions can be either C or C++ based
+# therefore plugin source files have to be compilable in both C and C++ mode.
+# This is why a C++ compiler is invoked on a .c file.

Thanks.

Please let me confirm if I understood correctly.


We generally have to do something with the name-space conflict
(with 'extern "C"') in the mixture of C/C++.

Depending on the GCC version,
GCC-plugin-related libraries could be built for C or C++.

So, we need to check the GCC version and choose correct one
from C or C++.


Am I right?


-- 
Best Regards
Masahiro Yamada


Re: [PATCH v7 1/6] Shared library support

2016-05-03 Thread Masahiro Yamada
Hi Emese,


2016-05-04 6:29 GMT+09:00 Emese Revfy :
> On Tue, 3 May 2016 11:00:56 +0900
> Masahiro Yamada  wrote:
>
> Hi,
>
>> # Compile .c file, create position independent .o file
>> # host-cxxshobjs -> .o
>> quiet_cmd_host-cxxshobjs = HOSTCXX -fPIC $@
>>   cmd_host-cxxshobjs = $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $<
>>$(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
>>$(call if_changed_dep,host-cxxshobjs)
>>
>>
>>
>>
>> We generally use HOSTCC to compile *.c files,
>> and HOSTCXX to compile *.cc files.
>>
>>
>> But, here, you mention to use HOSTCXX to compile .c files
>> such as cyc_complexity_plugin.c, sancov_plugin.c, etc.
>>
>> This is not straight-forward.  It is worthwhile to comment the reason.
>
> I wrote a comment about it here:
> https://github.com/ephox-gcc-plugins/gcc-plugins_linux-next/commit/74f6343a7f13c071e00c417332051e25f15009ea
>



+# Note that plugin capable gcc versions can be either C or C++ based
+# therefore plugin source files have to be compilable in both C and C++ mode.
+# This is why a C++ compiler is invoked on a .c file.

Thanks.

Please let me confirm if I understood correctly.


We generally have to do something with the name-space conflict
(with 'extern "C"') in the mixture of C/C++.

Depending on the GCC version,
GCC-plugin-related libraries could be built for C or C++.

So, we need to check the GCC version and choose correct one
from C or C++.


Am I right?


-- 
Best Regards
Masahiro Yamada


Re: [PATCH v7 1/6] Shared library support

2016-05-03 Thread Emese Revfy
On Tue, 3 May 2016 11:00:56 +0900
Masahiro Yamada  wrote:

Hi,

> # Compile .c file, create position independent .o file
> # host-cxxshobjs -> .o
> quiet_cmd_host-cxxshobjs = HOSTCXX -fPIC $@
>   cmd_host-cxxshobjs = $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $<
>$(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
>$(call if_changed_dep,host-cxxshobjs)
> 
> 
> 
> 
> We generally use HOSTCC to compile *.c files,
> and HOSTCXX to compile *.cc files.
> 
> 
> But, here, you mention to use HOSTCXX to compile .c files
> such as cyc_complexity_plugin.c, sancov_plugin.c, etc.
> 
> This is not straight-forward.  It is worthwhile to comment the reason.

I wrote a comment about it here:
https://github.com/ephox-gcc-plugins/gcc-plugins_linux-next/commit/74f6343a7f13c071e00c417332051e25f15009ea

-- 
Emese


Re: [PATCH v7 1/6] Shared library support

2016-05-03 Thread Emese Revfy
On Tue, 3 May 2016 11:00:56 +0900
Masahiro Yamada  wrote:

Hi,

> # Compile .c file, create position independent .o file
> # host-cxxshobjs -> .o
> quiet_cmd_host-cxxshobjs = HOSTCXX -fPIC $@
>   cmd_host-cxxshobjs = $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $<
>$(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
>$(call if_changed_dep,host-cxxshobjs)
> 
> 
> 
> 
> We generally use HOSTCC to compile *.c files,
> and HOSTCXX to compile *.cc files.
> 
> 
> But, here, you mention to use HOSTCXX to compile .c files
> such as cyc_complexity_plugin.c, sancov_plugin.c, etc.
> 
> This is not straight-forward.  It is worthwhile to comment the reason.

I wrote a comment about it here:
https://github.com/ephox-gcc-plugins/gcc-plugins_linux-next/commit/74f6343a7f13c071e00c417332051e25f15009ea

-- 
Emese


Re: [PATCH v7 1/6] Shared library support

2016-05-03 Thread Emese Revfy
On Mon, 2 May 2016 14:03:00 +0900
Masahiro Yamada  wrote:

Hi,

> > diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
> > index 55c96cb..e4e88ab 100644
> > --- a/scripts/Makefile.clean
> > +++ b/scripts/Makefile.clean
> > @@ -38,7 +38,8 @@ subdir-ymn:= $(addprefix $(obj)/,$(subdir-ymn))
> >  __clean-files  := $(extra-y) $(extra-m) $(extra-)   \
> >$(always) $(targets) $(clean-files)   \
> >$(host-progs) \
> > -  $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
> > +  $(hostprogs-y) $(hostprogs-m) $(hostprogs-) \
> > +  $(hostlibs-y) $(hostlibs-m) $(hostlibs-)
> 
> $(hostcxxlibs-y)$(hostcxxlibs-m) is missing here.
> 
> 
> BTW, are you planning to support hostlibs without .so extention in the future?
> 
> 
> You are changing the top Makefile to clean with "*.so" pattern rule.
> 
> Do you need to change both the top Makefile and Makefile.clean
> for belt-and-braces cleaning?

It doesn't delete the *.so files without the hunk from the top Makefile. 
The mrproper and distclean targets remove them with this patch:
https://github.com/ephox-gcc-plugins/gcc-plugins_linux-next/commit/f23b7eb247ccc9f1007e53313af343980dd52591
But I think this isn't the best solution much like doing it from the top 
Makefile.

-- 
Emese


Re: [PATCH v7 1/6] Shared library support

2016-05-03 Thread Emese Revfy
On Mon, 2 May 2016 14:03:00 +0900
Masahiro Yamada  wrote:

Hi,

> > diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
> > index 55c96cb..e4e88ab 100644
> > --- a/scripts/Makefile.clean
> > +++ b/scripts/Makefile.clean
> > @@ -38,7 +38,8 @@ subdir-ymn:= $(addprefix $(obj)/,$(subdir-ymn))
> >  __clean-files  := $(extra-y) $(extra-m) $(extra-)   \
> >$(always) $(targets) $(clean-files)   \
> >$(host-progs) \
> > -  $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
> > +  $(hostprogs-y) $(hostprogs-m) $(hostprogs-) \
> > +  $(hostlibs-y) $(hostlibs-m) $(hostlibs-)
> 
> $(hostcxxlibs-y)$(hostcxxlibs-m) is missing here.
> 
> 
> BTW, are you planning to support hostlibs without .so extention in the future?
> 
> 
> You are changing the top Makefile to clean with "*.so" pattern rule.
> 
> Do you need to change both the top Makefile and Makefile.clean
> for belt-and-braces cleaning?

It doesn't delete the *.so files without the hunk from the top Makefile. 
The mrproper and distclean targets remove them with this patch:
https://github.com/ephox-gcc-plugins/gcc-plugins_linux-next/commit/f23b7eb247ccc9f1007e53313af343980dd52591
But I think this isn't the best solution much like doing it from the top 
Makefile.

-- 
Emese


Re: [PATCH v7 1/6] Shared library support

2016-05-02 Thread Masahiro Yamada
Hi Emese,

2016-05-03 2:56 GMT+09:00 Emese Revfy :
> On Mon, 2 May 2016 14:03:00 +0900
> Masahiro Yamada  wrote:
>
>> In the first place,
>> I am wondering if we need to revive this documentation.
>> What this commit is only interested in *.so generation,
>> not host program support.
>
> I agree that we don't need this documentation. I'll remove it.

OK.
Also, rephrase the git-log of this patch.

This patch is almost your original code,
not reverting 62e2210798ed38928ab24841e8b4878a.



-- 
Best Regards
Masahiro Yamada


Re: [PATCH v7 1/6] Shared library support

2016-05-02 Thread Masahiro Yamada
Hi Emese,

2016-05-03 2:56 GMT+09:00 Emese Revfy :
> On Mon, 2 May 2016 14:03:00 +0900
> Masahiro Yamada  wrote:
>
>> In the first place,
>> I am wondering if we need to revive this documentation.
>> What this commit is only interested in *.so generation,
>> not host program support.
>
> I agree that we don't need this documentation. I'll remove it.

OK.
Also, rephrase the git-log of this patch.

This patch is almost your original code,
not reverting 62e2210798ed38928ab24841e8b4878a.



-- 
Best Regards
Masahiro Yamada


Re: [PATCH v7 1/6] Shared library support

2016-05-02 Thread Masahiro Yamada
Hi Emese,


2016-05-03 2:56 GMT+09:00 Emese Revfy :
> On Mon, 2 May 2016 14:03:00 +0900
> Masahiro Yamada  wrote:
>
>> In the first place,
>> I am wondering if we need to revive this documentation.
>> What this commit is only interested in *.so generation,
>> not host program support.
>
> I agree that we don't need this documentation. I'll remove it.
>
>> > @@ -124,5 +158,39 @@ 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)
>> > +
>> > +# Compile .c file, create position independent .o file
>>
>>
>> Please explain why c++ compiler should be used to compile .c files.
>>
>> This is not clear, so worth commenting.
>
> Where do you think that the C++ compiler is used above? I think HOSTCC can 
> only be C compiler.
>

Not above, but *below*.

This comment "Compile .c file, create position independent .o file"
is for the following code block.


# Compile .c file, create position independent .o file
# host-cxxshobjs -> .o
quiet_cmd_host-cxxshobjs = HOSTCXX -fPIC $@
  cmd_host-cxxshobjs = $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $<
   $(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
   $(call if_changed_dep,host-cxxshobjs)




We generally use HOSTCC to compile *.c files,
and HOSTCXX to compile *.cc files.


But, here, you mention to use HOSTCXX to compile .c files
such as cyc_complexity_plugin.c, sancov_plugin.c, etc.

This is not straight-forward.  It is worthwhile to comment the reason.


-- 
Best Regards
Masahiro Yamada


Re: [PATCH v7 1/6] Shared library support

2016-05-02 Thread Masahiro Yamada
Hi Emese,


2016-05-03 2:56 GMT+09:00 Emese Revfy :
> On Mon, 2 May 2016 14:03:00 +0900
> Masahiro Yamada  wrote:
>
>> In the first place,
>> I am wondering if we need to revive this documentation.
>> What this commit is only interested in *.so generation,
>> not host program support.
>
> I agree that we don't need this documentation. I'll remove it.
>
>> > @@ -124,5 +158,39 @@ 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)
>> > +
>> > +# Compile .c file, create position independent .o file
>>
>>
>> Please explain why c++ compiler should be used to compile .c files.
>>
>> This is not clear, so worth commenting.
>
> Where do you think that the C++ compiler is used above? I think HOSTCC can 
> only be C compiler.
>

Not above, but *below*.

This comment "Compile .c file, create position independent .o file"
is for the following code block.


# Compile .c file, create position independent .o file
# host-cxxshobjs -> .o
quiet_cmd_host-cxxshobjs = HOSTCXX -fPIC $@
  cmd_host-cxxshobjs = $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $<
   $(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
   $(call if_changed_dep,host-cxxshobjs)




We generally use HOSTCC to compile *.c files,
and HOSTCXX to compile *.cc files.


But, here, you mention to use HOSTCXX to compile .c files
such as cyc_complexity_plugin.c, sancov_plugin.c, etc.

This is not straight-forward.  It is worthwhile to comment the reason.


-- 
Best Regards
Masahiro Yamada


Re: [PATCH v7 1/6] Shared library support

2016-05-02 Thread Emese Revfy
On Mon, 2 May 2016 14:03:00 +0900
Masahiro Yamada  wrote:

> In the first place,
> I am wondering if we need to revive this documentation.
> What this commit is only interested in *.so generation,
> not host program support.

I agree that we don't need this documentation. I'll remove it.
  
> > @@ -124,5 +158,39 @@ 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)
> > +
> > +# Compile .c file, create position independent .o file
> 
> 
> Please explain why c++ compiler should be used to compile .c files.
> 
> This is not clear, so worth commenting.

Where do you think that the C++ compiler is used above? I think HOSTCC can only 
be C compiler.

-- 
Emese


Re: [PATCH v7 1/6] Shared library support

2016-05-02 Thread Emese Revfy
On Mon, 2 May 2016 14:03:00 +0900
Masahiro Yamada  wrote:

> In the first place,
> I am wondering if we need to revive this documentation.
> What this commit is only interested in *.so generation,
> not host program support.

I agree that we don't need this documentation. I'll remove it.
  
> > @@ -124,5 +158,39 @@ 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)
> > +
> > +# Compile .c file, create position independent .o file
> 
> 
> Please explain why c++ compiler should be used to compile .c files.
> 
> This is not clear, so worth commenting.

Where do you think that the C++ compiler is used above? I think HOSTCC can only 
be C compiler.

-- 
Emese


Re: [PATCH v7 1/6] Shared library support

2016-05-01 Thread Masahiro Yamada
Hi Emese,


2016-04-23 3:21 GMT+09:00 Emese Revfy :
> Infrastructure for building independent shared library targets.
> This effectively also reverts commit 62e2210798ed38928ab24841e8b4878a
> (Masahiro Yamada, kbuild: drop shared library support from Makefile.host).
>
> Signed-off-by: Emese Revfy 
> ---
>  Documentation/kbuild/makefiles.txt | 39 -
>  scripts/Makefile.build |  2 +-
>  scripts/Makefile.clean |  3 +-
>  scripts/Makefile.host  | 70 
> +-
>  4 files changed, 103 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/kbuild/makefiles.txt 
> b/Documentation/kbuild/makefiles.txt
> index 13f888a..250729b 100644
> --- a/Documentation/kbuild/makefiles.txt
> +++ b/Documentation/kbuild/makefiles.txt
> @@ -23,10 +23,11 @@ This document describes the Linux kernel Makefiles.
> === 4 Host Program support
>--- 4.1 Simple Host Program
>--- 4.2 Composite Host Programs
> -  --- 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)
> +  --- 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)
>
> === 5 Kbuild clean infrastructure
>
> @@ -643,7 +644,29 @@ Both possibilities are described in the following.
> Finally, the two .o files are linked to the executable, lxdialog.
> Note: The syntax -y is not permitted for host-programs.
>
>  4.3 Using C++ 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


Do you use this case?


> +   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.

You are supporting C++ shared libraries.

Please do not revert as is, but change the comments to make sense.


In the first place,
I am wondering if we need to revive this documentation.
What this commit is only interested in *.so generation,
not host program support.





> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -60,7 +60,7 @@ endif
>  endif
>
>  # Do not include host rules unless needed
> -ifneq ($(hostprogs-y)$(hostprogs-m),)
> +ifneq 
> ($(hostprogs-y)$(hostprogs-m)$(hostlibs-y)$(hostlibs-m)$(hostcxxlibs-y)$(hostcxxlibs-m),)
>  include scripts/Makefile.host
>  endif
>
> diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
> index 55c96cb..e4e88ab 100644
> --- a/scripts/Makefile.clean
> +++ b/scripts/Makefile.clean
> @@ -38,7 +38,8 @@ subdir-ymn:= $(addprefix $(obj)/,$(subdir-ymn))
>  __clean-files  := $(extra-y) $(extra-m) $(extra-)   \
>$(always) $(targets) $(clean-files)   \
>$(host-progs) \
> -  $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
> +  $(hostprogs-y) $(hostprogs-m) $(hostprogs-) \
> +  $(hostlibs-y) $(hostlibs-m) $(hostlibs-)

$(hostcxxlibs-y)$(hostcxxlibs-m) is missing here.


BTW, are you planning to support hostlibs without .so extention in the future?


You are changing the top Makefile to clean with "*.so" pattern rule.

Do you need to change both the top Makefile and Makefile.clean
for belt-and-braces cleaning?




>  __clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
>
> diff --git a/scripts/Makefile.host b/scripts/Makefile.host
> index 133edfa..3439bd8 100644
> --- a/scripts/Makefile.host
> +++ b/scripts/Makefile.host
> @@ -20,7 +20,25 @@
>  # 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 

Re: [PATCH v7 1/6] Shared library support

2016-05-01 Thread Masahiro Yamada
Hi Emese,


2016-04-23 3:21 GMT+09:00 Emese Revfy :
> Infrastructure for building independent shared library targets.
> This effectively also reverts commit 62e2210798ed38928ab24841e8b4878a
> (Masahiro Yamada, kbuild: drop shared library support from Makefile.host).
>
> Signed-off-by: Emese Revfy 
> ---
>  Documentation/kbuild/makefiles.txt | 39 -
>  scripts/Makefile.build |  2 +-
>  scripts/Makefile.clean |  3 +-
>  scripts/Makefile.host  | 70 
> +-
>  4 files changed, 103 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/kbuild/makefiles.txt 
> b/Documentation/kbuild/makefiles.txt
> index 13f888a..250729b 100644
> --- a/Documentation/kbuild/makefiles.txt
> +++ b/Documentation/kbuild/makefiles.txt
> @@ -23,10 +23,11 @@ This document describes the Linux kernel Makefiles.
> === 4 Host Program support
>--- 4.1 Simple Host Program
>--- 4.2 Composite Host Programs
> -  --- 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)
> +  --- 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)
>
> === 5 Kbuild clean infrastructure
>
> @@ -643,7 +644,29 @@ Both possibilities are described in the following.
> Finally, the two .o files are linked to the executable, lxdialog.
> Note: The syntax -y is not permitted for host-programs.
>
>  4.3 Using C++ 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


Do you use this case?


> +   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.

You are supporting C++ shared libraries.

Please do not revert as is, but change the comments to make sense.


In the first place,
I am wondering if we need to revive this documentation.
What this commit is only interested in *.so generation,
not host program support.





> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -60,7 +60,7 @@ endif
>  endif
>
>  # Do not include host rules unless needed
> -ifneq ($(hostprogs-y)$(hostprogs-m),)
> +ifneq 
> ($(hostprogs-y)$(hostprogs-m)$(hostlibs-y)$(hostlibs-m)$(hostcxxlibs-y)$(hostcxxlibs-m),)
>  include scripts/Makefile.host
>  endif
>
> diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
> index 55c96cb..e4e88ab 100644
> --- a/scripts/Makefile.clean
> +++ b/scripts/Makefile.clean
> @@ -38,7 +38,8 @@ subdir-ymn:= $(addprefix $(obj)/,$(subdir-ymn))
>  __clean-files  := $(extra-y) $(extra-m) $(extra-)   \
>$(always) $(targets) $(clean-files)   \
>$(host-progs) \
> -  $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
> +  $(hostprogs-y) $(hostprogs-m) $(hostprogs-) \
> +  $(hostlibs-y) $(hostlibs-m) $(hostlibs-)

$(hostcxxlibs-y)$(hostcxxlibs-m) is missing here.


BTW, are you planning to support hostlibs without .so extention in the future?


You are changing the top Makefile to clean with "*.so" pattern rule.

Do you need to change both the top Makefile and Makefile.clean
for belt-and-braces cleaning?




>  __clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
>
> diff --git a/scripts/Makefile.host b/scripts/Makefile.host
> index 133edfa..3439bd8 100644
> --- a/scripts/Makefile.host
> +++ b/scripts/Makefile.host
> @@ -20,7 +20,25 @@
>  # 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 

[PATCH v7 1/6] Shared library support

2016-04-22 Thread Emese Revfy
Infrastructure for building independent shared library targets.
This effectively also reverts commit 62e2210798ed38928ab24841e8b4878a
(Masahiro Yamada, kbuild: drop shared library support from Makefile.host).

Signed-off-by: Emese Revfy 
---
 Documentation/kbuild/makefiles.txt | 39 -
 scripts/Makefile.build |  2 +-
 scripts/Makefile.clean |  3 +-
 scripts/Makefile.host  | 70 +-
 4 files changed, 103 insertions(+), 11 deletions(-)

diff --git a/Documentation/kbuild/makefiles.txt 
b/Documentation/kbuild/makefiles.txt
index 13f888a..250729b 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -23,10 +23,11 @@ This document describes the Linux kernel Makefiles.
=== 4 Host Program support
   --- 4.1 Simple Host Program
   --- 4.2 Composite Host Programs
-  --- 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)
+  --- 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)
 
=== 5 Kbuild clean infrastructure
 
@@ -643,7 +644,29 @@ Both possibilities are described in the following.
Finally, the two .o files are linked to the executable, lxdialog.
Note: The syntax -y is not permitted for host-programs.
 
 4.3 Using C++ 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
 
kbuild offers support for host programs written in C++. This was
introduced solely to support kconfig, and is not recommended
@@ -666,7 +689,7 @@ Both possibilities are described in the following.
qconf-cxxobjs := qconf.o
qconf-objs:= check.o
 
 4.4 Controlling compiler options for host programs
+--- 4.5 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
@@ -694,7 +717,7 @@ Both possibilities are described in the following.
When linking qconf, it will be passed the extra option
"-L$(QTDIR)/lib".
 
 4.5 When host programs are actually built
+--- 4.6 When host programs are actually built
 
Kbuild will only build host-programs when they are referenced
as a prerequisite.
@@ -725,7 +748,7 @@ Both possibilities are described in the following.
This will tell kbuild to build lxdialog even if not referenced in
any rule.
 
 4.6 Using hostprogs-$(CONFIG_FOO)
+--- 4.7 Using hostprogs-$(CONFIG_FOO)
 
A typical pattern in a Kbuild file looks like this:
 
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 0d1ca5b..11602e5 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -60,7 +60,7 @@ endif
 endif
 
 # Do not include host rules unless needed
-ifneq ($(hostprogs-y)$(hostprogs-m),)
+ifneq 
($(hostprogs-y)$(hostprogs-m)$(hostlibs-y)$(hostlibs-m)$(hostcxxlibs-y)$(hostcxxlibs-m),)
 include scripts/Makefile.host
 endif
 
diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
index 55c96cb..e4e88ab 100644
--- a/scripts/Makefile.clean
+++ b/scripts/Makefile.clean
@@ -38,7 +38,8 @@ subdir-ymn:= $(addprefix $(obj)/,$(subdir-ymn))
 __clean-files  := $(extra-y) $(extra-m) $(extra-)   \
   $(always) $(targets) $(clean-files)   \
   $(host-progs) \
-  $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
+  $(hostprogs-y) $(hostprogs-m) $(hostprogs-) \
+  $(hostlibs-y) $(hostlibs-m) $(hostlibs-)
 
 __clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
 
diff --git 

[PATCH v7 1/6] Shared library support

2016-04-22 Thread Emese Revfy
Infrastructure for building independent shared library targets.
This effectively also reverts commit 62e2210798ed38928ab24841e8b4878a
(Masahiro Yamada, kbuild: drop shared library support from Makefile.host).

Signed-off-by: Emese Revfy 
---
 Documentation/kbuild/makefiles.txt | 39 -
 scripts/Makefile.build |  2 +-
 scripts/Makefile.clean |  3 +-
 scripts/Makefile.host  | 70 +-
 4 files changed, 103 insertions(+), 11 deletions(-)

diff --git a/Documentation/kbuild/makefiles.txt 
b/Documentation/kbuild/makefiles.txt
index 13f888a..250729b 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -23,10 +23,11 @@ This document describes the Linux kernel Makefiles.
=== 4 Host Program support
   --- 4.1 Simple Host Program
   --- 4.2 Composite Host Programs
-  --- 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)
+  --- 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)
 
=== 5 Kbuild clean infrastructure
 
@@ -643,7 +644,29 @@ Both possibilities are described in the following.
Finally, the two .o files are linked to the executable, lxdialog.
Note: The syntax -y is not permitted for host-programs.
 
 4.3 Using C++ 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
 
kbuild offers support for host programs written in C++. This was
introduced solely to support kconfig, and is not recommended
@@ -666,7 +689,7 @@ Both possibilities are described in the following.
qconf-cxxobjs := qconf.o
qconf-objs:= check.o
 
 4.4 Controlling compiler options for host programs
+--- 4.5 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
@@ -694,7 +717,7 @@ Both possibilities are described in the following.
When linking qconf, it will be passed the extra option
"-L$(QTDIR)/lib".
 
 4.5 When host programs are actually built
+--- 4.6 When host programs are actually built
 
Kbuild will only build host-programs when they are referenced
as a prerequisite.
@@ -725,7 +748,7 @@ Both possibilities are described in the following.
This will tell kbuild to build lxdialog even if not referenced in
any rule.
 
 4.6 Using hostprogs-$(CONFIG_FOO)
+--- 4.7 Using hostprogs-$(CONFIG_FOO)
 
A typical pattern in a Kbuild file looks like this:
 
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 0d1ca5b..11602e5 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -60,7 +60,7 @@ endif
 endif
 
 # Do not include host rules unless needed
-ifneq ($(hostprogs-y)$(hostprogs-m),)
+ifneq 
($(hostprogs-y)$(hostprogs-m)$(hostlibs-y)$(hostlibs-m)$(hostcxxlibs-y)$(hostcxxlibs-m),)
 include scripts/Makefile.host
 endif
 
diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
index 55c96cb..e4e88ab 100644
--- a/scripts/Makefile.clean
+++ b/scripts/Makefile.clean
@@ -38,7 +38,8 @@ subdir-ymn:= $(addprefix $(obj)/,$(subdir-ymn))
 __clean-files  := $(extra-y) $(extra-m) $(extra-)   \
   $(always) $(targets) $(clean-files)   \
   $(host-progs) \
-  $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
+  $(hostprogs-y) $(hostprogs-m) $(hostprogs-) \
+  $(hostlibs-y) $(hostlibs-m) $(hostlibs-)
 
 __clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
 
diff --git a/scripts/Makefile.host