Message ID | 20200302091926.19308-2-ps.report@gmx.net |
---|---|
State | Superseded |
Headers | show |
Series | None | expand |
On Mon, 2 Mar 2020 10:19:26 +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]). > > Custom values could be set in the file src/3rdparty/chromium/build/config/arm.gni > (as tested by an proof-of-concept patch [2]). > > [1] http://lists.busybox.net/pipermail/buildroot/2020-February/274587.html > [2] http://lists.busybox.net/pipermail/buildroot/2020-February/274586.html > > Signed-off-by: Peter Seiderer <ps.report@gmx.net> Could we instead ask this thing to not do all this sorcery, and instead just use the compiler as-is, without passing crazy architecture-specific compiler flags ? Thomas
Hello Thomas, On Mon, 2 Mar 2020 14:30:07 +0100, Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote: > On Mon, 2 Mar 2020 10:19:26 +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]). > > > > Custom values could be set in the file src/3rdparty/chromium/build/config/arm.gni > > (as tested by an proof-of-concept patch [2]). > > > > [1] http://lists.busybox.net/pipermail/buildroot/2020-February/274587.html > > [2] http://lists.busybox.net/pipermail/buildroot/2020-February/274586.html > > > > Signed-off-by: Peter Seiderer <ps.report@gmx.net> > > Could we instead ask this thing to not do all this sorcery, and instead > just use the compiler as-is, without passing crazy > architecture-specific compiler flags ? Disabled all march/mfloat-abi/mtune/mfpu flags with the following patch: --- a/src/3rdparty/chromium/build/config/compiler/BUILD.gn +++ b/src/3rdparty/chromium/build/config/compiler/BUILD.gn @@ -672,7 +672,7 @@ 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" ] +# ldflags += [ "-march=$arm_arch" ] } } @@ -752,13 +752,13 @@ config("compiler_cpu_abi") { ldflags += [ "--target=arm-linux-gnueabihf" ] } if (!is_nacl) { - cflags += [ - "-march=$arm_arch", - "-mfloat-abi=$arm_float_abi", - ] +# cflags += [ +# "-march=$arm_arch", +# "-mfloat-abi=$arm_float_abi", +# ] } if (arm_tune != "") { - cflags += [ "-mtune=$arm_tune" ] +# cflags += [ "-mtune=$arm_tune" ] } } else if (current_cpu == "arm64") { if (is_clang && !is_android && !is_nacl && !is_fuchsia) { @@ -1130,7 +1130,8 @@ config("clang_revision") { config("compiler_arm_fpu") { if (current_cpu == "arm" && !is_ios && !is_nacl) { - cflags = [ "-mfpu=$arm_fpu" ] +# cflags = [ "-mfpu=$arm_fpu" ] + cflags = [ ] asmflags = cflags } } Quick (if you call can call it quick with miniumum 50 minutes compile time) worked for a buildroot toolchain (which defaults to the right cpu) and the rpi zero testcase..., but now no buildroot specific flags are used for the compile (no optimize, no custom, no cpu type etc.)..., will work with compilers with the right default values... Not sure if other optional compiles depend on the right setting of one of the arm_... parameters... Regards, Peter > > Thomas
Hello Peter, On Mon, 2 Mar 2020 23:01:55 +0100 Peter Seiderer <ps.report@gmx.net> wrote: > > Could we instead ask this thing to not do all this sorcery, and instead > > just use the compiler as-is, without passing crazy > > architecture-specific compiler flags ? > > Disabled all march/mfloat-abi/mtune/mfpu flags with the following patch: [...] Thanks for this work! To me this feels like a better solution, even though it's annoying to maintain such a local patch. I assume there's pretty much zero chance to get this merged by upstream Chromium, and then back into the qt5webengine code anyway. > Quick (if you call can call it quick with miniumum 50 minutes compile time) > worked for a buildroot toolchain (which defaults to the right cpu) and > the rpi zero testcase..., but now no buildroot specific flags are > used for the compile (no optimize, no custom, no cpu type etc.)..., > will work with compilers with the right default values... The CPU type is encoded into the compiler wrapper. So it's really only the optimization/debug flags that you will be missing. Thomas
diff --git a/package/qt5/qt5webengine/qt5webengine.mk b/package/qt5/qt5webengine/qt5webengine.mk index 898725937b..9596c8f178 100644 --- a/package/qt5/qt5webengine/qt5webengine.mk +++ b/package/qt5/qt5webengine/qt5webengine.mk @@ -63,7 +63,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 as 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 + +define QT5WEBENGINE_CONFIGURE_ARM_ARCH + $(SED) 's/^ arm_arch = ""$$/ arm_arch = $(BR2_GCC_TARGET_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 + $(SED) 's/^ arm_optionally_use_neon = false$$/ arm_optionally_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