* [PATCH 0/2] Few fixes for cross-compiling with Meson
@ 2025-12-02 10:48 Toon Claes
2025-12-02 10:48 ` [PATCH 1/2] meson: ignore subprojects/.wraplock Toon Claes
` (3 more replies)
0 siblings, 4 replies; 11+ messages in thread
From: Toon Claes @ 2025-12-02 10:48 UTC (permalink / raw)
To: git; +Cc: Patrick Steinhardt, Toon Claes
I was cross-compiling for s390x. And while working with Meson is very
convenient, I've found these few kinks that could be worked out.
---
Toon Claes (2):
meson: ignore subprojects/.wraplock
meson: only detect ICONV_OMITS_BOM if possible
meson.build | 2 +-
subprojects/.gitignore | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
---
base-commit: f0ef5b6d9bcc258e4cbef93839d1b7465d5212b9
change-id: 20251202-toon-cross-compile-6c44bb9c372b
^ permalink raw reply [flat|nested] 11+ messages in thread* [PATCH 1/2] meson: ignore subprojects/.wraplock 2025-12-02 10:48 [PATCH 0/2] Few fixes for cross-compiling with Meson Toon Claes @ 2025-12-02 10:48 ` Toon Claes 2025-12-02 10:48 ` [PATCH 2/2] meson: only detect ICONV_OMITS_BOM if possible Toon Claes ` (2 subsequent siblings) 3 siblings, 0 replies; 11+ messages in thread From: Toon Claes @ 2025-12-02 10:48 UTC (permalink / raw) To: git; +Cc: Patrick Steinhardt, Toon Claes When asking Meson to wrap subprojects, it generates a .wraplock file in the subprojects/ directory. Ignore this file. See also https://github.com/mesonbuild/meson/issues/14948. Signed-off-by: Toon Claes <toon@iotcl.com> --- subprojects/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/subprojects/.gitignore b/subprojects/.gitignore index 63ea916ef5..2bb68c8794 100644 --- a/subprojects/.gitignore +++ b/subprojects/.gitignore @@ -1 +1,2 @@ /*/ +.wraplock -- 2.52.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/2] meson: only detect ICONV_OMITS_BOM if possible 2025-12-02 10:48 [PATCH 0/2] Few fixes for cross-compiling with Meson Toon Claes 2025-12-02 10:48 ` [PATCH 1/2] meson: ignore subprojects/.wraplock Toon Claes @ 2025-12-02 10:48 ` Toon Claes 2025-12-02 20:27 ` Patrick Steinhardt 2025-12-03 14:53 ` [PATCH 3/2] meson: use is_cross_build() where possible Toon Claes 2025-12-07 10:17 ` [PATCH 0/2] Few fixes for cross-compiling with Meson Carlo Marcelo Arenas Belón 3 siblings, 1 reply; 11+ messages in thread From: Toon Claes @ 2025-12-02 10:48 UTC (permalink / raw) To: git; +Cc: Patrick Steinhardt, Toon Claes In our Meson setup it automatically detects whether ICONV_OMITS_BOM should be defined. To check this, a piece of code is compiled and ran. When cross-compiling, it's not possible to run this piece of code. Guard this test with a can_run_host_binaries() check to ensure it can run. Signed-off-by: Toon Claes <toon@iotcl.com> --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index f1b3615659..95348e69a4 100644 --- a/meson.build +++ b/meson.build @@ -1064,7 +1064,7 @@ if iconv.found() } ''' - if compiler.run(iconv_omits_bom_source, + if meson.can_run_host_binaries() and compiler.run(iconv_omits_bom_source, dependencies: iconv, name: 'iconv omits BOM', ).returncode() != 0 -- 2.52.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] meson: only detect ICONV_OMITS_BOM if possible 2025-12-02 10:48 ` [PATCH 2/2] meson: only detect ICONV_OMITS_BOM if possible Toon Claes @ 2025-12-02 20:27 ` Patrick Steinhardt 2025-12-03 14:55 ` Toon Claes 0 siblings, 1 reply; 11+ messages in thread From: Patrick Steinhardt @ 2025-12-02 20:27 UTC (permalink / raw) To: Toon Claes; +Cc: git On Tue, Dec 02, 2025 at 11:48:09AM +0100, Toon Claes wrote: > In our Meson setup it automatically detects whether ICONV_OMITS_BOM > should be defined. To check this, a piece of code is compiled and ran. > > When cross-compiling, it's not possible to run this piece of code. Guard > this test with a can_run_host_binaries() check to ensure it can run. > > Signed-off-by: Toon Claes <toon@iotcl.com> > --- > meson.build | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/meson.build b/meson.build > index f1b3615659..95348e69a4 100644 > --- a/meson.build > +++ b/meson.build > @@ -1064,7 +1064,7 @@ if iconv.found() > } > ''' > > - if compiler.run(iconv_omits_bom_source, > + if meson.can_run_host_binaries() and compiler.run(iconv_omits_bom_source, > dependencies: iconv, > name: 'iconv omits BOM', > ).returncode() != 0 We have `not meson.is_cross_build()` in a different location to guard a call to `compiler.run()`. But `can_run_host_binaries()` is the better way to test for this condition, as it allows the host to plug in a wrapper (e.g. QEMU or WINE) that _would_ allow it to execute binaries of the target host. `can_run_host_binaries()` is available since Meson 0.55, and we target a version >=0.61.0. So should we maybe convert that other callsite to use `can_run_host_binaries()` in a separate commit? Thanks for these fixes! Patrick ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] meson: only detect ICONV_OMITS_BOM if possible 2025-12-02 20:27 ` Patrick Steinhardt @ 2025-12-03 14:55 ` Toon Claes 0 siblings, 0 replies; 11+ messages in thread From: Toon Claes @ 2025-12-03 14:55 UTC (permalink / raw) To: Patrick Steinhardt; +Cc: git Patrick Steinhardt <ps@pks.im> writes: > We have `not meson.is_cross_build()` in a different location to guard a > call to `compiler.run()`. But `can_run_host_binaries()` is the better > way to test for this condition, as it allows the host to plug in a > wrapper (e.g. QEMU or WINE) that _would_ allow it to execute binaries of > the target host. > > `can_run_host_binaries()` is available since Meson 0.55, and we target > a version >=0.61.0. So should we maybe convert that other callsite to > use `can_run_host_binaries()` in a separate commit? I've sent "PATH 3/2" on top of this series. I've found two occurrences of `not meson.is_cross_compile()` but only replaced one, because the other is used to guard `fs.exists()` which (as far as I can tell) always runs on the build machine. -- Cheers, Toon ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 3/2] meson: use is_cross_build() where possible 2025-12-02 10:48 [PATCH 0/2] Few fixes for cross-compiling with Meson Toon Claes 2025-12-02 10:48 ` [PATCH 1/2] meson: ignore subprojects/.wraplock Toon Claes 2025-12-02 10:48 ` [PATCH 2/2] meson: only detect ICONV_OMITS_BOM if possible Toon Claes @ 2025-12-03 14:53 ` Toon Claes 2025-12-04 6:16 ` Patrick Steinhardt 2025-12-07 10:17 ` [PATCH 0/2] Few fixes for cross-compiling with Meson Carlo Marcelo Arenas Belón 3 siblings, 1 reply; 11+ messages in thread From: Toon Claes @ 2025-12-03 14:53 UTC (permalink / raw) To: git; +Cc: toon, ps In previous commit the first use of meson.can_run_host_binaries() was introduced. This is a guard around compiler.run() to ensure it's actually possible to execute the provided. In other places we've been having the same issue, but here `not meson.is_cross_build()` is used as guard. This does the trick, but it also prevents the code from running even when an exe_wrapper is configured. Switch to using meson.can_run_host_binaries() here as well. There is another place left that still uses `not meson.is_cross_build()`, but here it's a guard around fs.exists(). That function will always run on the build machine, so checking for cross-compilation is still in place here. Signed-off-by: Toon Claes <toon@iotcl.com> --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 95348e69a4..00ad8a5c60 100644 --- a/meson.build +++ b/meson.build @@ -1492,7 +1492,7 @@ if not has_bsd_sysctl endif endif -if not meson.is_cross_build() and compiler.run(''' +if meson.can_run_host_binaries() and compiler.run(''' #include <stdio.h> int main(int argc, const char **argv) -- 2.52.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 3/2] meson: use is_cross_build() where possible 2025-12-03 14:53 ` [PATCH 3/2] meson: use is_cross_build() where possible Toon Claes @ 2025-12-04 6:16 ` Patrick Steinhardt 0 siblings, 0 replies; 11+ messages in thread From: Patrick Steinhardt @ 2025-12-04 6:16 UTC (permalink / raw) To: Toon Claes; +Cc: git On Wed, Dec 03, 2025 at 03:53:31PM +0100, Toon Claes wrote: > In previous commit the first use of meson.can_run_host_binaries() was > introduced. This is a guard around compiler.run() to ensure it's > actually possible to execute the provided. > > In other places we've been having the same issue, but here `not > meson.is_cross_build()` is used as guard. This does the trick, but it > also prevents the code from running even when an exe_wrapper is > configured. > > Switch to using meson.can_run_host_binaries() here as well. > > There is another place left that still uses `not > meson.is_cross_build()`, but here it's a guard around fs.exists(). That > function will always run on the build machine, so checking for > cross-compilation is still in place here. Thanks! This series looks good to me, including this patch. Patrick ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] Few fixes for cross-compiling with Meson 2025-12-02 10:48 [PATCH 0/2] Few fixes for cross-compiling with Meson Toon Claes ` (2 preceding siblings ...) 2025-12-03 14:53 ` [PATCH 3/2] meson: use is_cross_build() where possible Toon Claes @ 2025-12-07 10:17 ` Carlo Marcelo Arenas Belón 2025-12-08 14:41 ` Toon Claes 3 siblings, 1 reply; 11+ messages in thread From: Carlo Marcelo Arenas Belón @ 2025-12-07 10:17 UTC (permalink / raw) To: Toon Claes; +Cc: git, Patrick Steinhardt On Tue, Dec 02, 2025 at 11:48:07AM -0800, Toon Claes wrote: > I was cross-compiling for s390x. Just to clarify, you mean Linux on IBM Z/LinuxOne, not 64bit ZOS/ZVM, right? Carlo ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] Few fixes for cross-compiling with Meson 2025-12-07 10:17 ` [PATCH 0/2] Few fixes for cross-compiling with Meson Carlo Marcelo Arenas Belón @ 2025-12-08 14:41 ` Toon Claes 2025-12-09 0:44 ` Carlo Arenas 0 siblings, 1 reply; 11+ messages in thread From: Toon Claes @ 2025-12-08 14:41 UTC (permalink / raw) To: Carlo Marcelo Arenas Belón; +Cc: git, Patrick Steinhardt Carlo Marcelo Arenas Belón <carenas@gmail.com> writes: > On Tue, Dec 02, 2025 at 11:48:07AM -0800, Toon Claes wrote: >> I was cross-compiling for s390x. > > Just to clarify, you mean Linux on IBM Z/LinuxOne, not 64bit ZOS/ZVM, > right? I'm sorry, I'm not aware of the correct terminology here. If I run file(1) on the compiled binary, I'm getting: ELF 64-bit MSB pie executable, IBM S/390, version 1 (SYSV), dynamically linked, interpreter /lib/ld64.so.1, for GNU/Linux 3.2.0 And readelf(1) says: ... OS/ABI: UNIX - System V ... Machine: IBM S/390 ... And the toolchain used was installed from: https://aur.archlinux.org/packages/s390x-z13-glibc-bleeding-edge-toolchain I hope that clarifies it? -- Cheers, Toon ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] Few fixes for cross-compiling with Meson 2025-12-08 14:41 ` Toon Claes @ 2025-12-09 0:44 ` Carlo Arenas 2025-12-11 11:10 ` Toon Claes 0 siblings, 1 reply; 11+ messages in thread From: Carlo Arenas @ 2025-12-09 0:44 UTC (permalink / raw) To: Toon Claes; +Cc: git, Patrick Steinhardt On Mon, Dec 8, 2025 at 6:41 AM Toon Claes <toon@iotcl.com> wrote: > > Carlo Marcelo Arenas Belón <carenas@gmail.com> writes: > > > On Tue, Dec 02, 2025 at 11:48:07AM -0800, Toon Claes wrote: > >> I was cross-compiling for s390x. > > > > Just to clarify, you mean Linux on IBM Z/LinuxOne, not 64bit ZOS/ZVM, > > right? > > I'm sorry, I'm not aware of the correct terminology here. IBM marketing doesn't make it easier, but yes IBM mainframes can run multiple OS, and I have to admit I was kind of surprised to read we had a working meson cross compilation for Z/OS, because I know that at least cmake has issues even building natively. > If I run file(1) on the compiled binary, I'm getting: > > ELF 64-bit MSB pie executable, IBM S/390, version 1 (SYSV), > dynamically linked, interpreter /lib/ld64.so.1, for GNU/Linux 3.2.0 So this is 64-bit Big Endian linux for the s390x architecture (likely compatible with z13 or higher CPUs) I happen to have one of those under the desk running RHEL9/s390x, so will be happy to test your crosscompiled binaries, assuming it is as simple as installing them somewhere and running something like `make test` Carlo ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/2] Few fixes for cross-compiling with Meson 2025-12-09 0:44 ` Carlo Arenas @ 2025-12-11 11:10 ` Toon Claes 0 siblings, 0 replies; 11+ messages in thread From: Toon Claes @ 2025-12-11 11:10 UTC (permalink / raw) To: Carlo Arenas; +Cc: git Carlo Arenas <carenas@gmail.com> writes: > I happen to have one of those under the desk running RHEL9/s390x, so > will be happy to test your crosscompiled binaries, assuming it is as > simple as installing them somewhere and running something like `make > test` Thanks for the offer, but I don't think it's needed at the moment. -- Cheers, Toon ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-12-11 11:10 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-12-02 10:48 [PATCH 0/2] Few fixes for cross-compiling with Meson Toon Claes 2025-12-02 10:48 ` [PATCH 1/2] meson: ignore subprojects/.wraplock Toon Claes 2025-12-02 10:48 ` [PATCH 2/2] meson: only detect ICONV_OMITS_BOM if possible Toon Claes 2025-12-02 20:27 ` Patrick Steinhardt 2025-12-03 14:55 ` Toon Claes 2025-12-03 14:53 ` [PATCH 3/2] meson: use is_cross_build() where possible Toon Claes 2025-12-04 6:16 ` Patrick Steinhardt 2025-12-07 10:17 ` [PATCH 0/2] Few fixes for cross-compiling with Meson Carlo Marcelo Arenas Belón 2025-12-08 14:41 ` Toon Claes 2025-12-09 0:44 ` Carlo Arenas 2025-12-11 11:10 ` Toon Claes
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).