diff mbox series

[1/2] package/rust: use host libraries from HOST_DIR

Message ID 20240229131108.363533-1-romain.naour@smile.fr
State Superseded
Headers show
Series [1/2] package/rust: use host libraries from HOST_DIR | expand

Commit Message

Romain Naour Feb. 29, 2024, 1:11 p.m. UTC
host-rust package depends on several host packages to provide tools and
libraries but it doesn't take into account HOST_DIR while building rustc
compiler. Indeed, rustc needs zlib and fail to link if zlib is not
installed on the host.

  error: could not compile `rustc_driver` (lib) due to previous error

If zlib is installed on the host, we can notice it with ldd tool (while
it should be linked with the one provided by Buildroot host-zlib).

  ldd [...]TestRust/host/bin/rustc
  libz.so.1 => /lib64/libz.so.1

Provide HOST_LDFLAGS using llvm.ldflags in config.toml.
(HOST_LDFLAGS provide -L$(HOST_DIR)/lib -Wl,-rpath,$(HOST_DIR)/lib)

With that fixed, rustc_driver link with libz from HOST_DIR but the
host-rust build still fail later due to another issue.

  error: could not compile `rustdoc-tool` (bin "rustdoc_tool_binary") due to previous error

Fixes:
https://gitlab.com/buildroot.org/buildroot/-/jobs/6256881545
http://autobuild.buildroot.org/results/a6b/a6b28783f29e6b729824bf42679a62f72ad5bee0

Signed-off-by: Romain Naour <romain.naour@smile.fr>
---
 package/rust/rust.mk | 1 +
 1 file changed, 1 insertion(+)

Comments

Yann E. MORIN Feb. 29, 2024, 1:35 p.m. UTC | #1
romain, All,

On 2024-02-29 14:11 +0100, Romain Naour spake thusly:
> host-rust package depends on several host packages to provide tools and
> libraries but it doesn't take into account HOST_DIR while building rustc
> compiler. Indeed, rustc needs zlib and fail to link if zlib is not
> installed on the host.
> 
>   error: could not compile `rustc_driver` (lib) due to previous error
> 
> If zlib is installed on the host, we can notice it with ldd tool (while
> it should be linked with the one provided by Buildroot host-zlib).
> 
>   ldd [...]TestRust/host/bin/rustc
>   libz.so.1 => /lib64/libz.so.1
> 
> Provide HOST_LDFLAGS using llvm.ldflags in config.toml.
> (HOST_LDFLAGS provide -L$(HOST_DIR)/lib -Wl,-rpath,$(HOST_DIR)/lib)
> 
> With that fixed, rustc_driver link with libz from HOST_DIR but the
> host-rust build still fail later due to another issue.
> 
>   error: could not compile `rustdoc-tool` (bin "rustdoc_tool_binary") due to previous error
> 
> Fixes:
> https://gitlab.com/buildroot.org/buildroot/-/jobs/6256881545
> http://autobuild.buildroot.org/results/a6b/a6b28783f29e6b729824bf42679a62f72ad5bee0
> 
> Signed-off-by: Romain Naour <romain.naour@smile.fr>
> ---
>  package/rust/rust.mk | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/package/rust/rust.mk b/package/rust/rust.mk
> index f7a5c0fcd5..c464e77f4f 100644
> --- a/package/rust/rust.mk
> +++ b/package/rust/rust.mk
> @@ -64,6 +64,7 @@ define HOST_RUST_CONFIGURE_CMDS
>  		echo 'cc = "$(TARGET_CROSS)gcc"'; \
>  		echo '[llvm]'; \
>  		echo 'ninja = false'; \
> +		echo 'ldflags = "$(HOST_LDFLAGS)"'; \

But then, we would also need to add host-zlib to
HOST_RUST_DEPENDENCIES, no?

Regards,
Yann E. MORIN.

>  	) > $(@D)/config.toml
>  endef
>  
> -- 
> 2.43.2
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
Romain Naour Feb. 29, 2024, 1:43 p.m. UTC | #2
Le 29/02/2024 à 14:35, yann.morin@orange.com a écrit :
> romain, All,
> 
> On 2024-02-29 14:11 +0100, Romain Naour spake thusly:
>> host-rust package depends on several host packages to provide tools and
>> libraries but it doesn't take into account HOST_DIR while building rustc
>> compiler. Indeed, rustc needs zlib and fail to link if zlib is not
>> installed on the host.
>>
>>   error: could not compile `rustc_driver` (lib) due to previous error
>>
>> If zlib is installed on the host, we can notice it with ldd tool (while
>> it should be linked with the one provided by Buildroot host-zlib).
>>
>>   ldd [...]TestRust/host/bin/rustc
>>   libz.so.1 => /lib64/libz.so.1
>>
>> Provide HOST_LDFLAGS using llvm.ldflags in config.toml.
>> (HOST_LDFLAGS provide -L$(HOST_DIR)/lib -Wl,-rpath,$(HOST_DIR)/lib)
>>
>> With that fixed, rustc_driver link with libz from HOST_DIR but the
>> host-rust build still fail later due to another issue.
>>
>>   error: could not compile `rustdoc-tool` (bin "rustdoc_tool_binary") due to previous error
>>
>> Fixes:
>> https://gitlab.com/buildroot.org/buildroot/-/jobs/6256881545
>> http://autobuild.buildroot.org/results/a6b/a6b28783f29e6b729824bf42679a62f72ad5bee0
>>
>> Signed-off-by: Romain Naour <romain.naour@smile.fr>
>> ---
>>  package/rust/rust.mk | 1 +
>>  1 file changed, 1 insertion(+)
>>
>> diff --git a/package/rust/rust.mk b/package/rust/rust.mk
>> index f7a5c0fcd5..c464e77f4f 100644
>> --- a/package/rust/rust.mk
>> +++ b/package/rust/rust.mk
>> @@ -64,6 +64,7 @@ define HOST_RUST_CONFIGURE_CMDS
>>  		echo 'cc = "$(TARGET_CROSS)gcc"'; \
>>  		echo '[llvm]'; \
>>  		echo 'ninja = false'; \
>> +		echo 'ldflags = "$(HOST_LDFLAGS)"'; \
> 
> But then, we would also need to add host-zlib to
> HOST_RUST_DEPENDENCIES, no?

Indeed but in practice host-zlib is already an "indirect" dependency of
host-rust due to host-openssl (host-libopenssl) dependency.

  HOST_LIBOPENSSL_DEPENDENCIES = host-zlib

I noticed the missing dependency but forgot to add it in HOST_RUST_DEPENDENCIES.

Best regards,
Romain


> 
> Regards,
> Yann E. MORIN.
> 
>>  	) > $(@D)/config.toml
>>  endef
>>  
>> -- 
>> 2.43.2
>>
>> _______________________________________________
>> buildroot mailing list
>> buildroot@buildroot.org
>> https://lists.buildroot.org/mailman/listinfo/buildroot
>
Yann E. MORIN Feb. 29, 2024, 7:22 p.m. UTC | #3
Romain, All,

On 2024-02-29 14:43 +0100, Romain Naour spake thusly:
> Le 29/02/2024 à 14:35, yann.morin@orange.com a écrit :
> > On 2024-02-29 14:11 +0100, Romain Naour spake thusly:
> >> host-rust package depends on several host packages to provide tools and
> >> libraries but it doesn't take into account HOST_DIR while building rustc
> >> compiler. Indeed, rustc needs zlib and fail to link if zlib is not
> >> installed on the host.
[--SNIP--]
> > But then, we would also need to add host-zlib to
> > HOST_RUST_DEPENDENCIES, no?
> Indeed but in practice host-zlib is already an "indirect" dependency of
> host-rust due to host-openssl (host-libopenssl) dependency.

When a package has a dependency on a library for itself, we must add an
explicit dependency in that package, even if it is transitively brought
by another, like is the case here. So we do want that host-rust depends
on host-zlib explicitly.

>   HOST_LIBOPENSSL_DEPENDENCIES = host-zlib
> 
> I noticed the missing dependency but forgot to add it in HOST_RUST_DEPENDENCIES.

Mark this patch as Changes-requested, then! ;-)

Regards,
Yann E. MORIN.
diff mbox series

Patch

diff --git a/package/rust/rust.mk b/package/rust/rust.mk
index f7a5c0fcd5..c464e77f4f 100644
--- a/package/rust/rust.mk
+++ b/package/rust/rust.mk
@@ -64,6 +64,7 @@  define HOST_RUST_CONFIGURE_CMDS
 		echo 'cc = "$(TARGET_CROSS)gcc"'; \
 		echo '[llvm]'; \
 		echo 'ninja = false'; \
+		echo 'ldflags = "$(HOST_LDFLAGS)"'; \
 	) > $(@D)/config.toml
 endef