On Fri, Aug 18, 2023 at 08:27:45AM -0500, Eric Blake wrote:
> In https://gitlab.com/nbdkit/nbdkit/-/merge_requests/30, Khem reports
> that in a cross-compilation environment, nbdkit embeds the absolute
> name of the cross-compiler into the resulting cc plugin, even though
> running the plugin should be favoring the bare name 'cc'.  This in
> turn leads to non-reproducible builds.  As the goal of cross-compiling
> nbdkit is to produce a binary that behaves identically regardless of
> the build environment used, this means we need to give the user
> control over the defaults for CC and CFLAGS embedded into the cc
> plugin.
> 
> However, instead of trying to munge the build environment variable as
> suggested in that merge request, I found it cleaner to just add
> additional precious variables to be set at configure time, as in:
> 
> ./configure CC=/path/to/cross-compiler CC_PLUGIN_CC='ccache gcc' ...
> 
> Reported-by: Khem Raj
> Signed-off-by: Eric Blake <ebl...@redhat.com>
> ---
> 
> gitlab doesn't let me see the right email address to cc; if I can
> figure that out, I'll tweak the Reported-by line as appropriate before
> committing...
> ---
>  plugins/cc/nbdkit-cc-plugin.pod |  9 ++++++---
>  configure.ac                    | 11 +++++++++++
>  plugins/cc/Makefile.am          |  4 ++--
>  3 files changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/plugins/cc/nbdkit-cc-plugin.pod b/plugins/cc/nbdkit-cc-plugin.pod
> index 2974890c..2bc3cfb8 100644
> --- a/plugins/cc/nbdkit-cc-plugin.pod
> +++ b/plugins/cc/nbdkit-cc-plugin.pod
> @@ -45,9 +45,12 @@ To replace the compiler flags:
> 
>  The plugin parameters C<CC>, C<CFLAGS> and C<EXTRA_CFLAGS> (written in
>  uppercase) can be used to control which C compiler and C compiler
> -flags are used.  If not set, the default compiler and flags from when
> -nbdkit was itself compiled from source are used.  To see what those
> -were you can do:
> +flags are used.  If not set, you can hardcode the defaults for C<CC>
> +and C<CFLAGS> at the time nbdkit is compiled from source by
> +configuring with C<CC_PLUGIN_CC=...> and C<CC_PLUGIN_CFLAGS=...>,
> +otherwise, the configuration for compiling nbdkit itself is used
> +(C<EXTRA_CFLAGS> can only be set from the command line when starting
> +the cc plugin).  To see what those were you can do:
> 
>   $ nbdkit cc --dump-plugin
>   ...

Widening the context,

    ...
    CC=gcc
    CFLAGS=-g -O2 -fPIC -shared

  The C<CFLAGS> parameter overrides the built-in flags completely.  The
  C<EXTRA_CFLAGS> parameter adds extra flags to the built-in flags.

Since we already mention EXTRA_CFLAGS below the example, I'm not sure
if my addition of a parenthetical about EXTRA_CFLAGS above is
worthwhile, or just adds noise.

> diff --git a/configure.ac b/configure.ac
> index afc5ddab..e5e261c8 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -820,6 +820,15 @@ AC_ARG_ENABLE([plugins],
>                      [disable all bundled plugins and filters])])
>  AM_CONDITIONAL([HAVE_PLUGINS], [test "x$enable_plugins" != "xno"])
> 
> +dnl For the cc plugin, let the user hard-code their preferred compiler setup
> +dnl Default to the settings used for nbdkit itself
> +AC_ARG_VAR([CC_PLUGIN_CC],
> +  [Value to use for CC when building the cc plugin, default $CC])

I'm wondering if there is a better way to word this (it shows up in
'./configure --help' output).  Maybe:

[Value to hard-code into the cc plugin's default for CC, instead of $CC]

> +: "${CC_PLUGIN_CC:=$CC}"
> +AC_ARG_VAR([CC_PLUGIN_CFLAGS],
> +  [Value to use for CFLAGS when building the cc plugin, default $CFLAGS])
> +: "${CC_PLUGIN_CFLAGS:=$CFLAGS}"

and similar

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.
Virtualization:  qemu.org | libguestfs.org
_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to