From 116a8310ab93d803fa51f9ba9f3d6d0cb691e2bf Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 2 Aug 2021 13:09:28 -0400 Subject: More minor improvements to support for COMPILER=clang A couple of places snuck in where building with COMPILER=clang didn't work right; this makes them work again. Signed-off-by: Peter Jones --- Make.defaults | 7 ++++++- Makefile | 19 ++++++++++++++++--- include/test.mk | 14 +++++++++++--- shim.h | 4 ++++ 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Make.defaults b/Make.defaults index 1b929a71..d041f0d5 100644 --- a/Make.defaults +++ b/Make.defaults @@ -52,7 +52,11 @@ override EFI_INCLUDES := $(EFI_INCLUDES) EFI_CRT_OBJS = $(LOCAL_EFI_PATH)/crt0-efi-$(ARCH_GNUEFI).o EFI_LDS = $(TOPDIR)/elf_$(ARCH)_efi.lds -CLANG_BUGS = $(if $(findstring gcc,$(CC)),-maccumulate-outgoing-args,) +CLANG_WARNINGS = -Wno-pointer-bool-conversion \ + -Wno-unknown-attributes + +CLANG_BUGS = $(if $(findstring gcc,$(CC)),-maccumulate-outgoing-args,) \ + $(if $(findstring clang,$(CC)),$(CLANG_WARNINGS)) COMMIT_ID ?= $(shell if [ -e .git ] ; then git log -1 --pretty=format:%H ; elif [ -f commit ]; then cat commit ; else echo master; fi) @@ -131,6 +135,7 @@ $(call update-variable,WERRFLAGS) CFLAGS = $(FEATUREFLAGS) \ $(OPTIMIZATIONS) \ $(WARNFLAGS) \ + $(if $(findstring clang,$(CC)),$(CLANG_WARNINGS)) \ $(ARCH_CFLAGS) \ $(WERRFLAGS) \ $(INCLUDES) \ diff --git a/Makefile b/Makefile index 48db1af6..f4aad593 100644 --- a/Makefile +++ b/Makefile @@ -153,7 +153,10 @@ gnu-efi/$(ARCH_GNUEFI)/gnuefi/libgnuefi.a gnu-efi/$(ARCH_GNUEFI)/lib/libefi.a: C gnu-efi/$(ARCH_GNUEFI)/gnuefi/libgnuefi.a gnu-efi/$(ARCH_GNUEFI)/lib/libefi.a: mkdir -p gnu-efi/lib gnu-efi/gnuefi $(MAKE) -C gnu-efi \ - ARCH=$(ARCH_GNUEFI) TOPDIR=$(TOPDIR)/gnu-efi \ + COMPILER="$(COMPILER)" \ + CC="$(CC)" \ + ARCH=$(ARCH_GNUEFI) \ + TOPDIR=$(TOPDIR)/gnu-efi \ -f $(TOPDIR)/gnu-efi/Makefile \ lib gnuefi inc @@ -285,7 +288,13 @@ else endif test : - @make -f $(TOPDIR)/include/test.mk EFI_INCLUDES="$(EFI_INCLUDES)" ARCH_DEFINES="$(ARCH_DEFINES)" all + @make -f $(TOPDIR)/include/test.mk \ + COMPILER="$(COMPILER)" \ + CROSS_COMPILE="$(CROSS_COMPILE)" \ + CLANG_WARNINGS="$(CLANG_WARNINGS)" \ + ARCH_DEFINES="$(ARCH_DEFINES)" \ + EFI_INCLUDES="$(EFI_INCLUDES)" \ + all $(patsubst %.c,%,$(wildcard test-*.c)) : @make -f $(TOPDIR)/include/test.mk EFI_INCLUDES="$(EFI_INCLUDES)" ARCH_DEFINES="$(ARCH_DEFINES)" $@ @@ -298,7 +307,11 @@ clean-test-objs: clean-gnu-efi: @if [ -d gnu-efi ] ; then \ $(MAKE) -C gnu-efi \ - ARCH=$(ARCH_GNUEFI) TOPDIR=$(TOPDIR)/gnu-efi \ + CC="$(CC)" \ + HOSTCC="$(HOSTCC)" \ + COMPILER="$(COMPILER)" \ + ARCH=$(ARCH_GNUEFI) \ + TOPDIR=$(TOPDIR)/gnu-efi \ -f $(TOPDIR)/gnu-efi/Makefile \ clean ; \ fi diff --git a/include/test.mk b/include/test.mk index 68230b20..b99283f3 100644 --- a/include/test.mk +++ b/include/test.mk @@ -27,10 +27,11 @@ CFLAGS = $(OPTIMIZATIONS) -std=gnu11 \ -fno-eliminate-unused-debug-symbols \ -gpubnames \ -grecord-gcc-switches \ + $(if $(findstring clang,$(CC)),-Wno-unknown-warning-option) \ $(DEFAULT_WARNFLAGS) \ -Wsign-compare \ -Wno-deprecated-declarations \ - -Wno-unused-but-set-variable \ + $(if $(findstring gcc,$(CC)),-Wno-unused-but-set-variable) \ -Wno-unused-variable \ -Wno-pointer-sign \ $(DEFAULT_WERRFLAGS) \ @@ -43,11 +44,18 @@ CFLAGS = $(OPTIMIZATIONS) -std=gnu11 \ "-DDEFAULT_DEBUG_PRINT_STATE=$(DEBUG_PRINTS)" libefi-test.a : - $(MAKE) -C gnu-efi ARCH=$(ARCH_GNUEFI) TOPDIR=$(TOPDIR)/gnu-efi \ + $(MAKE) -C gnu-efi \ + COMPILER="$(COMPILER)" \ + CC="$(CC)" \ + ARCH=$(ARCH_GNUEFI) \ + TOPDIR=$(TOPDIR)/gnu-efi \ -f $(TOPDIR)/gnu-efi/Makefile \ clean lib mv gnu-efi/$(ARCH)/lib/libefi.a $@ - $(MAKE) -C gnu-efi ARCH=$(ARCH_GNUEFI) TOPDIR=$(TOPDIR)/gnu-efi \ + $(MAKE) -C gnu-efi \ + COMPILER="$(COMPILER)" \ + ARCH=$(ARCH_GNUEFI) \ + TOPDIR=$(TOPDIR)/gnu-efi \ -f $(TOPDIR)/gnu-efi/Makefile \ clean diff --git a/shim.h b/shim.h index 94b48bcc..d54fc6e9 100644 --- a/shim.h +++ b/shim.h @@ -27,6 +27,10 @@ #error On x86_64 you must have a compiler new enough to support __attribute__((__ms_abi__)) #endif +#if CLANG_PREREQ(3, 4) +#pragma GCC diagnostic ignored "-Wpointer-bool-conversion" +#endif + #if !defined(GNU_EFI_USE_EXTERNAL_STDARG) #define GNU_EFI_USE_EXTERNAL_STDARG #endif -- cgit v1.2.3