mesa/go/binutils fixes
cover mesa/go/binutils fixes
mesa failed to build with llvm installed on build host
go would not package target recipes correclty.
enable threaded linking for gold regardless of it being default linker or not
The following changes since commit 477805b913a6c4b4b630e42f08cd9e59f1e4e254:
wic: selftest: account for occasional newline in debugfs file names (2017-03-14 14:39:34 +0000)
are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib kraj/pu
http://cgit.openembedded.org/openembedded-core-contrib/log/?h=kraj/pu
Khem Raj (6):
mesa: Contain configure search for llvm
mesa-gl: Drop MESA_CRYPTO from PACKAGECONFIG
go: Fix packaging for target go
binutils: Enable threading when gold is enabled and is not default
linker
musl: Update to latest
xserver-xf86-config: Remove X server module preload
meta/recipes-core/musl/musl_git.bb | 2 +- meta/recipes-devtools/binutils/binutils.inc | 2 +- meta/recipes-devtools/go/go.inc | 8 +------- meta/recipes-graphics/mesa/mesa-gl_17.0.1.bb | 2 +- meta/recipes-graphics/mesa/mesa.inc | 2 +- .../xorg-xserver/xserver-xf86-config/10-preload-modules.conf | 10 ---------- meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb | 8 -------- 7 files changed, 5 insertions(+), 29 deletions(-) delete mode 100644 meta/recipes-graphics/xorg-xserver/xserver-xf86-config/10-preload-modules.conf
Signature · 1 line
2.12.0
PATCH 1/6 mesa: Contain configure search for llvm
Configure has an unbridled check for llvm and when distro provided llvm is installed on build host it will use that from /usr/bin to poke for llvm libs and configs. This would result in a subtle errors however do_qa_configure catches it as a host include/lib contamination during configure checks
ERROR: mesa-gl-2_17.0.1-r0 do_configure: This autoconf log indicates errors, it looked at host include and/or library paths while determining system capabilities. Rerun configure task after fixing this.
This is correct because when configure detects build host provided llvm then it add the include/lib paths to compiler cmdline which are looking into /usr/include and /usr/lib
--- meta/recipes-graphics/mesa/mesa.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
meta/recipes-graphics/mesa/mesa.inc +1 -1
@@ -22,7 +22,7 @@ inherit autotools pkgconfig pythonnative gettext distro_features_check REQUIRED_DISTRO_FEATURES = "opengl" -EXTRA_OECONF = "--enable-shared-glapi" +EXTRA_OECONF = "--enable-shared-glapi --with-llvm-prefix=${STAGING_BINDIR_NATIVE}" PACKAGECONFIG ??= "gbm egl gles dri \ ${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)} \
Signature · 1 line
2.12.0
PATCH 2/6 mesa-gl: Drop MESA_CRYPTO from PACKAGECONFIG
In reply to Khem Rajwith mesa 17 crypto packageconfig has been removed
--- meta/recipes-graphics/mesa/mesa-gl_17.0.1.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
meta/recipes-graphics/mesa/mesa-gl_17.0.1.bb +1 -1
@@ -8,6 +8,6 @@ PROVIDES = "virtual/libgl virtual/mesa" S = "${WORKDIR}/mesa-${PV}" -PACKAGECONFIG ??= "dri ${MESA_CRYPTO} ${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" +PACKAGECONFIG ??= "dri ${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" EXCLUDE_FROM_WORLD = "1"
Signature · 1 line
2.12.0
PATCH 3/6 go: Fix packaging for target go
In reply to Khem RajWe need all packaging tasks when building
go for target
--- meta/recipes-devtools/go/go.inc | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
meta/recipes-devtools/go/go.inc +1 -7
@@ -74,12 +74,6 @@ do_install_class-cross() { install -m755 $f ${D}${bindir} done } +do_package_qa[noexec] = "1" -INSANE_SKIP_${PN} += "staticdev" RDEPENDS_${PN} += "perl" - -do_package[noexec] = "1" -do_packagedata[noexec] = "1" -do_package_write_ipk[noexec] = "1" -do_package_write_deb[noexec] = "1" -do_package_write_rpm[noexec] = "1"
Signature · 1 line
2.12.0
PATCH 4/6 binutils: Enable threading when gold is enabled and is not default linker
In reply to Khem RajCurrently we enable threaded linking feature of gold linker only when its used as default ld. There is no need to restrict it when its not default linker either. As long as gold is enabled, which is the case here, we should be able to do threaded linking.
--- meta/recipes-devtools/binutils/binutils.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
meta/recipes-devtools/binutils/binutils.inc +1 -1
@@ -78,7 +78,7 @@ EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \ LDGOLD_class-native = "" LDGOLD_class-crosssdk = "" -LDGOLD ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', '--enable-gold=default --enable-threads', '--enable-gold --enable-ld=default', d)}" +LDGOLD ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', '--enable-gold=default --enable-threads', '--enable-gold --enable-ld=default --enable-threads', d)}" # This is necessary due to a bug in the binutils Makefiles # EXTRA_OEMAKE = "configure-build-libiberty all"
Signature · 1 line
2.12.0
Re: [PATCH 4/6] binutils: Enable threading when gold is enabled and is not default linker
Quoted 5 lines · Khem Raj
Currently we enable threaded linking feature of gold linker only when its used as default ld. There is no need to restrict it when its not default linker either. As long as gold is enabled, which is the case here, we should be able to do threaded linking.
Turns out this broke meta-mingw's Windows SDKS (reproducible if you set SDKMACHINE = "i686-mingw32" and build binutils-cross). I've sent a patch to set LDGOLD to '' on mingw, but your comments are welcome on alternative fixes.
Ross
PATCH 5/6 musl: Update to latest
In reply to Khem RajRich Felker (11):
fix ld-behavior-dependent crash in ppc64 ldso startup rework ldso handling of global symbol table for consistency reorder addend handling before symbol lookup in relocation code emulate lazy relocation as deferrable relocation
fix free of uninitialized buffer pointer on error in regexec in static dl_iterate_phdr, fix use of possibly-uninitialized aux data fix possible fd leak, unrestored cancellation state on dns socket fail fix wide scanf's use of a compound literal past its lifetime fix one-byte overflow in legacy getpass function
avoid loading of multiple libc versions via explicit pathname remove unused refcnt field for shared libraries
Szabolcs Nagy (1):
treat STB_WEAK and STB_GNU_UNIQUE like STB_GLOBAL in find_sym
--- meta/recipes-core/musl/musl_git.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
meta/recipes-core/musl/musl_git.bb +1 -1
@@ -3,7 +3,7 @@ require musl.inc -SRCREV = "827c4e6fbe46142049ef3d8bcb8f35951712797d" +SRCREV = "cb525397bb053ea49cf160965477a17b17286eb3" PV = "1.1.16+git${SRCPV}"
Signature · 1 line
2.12.0
Re: [PATCH 5/6] musl: Update to latest
Quoted 14 lines · Khem Raj
Rich Felker (11):
fix ld-behavior-dependent crash in ppc64 ldso startup rework ldso handling of global symbol table for consistency reorder addend handling before symbol lookup in relocation code emulate lazy relocation as deferrable relocation
fix free of uninitialized buffer pointer on error in regexec in staticdl_iterate_phdr, fix use of possibly-uninitialized aux data fix possible fd leak, unrestored cancellation state on dns socket
fail
fix wide scanf's use of a compound literal past its lifetime fix one-byte overflow in legacy getpass function
avoid loading of multiple libc versions via explicit pathname remove unused refcnt field for shared libraries
Quoted 3 lines
Szabolcs Nagy (1):
treatSTB_WEAKandSTB_GNU_UNIQUElikeSTB_GLOBALinfind_sym
Could the relocation changes here be responsible for these ovmf build failures:
"GenFw: ERROR 3000: Invalid ... unsupported ELF EM_386 relocation"
?
https://autobuilder.yocto.io/builders/nightly-musl/builds/196/steps/BuildImages/logs/stdio
Jussi
Re: [PATCH 5/6] musl: Update to latest
Quoted 29 lines · Jussi Kukkonen
On 15 March 2017 at 01:35, Khem Raj <[email protected]> wrote:
Rich Felker (11):
fix ld-behavior-dependent crash in ppc64 ldso startup rework ldso handling of global symbol table for
consistency
reorder addend handling before symbol lookup in
relocation code
emulate lazy relocation as deferrable relocation fix free of uninitialized buffer pointer on error in
regexec
in staticdl_iterate_phdr, fix use of
possibly-uninitialized aux data
fix possible fd leak, unrestored cancellation state on
dns socket fail
fix wide scanf's use of a compound literal past its
lifetime
fix one-byte overflow in legacy getpass function avoid loading of multiple libc versions via explicit
pathname
remove unused refcnt field for shared librariesSzabolcs Nagy (1):
treatSTB_WEAKandSTB_GNU_UNIQUElikeSTB_GLOBALin
find_sym
Quoted 7 lines
Could the relocation changes here be responsible for these ovmf build failures:
"GenFw: ERROR 3000: Invalid ... unsupported ELFEM_386relocation"
?https://autobuilder.yocto.io/builders/nightly-musl/builds/196/steps/BuildImages/logs/stdio
That looks like a good guess.
I had tried to reproduce that error last week with poky/master-next, but somehow it didn't trigger in my local setup.
I have no idea how to enhance ovmf such that can handle this, though. Holding back an update of musl until someone can figure it out does not very attractive. But nor is disabling the building of ovmf when musl is selected, because then the wic tests which rely on ovmf will fail or also need to get disabled.
Signature · 6 lines
Best Regards, Patrick Ohly The content of this message is my personal opinion only and although I am an employee of Intel, the statements I make here in no way represent Intel's position on the issue, nor am I authorized to speak on behalf of Intel on this matter.
Re: [PATCH 5/6] musl: Update to latest
In reply to Jussi KukkonenQuoted 23 lines · Jussi Kukkonen
Quoted 16 lines · Khem Raj
Rich Felker (11):
fix ld-behavior-dependent crash in ppc64 ldso startup rework ldso handling of global symbol table for consistency reorder addend handling before symbol lookup in relocation code emulate lazy relocation as deferrable relocation
fix free of uninitialized buffer pointer on error in regexec in staticdl_iterate_phdr, fix use of possibly-uninitialized aux
data
fix possible fd leak, unrestored cancellation state on dns socket
fail
fix wide scanf's use of a compound literal past its lifetime fix one-byte overflow in legacy getpass function
avoid loading of multiple libc versions via explicit pathname remove unused refcnt field for shared librariesQuoted 2 lines
Szabolcs Nagy (1):
treatSTB_WEAKandSTB_GNU_UNIQUElikeSTB_GLOBALinfind_sym
Quoted 5 lines
Could the relocation changes here be responsible for these ovmf build failures:
"GenFw: ERROR 3000: Invalid ... unsupported ELFEM_386relocation"
?
Dont understand why musl would affect here.
its using native gcc to build the artifacts its complaining about,
ovmf fails to build with musl (was: Re: [PATCH 5/6] musl: Update to latest)
Quoted 25 lines · Khem Raj
Quoted 23 lines · Jussi Kukkonen
Quoted 18 lines · Khem Raj
Rich Felker (11):
fix ld-behavior-dependent crash in ppc64 ldso startup rework ldso handling of global symbol table for consistency reorder addend handling before symbol lookup in relocation code emulate lazy relocation as deferrable relocation
fix free of uninitialized buffer pointer on error in regexec in staticdl_iterate_phdr, fix use of possibly-uninitialized aux
data
fix possible fd leak, unrestored cancellation state on dns socket
fail
fix wide scanf's use of a compound literal past its lifetime fix one-byte overflow in legacy getpass function
avoid loading of multiple libc versions via explicit pathname remove unused refcnt field for shared librariesSzabolcs Nagy (1):
treatSTB_WEAKandSTB_GNU_UNIQUElikeSTB_GLOBALinfind_sym
Quoted 7 lines
Quoted 5 lines
Could the relocation changes here be responsible for these ovmf build failures:
"GenFw: ERROR 3000: Invalid ... unsupported ELFEM_386relocation"
?Dont understand why musl would affect here.
its using native gcc to build the artifacts its complaining about,
Yes, it is a bit puzzling how the libc on the target can influence the compilation of ovmf. However, ovmf gets compiled for the target, so there is at least some correlation.
Why it uses "gcc" is a good question, and I don't know. It happens to work in practice because there's a long list of additional parameters which selects the actual target architecture (in particular, -m64 vs. -m32).
Perhaps this use of the host gcc is the reason why I can't reproduce it locally.
The recipe has some code which tries to change the "gcc" invocations into something else. I think it is meant to work like this (don't ask how long it took me to figure this out):
* ovmf-native patches BaseTools/Conf/tools_def.template such that ${TARGET_PREFIX}gcc is used (do_fix_toolchain)
* ovmf picks up the path to that modified tools_def.template and uses it as Conf/tools_def.txt (0002-ovmf-update-path-to-native-BaseTools.patch + do_fix_basetools_location)
Ricardo, is that correct?
However, TARGET_PREFIX is empty in ovmf-native. So instead of i586-poky-linux-musl-gcc or i586-poky-linux-musl-gcc-ar we end up building with gcc and gcc-ar from the host, which probably wasn't the intention.
Below a patch which compiles for me using the right tools. More testing has to wait until tomorrow.
meta/recipes-core/ovmf/ovmf_git.bb +38 -9
@@ -11,7 +11,6 @@ PACKAGECONFIG ??= "" PACKAGECONFIG[secureboot] = ",,," SRC_URI = "git://github.com/tianocore/edk2.git;branch=master \ - file://0001-BaseTools-Force-tools-variables-to-host-toolchain.patch \ file://0002-ovmf-update-path-to-native-BaseTools.patch \ file://0003-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch \ file://VfrCompile-increase-path-length-limit.patch \
@@ -53,8 +52,8 @@ OVMF_SECURE_BOOT_FLAGS = "-DSECURE_BOOT_ENABLE=TRUE ${OVMF_SECURE_BOOT_EXTRA_FLA do_patch_append_class-native() { bb.build.exec_func('do_fix_iasl', d) - bb.build.exec_func('do_fix_toolchain', d) } +do_patch[postfuncs] += "do_fix_toolchain" do_fix_basetools_location() { sed -i -e 's#BBAKE_EDK_TOOLS_PATH#${STAGING_BINDIR_NATIVE}/${EDK_TOOLS_DIR}#' ${S}/OvmfPkg/build.sh
@@ -69,13 +68,42 @@ do_fix_iasl() { sed -i -e 's#/usr/bin/iasl#${STAGING_BINDIR_NATIVE}/iasl#' ${S}/BaseTools/Conf/tools_def.template } -do_fix_toolchain(){ - sed -i -e 's#DEF(ELFGCC_BIN)/#${TARGET_PREFIX}#' ${S}/BaseTools/Conf/tools_def.template - sed -i -e 's#DEF(GCC.*PREFIX)#${TARGET_PREFIX}#' ${S}/BaseTools/Conf/tools_def.template - sed -i -e "s#^LINKER\(.*\)#LINKER\1\nLFLAGS += ${BUILD_LDFLAGS}#" ${S}/BaseTools/Source/C/Makefiles/app.makefile - sed -i -e "s#^LINKER\(.*\)#LINKER\1\nCFLAGS += ${BUILD_CFLAGS}#" ${S}/BaseTools/Source/C/Makefiles/app.makefile - sed -i -e "s#^LINKER\(.*\)#LINKER\1\nLFLAGS += ${BUILD_LDFLAGS}#" ${S}/BaseTools/Source/C/VfrCompile/GNUmakefile - sed -i -e "s#^LINKER\(.*\)#LINKER\1\nCFLAGS += ${BUILD_CFLAGS}#" ${S}/BaseTools/Source/C/VfrCompile/GNUmakefile +# Inject CC and friends into the build. LINKER already is in GNUmakefile. +# Must be idempotent and thus remove old assignments that were inserted +# earlier. +do_fix_toolchain() { + sed -i \ + -e '/^\(CC\|CXX\|AS\|AR\|LD\|LINKER\) =/d' \ + -e '/^APPLICATION/a CC = ${CC}\nCXX = ${CXX}\nAS = ${AS}\nAR = ${AR}\nLD = ${LD}\nLINKER = $(CC)' \ + ${S}/BaseTools/Source/C/Makefiles/app.makefile + sed -i \ + -e '/^\(CC\|CXX\|AS\|AR\|LD\)/d' \ + -e '/^VFR_CPPFLAGS/a CC = ${CC}\nCXX = ${CXX}\nAS = ${AS}\nAR = ${AR}\nLD = ${LD}' \ + ${S}/BaseTools/Source/C/VfrCompile/GNUmakefile +} +do_fix_toolchain_append_class-native() { + # This tools_def.template is going to be used by the target ovmf, which uses + # the GCC*_BIN env variables to choose the right gcc for the target. + # We can't do that here because HOST_PREFIX and TARGET_PREFIX are both + # empty in a native recipe. + # + # However, tools_def.txt also uses the same variable (indirectly) for + # finding make, which wouldn't work. So we reduce that to just plain + # make without a prefix here. + sed -i \ + -e 's#DEF(GCC.*_PREFIX)make#make#' \ + ${S}/BaseTools/Conf/tools_def.template + sed -i \ + -e '/^\(LFLAGS\|CFLAGS\) +=/d' \ + -e '/^LINKER/a LFLAGS += ${BUILD_LDFLAGS}\nCFLAGS += ${BUILD_CFLAGS}' \ + ${S}/BaseTools/Source/C/Makefiles/app.makefile \ + ${S}/BaseTools/Source/C/VfrCompile/GNUmakefile +} +do_fix_toolchain_append_class-target() { + sed -i \ + -e 's#DEF(ELFGCC_BIN)/#${HOST_PREFIX}#' \ + -e 's#DEF(GCC.*PREFIX)#${HOST_PREFIX}#' \ + ${S}/BaseTools/Conf/tools_def.template } GCC_VER="$(${CC} -v 2>&1 | tail -n1 | awk '{print $3}')"
@@ -129,6 +157,7 @@ do_compile_class-target() { fi FIXED_GCCVER=$(fixup_target_tools ${GCC_VER}) bbnote FIXED_GCCVER is ${FIXED_GCCVER} + eval "${FIXED_GCCVER}_BIN=${HOST_PREFIX}; export ${FIXED_GCCVER}_BIN" build_dir="${S}/Build/Ovmf$OVMF_DIR_SUFFIX/RELEASE_${FIXED_GCCVER}" bbnote "Building without Secure Boot."
Signature · 6 lines
Best Regards, Patrick Ohly The content of this message is my personal opinion only and although I am an employee of Intel, the statements I make here in no way represent Intel's position on the issue, nor am I authorized to speak on behalf of Intel on this matter.
Re: ovmf fails to build with musl (was: Re: [PATCH 5/6] musl: Update to latest)
Quoted 7 lines · Patrick Ohly
However,
TARGET_PREFIXis empty in ovmf-native. So instead of i586-poky-linux-musl-gcc or i586-poky-linux-musl-gcc-ar we end up building with gcc and gcc-ar from the host, which probably wasn't the intention.Below a patch which compiles for me using the right tools. More testing has to wait until tomorrow.
I've cleaned up the patch a bit more and tested it successfully with refkit on intel-corei7-64. Building for musl on qemux86 also worked, using i586-poky-linux-musl-gcc.
I propose that we include the patch (will send as reply) in master-next to check whether it also fixes the problem on the AB.
Signature · 6 lines
Best Regards, Patrick Ohly The content of this message is my personal opinion only and although I am an employee of Intel, the statements I make here in no way represent Intel's position on the issue, nor am I authorized to speak on behalf of Intel on this matter.
PATCH 1/1 ovmf: fix toolchain selection
For the native tools, a static patch inserted gcc/g++/ld/ar while later adding BUILD_LDFLAGS and BUILD_CFLAGS with sed. Now it's all done with sed, which has the advantage that it uses the actual compile variables. However, in practice those are the same.
More importantly, picking the build tools for the target was broken. ovmf-native tried to insert TARGET_PREFIX into the tools definition file, but that variable is empty in a native recipe. As a result, "gcc" was used instead of "${HOST_PREFIX}gcc", leading to an undesirable dependency on the host compiler and potentially (probably?!) causing some of the build issues that were seen for ovmf.
The new approach is to override the tool selection in ovmf-native so that the HOST_PREFIX env variable is used, which then gets exported during do_compile for the target.
While at it, Python code that gets appened to do_patch only to call shell functions gets replaced with the do_patch[postfuncs] mechanism.
Incremental builds now always use the tools definition from the current ovmf-native; previously, only the initial build copied the template file.
Probably the entire split into ovmf-native and ovmf could be removed. This merely hasn't been attempted yet.
--- meta/recipes-core/ovmf/ovmf/0001-BaseTools-Force-tools-variables-to-host-toolchain.patch | 48 ------------------------------------------------ meta/recipes-core/ovmf/ovmf_git.bb | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 50 insertions(+), 66 deletions(-) delete mode 100644 meta/recipes-core/ovmf/ovmf/0001-BaseTools-Force-tools-variables-to-host-toolchain.patch
meta/recipes-core/ovmf/ovmf/0001-BaseTools-Force-tools-variables-to-host-toolchain.patch deleted +0 -48
@@ -1,48 +0,0 @@ -From 6e24bde1979c2d7149b37d142fb882dfde0e9770 Mon Sep 17 00:00:00 2001 -From: Matt Fleming <[email protected]> -Date: Fri, 27 Jun 2014 11:12:18 +0100 -Subject: [PATCH] BaseTools: Force tools variables to host toolchain - -Signed-off-by: Matt Fleming <[email protected]> ---- - BaseTools/Source/C/Makefiles/app.makefile | 7 +++++++ - BaseTools/Source/C/VfrCompile/GNUmakefile | 5 +++++ - 2 files changed, 12 insertions(+) - -diff --git a/BaseTools/Source/C/Makefiles/app.makefile b/BaseTools/Source/C/Makefiles/app.makefile -index 19269a1..62aad0f 100644 ---- a/BaseTools/Source/C/Makefiles/app.makefile -+++ b/BaseTools/Source/C/Makefiles/app.makefile -@@ -16,6 +16,13 @@ include $(MAKEROOT)/Makefiles/header.makefile - - APPLICATION = $(MAKEROOT)/bin/$(APPNAME) - -+CC = gcc -+CXX = g++ -+AS = gcc -+AR = ar -+LD = ld -+LINKER = $(CC) -+ - .PHONY:all - all: $(MAKEROOT)/bin $(APPLICATION) - -diff --git a/BaseTools/Source/C/VfrCompile/GNUmakefile b/BaseTools/Source/C/VfrCompile/GNUmakefile -index 82005e1..5ac5f7e 100644 ---- a/BaseTools/Source/C/VfrCompile/GNUmakefile -+++ b/BaseTools/Source/C/VfrCompile/GNUmakefile -@@ -26,6 +26,11 @@ OBJECTS = AParser.o DLexerBase.o ATokenBuffer.o EfiVfrParser.o VfrLexer.o VfrSyn - - VFR_CPPFLAGS = -DPCCTS_USE_NAMESPACE_STD $(CPPFLAGS) - -+CC = gcc -+CXX = g++ -+AS = gcc -+AR = ar -+LD = ld - LINKER = $(BUILD_CXX) - - EXTRA_CLEAN_OBJECTS = EfiVfrParser.cpp EfiVfrParser.h VfrParser.dlg VfrTokens.h VfrLexer.cpp VfrLexer.h VfrSyntax.cpp tokens.h --- -1.9.0 -
meta/recipes-core/ovmf/ovmf_git.bb +50 -18
94 lines not on this page · raw message
base-commit: 30bea167e7c204be52b3f5af24e43d5f339e98b7
Signature · 1 line
git-series 0.9.1
Re: [PATCH] ovmf: fix toolchain selection
Quoted 16 lines · Patrick Ohly
For the native tools, a static patch inserted gcc/g++/ld/ar while later adding
BUILD_LDFLAGSandBUILD_CFLAGSwith sed. Now it's all done with sed, which has the advantage that it uses the actual compile variables. However, in practice those are the same.More importantly, picking the build tools for the target was broken. ovmf-native tried to insert
TARGET_PREFIXinto the tools definition file, but that variable is empty in a native recipe. As a result, "gcc" was used instead of "${HOST_PREFIX}gcc", leading to an undesirable dependency on the host compiler and potentially (probably?!) causing some of the build issues that were seen for ovmf.The new approach is to override the tool selection in ovmf-native so that the
HOST_PREFIXenv variable is used, which then gets exported duringdo_compilefor the target.
Quoted 7 lines
While at it, Python code that gets appened to
do_patchonly to call shell functions gets replaced with the do_patch[postfuncs] mechanism.Incremental builds now always use the tools definition from the current ovmf-native; previously, only the initial build copied the template file.
FWIW this patch looks good.
Quoted 174 lines
Probably the entire split into ovmf-native and ovmf could be removed. This merely hasn't been attempted yet.
Signed-off-by Patrick Ohly <[email protected]>--- meta/recipes-core/ovmf/ovmf/0001-BaseTools-Force-tools-variables-to-host-toolchain.patch | 48 ------------------------------------------------ meta/recipes-core/ovmf/ovmf_git.bb | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 50 insertions(+), 66 deletions(-) delete mode 100644 meta/recipes-core/ovmf/ovmf/0001-BaseTools-Force-tools-variables-to-host-toolchain.patchmeta/recipes-core/ovmf/ovmf/0001-BaseTools-Force-tools-variables-to-host-toolchain.patch deleted +0
-48@@ -1,48 +0,0 @@ -From 6e24bde1979c2d7149b37d142fb882dfde0e9770 Mon Sep 17 00:00:00 2001 -From: Matt Fleming <[email protected]> -Date: Fri, 27 Jun 2014 11:12:18 +0100 -Subject: [PATCH] BaseTools: Force tools variables to host toolchain - -Signed-off-by: Matt Fleming <[email protected]> ---- - BaseTools/Source/C/Makefiles/app.makefile | 7 +++++++ - BaseTools/Source/C/VfrCompile/GNUmakefile | 5 +++++ - 2 files changed, 12 insertions(+) - -diff --git a/BaseTools/Source/C/Makefiles/app.makefile b/BaseTools/Source/C/Makefiles/app.makefile -index 19269a1..62aad0f 100644 ---- a/BaseTools/Source/C/Makefiles/app.makefile -+++ b/BaseTools/Source/C/Makefiles/app.makefile -@@ -16,6 +16,13 @@ include $(MAKEROOT)/Makefiles/header.makefile - - APPLICATION = $(MAKEROOT)/bin/$(APPNAME) - -+CC = gcc -+CXX = g++ -+AS = gcc -+AR = ar -+LD = ld -+LINKER = $(CC) -+ - .PHONY:all - all: $(MAKEROOT)/bin $(APPLICATION) - -diff --git a/BaseTools/Source/C/VfrCompile/GNUmakefile b/BaseTools/Source/C/VfrCompile/GNUmakefile -index 82005e1..5ac5f7e 100644 ---- a/BaseTools/Source/C/VfrCompile/GNUmakefile -+++ b/BaseTools/Source/C/VfrCompile/GNUmakefile -@@ -26,6 +26,11 @@ OBJECTS = AParser.o DLexerBase.o ATokenBuffer.o EfiVfrParser.o VfrLexer.o VfrSyn - - VFR_CPPFLAGS = -DPCCTS_USE_NAMESPACE_STD $(CPPFLAGS) - -+CC = gcc -+CXX = g++ -+AS = gcc -+AR = ar -+LD = ld - LINKER = $(BUILD_CXX) - - EXTRA_CLEAN_OBJECTS = EfiVfrParser.cpp EfiVfrParser.h VfrParser.dlg VfrTokens.h VfrLexer.cpp VfrLexer.h VfrSyntax.cpp tokens.h --- -1.9.0 -meta/recipes-core/ovmf/ovmf_git.bb +50
-18@@ -11,7 +11,6 @@ PACKAGECONFIG ??= "" PACKAGECONFIG[secureboot] = ",,," SRC_URI = "git://github.com/tianocore/edk2.git;branch=master \ - file://0001-BaseTools-Force-tools-variables-to-host-toolchain.patch \ file://0002-ovmf-update-path-to-native-BaseTools.patch \ file://0003-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch \ file://VfrCompile-increase-path-length-limit.patch \@@ -51,31 +50,54 @@ COMPATIBLE_HOST='(i.86|x86_64).*' OVMF_SECURE_BOOT_EXTRA_FLAGS ??= "" OVMF_SECURE_BOOT_FLAGS = "-DSECURE_BOOT_ENABLE=TRUE ${OVMF_SECURE_BOOT_EXTRA_FLAGS}" -do_patch_append_class-native() { - bb.build.exec_func('do_fix_iasl', d) - bb.build.exec_func('do_fix_toolchain', d) +do_patch[postfuncs] += "fix_basetools_location" +fix_basetools_location () { } - -do_fix_basetools_location() { +fix_basetools_location_class-target() { + # Replaces the fake path inserted by 0002-ovmf-update-path-to-native-BaseTools.patch. + # Necessary for finding the actual BaseTools from ovmf-native. sed -i -e 's#BBAKE_EDK_TOOLS_PATH#${STAGING_BINDIR_NATIVE}/${EDK_TOOLS_DIR}#' ${S}/OvmfPkg/build.sh } -do_patch_append_class-target() { - bb.build.exec_func('do_fix_basetools_location', d) +do_patch[postfuncs] += "fix_iasl" +fix_iasl() { } - - -do_fix_iasl() { +fix_iasl_class-native() { + # iasl is not installed under /usr/bin when building with OE. sed -i -e 's#/usr/bin/iasl#${STAGING_BINDIR_NATIVE}/iasl#' ${S}/BaseTools/Conf/tools_def.template } -do_fix_toolchain(){ - sed -i -e 's#DEF(ELFGCC_BIN)/#${TARGET_PREFIX}#' ${S}/BaseTools/Conf/tools_def.template - sed -i -e 's#DEF(GCC.*PREFIX)#${TARGET_PREFIX}#' ${S}/BaseTools/Conf/tools_def.template - sed -i -e "s#^LINKER\(.*\)#LINKER\1\nLFLAGS += ${BUILD_LDFLAGS}#" ${S}/BaseTools/Source/C/Makefiles/app.makefile - sed -i -e "s#^LINKER\(.*\)#LINKER\1\nCFLAGS += ${BUILD_CFLAGS}#" ${S}/BaseTools/Source/C/Makefiles/app.makefile - sed -i -e "s#^LINKER\(.*\)#LINKER\1\nLFLAGS += ${BUILD_LDFLAGS}#" ${S}/BaseTools/Source/C/VfrCompile/GNUmakefile - sed -i -e "s#^LINKER\(.*\)#LINKER\1\nCFLAGS += ${BUILD_CFLAGS}#" ${S}/BaseTools/Source/C/VfrCompile/GNUmakefile +# Inject CC and friends into the build. LINKER already is in GNUmakefile. +# Must be idempotent and thus remove old assignments that were inserted +# earlier. +do_patch[postfuncs] += "fix_toolchain" +fix_toolchain() { + sed -i \ + -e '/^\(CC\|CXX\|AS\|AR\|LD\|LINKER\) =/d' \ + -e '/^APPLICATION/a CC = ${CC}\nCXX = ${CXX}\nAS = ${AS}\nAR = ${AR}\nLD = ${LD}\nLINKER = $(CC)' \ + ${S}/BaseTools/Source/C/Makefiles/app.makefile + sed -i \ + -e '/^\(CC\|CXX\|AS\|AR\|LD\)/d' \ + -e '/^VFR_CPPFLAGS/a CC = ${CC}\nCXX = ${CXX}\nAS = ${AS}\nAR = ${AR}\nLD = ${LD}' \ + ${S}/BaseTools/Source/C/VfrCompile/GNUmakefile +} +fix_toolchain_append_class-native() { + # This tools_def.template is going to be used by the target ovmf and + # defines which compilers to use. For the GCC toolchain definitions, + # that will be ${HOST_PREFIX}gcc. However, "make" doesn't need that + # prefix. + # + # Injecting ENV(HOST_PREFIX) matches exporting that value as env + # variable in do_compile_class-target. + sed -i \ + -e 's#\(ENV\|DEF\)(GCC.*_PREFIX)#ENV(HOST_PREFIX)#' \ + -e 's#ENV(HOST_PREFIX)make#make#' \ + ${S}/BaseTools/Conf/tools_def.template + sed -i \ + -e '/^\(LFLAGS\|CFLAGS\) +=/d' \ + -e '/^LINKER/a LFLAGS += ${BUILD_LDFLAGS}\nCFLAGS += ${BUILD_CFLAGS}' \ + ${S}/BaseTools/Source/C/Makefiles/app.makefile \ + ${S}/BaseTools/Source/C/VfrCompile/GNUmakefile } GCC_VER="$(${CC} -v 2>&1 | tail -n1 | awk '{print $3}')"@@ -119,6 +141,16 @@ do_compile_class-target() { OVMF_ARCH="IA32" fi + # The build for the target uses BaseTools/Conf/tools_def.template + # from ovmf-native to find the compiler, which depends on + # exporting HOST_PREFIX. + export HOST_PREFIX="${HOST_PREFIX}" + + # BaseTools/Conf gets copied to Conf, but only if that does not + # exist yet. To ensure that an updated template gets used during + # incremental builds, we need to remove the copy before we start. + rm -f `ls ${S}/Conf/*.txt | grep -v ReadMe.txt` + # ${WORKDIR}/ovmf is a well-known location where do_install and # do_deploy will be able to find the files. rm -rf ${WORKDIR}/ovmfbase-commit:
30bea167e7c204be52b3f5af24e43d5f339e98b7--
git-series 0.9.1
--
_______________________________________________
Openembedded-core mailing list [email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core
PATCH 6/6 xserver-xf86-config: Remove X server module preload
In reply to Khem RajThis was a solution needed for musl but now musl has got lazy loading.
--- .../xorg-xserver/xserver-xf86-config/10-preload-modules.conf | 10 ---------- meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb | 8 -------- 2 files changed, 18 deletions(-) delete mode 100644 meta/recipes-graphics/xorg-xserver/xserver-xf86-config/10-preload-modules.conf
meta/recipes-graphics/xorg-xserver/xserver-xf86-config/10-preload-modules.conf deleted +0 -10
@@ -1,10 +0,0 @@ -Section "Module" - Load "fbdevhw" - Load "fb" - Load "shadow" - Load "shadowfb" - Load "int10" - Load "vbe" - Load "vgahw" - Load "glamoregl" -EndSection
meta/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bb +0 -8
@@ -7,10 +7,6 @@ PR = "r33" SRC_URI = "file://xorg.conf" -SRC_URI_append_libc-musl = "\ - file://10-preload-modules.conf \ -" - S = "${WORKDIR}" CONFFILES_${PN} = "${sysconfdir}/X11/xorg.conf"
@@ -25,7 +21,3 @@ do_install () { install -m 0644 ${WORKDIR}/xorg.conf ${D}/${sysconfdir}/X11/ fi } - -do_install_append_libc-musl () { - install -Dm 0644 ${WORKDIR}/10-preload-modules.conf ${D}/${sysconfdir}/X11/xorg.conf.d/10-preload-modules.conf -}
Signature · 1 line
2.12.0