diff options
-rw-r--r-- | Makefile.inc | 9 | ||||
-rw-r--r-- | toolchain.inc | 15 |
2 files changed, 24 insertions, 0 deletions
diff --git a/Makefile.inc b/Makefile.inc index 3b2a75b4a9..d7bb0186d3 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -488,6 +488,7 @@ help_toolchain help:: @echo ' crossgcc-clean - Remove all built coreboot cross-compilers' @echo ' iasl - Build coreboot IASL compiler (built by all cross targets)' @echo ' clang - Build coreboot clang compiler' + @echo ' test-toolchain - Reports if toolchain components are out of date' @echo ' crossgcc-ARCH - Build cross-compiler for specific architecture' @echo ' crosstools-ARCH - Build cross-compiler with GDB for specific architecture' @echo ' ARCH can be "i386", "x64", "arm", "aarch64", "mips", "riscv", or "power8"' @@ -561,6 +562,14 @@ crossgcc-clean: clean-for-update tools: $(objutil)/kconfig/conf $(CBFSTOOL) $(FMAPTOOL) $(RMODTOOL) $(objutil)/nvramtool/nvramtool $(ROMCC_BIN) $(objutil)/sconfig/sconfig $(IFDTOOL) $(IFDFAKE) $(CBOOTIMAGE) $(AMDFWTOOL) +test-toolchain: +ifeq ($(COMPILER_OUT_OF_DATE),1) + echo "The coreboot toolchain is not the current version." + $(error ) +else + echo "The coreboot toolchain is the current version." +endif # ifeq ($(COMPILER_OUT_OF_DATE),1) + ########################################################################### # Common recipes for all stages ########################################################################### diff --git a/toolchain.inc b/toolchain.inc index 5836a197fb..8bb0aae7a0 100644 --- a/toolchain.inc +++ b/toolchain.inc @@ -193,3 +193,18 @@ $(error Halting the build) endif #($(COMPILERFAIL),1) endif #($(NOCOMPILE),1) + +ifneq ($(MAKECMDGOALS),) +ifneq ($(filter test-toolchain,$(MAKECMDGOALS)),) +$(foreach arch, $(ARCH_SUPPORTED), \ + $(if $(shell if [ -n "$(GCC_CC_$(arch))" ]; then $(GCC_CC_$(arch)) -v 2>&1 | grep -q "$(shell util/crossgcc/buildgcc -s gcc)" || echo not-current; fi), \ + $(eval COMPILER_OUT_OF_DATE:=1)$(warning The coreboot toolchain version of gcc for '$(arch)' architecture is not the current version.)) \ + $(if $(shell if [ -n "$(CLANG_CC_$(arch))" ]; then $(CLANG_CC_$(arch)) -v 2>&1 | grep -q "$(shell util/crossgcc/buildgcc -s clang)" || echo not-current; fi), \ + $(eval COMPILER_OUT_OF_DATE:=1)$(warning The coreboot toolchain version of clang for '$(arch)' architecture is not the current version.)) \ + $(if $(shell if [ "$(OBJDUMP_$(arch))" != "invalidobjdump" ]; then $(OBJDUMP_$(arch)) -v 2>&1 | grep -q "$(shell util/crossgcc/buildgcc -s binutils)" || echo not-current; fi), \ + $(eval COMPILER_OUT_OF_DATE:=1)$(warning The coreboot toolchain version of binutils for '$(arch)' architecture is not the current version.)) \ +) +$(if $(shell if [ -n "$(IASL)" ]; then $(IASL) -v 2>&1 | grep -q "$(shell util/crossgcc/buildgcc -s iasl)" || echo not-coreboot; fi), \ + $(eval COMPILER_OUT_OF_DATE:=1)$(warning The coreboot toolchain version of iasl is not the current version)) +endif # ifneq ($(filter crossgcc_check%,$(MAKECMDGOALS)),) +endif # ifneq ($(MAKECMDGOALS),) |