Hi Giulio, On 10/21/20 1:42 PM, Giulio Benetti wrote: > On 10/21/20 1:18 PM, Bastian Krause wrote: >> >> Hi Giulio, >> >> On 10/21/20 12:46 PM, Giulio Benetti wrote: >>> On 10/21/20 12:28 PM, Bastian Krause wrote: >>>> When cross compiling rpcgen is compiled with the cross compiler >>>> although >>>> it is executed during compile time only. This leads to errors like: >>>> >>>> ../../tools/rpcgen/rpcgen -l -o mount_clnt.c mount.x >>>> ../../tools/rpcgen/rpcgen -c -i 0 -o mount_xdr.c mount.x >>>> ../../tools/rpcgen/rpcgen -h -o mount.h mount.x >>>> /lib/ld-linux-armhf.so.3: No such file or directory >>>> /lib/ld-linux-armhf.so.3: No such file or directory >>>> /lib/ld-linux-armhf.so.3: No such file or directory >>> >>> Can you please provide how you reach this situation? >> >> Sure, see below [1]. > > Very difficult to me to reproduce, anyway I've got the point now. > >>> >>>> Since e61775d1 ("rpcgen: bump to latest version") rpcgen is compiled >>>> with the target compiler, prior to that it was correctly compiled with >>>> the host compiler. Fix that by using $(CC_FOR_BUILD) as CC >>>> explicitly as >>>> it was before. >>>> >>>> buildroot works around this by compiling a host version first, then a >>>> target version --with-rpcgen=$(HOST_DIR)/bin/rpcgen [1]. That does not >>>> look like it is intended by nfs-utils. >>> >>> I find it correct since rpcgen is also a utility to be installed to >>> target, so it should not be explictly built only for target and >> >> I was not aware of this. Having a host package does not sound so bad >> now :) > > yes :-) > >>> >>>> [1] >>>> https://git.busybox.net/buildroot/tree/package/nfs-utils/nfs-utils.mk#n25 >>>> >>>> >>>> Signed-off-by: Bastian Krause <bst@xxxxxxxxxxxxxx> >>>> --- >>>> tools/rpcgen/Makefile.am | 2 ++ >>>> 1 file changed, 2 insertions(+) >>>> >>>> diff --git a/tools/rpcgen/Makefile.am b/tools/rpcgen/Makefile.am >>>> index 457cd507..f122cd9d 100644 >>>> --- a/tools/rpcgen/Makefile.am >>>> +++ b/tools/rpcgen/Makefile.am >>>> @@ -1,5 +1,7 @@ >>>> CLEANFILES = *~ >>>> +CC=$(CC_FOR_BUILD) >>>> + >>> >>> this is what you're forcing to. To cross compile it we need both rpcgen >>> for host and target, this way it will be built for target only. >> >> This is obviously wrong then. >> >>> Another option I can suggest is to assign CC_FOR_BUILD to CC on caller >>> Makefile only during target building and not during host building and >>> this should be automatically deduced by Makefile itself and also >>> Makefile then, when calls rpcgen should know which rpcgen to use(the >>> host one). That would be one solution IMHO. >>> >>> What do you think about it? >> >> I am not sure I understand this. Would this mean rpcgen is compiled >> twice, once with the host compiler and once with the target compiler? > > Yes, that I think should happen when cross-compiling because: > - we need host rpcgen for building for target > - we need target rpcgen to be installed to target Agreed. >> Without the need of a dedicated host package? That would be ideal, but I >> have currently no idea how to achieve this. > > It would be a not so little effort at the moment, so maybe can we keep > it as is and you use the same work around I've used in Buildroot? Yes, I'll use that. > But in the meanwhile feel free to find a solution like this, that way > when cross-compiling we can remove "--with-rpcgen=" that should be > implicit. In case I have some spare time, I'll look into this. Thanks! Regards, Bastian -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |