Patrick Georgi has submitted this change and it was merged. ( https://review.coreboot.org/c/coreboot/+/32923 )
Change subject: util/xcompile/xcompile: apply -march to clang as well as gcc ......................................................................
util/xcompile/xcompile: apply -march to clang as well as gcc
For x64 and x86_32 configurations, apply the -march flag to both GCC and Clang flags.
This solves the problem of Clang-compiled coreboot failing due to Clang emitting SSE instructions for code that is executed while SSE is not enabled.
This patch takes functionality targeted for GCC configurations and moves it down a few lines, modifying CFLAGS instead of GCC_CFLAGS in order that it applies to both GCC and Clang.
This is an alternate patch to CB:32887.
Signed-off-by: Alan Green avg@google.com Change-Id: I6a6a6136b01a64d46f730ed19ebbeaadaf2183df Reviewed-on: https://review.coreboot.org/c/coreboot/+/32923 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Paul Menzel paulepanter@users.sourceforge.net Reviewed-by: Patrick Georgi pgeorgi@google.com Reviewed-by: Kyösti Mälkki kyosti.malkki@gmail.com --- M util/xcompile/xcompile 1 file changed, 28 insertions(+), 27 deletions(-)
Approvals: build bot (Jenkins): Verified Patrick Georgi: Looks good to me, approved Kyösti Mälkki: Looks good to me, but someone else must approve Paul Menzel: Looks good to me, but someone else must approve
diff --git a/util/xcompile/xcompile b/util/xcompile/xcompile index 4a29cdd..40356d9 100755 --- a/util/xcompile/xcompile +++ b/util/xcompile/xcompile @@ -227,33 +227,6 @@ GCC_CFLAGS_${TARCH}:=${CFLAGS_GCC} GCC_COMPILER_RT_${TARCH}:=${CC_RT_GCC} GCC_COMPILER_RT_FLAGS_${TARCH}:=${CC_RT_EXTRA_GCC} -EOF - -# Generally the x86 should build for i686 -- no sse/mmx -# instructions since SMM modules are compiled using these -# flags. Note that this doesn't prevent a project using -# xcompile to explicitly specify -mmsse, etc flags. -# The Quark processor doesn't support the instructions -# introduced with the Pentium 6 architecture, so allow it -# to use i586 instead. -if [ "${TARCH}" = "x86_64" ]; then -cat <<EOF - GCC_CFLAGS_${TARCH} += -march=nocona -malign-data=abi -EOF -fi - -if [ "${TARCH}" = "x86_32" ]; then -cat <<EOF - -ifneq ($(CONFIG_USE_MARCH_586)$(CONFIG_LP_USE_MARCH_586),) - GCC_CFLAGS_${TARCH} += -march=i586 -else - GCC_CFLAGS_${TARCH} += -march=i686 -endif -EOF -fi - -cat <<EOF
# Clang CLANG_CC_${TARCH}:=${CLANG} @@ -265,6 +238,7 @@ CLANG_COMPILER_RT_${TARCH}:=${CC_RT_CLANG} CLANG_COMPILER_RT_FLAGS_${TARCH}:=${CC_RT_EXTRA_CLANG}
+# GCC/Clang Common ifeq ($(CONFIG_COMPILER_GCC)$(CONFIG_LP_COMPILER_GCC),y) CC_${TARCH}:=$(GCC_CC_${TARCH}) CFLAGS_${TARCH}:=$(GCC_CFLAGS_${TARCH}) @@ -276,6 +250,33 @@ COMPILER_RT_${TARCH}:=$(CLANG_COMPILER_RT_${TARCH}) COMPILER_RT_FLAGS_${TARCH}:=$(CLANG_COMPILER_RT_FLAGS_${TARCH}) endif +EOF + +# Generally the x86 should build for i686 -- no sse/mmx +# instructions since SMM modules are compiled using these +# flags. Note that this doesn't prevent a project using +# xcompile to explicitly specify -mmsse, etc flags. +# The Quark processor doesn't support the instructions +# introduced with the Pentium 6 architecture, so allow it +# to use i586 instead. +if [ "${TARCH}" = "x86_64" ]; then +cat <<EOF + CFLAGS_${TARCH} += -march=nocona -malign-data=abi +EOF +fi + +if [ "${TARCH}" = "x86_32" ]; then +cat <<EOF + +ifneq ($(CONFIG_USE_MARCH_586)$(CONFIG_LP_USE_MARCH_586),) + CFLAGS_${TARCH} += -march=i586 +else + CFLAGS_${TARCH} += -march=i686 +endif +EOF +fi + +cat <<EOF
CPP_${TARCH}:=${GCCPREFIX}cpp AS_${TARCH}:=${GCCPREFIX}as ${ASFLAGS}