diff mbox

[v2] tags: honor COMPILED_SOURCE with apart output directory

Message ID 1481819733-3002-1-git-send-email-robert.jarzmik@free.fr (mailing list archive)
State New, archived
Headers show

Commit Message

Robert Jarzmik Dec. 15, 2016, 4:35 p.m. UTC
When the kernel is compiled with an "O=" argument, the object files are
not necessarily in the source tree, and more probably in another tree.

In this situation, the current used check doesn't work, and
COMPILED_SOURCE tags is broken with O= builds.

This patch fixes it by looking for object files both in source tree and
potential destination tree.

It was verified that in the case of O= usage, the current directory is
the build tree, ie. the tree referenced by O=xxx, and j is the source
tree path concatenated with relative path of the object to the source
tree root, hence the simple expression to compute "k" as the built
object.

Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
---
Since v1: amended k expression, Marek's comments
---
 scripts/tags.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Robert Jarzmik Jan. 23, 2017, 6:22 a.m. UTC | #1
Robert Jarzmik <robert.jarzmik@free.fr> writes:

> When the kernel is compiled with an "O=" argument, the object files are
> not necessarily in the source tree, and more probably in another tree.
>
> In this situation, the current used check doesn't work, and
> COMPILED_SOURCE tags is broken with O= builds.
>
> This patch fixes it by looking for object files both in source tree and
> potential destination tree.
>
> It was verified that in the case of O= usage, the current directory is
> the build tree, ie. the tree referenced by O=xxx, and j is the source
> tree path concatenated with relative path of the object to the source
> tree root, hence the simple expression to compute "k" as the built
> object.
>
> Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
> ---
> Since v1: amended k expression, Marek's comments
Hi Marek,

Is this version good for you ?

> ---
>  scripts/tags.sh | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/tags.sh b/scripts/tags.sh
> index a2ff3388e5ea..35cb64d5211c 100755
> --- a/scripts/tags.sh
> +++ b/scripts/tags.sh
> @@ -106,7 +106,8 @@ all_compiled_sources()
>  		case "$i" in
>  			*.[cS])
>  				j=${i/\.[cS]/\.o}
> -				if [ -e $j ]; then
> +				k="${j#$tree}"
> +				if [ -e $j -o -e "$k" ]; then
>  					echo $i
>  				fi
>  				;;

Cheers.
Robert Jarzmik Feb. 14, 2017, 7:33 a.m. UTC | #2
Robert Jarzmik <robert.jarzmik@free.fr> writes:

> Robert Jarzmik <robert.jarzmik@free.fr> writes:
>> Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
>> ---
>> Since v1: amended k expression, Marek's comments
> Hi Marek,
>
> Is this version good for you ?

Marek, could you take a look please ?

--
Robert
>> ---
>>  scripts/tags.sh | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/scripts/tags.sh b/scripts/tags.sh
>> index a2ff3388e5ea..35cb64d5211c 100755
>> --- a/scripts/tags.sh
>> +++ b/scripts/tags.sh
>> @@ -106,7 +106,8 @@ all_compiled_sources()
>>  		case "$i" in
>>  			*.[cS])
>>  				j=${i/\.[cS]/\.o}
>> -				if [ -e $j ]; then
>> +				k="${j#$tree}"
>> +				if [ -e $j -o -e "$k" ]; then
>>  					echo $i
>>  				fi
>>  				;;
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Masahiro Yamada April 24, 2017, 6:06 p.m. UTC | #3
Hi Robert,



2016-12-16 1:35 GMT+09:00 Robert Jarzmik <robert.jarzmik@free.fr>:
> When the kernel is compiled with an "O=" argument, the object files are
> not necessarily in the source tree, and more probably in another tree.

Always in objtree.


> In this situation, the current used check doesn't work, and
> COMPILED_SOURCE tags is broken with O= builds.
>
> This patch fixes it by looking for object files both in source tree and
> potential destination tree.
>
> It was verified that in the case of O= usage, the current directory is
> the build tree, ie. the tree referenced by O=xxx, and j is the source
> tree path concatenated with relative path of the object to the source
> tree root, hence the simple expression to compute "k" as the built
> object.
>
> Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
> ---
> Since v1: amended k expression, Marek's comments
> ---
>  scripts/tags.sh | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/tags.sh b/scripts/tags.sh
> index a2ff3388e5ea..35cb64d5211c 100755
> --- a/scripts/tags.sh
> +++ b/scripts/tags.sh
> @@ -106,7 +106,8 @@ all_compiled_sources()
>                 case "$i" in
>                         *.[cS])
>                                 j=${i/\.[cS]/\.o}
> -                               if [ -e $j ]; then
> +                               k="${j#$tree}"
> +                               if [ -e $j -o -e "$k" ]; then


Do we need to check both srctree and objtree?
I think checking objtree (after $tree is ripped off) is enough.
Robert Jarzmik April 25, 2017, 8:07 p.m. UTC | #4
Masahiro Yamada <yamada.masahiro@socionext.com> writes:

> Hi Robert,
>> diff --git a/scripts/tags.sh b/scripts/tags.sh
>> index a2ff3388e5ea..35cb64d5211c 100755
>> --- a/scripts/tags.sh
>> +++ b/scripts/tags.sh
>> @@ -106,7 +106,8 @@ all_compiled_sources()
>>                 case "$i" in
>>                         *.[cS])
>>                                 j=${i/\.[cS]/\.o}
>> -                               if [ -e $j ]; then
>> +                               k="${j#$tree}"
>> +                               if [ -e $j -o -e "$k" ]; then
>
>
> Do we need to check both srctree and objtree?
> I think checking objtree (after $tree is ripped off) is enough.

If I remember correctly, as this goes back a couple of monthes when I made the
tests of this patch, the srctree is checked for the case when the kernel is
compiled without O=, and objtree for the case with O=.

Cheers.
Masahiro Yamada April 30, 2017, 2:53 p.m. UTC | #5
Hi Robert,

2017-04-26 5:07 GMT+09:00 Robert Jarzmik <robert.jarzmik@free.fr>:
> Masahiro Yamada <yamada.masahiro@socionext.com> writes:
>
>> Hi Robert,
>>> diff --git a/scripts/tags.sh b/scripts/tags.sh
>>> index a2ff3388e5ea..35cb64d5211c 100755
>>> --- a/scripts/tags.sh
>>> +++ b/scripts/tags.sh
>>> @@ -106,7 +106,8 @@ all_compiled_sources()
>>>                 case "$i" in
>>>                         *.[cS])
>>>                                 j=${i/\.[cS]/\.o}
>>> -                               if [ -e $j ]; then
>>> +                               k="${j#$tree}"
>>> +                               if [ -e $j -o -e "$k" ]; then
>>
>>
>> Do we need to check both srctree and objtree?
>> I think checking objtree (after $tree is ripped off) is enough.
>
> If I remember correctly, as this goes back a couple of monthes when I made the
> tests of this patch, the srctree is checked for the case when the kernel is
> compiled without O=, and objtree for the case with O=.


I thought of this too, but if O= is given, objects in srctree
should not be checked.

For example, the kernel may be compiled for ARCH=arm with O= first,
then for ARCH=x86 without O= second.

If we include objects from both trees, the generated tag file
will be a mixture of arm and x86.
Robert Jarzmik May 4, 2017, 6:29 a.m. UTC | #6
Masahiro Yamada <yamada.masahiro@socionext.com> writes:

> Hi Robert,
>
> 2017-04-26 5:07 GMT+09:00 Robert Jarzmik <robert.jarzmik@free.fr>:
>> Masahiro Yamada <yamada.masahiro@socionext.com> writes:
>>
>>> Hi Robert,
>>>> diff --git a/scripts/tags.sh b/scripts/tags.sh
>>>> index a2ff3388e5ea..35cb64d5211c 100755
>>>> --- a/scripts/tags.sh
>>>> +++ b/scripts/tags.sh
>>>> @@ -106,7 +106,8 @@ all_compiled_sources()
>>>>                 case "$i" in
>>>>                         *.[cS])
>>>>                                 j=${i/\.[cS]/\.o}
>>>> -                               if [ -e $j ]; then
>>>> +                               k="${j#$tree}"
>>>> +                               if [ -e $j -o -e "$k" ]; then
>>>
>>>
>>> Do we need to check both srctree and objtree?
>>> I think checking objtree (after $tree is ripped off) is enough.
>>
>> If I remember correctly, as this goes back a couple of monthes when I made the
>> tests of this patch, the srctree is checked for the case when the kernel is
>> compiled without O=, and objtree for the case with O=.
>
>
> I thought of this too, but if O= is given, objects in srctree
> should not be checked.
>
> For example, the kernel may be compiled for ARCH=arm with O= first,
> then for ARCH=x86 without O= second.
>
> If we include objects from both trees, the generated tag file
> will be a mixture of arm and x86.
That's true, but is this case worth an additional test for this case, ie. is it
a case anybody uses ? Given that that this tags generation never worked for out
of tree builds, I was thinking it wasn't worth a :
   [[ (-z $O -a -e $j) || (-n $O -a -e $k) ]];

Cheers.
diff mbox

Patch

diff --git a/scripts/tags.sh b/scripts/tags.sh
index a2ff3388e5ea..35cb64d5211c 100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
@@ -106,7 +106,8 @@  all_compiled_sources()
 		case "$i" in
 			*.[cS])
 				j=${i/\.[cS]/\.o}
-				if [ -e $j ]; then
+				k="${j#$tree}"
+				if [ -e $j -o -e "$k" ]; then
 					echo $i
 				fi
 				;;