Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm
@ 2018-11-03 12:27 Fabrice Fontaine
  2018-11-03 12:27 ` [Buildroot] [PATCH 2/4] llvm: enable bpf Fabrice Fontaine
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: Fabrice Fontaine @ 2018-11-03 12:27 UTC (permalink / raw)
  To: buildroot

If BR2_PACKAGE_LLVM_TARGET_ARCH is empty because llvm is not supported
on target, build of the host-llvm will fail on "Unknown architecture".

This is an issue because host-llvm (and host-clang) can be needed on
host. For example the libv4l package uses clang to build BPF (in-kernel
bytecode machine) files.

To fix this, add a new "host" default value to
BR2_PACKAGE_LLVM_TARGET_ARCH

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 package/llvm/Config.in | 1 +
 1 file changed, 1 insertion(+)

diff --git a/package/llvm/Config.in b/package/llvm/Config.in
index 83e94660eb..0e111f1b76 100644
--- a/package/llvm/Config.in
+++ b/package/llvm/Config.in
@@ -10,6 +10,7 @@ config BR2_PACKAGE_LLVM_TARGET_ARCH
 	default "AArch64" if BR2_aarch64
 	default "ARM" if BR2_arm || BR2_armeb
 	default "X86" if BR2_i386 || BR2_x86_64
+	default "host"
 
 config BR2_PACKAGE_LLVM
 	bool "llvm"
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 2/4] llvm: enable bpf
  2018-11-03 12:27 [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm Fabrice Fontaine
@ 2018-11-03 12:27 ` Fabrice Fontaine
  2018-11-03 13:14   ` Thomas Petazzoni
  2018-11-03 12:27 ` [Buildroot] [PATCH 3/4] libv4l: add elfutils optional dependency Fabrice Fontaine
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 16+ messages in thread
From: Fabrice Fontaine @ 2018-11-03 12:27 UTC (permalink / raw)
  To: buildroot

BPF (in-kernel bytecode machine) is needed by libv4l

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 package/llvm/llvm.mk | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk
index 1f9bd447f5..dae5d3f16d 100644
--- a/package/llvm/llvm.mk
+++ b/package/llvm/llvm.mk
@@ -54,6 +54,9 @@ ifeq ($(BR2_PACKAGE_LLVM_AMDGPU),y)
 LLVM_TARGETS_TO_BUILD += AMDGPU
 endif
 
+# Build BPF (in-kernel bytecode machine)
+LLVM_TARGETS_TO_BUILD += BPF
+
 # Use native llvm-tblgen from host-llvm (needed for cross-compilation)
 LLVM_CONF_OPTS += -DLLVM_TABLEGEN=$(HOST_DIR)/bin/llvm-tblgen
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 3/4] libv4l: add elfutils optional dependency
  2018-11-03 12:27 [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm Fabrice Fontaine
  2018-11-03 12:27 ` [Buildroot] [PATCH 2/4] llvm: enable bpf Fabrice Fontaine
@ 2018-11-03 12:27 ` Fabrice Fontaine
  2018-11-03 13:18   ` Thomas Petazzoni
  2018-11-03 12:27 ` [Buildroot] [PATCH 4/4] scripts/check-bin-arch: fix failure with bpf Fabrice Fontaine
  2018-11-03 14:15 ` [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm Romain Naour
  3 siblings, 1 reply; 16+ messages in thread
From: Fabrice Fontaine @ 2018-11-03 12:27 UTC (permalink / raw)
  To: buildroot

Bump to version 1.61.1 added an optional dependency to elfutils:
https://git.linuxtv.org/v4l-utils.git/commit/?id=d6025b0e8c7f57b0f9390f987acc5eed57360d80

host-clang is also needed to build PBF protocols, see:
https://git.linuxtv.org/v4l-utils.git/commit/?id=91b37c0d9cb71fc2d5f78cc96aa2ef9f3bba145b

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 package/libv4l/libv4l.mk | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/package/libv4l/libv4l.mk b/package/libv4l/libv4l.mk
index 4e82dea6ad..7be41f8fef 100644
--- a/package/libv4l/libv4l.mk
+++ b/package/libv4l/libv4l.mk
@@ -55,6 +55,12 @@ endif
 ifeq ($(BR2_PACKAGE_LIBV4L_UTILS),y)
 LIBV4L_CONF_OPTS += --enable-v4l-utils
 LIBV4L_DEPENDENCIES += $(TARGET_NLS_DEPENDENCIES)
+
+ifeq ($(BR2_PACKAGE_ELFUTILS),y)
+# host-clang is needed to build BPF protocols
+LIBV4L_DEPENDENCIES += elfutils host-clang
+endif
+
 ifeq ($(BR2_PACKAGE_QT5BASE)$(BR2_PACKAGE_QT5BASE_GUI)$(BR2_PACKAGE_QT5BASE_WIDGETS),yyy)
 LIBV4L_CONF_OPTS += --enable-qv4l2
 LIBV4L_DEPENDENCIES += qt5base
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 4/4] scripts/check-bin-arch: fix failure with bpf
  2018-11-03 12:27 [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm Fabrice Fontaine
  2018-11-03 12:27 ` [Buildroot] [PATCH 2/4] llvm: enable bpf Fabrice Fontaine
  2018-11-03 12:27 ` [Buildroot] [PATCH 3/4] libv4l: add elfutils optional dependency Fabrice Fontaine
@ 2018-11-03 12:27 ` Fabrice Fontaine
  2018-11-03 13:20   ` Thomas Petazzoni
  2018-11-03 14:15 ` [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm Romain Naour
  3 siblings, 1 reply; 16+ messages in thread
From: Fabrice Fontaine @ 2018-11-03 12:27 UTC (permalink / raw)
  To: buildroot

Do not return an error if architecture is "Linux BPF" (in-kernel
bytecode machine)

Fixes:
 - http://autobuild.buildroot.org/results/c18fb7f1ac81496db9c3a4e91ea028a26ca600b0

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 support/scripts/check-bin-arch | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/support/scripts/check-bin-arch b/support/scripts/check-bin-arch
index 7f97696735..a0de7a6ac4 100755
--- a/support/scripts/check-bin-arch
+++ b/support/scripts/check-bin-arch
@@ -74,6 +74,11 @@ while read f; do
 		continue
 	fi
 
+	# If architecture is Linux BPF (in-kernel bytecode machine), continue
+	if test "${arch}" = "Linux BPF" ; then
+		continue
+	fi
+
 	# Architecture is correct
 	if test "${arch}" = "${arch_name}" ; then
 		continue
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 2/4] llvm: enable bpf
  2018-11-03 12:27 ` [Buildroot] [PATCH 2/4] llvm: enable bpf Fabrice Fontaine
@ 2018-11-03 13:14   ` Thomas Petazzoni
  2018-11-03 14:14     ` Fabrice Fontaine
  0 siblings, 1 reply; 16+ messages in thread
From: Thomas Petazzoni @ 2018-11-03 13:14 UTC (permalink / raw)
  To: buildroot

Hello,

On Sat,  3 Nov 2018 13:27:56 +0100, Fabrice Fontaine wrote:
> BPF (in-kernel bytecode machine) is needed by libv4l
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> ---
>  package/llvm/llvm.mk | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk
> index 1f9bd447f5..dae5d3f16d 100644
> --- a/package/llvm/llvm.mk
> +++ b/package/llvm/llvm.mk
> @@ -54,6 +54,9 @@ ifeq ($(BR2_PACKAGE_LLVM_AMDGPU),y)
>  LLVM_TARGETS_TO_BUILD += AMDGPU
>  endif
>  
> +# Build BPF (in-kernel bytecode machine)
> +LLVM_TARGETS_TO_BUILD += BPF

Perhaps we should make this optional ? Or maybe the build time
difference is not that significant ?

Best regards,

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 3/4] libv4l: add elfutils optional dependency
  2018-11-03 12:27 ` [Buildroot] [PATCH 3/4] libv4l: add elfutils optional dependency Fabrice Fontaine
@ 2018-11-03 13:18   ` Thomas Petazzoni
  2018-11-03 14:06     ` Fabrice Fontaine
  0 siblings, 1 reply; 16+ messages in thread
From: Thomas Petazzoni @ 2018-11-03 13:18 UTC (permalink / raw)
  To: buildroot

Hello,

On Sat,  3 Nov 2018 13:27:57 +0100, Fabrice Fontaine wrote:
> Bump to version 1.61.1 added an optional dependency to elfutils:
> https://git.linuxtv.org/v4l-utils.git/commit/?id=d6025b0e8c7f57b0f9390f987acc5eed57360d80
> 
> host-clang is also needed to build PBF protocols, see:

PBF -> BPF

> https://git.linuxtv.org/v4l-utils.git/commit/?id=91b37c0d9cb71fc2d5f78cc96aa2ef9f3bba145b

I'm not sure to understand: there are two separate commits upstream,
one that adds the elfutils dependency, one that adds the clang
dependency. Are they both needed to have BPF protocols ? If so, why
were those two dependencies introduced in separate commits upstream ?

> +ifeq ($(BR2_PACKAGE_ELFUTILS),y)
> +# host-clang is needed to build BPF protocols
> +LIBV4L_DEPENDENCIES += elfutils host-clang
> +endif

I think an explicit sub-option would make sense in this case, because
it's not trivial at all to know that you need elfutils. So I would
prefer to have

config BR2_PACKAGE_LIBV4L_KEYTABLE_BPF_PROTOCOLS
	bool "keytable BPF protocols"
	select BR2_PACKAGE_ELFUTILS
        depends on BR2_USE_WCHAR # elfutils
        depends on !BR2_STATIC_LIBS # elfutils
        depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils

Thanks,

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 4/4] scripts/check-bin-arch: fix failure with bpf
  2018-11-03 12:27 ` [Buildroot] [PATCH 4/4] scripts/check-bin-arch: fix failure with bpf Fabrice Fontaine
@ 2018-11-03 13:20   ` Thomas Petazzoni
  2018-11-03 13:53     ` Fabrice Fontaine
  0 siblings, 1 reply; 16+ messages in thread
From: Thomas Petazzoni @ 2018-11-03 13:20 UTC (permalink / raw)
  To: buildroot

Hello,

On Sat,  3 Nov 2018 13:27:58 +0100, Fabrice Fontaine wrote:
> Do not return an error if architecture is "Linux BPF" (in-kernel
> bytecode machine)
> 
> Fixes:
>  - http://autobuild.buildroot.org/results/c18fb7f1ac81496db9c3a4e91ea028a26ca600b0
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> ---
>  support/scripts/check-bin-arch | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/support/scripts/check-bin-arch b/support/scripts/check-bin-arch
> index 7f97696735..a0de7a6ac4 100755
> --- a/support/scripts/check-bin-arch
> +++ b/support/scripts/check-bin-arch
> @@ -74,6 +74,11 @@ while read f; do
>  		continue
>  	fi
>  
> +	# If architecture is Linux BPF (in-kernel bytecode machine), continue
> +	if test "${arch}" = "Linux BPF" ; then
> +		continue
> +	fi

In the build failure
http://autobuild.buildroot.org/results/c18fb7f1ac81496db9c3a4e91ea028a26ca600b0/build-end.log
that you point, the architecture is reported as "None", not as "Linux
BPF". Am I misunderstanding something here ?

As a first step, could we explicitly disable building BPF protocols,
before we merge the necessary LLVM/V4L logic to build these properly ?

Thanks,

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 4/4] scripts/check-bin-arch: fix failure with bpf
  2018-11-03 13:20   ` Thomas Petazzoni
@ 2018-11-03 13:53     ` Fabrice Fontaine
  2018-11-03 14:00       ` Thomas Petazzoni
  0 siblings, 1 reply; 16+ messages in thread
From: Fabrice Fontaine @ 2018-11-03 13:53 UTC (permalink / raw)
  To: buildroot

Dear Thomas,
Le sam. 3 nov. 2018 ? 14:20, Thomas Petazzoni
<thomas.petazzoni@bootlin.com> a ?crit :
>
> Hello,
>
> On Sat,  3 Nov 2018 13:27:58 +0100, Fabrice Fontaine wrote:
> > Do not return an error if architecture is "Linux BPF" (in-kernel
> > bytecode machine)
> >
> > Fixes:
> >  - http://autobuild.buildroot.org/results/c18fb7f1ac81496db9c3a4e91ea028a26ca600b0
> >
> > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> > ---
> >  support/scripts/check-bin-arch | 5 +++++
> >  1 file changed, 5 insertions(+)
> >
> > diff --git a/support/scripts/check-bin-arch b/support/scripts/check-bin-arch
> > index 7f97696735..a0de7a6ac4 100755
> > --- a/support/scripts/check-bin-arch
> > +++ b/support/scripts/check-bin-arch
> > @@ -74,6 +74,11 @@ while read f; do
> >               continue
> >       fi
> >
> > +     # If architecture is Linux BPF (in-kernel bytecode machine), continue
> > +     if test "${arch}" = "Linux BPF" ; then
> > +             continue
> > +     fi
>
> In the build failure
> http://autobuild.buildroot.org/results/c18fb7f1ac81496db9c3a4e91ea028a26ca600b0/build-end.log
> that you point, the architecture is reported as "None", not as "Linux
> BPF". Am I misunderstanding something here ?
I wasn't able to reproduce this "None" architecture issue.
But I think it was "None" because the llvm/clang found on Peter's
machine was very old (3.8):
clang -idirafter /usr/local/include -idirafter
/usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include -idirafter
/usr/include/x86_64-linux-gnu -idirafter /usr/include
-I../../../include -target bpf -O2 -c grundig.c

With my patch's serie, I'm building a host-clang in version 7.0 that
supports BPF and in this case the architecture is correctly set to
"Linux BPF".
I tested with a clang in version 6.0 installed from Ubuntu 18.04
repositories on my host machine and it was also "Linux BPF".
>
> As a first step, could we explicitly disable building BPF protocols,
> before we merge the necessary LLVM/V4L logic to build these properly ?
Ok, I will do that.
>
> Thanks,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
Best Regards,

Fabrice

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 4/4] scripts/check-bin-arch: fix failure with bpf
  2018-11-03 13:53     ` Fabrice Fontaine
@ 2018-11-03 14:00       ` Thomas Petazzoni
  0 siblings, 0 replies; 16+ messages in thread
From: Thomas Petazzoni @ 2018-11-03 14:00 UTC (permalink / raw)
  To: buildroot

Hello,

On Sat, 3 Nov 2018 14:53:48 +0100, Fabrice Fontaine wrote:

> I wasn't able to reproduce this "None" architecture issue.
> But I think it was "None" because the llvm/clang found on Peter's
> machine was very old (3.8):
> clang -idirafter /usr/local/include -idirafter
> /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include -idirafter
> /usr/include/x86_64-linux-gnu -idirafter /usr/include
> -I../../../include -target bpf -O2 -c grundig.c
> 
> With my patch's serie, I'm building a host-clang in version 7.0 that
> supports BPF and in this case the architecture is correctly set to
> "Linux BPF".
> I tested with a clang in version 6.0 installed from Ubuntu 18.04
> repositories on my host machine and it was also "Linux BPF".

OK, but then you're not fixing the problem on Peter's machine: with
your patch series, if he doesn't enable BR2_PACKAGE_ELFUTILS, libv4l
configure script will still detect the system-wide clang/llvm
installed, which will produce those bogus "None" binaries.

Which is why there is a need to explicitly disable building the BPF
protocol support, except if we know that Buildroot is providing all the
necessary dependencies.

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 3/4] libv4l: add elfutils optional dependency
  2018-11-03 13:18   ` Thomas Petazzoni
@ 2018-11-03 14:06     ` Fabrice Fontaine
  0 siblings, 0 replies; 16+ messages in thread
From: Fabrice Fontaine @ 2018-11-03 14:06 UTC (permalink / raw)
  To: buildroot

Dear Thomas,
Le sam. 3 nov. 2018 ? 14:18, Thomas Petazzoni
<thomas.petazzoni@bootlin.com> a ?crit :
>
> Hello,
>
> On Sat,  3 Nov 2018 13:27:57 +0100, Fabrice Fontaine wrote:
> > Bump to version 1.61.1 added an optional dependency to elfutils:
> > https://git.linuxtv.org/v4l-utils.git/commit/?id=d6025b0e8c7f57b0f9390f987acc5eed57360d80
> >
> > host-clang is also needed to build PBF protocols, see:
>
> PBF -> BPF
>
> > https://git.linuxtv.org/v4l-utils.git/commit/?id=91b37c0d9cb71fc2d5f78cc96aa2ef9f3bba145b
>
> I'm not sure to understand: there are two separate commits upstream,
> one that adds the elfutils dependency, one that adds the clang
> dependency. Are they both needed to have BPF protocols ? If so, why
> were those two dependencies introduced in separate commits upstream ?
Yes, BPF protocols are enabled only if elfutils is available:

AM_CONDITIONAL([HAVE_LIBELF], [test x$libelf_pkgconfig = xyes])
if test "x$libelf_pkgconfig" = "xyes"; then
AC_CHECK_PROG([CLANG], clang, clang)
AC_DEFINE([HAVE_LIBELF], [1], [libelf library is present])
else
AC_MSG_WARN(libelf library not available)
fi
>
> > +ifeq ($(BR2_PACKAGE_ELFUTILS),y)
> > +# host-clang is needed to build BPF protocols
> > +LIBV4L_DEPENDENCIES += elfutils host-clang
> > +endif
>
> I think an explicit sub-option would make sense in this case, because
> it's not trivial at all to know that you need elfutils. So I would
> prefer to have
>
> config BR2_PACKAGE_LIBV4L_KEYTABLE_BPF_PROTOCOLS
>         bool "keytable BPF protocols"
>         select BR2_PACKAGE_ELFUTILS
>         depends on BR2_USE_WCHAR # elfutils
>         depends on !BR2_STATIC_LIBS # elfutils
>         depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils
OK, I will update the patch to add this option.
>
> Thanks,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
Best Regards,

Fabrice

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 2/4] llvm: enable bpf
  2018-11-03 13:14   ` Thomas Petazzoni
@ 2018-11-03 14:14     ` Fabrice Fontaine
  2018-11-03 14:24       ` Valentin Korenblit
  0 siblings, 1 reply; 16+ messages in thread
From: Fabrice Fontaine @ 2018-11-03 14:14 UTC (permalink / raw)
  To: buildroot

Dear Thomas,
Le sam. 3 nov. 2018 ? 14:14, Thomas Petazzoni
<thomas.petazzoni@bootlin.com> a ?crit :
>
> Hello,
>
> On Sat,  3 Nov 2018 13:27:56 +0100, Fabrice Fontaine wrote:
> > BPF (in-kernel bytecode machine) is needed by libv4l
> >
> > Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> > ---
> >  package/llvm/llvm.mk | 3 +++
> >  1 file changed, 3 insertions(+)
> >
> > diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk
> > index 1f9bd447f5..dae5d3f16d 100644
> > --- a/package/llvm/llvm.mk
> > +++ b/package/llvm/llvm.mk
> > @@ -54,6 +54,9 @@ ifeq ($(BR2_PACKAGE_LLVM_AMDGPU),y)
> >  LLVM_TARGETS_TO_BUILD += AMDGPU
> >  endif
> >
> > +# Build BPF (in-kernel bytecode machine)
> > +LLVM_TARGETS_TO_BUILD += BPF
>
> Perhaps we should make this optional ? Or maybe the build time
> difference is not that significant ?
llvm and clang are already taking a long time to build on my "old"
machine, I didn't notice a significant difference with or without BPF
but I didn't measure it.
>
> Best regards,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
Best Regards,

Fabrice

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm
  2018-11-03 12:27 [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm Fabrice Fontaine
                   ` (2 preceding siblings ...)
  2018-11-03 12:27 ` [Buildroot] [PATCH 4/4] scripts/check-bin-arch: fix failure with bpf Fabrice Fontaine
@ 2018-11-03 14:15 ` Romain Naour
  2018-11-03 14:35   ` Thomas Petazzoni
  3 siblings, 1 reply; 16+ messages in thread
From: Romain Naour @ 2018-11-03 14:15 UTC (permalink / raw)
  To: buildroot

Hi Fabrice,

Le 03/11/2018 ? 13:27, Fabrice Fontaine a ?crit?:
> If BR2_PACKAGE_LLVM_TARGET_ARCH is empty because llvm is not supported
> on target, build of the host-llvm will fail on "Unknown architecture".
> 
> This is an issue because host-llvm (and host-clang) can be needed on
> host. For example the libv4l package uses clang to build BPF (in-kernel
> bytecode machine) files.
> 
> To fix this, add a new "host" default value to
> BR2_PACKAGE_LLVM_TARGET_ARCH
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> ---
>  package/llvm/Config.in | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/package/llvm/Config.in b/package/llvm/Config.in
> index 83e94660eb..0e111f1b76 100644
> --- a/package/llvm/Config.in
> +++ b/package/llvm/Config.in
> @@ -10,6 +10,7 @@ config BR2_PACKAGE_LLVM_TARGET_ARCH
>  	default "AArch64" if BR2_aarch64
>  	default "ARM" if BR2_arm || BR2_armeb
>  	default "X86" if BR2_i386 || BR2_x86_64
> +	default "host"

I'm not sure this is the correct thing to do since BR2_PACKAGE_LLVM_TARGET_ARCH
will be used for the target variant.

"host" stand for "automatic detection"

Maybe you want to add "X86" along with LLVM_TARGETS_TO_BUILD for host-llvm ?

Something like:

HOST_LLVM_TARGETS_TO_BUILD = $(LLVM_TARGETS_TO_BUILD) X86

HOST_LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD="$(subst
$(space),;,$(HOST_LLVM_TARGETS_TO_BUILD))"

Also your host must be an x86 or x86_64.

Best regards,
Romain

>  
>  config BR2_PACKAGE_LLVM
>  	bool "llvm"
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 2/4] llvm: enable bpf
  2018-11-03 14:14     ` Fabrice Fontaine
@ 2018-11-03 14:24       ` Valentin Korenblit
  2018-11-03 14:45         ` Fabrice Fontaine
  0 siblings, 1 reply; 16+ messages in thread
From: Valentin Korenblit @ 2018-11-03 14:24 UTC (permalink / raw)
  To: buildroot

Fabrice, Thomas,

> Dear Thomas,
> Le sam. 3 nov. 2018 ? 14:14, Thomas Petazzoni
> <thomas.petazzoni@bootlin.com> a ?crit :
>> Hello,
>>
>> On Sat,  3 Nov 2018 13:27:56 +0100, Fabrice Fontaine wrote:
>>> BPF (in-kernel bytecode machine) is needed by libv4l
>>>
>>> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
>>> ---
>>>   package/llvm/llvm.mk | 3 +++
>>>   1 file changed, 3 insertions(+)
>>>
>>> diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk
>>> index 1f9bd447f5..dae5d3f16d 100644
>>> --- a/package/llvm/llvm.mk
>>> +++ b/package/llvm/llvm.mk
>>> @@ -54,6 +54,9 @@ ifeq ($(BR2_PACKAGE_LLVM_AMDGPU),y)
>>>   LLVM_TARGETS_TO_BUILD += AMDGPU
>>>   endif
>>>
>>> +# Build BPF (in-kernel bytecode machine)
>>> +LLVM_TARGETS_TO_BUILD += BPF
>> Perhaps we should make this optional ? Or maybe the build time
>> difference is not that significant ?
> llvm and clang are already taking a long time to build on my "old"
> machine, I didn't notice a significant difference with or without BPF
> but I didn't measure it.

I think we should add a new option just like we did with AMDGPU backend
as we said we were only going to build backend for target archictecture
by default.

>> Best regards,
>>
>> Thomas
>> --
>> Thomas Petazzoni, CTO, Bootlin
>> Embedded Linux and Kernel engineering
>> https://bootlin.com
> Best Regards,
>
> Fabrice

Best regards,

Valentin

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20181103/bf3d35b5/attachment.html>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm
  2018-11-03 14:15 ` [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm Romain Naour
@ 2018-11-03 14:35   ` Thomas Petazzoni
  2018-11-03 15:11     ` Fabrice Fontaine
  0 siblings, 1 reply; 16+ messages in thread
From: Thomas Petazzoni @ 2018-11-03 14:35 UTC (permalink / raw)
  To: buildroot

Hello,

On Sat, 3 Nov 2018 15:15:30 +0100, Romain Naour wrote:

> > @@ -10,6 +10,7 @@ config BR2_PACKAGE_LLVM_TARGET_ARCH
> >  	default "AArch64" if BR2_aarch64
> >  	default "ARM" if BR2_arm || BR2_armeb
> >  	default "X86" if BR2_i386 || BR2_x86_64
> > +	default "host"  
> 
> I'm not sure this is the correct thing to do since BR2_PACKAGE_LLVM_TARGET_ARCH
> will be used for the target variant.
> 
> "host" stand for "automatic detection"
> 
> Maybe you want to add "X86" along with LLVM_TARGETS_TO_BUILD for host-llvm ?
> 
> Something like:
> 
> HOST_LLVM_TARGETS_TO_BUILD = $(LLVM_TARGETS_TO_BUILD) X86

For the host, it makes sense to use "automatic detection", so what
about:

HOST_LLVM_TARGETS_TO_BUILD = $(LLVM_TARGETS_TO_BUILD) host

i.e, have support for the target architecture, but also the
architecture ?

However, presumably, LLVM may not have support for all host
architectures, so this calls for a BR2_PACKAGE_HOST_LLVM_ARCH_SUPPORTS ?

Best regards,

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 2/4] llvm: enable bpf
  2018-11-03 14:24       ` Valentin Korenblit
@ 2018-11-03 14:45         ` Fabrice Fontaine
  0 siblings, 0 replies; 16+ messages in thread
From: Fabrice Fontaine @ 2018-11-03 14:45 UTC (permalink / raw)
  To: buildroot

Dear Valentin,
Le sam. 3 nov. 2018 ? 15:24, Valentin Korenblit
<valentinkorenblit@gmail.com> a ?crit :
>
> Fabrice, Thomas,
>
> Dear Thomas,
> Le sam. 3 nov. 2018 ? 14:14, Thomas Petazzoni
> <thomas.petazzoni@bootlin.com> a ?crit :
>
> Hello,
>
> On Sat,  3 Nov 2018 13:27:56 +0100, Fabrice Fontaine wrote:
>
> BPF (in-kernel bytecode machine) is needed by libv4l
>
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> ---
>  package/llvm/llvm.mk | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk
> index 1f9bd447f5..dae5d3f16d 100644
> --- a/package/llvm/llvm.mk
> +++ b/package/llvm/llvm.mk
> @@ -54,6 +54,9 @@ ifeq ($(BR2_PACKAGE_LLVM_AMDGPU),y)
>  LLVM_TARGETS_TO_BUILD += AMDGPU
>  endif
>
> +# Build BPF (in-kernel bytecode machine)
> +LLVM_TARGETS_TO_BUILD += BPF
>
> Perhaps we should make this optional ? Or maybe the build time
> difference is not that significant ?
>
> llvm and clang are already taking a long time to build on my "old"
> machine, I didn't notice a significant difference with or without BPF
> but I didn't measure it.
>
> I think we should add a new option just like we did with AMDGPU backend
> as we said we were only going to build backend for target archictecture
> by default.
I would like some advice to add this option, this BPF option should be
selectable even if BR2_PACKAGE_LLVM is not set as llvm is not needed
on the target.

So should I put some kind of hidden option like:
config BR2_PACKAGE_HOST_LLVM_TARGET_BPF
        bool

and select it in libv4l/Config.in?
>
> Best regards,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
>
> Best Regards,
>
> Fabrice
>
> Best regards,
>
> Valentin
Best Regards,

Fabrice

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm
  2018-11-03 14:35   ` Thomas Petazzoni
@ 2018-11-03 15:11     ` Fabrice Fontaine
  0 siblings, 0 replies; 16+ messages in thread
From: Fabrice Fontaine @ 2018-11-03 15:11 UTC (permalink / raw)
  To: buildroot

Dear Thomas,
Le sam. 3 nov. 2018 ? 15:36, Thomas Petazzoni
<thomas.petazzoni@bootlin.com> a ?crit :
>
> Hello,
>
> On Sat, 3 Nov 2018 15:15:30 +0100, Romain Naour wrote:
>
> > > @@ -10,6 +10,7 @@ config BR2_PACKAGE_LLVM_TARGET_ARCH
> > >     default "AArch64" if BR2_aarch64
> > >     default "ARM" if BR2_arm || BR2_armeb
> > >     default "X86" if BR2_i386 || BR2_x86_64
> > > +   default "host"
> >
> > I'm not sure this is the correct thing to do since BR2_PACKAGE_LLVM_TARGET_ARCH
> > will be used for the target variant.
> >
> > "host" stand for "automatic detection"
> >
> > Maybe you want to add "X86" along with LLVM_TARGETS_TO_BUILD for host-llvm ?
> >
> > Something like:
> >
> > HOST_LLVM_TARGETS_TO_BUILD = $(LLVM_TARGETS_TO_BUILD) X86
>
> For the host, it makes sense to use "automatic detection", so what
> about:
>
> HOST_LLVM_TARGETS_TO_BUILD = $(LLVM_TARGETS_TO_BUILD) host
>
> i.e, have support for the target architecture, but also the
> architecture ?
The issue is not with LLVM_TARGETS_TO_BUILD but with LLVM_TARGET_ARCH.
LLVM_TARGET_ARCH can't be empty and it can only contain a single
value. That why I put a new default value of "host" for
BR2_PACKAGE_LLVM_TARGET_ARCH if no other values are provided.
>
> However, presumably, LLVM may not have support for all host
> architectures, so this calls for a BR2_PACKAGE_HOST_LLVM_ARCH_SUPPORTS ?
Indeed, that would make sense. From what I can read here:
https://llvm.org/docs/GettingStarted.html#hardware, it seems that llvm
should build on x86, ARM, powerpc.
I would suggest to add this new variable:
config BR2_PACKAGE_HOST_LLVM_ARCH_SUPPORTS
        bool
        default y if BR2_HOSTARCH = "x86_64"
        default y if BR2_HOSTARCH = "x86"
        default y if BR2_HOSTARCH = "powerpc"
        default y if BR2_HOSTARCH = "arm"
        default y if BR2_HOSTARCH = "aarch64"

and do:

config BR2_PACKAGE_LLVM_TARGET_ARCH
        string
        default "AArch64" if BR2_aarch64
        default "ARM" if BR2_arm || BR2_armeb
        default "X86" if BR2_i386 || BR2_x86_64
        default "host" if BR2_PACKAGE_HOST_LLVM_ARCH_SUPPORTS

Does it make sense?
>
> Best regards,
>
> Thomas
> --
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
Best Regards,

Fabrice

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2018-11-03 15:11 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-03 12:27 [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm Fabrice Fontaine
2018-11-03 12:27 ` [Buildroot] [PATCH 2/4] llvm: enable bpf Fabrice Fontaine
2018-11-03 13:14   ` Thomas Petazzoni
2018-11-03 14:14     ` Fabrice Fontaine
2018-11-03 14:24       ` Valentin Korenblit
2018-11-03 14:45         ` Fabrice Fontaine
2018-11-03 12:27 ` [Buildroot] [PATCH 3/4] libv4l: add elfutils optional dependency Fabrice Fontaine
2018-11-03 13:18   ` Thomas Petazzoni
2018-11-03 14:06     ` Fabrice Fontaine
2018-11-03 12:27 ` [Buildroot] [PATCH 4/4] scripts/check-bin-arch: fix failure with bpf Fabrice Fontaine
2018-11-03 13:20   ` Thomas Petazzoni
2018-11-03 13:53     ` Fabrice Fontaine
2018-11-03 14:00       ` Thomas Petazzoni
2018-11-03 14:15 ` [Buildroot] [PATCH 1/4] llvm: fix build of host-llvm Romain Naour
2018-11-03 14:35   ` Thomas Petazzoni
2018-11-03 15:11     ` Fabrice Fontaine

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox