Message ID | 20241014143640.196735-1-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Series | meson: check in main meson.build for native Rust compiler | expand |
On Mon, 14 Oct 2024 at 15:36, Paolo Bonzini <pbonzini@redhat.com> wrote: > > A working native Rust compiler is always needed in order to compile Rust > code, even when cross compiling, in order to build the procedural macros > that QEMU uses. > > Right now, the check is done in rust/qemu-api-macros/meson.build, but this > has two disadvantages. First, it makes the build fail when the Meson "rust" > option is set to "auto" (instead, Rust support should be disabled). Second, > add_languages() is one of the few functions that are executed even by > "meson introspect", except that "meson introspect" executes both branches > of "if" statements! Therefore, "meson introspect" tries to look for a > Rust compiler even if the option is disabled---and then fails because > the compiler is required by rust/qemu-api-macros/meson.build. This is > visible for example if the compilation host has a stale > scripts/meson-buildoptions.sh and no rustc installed. > > Both issues can be fixed by moving the check to the main meson.build, > together with the check for the cross compiler. > > Reported-by: Peter Maydell <peter.maydell@linaro.org> > --- > meson.build | 3 ++- > rust/qemu-api-macros/meson.build | 2 -- > 2 files changed, 2 insertions(+), 3 deletions(-) Missing Signed-off-by: line ? > > diff --git a/meson.build b/meson.build > index aecc381932d..c85f964bed4 100644 > --- a/meson.build > +++ b/meson.build > @@ -71,7 +71,8 @@ if host_os == 'darwin' and \ > objc = meson.get_compiler('objc') > endif > have_rust = false > -if not get_option('rust').disabled() and add_languages('rust', required: get_option('rust'), native: false) > +if not get_option('rust').disabled() and add_languages('rust', required: get_option('rust'), native: false) \ > + and add_languages('rust', required: get_option('rust'), native: true) > rustc = meson.get_compiler('rust') > have_rust = true > if rustc.version().version_compare('<1.80.0') > diff --git a/rust/qemu-api-macros/meson.build b/rust/qemu-api-macros/meson.build > index 48af91ed389..517b9a4d2d5 100644 > --- a/rust/qemu-api-macros/meson.build > +++ b/rust/qemu-api-macros/meson.build > @@ -1,5 +1,3 @@ > -add_languages('rust', required: true, native: true) > - > quote_dep = dependency('quote-1-rs', native: true) > syn_dep = dependency('syn-2-rs', native: true) > proc_macro2_dep = dependency('proc-macro2-1-rs', native: true) > -- > 2.46. thanks -- PMM
On Mon, 14 Oct 2024 at 15:38, Peter Maydell <peter.maydell@linaro.org> wrote: > > On Mon, 14 Oct 2024 at 15:36, Paolo Bonzini <pbonzini@redhat.com> wrote: > > > > A working native Rust compiler is always needed in order to compile Rust > > code, even when cross compiling, in order to build the procedural macros > > that QEMU uses. > > > > Right now, the check is done in rust/qemu-api-macros/meson.build, but this > > has two disadvantages. First, it makes the build fail when the Meson "rust" > > option is set to "auto" (instead, Rust support should be disabled). Second, > > add_languages() is one of the few functions that are executed even by > > "meson introspect", except that "meson introspect" executes both branches > > of "if" statements! Therefore, "meson introspect" tries to look for a > > Rust compiler even if the option is disabled---and then fails because > > the compiler is required by rust/qemu-api-macros/meson.build. This is > > visible for example if the compilation host has a stale > > scripts/meson-buildoptions.sh and no rustc installed. > > > > Both issues can be fixed by moving the check to the main meson.build, > > together with the check for the cross compiler. > > > > Reported-by: Peter Maydell <peter.maydell@linaro.org> > > --- > > meson.build | 3 ++- > > rust/qemu-api-macros/meson.build | 2 -- > > 2 files changed, 2 insertions(+), 3 deletions(-) > > Missing Signed-off-by: line ? Oh, and is there any better order in which to apply this patch and your other fix, or does it not matter? -- PMM
On Mon, Oct 14, 2024 at 4:41 PM Peter Maydell <peter.maydell@linaro.org> wrote: > > On Mon, 14 Oct 2024 at 15:38, Peter Maydell <peter.maydell@linaro.org> wrote: > > > > On Mon, 14 Oct 2024 at 15:36, Paolo Bonzini <pbonzini@redhat.com> wrote: > > > > > > A working native Rust compiler is always needed in order to compile Rust > > > code, even when cross compiling, in order to build the procedural macros > > > that QEMU uses. > > > > > > Right now, the check is done in rust/qemu-api-macros/meson.build, but this > > > has two disadvantages. First, it makes the build fail when the Meson "rust" > > > option is set to "auto" (instead, Rust support should be disabled). Second, > > > add_languages() is one of the few functions that are executed even by > > > "meson introspect", except that "meson introspect" executes both branches > > > of "if" statements! Therefore, "meson introspect" tries to look for a > > > Rust compiler even if the option is disabled---and then fails because > > > the compiler is required by rust/qemu-api-macros/meson.build. This is > > > visible for example if the compilation host has a stale > > > scripts/meson-buildoptions.sh and no rustc installed. > > > > > > Both issues can be fixed by moving the check to the main meson.build, > > > together with the check for the cross compiler. > > > > > > Reported-by: Peter Maydell <peter.maydell@linaro.org> > > > --- > > > meson.build | 3 ++- > > > rust/qemu-api-macros/meson.build | 2 -- > > > 2 files changed, 2 insertions(+), 3 deletions(-) > > > > Missing Signed-off-by: line ? Ugh, yes (my OpenBSD VM does not have the usual git hooks :)). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > Oh, and is there any better order in which to apply this > patch and your other fix, or does it not matter? It's not super important but I guess this one could go first, since it affects non-incremental builds (as in CI) as well. Paolo
On Mon, 14 Oct 2024 at 15:36, Paolo Bonzini <pbonzini@redhat.com> wrote: > > A working native Rust compiler is always needed in order to compile Rust > code, even when cross compiling, in order to build the procedural macros > that QEMU uses. > > Right now, the check is done in rust/qemu-api-macros/meson.build, but this > has two disadvantages. First, it makes the build fail when the Meson "rust" > option is set to "auto" (instead, Rust support should be disabled). Second, > add_languages() is one of the few functions that are executed even by > "meson introspect", except that "meson introspect" executes both branches > of "if" statements! Therefore, "meson introspect" tries to look for a > Rust compiler even if the option is disabled---and then fails because > the compiler is required by rust/qemu-api-macros/meson.build. This is > visible for example if the compilation host has a stale > scripts/meson-buildoptions.sh and no rustc installed. > > Both issues can be fixed by moving the check to the main meson.build, > together with the check for the cross compiler. > > Reported-by: Peter Maydell <peter.maydell@linaro.org> > --- Applied directly to git, thanks. -- PMM
diff --git a/meson.build b/meson.build index aecc381932d..c85f964bed4 100644 --- a/meson.build +++ b/meson.build @@ -71,7 +71,8 @@ if host_os == 'darwin' and \ objc = meson.get_compiler('objc') endif have_rust = false -if not get_option('rust').disabled() and add_languages('rust', required: get_option('rust'), native: false) +if not get_option('rust').disabled() and add_languages('rust', required: get_option('rust'), native: false) \ + and add_languages('rust', required: get_option('rust'), native: true) rustc = meson.get_compiler('rust') have_rust = true if rustc.version().version_compare('<1.80.0') diff --git a/rust/qemu-api-macros/meson.build b/rust/qemu-api-macros/meson.build index 48af91ed389..517b9a4d2d5 100644 --- a/rust/qemu-api-macros/meson.build +++ b/rust/qemu-api-macros/meson.build @@ -1,5 +1,3 @@ -add_languages('rust', required: true, native: true) - quote_dep = dependency('quote-1-rs', native: true) syn_dep = dependency('syn-2-rs', native: true) proc_macro2_dep = dependency('proc-macro2-1-rs', native: true)