build: support i686 target on x86 64-bit hosts
diff mbox series

Message ID 20200924163742.321600-1-lance.richardson@broadcom.com
State New
Delegated to: Thomas Monjalon
Headers show
Series
  • build: support i686 target on x86 64-bit hosts
Related show

Checks

Context Check Description
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/travis-robot success Travis build: passed
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/Intel-compilation success Compilation OK
ci/checkpatch success coding style OK

Commit Message

Lance Richardson Sept. 24, 2020, 4:37 p.m. UTC
Add meson cross files for building i686 targets using gcc on x86_64
linux hosts.

Uusage example:

    meson --cross-file config/x86/cross-i686-linux-gcc build-i686
    ninja -C build-i686

Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
---
Red Hat distros use a different name for the 32-bit pkg-config
command from most other distros, maybe there is a better way
to handle this than using separate files.

Others will probably have better naming suggestions for the files.

 config/x86/cross-i686_linux_gcc  | 15 +++++++++++++++
 config/x86/cross-i686_redhat_gcc | 15 +++++++++++++++
 2 files changed, 30 insertions(+)
 create mode 100644 config/x86/cross-i686_linux_gcc
 create mode 100644 config/x86/cross-i686_redhat_gcc

Comments

Bruce Richardson Sept. 25, 2020, 9:13 a.m. UTC | #1
On Thu, Sep 24, 2020 at 12:37:42PM -0400, Lance Richardson wrote:
> Add meson cross files for building i686 targets using gcc on x86_64
> linux hosts.
> 
> Uusage example:
> 
>     meson --cross-file config/x86/cross-i686-linux-gcc build-i686
>     ninja -C build-i686
> 
> Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
> ---
> Red Hat distros use a different name for the 32-bit pkg-config
> command from most other distros, maybe there is a better way
> to handle this than using separate files.
> 
> Others will probably have better naming suggestions for the files.
> 
Just to note that rather than using cross-files, building i686 on x86_64
should be possible by just setting environment variables.

For example, on Ubuntu 20.04, this works for me:

PKG_CONFIG_LIBDIR=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS='-m32' LDFLAGS='-m32' meson --werror build-32bit
ninja -C build-32bit/

For Fedora or Redhat system the PKG_CONFIG_LIBDIR will be different (I
think just /usr/lib/pkgconfig), but the rest should work identically.

/Bruce
Lance Richardson Sept. 25, 2020, 1:27 p.m. UTC | #2
On Fri, Sep 25, 2020 at 5:13 AM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> On Thu, Sep 24, 2020 at 12:37:42PM -0400, Lance Richardson wrote:
> > Add meson cross files for building i686 targets using gcc on x86_64
> > linux hosts.
> >
> > Uusage example:
> >
> >     meson --cross-file config/x86/cross-i686-linux-gcc build-i686
> >     ninja -C build-i686
> >
> > Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
> > ---
> > Red Hat distros use a different name for the 32-bit pkg-config
> > command from most other distros, maybe there is a better way
> > to handle this than using separate files.
> >
> > Others will probably have better naming suggestions for the files.
> >
> Just to note that rather than using cross-files, building i686 on x86_64
> should be possible by just setting environment variables.
>
> For example, on Ubuntu 20.04, this works for me:
>
> PKG_CONFIG_LIBDIR=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS='-m32' LDFLAGS='-m32' meson --werror build-32bit
> ninja -C build-32bit/
>
> For Fedora or Redhat system the PKG_CONFIG_LIBDIR will be different (I
> think just /usr/lib/pkgconfig), but the rest should work identically.
>
> /Bruce

Thanks, that does work, although I'll have some trouble remembering it
for future
use (unlike using cross-files). Googling for "PKG_CONFIG_LIBDIR meson dpdk"
did lead me to this discussion, which makes it sound like cross-files
might still
worthy of consideration:

   https://patches.dpdk.org/patch/69067/

   Lance
Bruce Richardson Sept. 25, 2020, 1:44 p.m. UTC | #3
On Fri, Sep 25, 2020 at 09:27:25AM -0400, Lance Richardson wrote:
> On Fri, Sep 25, 2020 at 5:13 AM Bruce Richardson
> <bruce.richardson@intel.com> wrote:
> >
> > On Thu, Sep 24, 2020 at 12:37:42PM -0400, Lance Richardson wrote:
> > > Add meson cross files for building i686 targets using gcc on x86_64
> > > linux hosts.
> > >
> > > Uusage example:
> > >
> > >     meson --cross-file config/x86/cross-i686-linux-gcc build-i686
> > >     ninja -C build-i686
> > >
> > > Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
> > > ---
> > > Red Hat distros use a different name for the 32-bit pkg-config
> > > command from most other distros, maybe there is a better way
> > > to handle this than using separate files.
> > >
> > > Others will probably have better naming suggestions for the files.
> > >
> > Just to note that rather than using cross-files, building i686 on x86_64
> > should be possible by just setting environment variables.
> >
> > For example, on Ubuntu 20.04, this works for me:
> >
> > PKG_CONFIG_LIBDIR=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS='-m32' LDFLAGS='-m32' meson --werror build-32bit
> > ninja -C build-32bit/
> >
> > For Fedora or Redhat system the PKG_CONFIG_LIBDIR will be different (I
> > think just /usr/lib/pkgconfig), but the rest should work identically.
> >
> > /Bruce
> 
> Thanks, that does work, although I'll have some trouble remembering it
> for future
> use (unlike using cross-files). Googling for "PKG_CONFIG_LIBDIR meson dpdk"
> did lead me to this discussion, which makes it sound like cross-files
> might still
> worthy of consideration:
> 
>    https://patches.dpdk.org/patch/69067/
> 

Yes, absolutely the cross-file is worthy of consideration. The most awkward
part in both cases is getting the 32-bit pkg-config right.
Lance Richardson Sept. 25, 2020, 2:08 p.m. UTC | #4
On Fri, Sep 25, 2020 at 9:44 AM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> On Fri, Sep 25, 2020 at 09:27:25AM -0400, Lance Richardson wrote:
> > On Fri, Sep 25, 2020 at 5:13 AM Bruce Richardson
> > <bruce.richardson@intel.com> wrote:
> > >
> > > On Thu, Sep 24, 2020 at 12:37:42PM -0400, Lance Richardson wrote:
> > > > Add meson cross files for building i686 targets using gcc on x86_64
> > > > linux hosts.
> > > >
> > > > Uusage example:
> > > >
> > > >     meson --cross-file config/x86/cross-i686-linux-gcc build-i686
> > > >     ninja -C build-i686
> > > >
> > > > Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
> > > > ---
> > > > Red Hat distros use a different name for the 32-bit pkg-config
> > > > command from most other distros, maybe there is a better way
> > > > to handle this than using separate files.
> > > >
> > > > Others will probably have better naming suggestions for the files.
> > > >
> > > Just to note that rather than using cross-files, building i686 on x86_64
> > > should be possible by just setting environment variables.
> > >
> > > For example, on Ubuntu 20.04, this works for me:
> > >
> > > PKG_CONFIG_LIBDIR=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS='-m32' LDFLAGS='-m32' meson --werror build-32bit
> > > ninja -C build-32bit/
> > >
> > > For Fedora or Redhat system the PKG_CONFIG_LIBDIR will be different (I
> > > think just /usr/lib/pkgconfig), but the rest should work identically.
> > >
> > > /Bruce
> >
> > Thanks, that does work, although I'll have some trouble remembering it
> > for future
> > use (unlike using cross-files). Googling for "PKG_CONFIG_LIBDIR meson dpdk"
> > did lead me to this discussion, which makes it sound like cross-files
> > might still
> > worthy of consideration:
> >
> >    https://patches.dpdk.org/patch/69067/
> >
>
> Yes, absolutely the cross-file is worthy of consideration. The most awkward
> part in both cases is getting the 32-bit pkg-config right.

Agreed, having the distro-specific bits is not pretty.

Would it be possible to set the pkgconfig binary name or
PKG_CONFIG_LIBDIR in config/x86/meson.build? If so,
maybe we could have a single cross-file and probe for the
distro-specifics in meson.build.
Bruce Richardson Sept. 25, 2020, 2:28 p.m. UTC | #5
On Fri, Sep 25, 2020 at 10:08:35AM -0400, Lance Richardson wrote:
> On Fri, Sep 25, 2020 at 9:44 AM Bruce Richardson
> <bruce.richardson@intel.com> wrote:
> >
> > On Fri, Sep 25, 2020 at 09:27:25AM -0400, Lance Richardson wrote:
> > > On Fri, Sep 25, 2020 at 5:13 AM Bruce Richardson
> > > <bruce.richardson@intel.com> wrote:
> > > >
> > > > On Thu, Sep 24, 2020 at 12:37:42PM -0400, Lance Richardson wrote:
> > > > > Add meson cross files for building i686 targets using gcc on x86_64
> > > > > linux hosts.
> > > > >
> > > > > Uusage example:
> > > > >
> > > > >     meson --cross-file config/x86/cross-i686-linux-gcc build-i686
> > > > >     ninja -C build-i686
> > > > >
> > > > > Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
> > > > > ---
> > > > > Red Hat distros use a different name for the 32-bit pkg-config
> > > > > command from most other distros, maybe there is a better way
> > > > > to handle this than using separate files.
> > > > >
> > > > > Others will probably have better naming suggestions for the files.
> > > > >
> > > > Just to note that rather than using cross-files, building i686 on x86_64
> > > > should be possible by just setting environment variables.
> > > >
> > > > For example, on Ubuntu 20.04, this works for me:
> > > >
> > > > PKG_CONFIG_LIBDIR=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS='-m32' LDFLAGS='-m32' meson --werror build-32bit
> > > > ninja -C build-32bit/
> > > >
> > > > For Fedora or Redhat system the PKG_CONFIG_LIBDIR will be different (I
> > > > think just /usr/lib/pkgconfig), but the rest should work identically.
> > > >
> > > > /Bruce
> > >
> > > Thanks, that does work, although I'll have some trouble remembering it
> > > for future
> > > use (unlike using cross-files). Googling for "PKG_CONFIG_LIBDIR meson dpdk"
> > > did lead me to this discussion, which makes it sound like cross-files
> > > might still
> > > worthy of consideration:
> > >
> > >    https://patches.dpdk.org/patch/69067/
> > >
> >
> > Yes, absolutely the cross-file is worthy of consideration. The most awkward
> > part in both cases is getting the 32-bit pkg-config right.
> 
> Agreed, having the distro-specific bits is not pretty.
> 
> Would it be possible to set the pkgconfig binary name or
> PKG_CONFIG_LIBDIR in config/x86/meson.build? If so,
> maybe we could have a single cross-file and probe for the
> distro-specifics in meson.build.

Sadly, I'm not aware of any way to do that right now. It probably requires
changes in meson itself. :-(
Ferruh Yigit Sept. 25, 2020, 2:48 p.m. UTC | #6
On 9/25/2020 3:28 PM, Bruce Richardson wrote:
> On Fri, Sep 25, 2020 at 10:08:35AM -0400, Lance Richardson wrote:
>> On Fri, Sep 25, 2020 at 9:44 AM Bruce Richardson
>> <bruce.richardson@intel.com> wrote:
>>>
>>> On Fri, Sep 25, 2020 at 09:27:25AM -0400, Lance Richardson wrote:
>>>> On Fri, Sep 25, 2020 at 5:13 AM Bruce Richardson
>>>> <bruce.richardson@intel.com> wrote:
>>>>>
>>>>> On Thu, Sep 24, 2020 at 12:37:42PM -0400, Lance Richardson wrote:
>>>>>> Add meson cross files for building i686 targets using gcc on x86_64
>>>>>> linux hosts.
>>>>>>
>>>>>> Uusage example:
>>>>>>
>>>>>>      meson --cross-file config/x86/cross-i686-linux-gcc build-i686
>>>>>>      ninja -C build-i686
>>>>>>
>>>>>> Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
>>>>>> ---
>>>>>> Red Hat distros use a different name for the 32-bit pkg-config
>>>>>> command from most other distros, maybe there is a better way
>>>>>> to handle this than using separate files.
>>>>>>
>>>>>> Others will probably have better naming suggestions for the files.
>>>>>>
>>>>> Just to note that rather than using cross-files, building i686 on x86_64
>>>>> should be possible by just setting environment variables.
>>>>>
>>>>> For example, on Ubuntu 20.04, this works for me:
>>>>>
>>>>> PKG_CONFIG_LIBDIR=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS='-m32' LDFLAGS='-m32' meson --werror build-32bit
>>>>> ninja -C build-32bit/
>>>>>
>>>>> For Fedora or Redhat system the PKG_CONFIG_LIBDIR will be different (I
>>>>> think just /usr/lib/pkgconfig), but the rest should work identically.
>>>>>
>>>>> /Bruce
>>>>
>>>> Thanks, that does work, although I'll have some trouble remembering it
>>>> for future
>>>> use (unlike using cross-files). Googling for "PKG_CONFIG_LIBDIR meson dpdk"
>>>> did lead me to this discussion, which makes it sound like cross-files
>>>> might still
>>>> worthy of consideration:
>>>>
>>>>     https://patches.dpdk.org/patch/69067/
>>>>
>>>
>>> Yes, absolutely the cross-file is worthy of consideration. The most awkward
>>> part in both cases is getting the 32-bit pkg-config right.
>>
>> Agreed, having the distro-specific bits is not pretty.
>>
>> Would it be possible to set the pkgconfig binary name or
>> PKG_CONFIG_LIBDIR in config/x86/meson.build? If so,
>> maybe we could have a single cross-file and probe for the
>> distro-specifics in meson.build.
> 
> Sadly, I'm not aware of any way to do that right now. It probably requires
> changes in meson itself. :-(
> 

I did hit similar thing with arm cross compile recently, the values 
provided in the 'config/arm/arm64_armv8_linux_gcc' doesn't match with 
the cross compiler I installed, so had to update it manually.
Not sure if it is possible to cover all options, or should we add a 
config file to cover each case, perhaps we can document it and go with 
common values.
Thomas Monjalon Oct. 6, 2020, 8:30 a.m. UTC | #7
25/09/2020 15:27, Lance Richardson:
> Bruce Richardson wrote:
> > On Thu, Sep 24, 2020 at 12:37:42PM -0400, Lance Richardson wrote:
> > > Add meson cross files for building i686 targets using gcc on x86_64
> > > linux hosts.
> > >
> > > Uusage example:
> > >
> > >     meson --cross-file config/x86/cross-i686-linux-gcc build-i686
> > >     ninja -C build-i686
> > >
> > > Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
> > > ---
> > > Red Hat distros use a different name for the 32-bit pkg-config
> > > command from most other distros, maybe there is a better way
> > > to handle this than using separate files.
> > >
> > > Others will probably have better naming suggestions for the files.
> > >
> > Just to note that rather than using cross-files, building i686 on x86_64
> > should be possible by just setting environment variables.
> >
> > For example, on Ubuntu 20.04, this works for me:
> >
> > PKG_CONFIG_LIBDIR=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS='-m32' LDFLAGS='-m32' meson --werror build-32bit
> > ninja -C build-32bit/
> >
> > For Fedora or Redhat system the PKG_CONFIG_LIBDIR will be different (I
> > think just /usr/lib/pkgconfig), but the rest should work identically.
> 
> Thanks, that does work, although I'll have some trouble remembering it
> for future

Would it help to have this command in devtools/test-meson-builds.sh ?
Lance Richardson Oct. 6, 2020, 2:35 p.m. UTC | #8
On Tue, Oct 6, 2020 at 4:30 AM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> 25/09/2020 15:27, Lance Richardson:
> > Bruce Richardson wrote:
> > > On Thu, Sep 24, 2020 at 12:37:42PM -0400, Lance Richardson wrote:
> > > > Add meson cross files for building i686 targets using gcc on x86_64
> > > > linux hosts.
> > > >
> > > > Uusage example:
> > > >
> > > >     meson --cross-file config/x86/cross-i686-linux-gcc build-i686
> > > >     ninja -C build-i686
> > > >
> > > > Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
> > > > ---
> > > > Red Hat distros use a different name for the 32-bit pkg-config
> > > > command from most other distros, maybe there is a better way
> > > > to handle this than using separate files.
> > > >
> > > > Others will probably have better naming suggestions for the files.
> > > >
> > > Just to note that rather than using cross-files, building i686 on x86_64
> > > should be possible by just setting environment variables.
> > >
> > > For example, on Ubuntu 20.04, this works for me:
> > >
> > > PKG_CONFIG_LIBDIR=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS='-m32' LDFLAGS='-m32' meson --werror build-32bit
> > > ninja -C build-32bit/
> > >
> > > For Fedora or Redhat system the PKG_CONFIG_LIBDIR will be different (I
> > > think just /usr/lib/pkgconfig), but the rest should work identically.
> >
> > Thanks, that does work, although I'll have some trouble remembering it
> > for future
>
> Would it help to have this command in devtools/test-meson-builds.sh ?
>

I think it would help, although using cross-files was suggested when
that was proposed here:
     http://patchwork.dpdk.org/patch/69067/

Having the i686 build command in a document like the GSG might be
helpful as well.

Ideally it seems there should be a consistent way to build for different
architectures using meson, I think we mostly have that now with the
native architecture being used by default and otherwise using a
cross-file found under config/<arch>/.

Thanks,
    Lance

Patch
diff mbox series

diff --git a/config/x86/cross-i686_linux_gcc b/config/x86/cross-i686_linux_gcc
new file mode 100644
index 000000000..a4169f969
--- /dev/null
+++ b/config/x86/cross-i686_linux_gcc
@@ -0,0 +1,15 @@ 
+[binaries]
+c = 'gcc'
+ar = 'gcc-ar'
+strip = 'strip'
+pkgconfig = 'i686-linux-gnu-pkg-config'
+
+[properties]
+c_args = ['-m32']
+c_link_args = ['-m32']
+
+[host_machine]
+system = 'linux'
+cpu_family = 'x86'
+cpu = 'i686'
+endian = 'little'
diff --git a/config/x86/cross-i686_redhat_gcc b/config/x86/cross-i686_redhat_gcc
new file mode 100644
index 000000000..2ae8b33dd
--- /dev/null
+++ b/config/x86/cross-i686_redhat_gcc
@@ -0,0 +1,15 @@ 
+[binaries]
+c = 'gcc'
+ar = 'gcc-ar'
+strip = 'strip'
+pkgconfig = 'i686-redhat-linux-gnu-pkg-config'
+
+[properties]
+c_args = ['-m32']
+c_link_args = ['-m32']
+
+[host_machine]
+system = 'linux'
+cpu_family = 'x86'
+cpu = 'i686'
+endian = 'little'