diff mbox series

[v3,1/2] package/qt5webengine: fix compile flags for arm

Message ID 20200306203410.25008-1-ps.report@gmx.net
State Changes Requested
Headers show
Series [v3,1/2] package/qt5webengine: fix compile flags for arm | expand

Commit Message

Peter Seiderer March 6, 2020, 8:34 p.m. UTC
The qt5webengine configure simple takes QT_ARCH ('arm') to determine the
chromium compiler flags and uses some hard coded ARMv7 default values
for the compiler command line: '... -march=armv7-a -mfloat-abi=hard
-mtune=generic-armv7-a -mfpu=vfpv3-d16 ...'.

This results e.g. in an illegal instruction failure for rpi zero
(reported on the mailing list, see [1]).

Disable all arm custom cpu flags (march/mfloat-abi/mtune/mfpu/mthumb) as
these are already set by the compiler wrapper (via a patch to the chromium
GN build system BUILD.gn file).

Despite the patch set all known values in the chromium GN build
system config file chromium/build/config/arm.gni to not disturb
the compile defines settings logic.

Fixes:

  $ /usr/lib/qt/examples/webengine/minimal/minimal
  Illegal instruction

[1] http://lists.busybox.net/pipermail/buildroot/2020-February/274587.html

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
---
Changes v1 -> v2:
  - use new introduced BR2_GCC_TARGET_ARCH for arm_arch as the
    previous simple approach did not work (alternative would
    be to extract the arch at runtime via gcc invocation)

Changes v2 -> v3:
  - disable all custom arm cpu flags (suggested by Thomas Petazzoni)

Notes:

  - patches tested on top of the following two patches from
    Nathan Ford

    https://patchwork.ozlabs.org/patch/1246679/
    https://patchwork.ozlabs.org/patch/1246678/

  - to prevent OOM compiled with reduced PARALLEL_JOBS via the following patch:

    --- a/package/qt5/qt5webengine/qt5webengine.mk
    +++ b/package/qt5/qt5webengine/qt5webengine.mk
    @@ -98,7 +98,8 @@ define QT5WEBENGINE_PYTHON2_SYMLINK
     endef
     QT5WEBENGINE_PRE_CONFIGURE_HOOKS += QT5WEBENGINE_PYTHON2_SYMLINK

    -QT5WEBENGINE_ENV += NINJAFLAGS="-j$(PARALLEL_JOBS)"
    +# limit to 2/3 PARALLEL_JOBS to prevent OOM situation
    +QT5WEBENGINE_ENV += NINJAFLAGS="-j$(shell echo $(PARALLEL_JOBS)*2/3+1 | bc )"

     ifeq ($(BR2_PACKAGE_QT5_VERSION_LATEST),y)
     define QT5WEBENGINE_CREATE_HOST_PKG_CONFIG

  - to check the compiler inokations enabeld ninja verbose mode via the
    following patch:

    --- a/package/qt5/qt5webengine/qt5webengine.mk
    +++ b/package/qt5/qt5webengine/qt5webengine.mk
    @@ -99,7 +99,7 @@ endef
     QT5WEBENGINE_PRE_CONFIGURE_HOOKS += QT5WEBENGINE_PYTHON2_SYMLINK

     # limit to 2/3 PARALLEL_JOBS to prevent OOM situation
    -QT5WEBENGINE_ENV += NINJAFLAGS="-j$(shell echo $(PARALLEL_JOBS)*2/3+1 | bc )"
    +QT5WEBENGINE_ENV += NINJAFLAGS="-v -j$(shell echo $(PARALLEL_JOBS)*2/3+1 | bc )"

     ifeq ($(BR2_PACKAGE_QT5_VERSION_LATEST),y)
     define QT5WEBENGINE_CREATE_HOST_PKG_CONFIG
---
 ...n-disable-all-custom-arm-cpu-compile.patch | 79 +++++++++++++++++++
 package/qt5/qt5webengine/qt5webengine.mk      | 69 ++++++++++++++++
 2 files changed, 148 insertions(+)
 create mode 100644 package/qt5/qt5webengine/5.12.7/0002-chromium-BUILD.gn-disable-all-custom-arm-cpu-compile.patch

Comments

Thomas Petazzoni Jan. 9, 2022, 2:03 p.m. UTC | #1
Hello Peter,

On Fri,  6 Mar 2020 21:34:09 +0100
Peter Seiderer <ps.report@gmx.net> wrote:

> The qt5webengine configure simple takes QT_ARCH ('arm') to determine the
> chromium compiler flags and uses some hard coded ARMv7 default values
> for the compiler command line: '... -march=armv7-a -mfloat-abi=hard
> -mtune=generic-armv7-a -mfpu=vfpv3-d16 ...'.
> 
> This results e.g. in an illegal instruction failure for rpi zero
> (reported on the mailing list, see [1]).
> 
> Disable all arm custom cpu flags (march/mfloat-abi/mtune/mfpu/mthumb) as
> these are already set by the compiler wrapper (via a patch to the chromium
> GN build system BUILD.gn file).
> 
> Despite the patch set all known values in the chromium GN build
> system config file chromium/build/config/arm.gni to not disturb
> the compile defines settings logic.

It's been a very long time since this patch was posted. Does the
problem still occur? There is a patch series from James Hilliard
upgrading qt5webengine:

  https://patchwork.ozlabs.org/project/buildroot/list/?series=279766

Some more questions below.

> +diff --git a/src/3rdparty/chromium/build/config/compiler/BUILD.gn b/src/3rdparty/chromium/build/config/compiler/BUILD.gn
> +index d223a4f6f..16dec5c6a 100644
> +--- a/src/3rdparty/chromium/build/config/compiler/BUILD.gn
> ++++ b/src/3rdparty/chromium/build/config/compiler/BUILD.gn
> +@@ -672,7 +672,8 @@ config("compiler") {
> +     # TODO(pcc): The contents of .ARM.attributes should be based on the
> +     # -march flag passed at compile time (see llvm.org/pr36291).
> +     if (current_cpu == "arm") {
> +-      ldflags += [ "-march=$arm_arch" ]
> ++      # disabled for the buildroot compile
> ++      # ldflags += [ "-march=$arm_arch" ]
> +     }
> +   }
> + 
> +@@ -752,13 +753,15 @@ config("compiler_cpu_abi") {
> +         ldflags += [ "--target=arm-linux-gnueabihf" ]
> +       }
> +       if (!is_nacl) {
> +-        cflags += [
> +-          "-march=$arm_arch",
> +-          "-mfloat-abi=$arm_float_abi",
> +-        ]
> ++        # disabled for the buildroot compile
> ++        # cflags += [
> ++        #   "-march=$arm_arch",
> ++        #   "-mfloat-abi=$arm_float_abi",
> ++        # ]
> +       }
> +       if (arm_tune != "") {
> +-        cflags += [ "-mtune=$arm_tune" ]
> ++        # disabled for the buildroot compile
> ++        # cflags += [ "-mtune=$arm_tune" ]
> +       }
> +     } else if (current_cpu == "arm64") {
> +       if (is_clang && !is_android && !is_nacl && !is_fuchsia) {
> +@@ -1130,7 +1133,9 @@ config("clang_revision") {
> + 
> + config("compiler_arm_fpu") {
> +   if (current_cpu == "arm" && !is_ios && !is_nacl) {
> +-    cflags = [ "-mfpu=$arm_fpu" ]
> ++    # disabled for the buildroot compile
> ++    # cflags = [ "-mfpu=$arm_fpu" ]
> ++    cflags = []
> +     asmflags = cflags
> +   }
> + }
> +@@ -1138,7 +1143,9 @@ config("compiler_arm_fpu") {
> + config("compiler_arm_thumb") {
> +   if (current_cpu == "arm" && arm_use_thumb && is_posix &&
> +       !(is_mac || is_ios || is_nacl)) {
> +-    cflags = [ "-mthumb" ]
> ++    # disabled for the buildroot compile
> ++    # cflags = [ "-mthumb" ]
> ++    cflags = []
> +     if (is_android && !is_clang) {
> +       # Clang doesn't support this option.
> +       cflags += [ "-mthumb-interwork" ]

You're fixing the problem for ARM, but is there some similar mess for
other CPU architectures?

> +# configure arm architecture paramter for chromium compile
> +ifeq ($(BR2_arm),y)
> +ifeq ($(BR2_ARM_CPU_ARMV4),y)
> +define QT5WEBENGINE_CONFIGURE_ARM_VERSION
> +	$(SED) 's/^    arm_version = 7$$/    arm_version = 4/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +endif
> +
> +ifeq ($(BR2_ARM_CPU_ARMV5),y)
> +define QT5WEBENGINE_CONFIGURE_ARM_VERSION
> +	$(SED) 's/^    arm_version = 7$$/    arm_version = 5/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +endif
> +
> +ifeq ($(BR2_ARM_CPU_ARMV6),y)
> +define QT5WEBENGINE_CONFIGURE_ARM_VERSION
> +	$(SED) 's/^    arm_version = 7$$/    arm_version = 6/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +endif
> +
> +# no entriy for BR2_ARM_CPU_ARMV7A/BR2_ARM_CPU_ARMV7M, arm_vesion = 7 is already set by default
> +
> +ifeq ($(BR2_ARM_CPU_ARMV8A),y)
> +define QT5WEBENGINE_CONFIGURE_ARM_VERSION
> +	$(SED) 's/^    arm_version = 7$$/    arm_version = 8/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +endif
> +
> +# not known by buildroot, set to some dummy to disable all default logic
> +define QT5WEBENGINE_CONFIGURE_ARM_ARCH
> +	$(SED) 's/^    arm_arch = ""$$/    arm_arch = "arm-dummy-arch"/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +
> +define QT5WEBENGINE_CONFIGURE_ARM_FPU
> +	$(SED) 's/^    arm_fpu = ""$$/    arm_fpu = $(BR2_GCC_TARGET_FPU)/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +
> +define QT5WEBENGINE_CONFIGURE_ARM_FLOAT_ABI
> +	$(SED) 's/^    arm_float_abi = ""$$/    arm_float_abi = $(BR2_GCC_TARGET_FLOAT_ABI)/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +
> +define QT5WEBENGINE_CONFIGURE_ARM_TUNE
> +	$(SED) 's/^    arm_tune = ""$$/    arm_tune = $(BR2_GCC_TARGET_CPU)/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +
> +ifeq ($(BR2_ARM_CPU_HAS_NEON),y)
> +define QT5WEBENGINE_CONFIGURE_ARM_NEON
> +	$(SED) 's/^    arm_use_neon = ""$$/    arm_use_neon = "true"/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +else
> +define QT5WEBENGINE_CONFIGURE_ARM_NEON
> +	$(SED) 's/^    arm_use_neon = ""$$/    arm_use_neon = "false"/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +endif
> +
> +ifeq ($(BR2_ARM_CPU_HAS_THUMB),)
> +define QT5WEBENGINE_CONFIGURE_ARM_THUMB
> +	$(SED) 's/^    arm_use_thumb = true$$/    arm_use_thumb = false/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> +endef
> +endif
> +endif

What are all those variables doing in the GN Chromium stuff?

I'm kind of worried by two aspects:

 - This is all very ARM specific, but we have other CPU architectures
   supported in Buildroot

 - We already pass the proper CFLAGS, so it's always annoying to
   duplicate this logic into package-specific flags

Thomas
Peter Seiderer Jan. 15, 2022, 10:53 p.m. UTC | #2
Hello Thomas,

On Sun, 9 Jan 2022 15:03:04 +0100, Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote:

> Hello Peter,
>
> On Fri,  6 Mar 2020 21:34:09 +0100
> Peter Seiderer <ps.report@gmx.net> wrote:
>
> > The qt5webengine configure simple takes QT_ARCH ('arm') to determine the
> > chromium compiler flags and uses some hard coded ARMv7 default values
> > for the compiler command line: '... -march=armv7-a -mfloat-abi=hard
> > -mtune=generic-armv7-a -mfpu=vfpv3-d16 ...'.
> >
> > This results e.g. in an illegal instruction failure for rpi zero
> > (reported on the mailing list, see [1]).
> >
> > Disable all arm custom cpu flags (march/mfloat-abi/mtune/mfpu/mthumb) as
> > these are already set by the compiler wrapper (via a patch to the chromium
> > GN build system BUILD.gn file).
> >
> > Despite the patch set all known values in the chromium GN build
> > system config file chromium/build/config/arm.gni to not disturb
> > the compile defines settings logic.
>
> It's been a very long time since this patch was posted. Does the
> problem still occur? There is a patch series from James Hilliard
> upgrading qt5webengine:
>
>   https://patchwork.ozlabs.org/project/buildroot/list/?series=279766

Problem still exits with qt5webengine-5.15.2 and qt5webengine-5.15.8...

>
> Some more questions below.
>
> > +diff --git a/src/3rdparty/chromium/build/config/compiler/BUILD.gn b/src/3rdparty/chromium/build/config/compiler/BUILD.gn
> > +index d223a4f6f..16dec5c6a 100644
> > +--- a/src/3rdparty/chromium/build/config/compiler/BUILD.gn
> > ++++ b/src/3rdparty/chromium/build/config/compiler/BUILD.gn
> > +@@ -672,7 +672,8 @@ config("compiler") {
> > +     # TODO(pcc): The contents of .ARM.attributes should be based on the
> > +     # -march flag passed at compile time (see llvm.org/pr36291).
> > +     if (current_cpu == "arm") {
> > +-      ldflags += [ "-march=$arm_arch" ]
> > ++      # disabled for the buildroot compile
> > ++      # ldflags += [ "-march=$arm_arch" ]
> > +     }
> > +   }
> > +
> > +@@ -752,13 +753,15 @@ config("compiler_cpu_abi") {
> > +         ldflags += [ "--target=arm-linux-gnueabihf" ]
> > +       }
> > +       if (!is_nacl) {
> > +-        cflags += [
> > +-          "-march=$arm_arch",
> > +-          "-mfloat-abi=$arm_float_abi",
> > +-        ]
> > ++        # disabled for the buildroot compile
> > ++        # cflags += [
> > ++        #   "-march=$arm_arch",
> > ++        #   "-mfloat-abi=$arm_float_abi",
> > ++        # ]
> > +       }
> > +       if (arm_tune != "") {
> > +-        cflags += [ "-mtune=$arm_tune" ]
> > ++        # disabled for the buildroot compile
> > ++        # cflags += [ "-mtune=$arm_tune" ]
> > +       }
> > +     } else if (current_cpu == "arm64") {
> > +       if (is_clang && !is_android && !is_nacl && !is_fuchsia) {
> > +@@ -1130,7 +1133,9 @@ config("clang_revision") {
> > +
> > + config("compiler_arm_fpu") {
> > +   if (current_cpu == "arm" && !is_ios && !is_nacl) {
> > +-    cflags = [ "-mfpu=$arm_fpu" ]
> > ++    # disabled for the buildroot compile
> > ++    # cflags = [ "-mfpu=$arm_fpu" ]
> > ++    cflags = []
> > +     asmflags = cflags
> > +   }
> > + }
> > +@@ -1138,7 +1143,9 @@ config("compiler_arm_fpu") {
> > + config("compiler_arm_thumb") {
> > +   if (current_cpu == "arm" && arm_use_thumb && is_posix &&
> > +       !(is_mac || is_ios || is_nacl)) {
> > +-    cflags = [ "-mthumb" ]
> > ++    # disabled for the buildroot compile
> > ++    # cflags = [ "-mthumb" ]
> > ++    cflags = []
> > +     if (is_android && !is_clang) {
> > +       # Clang doesn't support this option.
> > +       cflags += [ "-mthumb-interwork" ]
>
> You're fixing the problem for ARM, but is there some similar mess for
> other CPU architectures?
>
> > +# configure arm architecture paramter for chromium compile
> > +ifeq ($(BR2_arm),y)
> > +ifeq ($(BR2_ARM_CPU_ARMV4),y)
> > +define QT5WEBENGINE_CONFIGURE_ARM_VERSION
> > +	$(SED) 's/^    arm_version = 7$$/    arm_version = 4/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +endif
> > +
> > +ifeq ($(BR2_ARM_CPU_ARMV5),y)
> > +define QT5WEBENGINE_CONFIGURE_ARM_VERSION
> > +	$(SED) 's/^    arm_version = 7$$/    arm_version = 5/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +endif
> > +
> > +ifeq ($(BR2_ARM_CPU_ARMV6),y)
> > +define QT5WEBENGINE_CONFIGURE_ARM_VERSION
> > +	$(SED) 's/^    arm_version = 7$$/    arm_version = 6/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +endif
> > +
> > +# no entriy for BR2_ARM_CPU_ARMV7A/BR2_ARM_CPU_ARMV7M, arm_vesion = 7 is already set by default
> > +
> > +ifeq ($(BR2_ARM_CPU_ARMV8A),y)
> > +define QT5WEBENGINE_CONFIGURE_ARM_VERSION
> > +	$(SED) 's/^    arm_version = 7$$/    arm_version = 8/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +endif
> > +
> > +# not known by buildroot, set to some dummy to disable all default logic
> > +define QT5WEBENGINE_CONFIGURE_ARM_ARCH
> > +	$(SED) 's/^    arm_arch = ""$$/    arm_arch = "arm-dummy-arch"/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +
> > +define QT5WEBENGINE_CONFIGURE_ARM_FPU
> > +	$(SED) 's/^    arm_fpu = ""$$/    arm_fpu = $(BR2_GCC_TARGET_FPU)/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +
> > +define QT5WEBENGINE_CONFIGURE_ARM_FLOAT_ABI
> > +	$(SED) 's/^    arm_float_abi = ""$$/    arm_float_abi = $(BR2_GCC_TARGET_FLOAT_ABI)/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +
> > +define QT5WEBENGINE_CONFIGURE_ARM_TUNE
> > +	$(SED) 's/^    arm_tune = ""$$/    arm_tune = $(BR2_GCC_TARGET_CPU)/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +
> > +ifeq ($(BR2_ARM_CPU_HAS_NEON),y)
> > +define QT5WEBENGINE_CONFIGURE_ARM_NEON
> > +	$(SED) 's/^    arm_use_neon = ""$$/    arm_use_neon = "true"/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +else
> > +define QT5WEBENGINE_CONFIGURE_ARM_NEON
> > +	$(SED) 's/^    arm_use_neon = ""$$/    arm_use_neon = "false"/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +endif
> > +
> > +ifeq ($(BR2_ARM_CPU_HAS_THUMB),)
> > +define QT5WEBENGINE_CONFIGURE_ARM_THUMB
> > +	$(SED) 's/^    arm_use_thumb = true$$/    arm_use_thumb = false/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
> > +endef
> > +endif
> > +endif
>
> What are all those variables doing in the GN Chromium stuff?

Setting compiler flags e.g.

	arm_use_thumb --> -mthumb
	arm_use_neon  --> -DUSE_NEON and influences arm_fpu setting (if not already set)...

>
> I'm kind of worried by two aspects:
>
>  - This is all very ARM specific, but we have other CPU architectures
>    supported in Buildroot

Yes there is a although some x86/x64 logic setting e.g. -m32/-m64 and
-msse2/-mfpmath=sse/-mmmx and some mips/ppc/s390 and more..., but did
only take a deeper look at the arm part as the reported failure was
about rpi-zero...

>
>  - We already pass the proper CFLAGS, so it's always annoying to
>    duplicate this logic into package-specific flags

Yes... ;-)

Regards,
Peter

>
> Thomas
diff mbox series

Patch

diff --git a/package/qt5/qt5webengine/5.12.7/0002-chromium-BUILD.gn-disable-all-custom-arm-cpu-compile.patch b/package/qt5/qt5webengine/5.12.7/0002-chromium-BUILD.gn-disable-all-custom-arm-cpu-compile.patch
new file mode 100644
index 0000000000..e69ce40696
--- /dev/null
+++ b/package/qt5/qt5webengine/5.12.7/0002-chromium-BUILD.gn-disable-all-custom-arm-cpu-compile.patch
@@ -0,0 +1,79 @@ 
+From 51e83c5619cedecabcce41f9d2a1e0016ea72e00 Mon Sep 17 00:00:00 2001
+From: Peter Seiderer <ps.report@gmx.net>
+Date: Mon, 2 Mar 2020 21:29:58 +0100
+Subject: [PATCH] chromium/BUILD.gn: disable all custom arm cpu compiler flags
+
+Disable all custom arm cpu compiler flags as these are already set
+by the buildroot compiler wrapper:
+
+  - march
+  - mfloat-abi
+  - mtune
+  - mfpu
+  - mthumb
+
+Signed-off-by: Peter Seiderer <ps.report@gmx.net>
+---
+ .../chromium/build/config/compiler/BUILD.gn   | 23 ++++++++++++-------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+diff --git a/src/3rdparty/chromium/build/config/compiler/BUILD.gn b/src/3rdparty/chromium/build/config/compiler/BUILD.gn
+index d223a4f6f..16dec5c6a 100644
+--- a/src/3rdparty/chromium/build/config/compiler/BUILD.gn
++++ b/src/3rdparty/chromium/build/config/compiler/BUILD.gn
+@@ -672,7 +672,8 @@ config("compiler") {
+     # TODO(pcc): The contents of .ARM.attributes should be based on the
+     # -march flag passed at compile time (see llvm.org/pr36291).
+     if (current_cpu == "arm") {
+-      ldflags += [ "-march=$arm_arch" ]
++      # disabled for the buildroot compile
++      # ldflags += [ "-march=$arm_arch" ]
+     }
+   }
+ 
+@@ -752,13 +753,15 @@ config("compiler_cpu_abi") {
+         ldflags += [ "--target=arm-linux-gnueabihf" ]
+       }
+       if (!is_nacl) {
+-        cflags += [
+-          "-march=$arm_arch",
+-          "-mfloat-abi=$arm_float_abi",
+-        ]
++        # disabled for the buildroot compile
++        # cflags += [
++        #   "-march=$arm_arch",
++        #   "-mfloat-abi=$arm_float_abi",
++        # ]
+       }
+       if (arm_tune != "") {
+-        cflags += [ "-mtune=$arm_tune" ]
++        # disabled for the buildroot compile
++        # cflags += [ "-mtune=$arm_tune" ]
+       }
+     } else if (current_cpu == "arm64") {
+       if (is_clang && !is_android && !is_nacl && !is_fuchsia) {
+@@ -1130,7 +1133,9 @@ config("clang_revision") {
+ 
+ config("compiler_arm_fpu") {
+   if (current_cpu == "arm" && !is_ios && !is_nacl) {
+-    cflags = [ "-mfpu=$arm_fpu" ]
++    # disabled for the buildroot compile
++    # cflags = [ "-mfpu=$arm_fpu" ]
++    cflags = []
+     asmflags = cflags
+   }
+ }
+@@ -1138,7 +1143,9 @@ config("compiler_arm_fpu") {
+ config("compiler_arm_thumb") {
+   if (current_cpu == "arm" && arm_use_thumb && is_posix &&
+       !(is_mac || is_ios || is_nacl)) {
+-    cflags = [ "-mthumb" ]
++    # disabled for the buildroot compile
++    # cflags = [ "-mthumb" ]
++    cflags = []
+     if (is_android && !is_clang) {
+       # Clang doesn't support this option.
+       cflags += [ "-mthumb-interwork" ]
+-- 
+2.25.1
+
diff --git a/package/qt5/qt5webengine/qt5webengine.mk b/package/qt5/qt5webengine/qt5webengine.mk
index 45d175cfb1..7337b67e9d 100644
--- a/package/qt5/qt5webengine/qt5webengine.mk
+++ b/package/qt5/qt5webengine/qt5webengine.mk
@@ -109,7 +109,76 @@  QT5WEBENGINE_PRE_CONFIGURE_HOOKS += QT5WEBENGINE_CREATE_HOST_PKG_CONFIG
 QT5WEBENGINE_ENV += GN_PKG_CONFIG_HOST=$(@D)/host-bin/host-pkg-config
 endif
 
+# configure arm architecture paramter for chromium compile
+ifeq ($(BR2_arm),y)
+ifeq ($(BR2_ARM_CPU_ARMV4),y)
+define QT5WEBENGINE_CONFIGURE_ARM_VERSION
+	$(SED) 's/^    arm_version = 7$$/    arm_version = 4/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+endif
+
+ifeq ($(BR2_ARM_CPU_ARMV5),y)
+define QT5WEBENGINE_CONFIGURE_ARM_VERSION
+	$(SED) 's/^    arm_version = 7$$/    arm_version = 5/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+endif
+
+ifeq ($(BR2_ARM_CPU_ARMV6),y)
+define QT5WEBENGINE_CONFIGURE_ARM_VERSION
+	$(SED) 's/^    arm_version = 7$$/    arm_version = 6/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+endif
+
+# no entriy for BR2_ARM_CPU_ARMV7A/BR2_ARM_CPU_ARMV7M, arm_vesion = 7 is already set by default
+
+ifeq ($(BR2_ARM_CPU_ARMV8A),y)
+define QT5WEBENGINE_CONFIGURE_ARM_VERSION
+	$(SED) 's/^    arm_version = 7$$/    arm_version = 8/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+endif
+
+# not known by buildroot, set to some dummy to disable all default logic
+define QT5WEBENGINE_CONFIGURE_ARM_ARCH
+	$(SED) 's/^    arm_arch = ""$$/    arm_arch = "arm-dummy-arch"/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+
+define QT5WEBENGINE_CONFIGURE_ARM_FPU
+	$(SED) 's/^    arm_fpu = ""$$/    arm_fpu = $(BR2_GCC_TARGET_FPU)/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+
+define QT5WEBENGINE_CONFIGURE_ARM_FLOAT_ABI
+	$(SED) 's/^    arm_float_abi = ""$$/    arm_float_abi = $(BR2_GCC_TARGET_FLOAT_ABI)/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+
+define QT5WEBENGINE_CONFIGURE_ARM_TUNE
+	$(SED) 's/^    arm_tune = ""$$/    arm_tune = $(BR2_GCC_TARGET_CPU)/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+
+ifeq ($(BR2_ARM_CPU_HAS_NEON),y)
+define QT5WEBENGINE_CONFIGURE_ARM_NEON
+	$(SED) 's/^    arm_use_neon = ""$$/    arm_use_neon = "true"/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+else
+define QT5WEBENGINE_CONFIGURE_ARM_NEON
+	$(SED) 's/^    arm_use_neon = ""$$/    arm_use_neon = "false"/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+endif
+
+ifeq ($(BR2_ARM_CPU_HAS_THUMB),)
+define QT5WEBENGINE_CONFIGURE_ARM_THUMB
+	$(SED) 's/^    arm_use_thumb = true$$/    arm_use_thumb = false/' $(@D)/src/3rdparty/chromium/build/config/arm.gni
+endef
+endif
+endif
+
 define QT5WEBENGINE_CONFIGURE_CMDS
+	$(QT5WEBENGINE_CONFIGURE_ARM_VERSION)
+	$(QT5WEBENGINE_CONFIGURE_ARM_ARCH)
+	$(QT5WEBENGINE_CONFIGURE_ARM_FPU)
+	$(QT5WEBENGINE_CONFIGURE_ARM_FLOAT_ABI)
+	$(QT5WEBENGINE_CONFIGURE_ARM_TUNE)
+	$(QT5WEBENGINE_CONFIGURE_ARM_NEON)
+	$(QT5WEBENGINE_CONFIGURE_ARM_THUMB)
 	(cd $(@D); $(TARGET_MAKE_ENV) $(QT5WEBENGINE_ENV) $(HOST_DIR)/bin/qmake $(QT5WEBENGINE_QMAKEFLAGS))
 endef