| From da6b3b70cb852dd8e9f9e21aef95fa83e7f7ab0d Mon Sep 17 00:00:00 2001 |
| From: Pyry Kontio <pyry.kontio@drasa.eu> |
| Date: Mon, 6 Jul 2020 12:57:35 +0900 |
| Subject: [PATCH] Makefile: Fix building on AArch64 NixOS |
| |
| The parsing of the output of archtest.c produced an unexpected |
| value on AArch64 NixOS. For example, the make variable ARCH was set to: |
| |
| ``` |
| bit outside of fd_set selected |
| arm |
| ``` |
| |
| This made the arch and OS checks fail. |
| |
| This commit simplifies the parsing, making it more robust. |
| |
| The C files archtest.c, endiantest.c and os.h used to set the |
| TARGET_OS, ARCH and ENDIAN variables, respectively, output |
| the result of the test as the final line, so just extracting |
| the final line and removing double quoting is enough. |
| |
| This commit also fixes a bug with debug_shell lacking escaping |
| single quotes, which prevented using the single quote in the |
| debug_shell calls. It used to work by accident before this fix; |
| the line in the call happened to contain a balanced pair of double |
| quotes and lacked other characters that needed escaping, which |
| didn't break the debug_shell, but this was accidental and very |
| brittle. |
| |
| Signed-off-by: Pyry Kontio <pyry.kontio@drasa.eu> |
| Change-Id: Iaa4477a71e758cf9ecad2c22f3b77bc6508a3510 |
| Reviewed-on: https://review.coreboot.org/c/flashrom/+/43140 |
| Tested-by: build bot (Jenkins) <no-reply@coreboot.org> |
| Reviewed-by: Angel Pons <th3fanbus@gmail.com> |
| |
| [Retrieved from: |
| https://github.com/flashrom/flashrom/commit/da6b3b70cb852dd8e9f9e21aef95fa83e7f7ab0d] |
| Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
| --- |
| Makefile | 16 ++++++++++------ |
| 1 file changed, 10 insertions(+), 6 deletions(-) |
| |
| diff --git a/Makefile b/Makefile |
| index f3f7717e2..e475cbdbd 100644 |
| --- a/Makefile |
| +++ b/Makefile |
| @@ -83,7 +83,8 @@ dummy_for_make_3_80:=$(shell printf "Build started on %s\n\n" "$$(date)" >$(BUIL |
| |
| # Provide an easy way to execute a command, print its output to stdout and capture any error message on stderr |
| # in the build details file together with the original stdout output. |
| -debug_shell = $(shell export LC_ALL=C ; { echo 'exec: export LC_ALL=C ; { $(1) ; }' >&2; { $(1) ; } | tee -a $(BUILD_DETAILS_FILE) ; echo >&2 ; } 2>>$(BUILD_DETAILS_FILE)) |
| +debug_shell = $(shell export LC_ALL=C ; { echo 'exec: export LC_ALL=C ; { $(subst ','\'',$(1)) ; }' >&2; \ |
| + { $(1) ; } | tee -a $(BUILD_DETAILS_FILE) ; echo >&2 ; } 2>>$(BUILD_DETAILS_FILE)) |
| |
| ############################################################################### |
| # General OS-specific settings. |
| @@ -106,7 +107,8 @@ endif |
| # IMPORTANT: The following line must be placed before TARGET_OS is ever used |
| # (of course), but should come after any lines setting CC because the line |
| # below uses CC itself. |
| -override TARGET_OS := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E os.h 2>/dev/null | grep -v '^\#' | grep '"' | cut -f 2 -d'"')) |
| +override TARGET_OS := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E os.h 2>/dev/null \ |
| + | tail -1 | cut -f 2 -d'"')) |
| |
| ifeq ($(TARGET_OS), Darwin) |
| override CPPFLAGS += -I/opt/local/include -I/usr/local/include |
| @@ -490,8 +492,10 @@ endif |
| # IMPORTANT: The following line must be placed before ARCH is ever used |
| # (of course), but should come after any lines setting CC because the line |
| # below uses CC itself. |
| -override ARCH := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E archtest.c 2>/dev/null | grep -v '^\#' | grep '"' | cut -f 2 -d'"')) |
| -override ENDIAN := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E endiantest.c 2>/dev/null | grep -v '^\#')) |
| +override ARCH := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E archtest.c 2>/dev/null \ |
| + | tail -1 | cut -f 2 -d'"')) |
| +override ENDIAN := $(strip $(call debug_shell,$(CC) $(CPPFLAGS) -E endiantest.c 2>/dev/null \ |
| + | tail -1)) |
| |
| # Disable the internal programmer on unsupported architectures (everything but x86 and mipsel) |
| ifneq ($(ARCH)-little, $(filter $(ARCH),x86 mips)-$(ENDIAN)) |
| @@ -1299,12 +1303,12 @@ compiler: featuresavailable |
| @printf "Target arch is " |
| @# FreeBSD wc will output extraneous whitespace. |
| @echo $(ARCH)|wc -w|grep -q '^[[:blank:]]*1[[:blank:]]*$$' || \ |
| - ( echo "unknown. Aborting."; exit 1) |
| + ( echo "unknown (\"$(ARCH)\"). Aborting."; exit 1) |
| @printf "%s\n" '$(ARCH)' |
| @printf "Target OS is " |
| @# FreeBSD wc will output extraneous whitespace. |
| @echo $(TARGET_OS)|wc -w|grep -q '^[[:blank:]]*1[[:blank:]]*$$' || \ |
| - ( echo "unknown. Aborting."; exit 1) |
| + ( echo "unknown (\"$(TARGET_OS)\"). Aborting."; exit 1) |
| @printf "%s\n" '$(TARGET_OS)' |
| ifeq ($(TARGET_OS), libpayload) |
| @$(CC) --version 2>&1 | grep -q coreboot || \ |