In https://bugzilla.tianocore.org/show_bug.cgi?id=2842 clang support was added by having users specify "make CXX=llvm" when building BaseTools.
The Makefile then sees that and sets CC=$(CLANG_BIN)clang and CXX=$(CLANG_BIN)clang++. That requires that the executables 'clang' and 'clang++' exist and for example aren't named 'clang-17' and 'clang++-17'. Also, it's an unusual way of specifying the compiler, since many users will expect to be able to override CC and CXX on the make command line. Rework the BaseTools Makefiles removing the 'BUILD_' prefix (BUILD_CC and BUILD_CXX) and using the standard name 'LDFLAGS' instead of 'LFLAGS'. This allows clang to be used by running 'make -C BaseTools CC=clang CXX=clang++'. This also requires reworking the gcc support, since $(CC) has a default value of 'cc', so the '?=' syntax won't override it. Fix this by checking if $(CC) has its original value, and if so overriding the environment. Signed-off-by: Rebecca Cran <rebe...@quicinc.com> --- BaseTools/Source/C/DevicePath/GNUmakefile | 4 +- BaseTools/Source/C/LzmaCompress/GNUmakefile | 2 +- BaseTools/Source/C/Makefiles/app.makefile | 2 +- BaseTools/Source/C/Makefiles/footer.makefile | 6 +-- BaseTools/Source/C/Makefiles/header.makefile | 52 ++++++++++---------- BaseTools/Source/C/VfrCompile/GNUmakefile | 14 +++--- BaseTools/Source/C/VfrCompile/Pccts/antlr/makefile | 18 +++---- BaseTools/Source/C/VfrCompile/Pccts/dlg/makefile | 28 +++++------ BaseTools/Source/Python/Workspace/DscBuildData.py | 2 +- 9 files changed, 64 insertions(+), 64 deletions(-) diff --git a/BaseTools/Source/C/DevicePath/GNUmakefile b/BaseTools/Source/C/DevicePath/GNUmakefile index 13b54ead65ac..3afc7fc0504e 100644 --- a/BaseTools/Source/C/DevicePath/GNUmakefile +++ b/BaseTools/Source/C/DevicePath/GNUmakefile @@ -13,12 +13,12 @@ OBJECTS = DevicePath.o UefiDevicePathLib.o DevicePathFromText.o DevicePathUtili include $(MAKEROOT)/Makefiles/app.makefile -GCCVERSION = $(shell $(BUILD_CC) -dumpversion | awk -F'.' '{print $$1}') +GCCVERSION = $(shell $(CC) -dumpversion | awk -F'.' '{print $$1}') ifneq ("$(GCCVERSION)", "5") ifneq ($(CXX), llvm) ifneq ($(DARWIN),Darwin) # gcc 12 trips over device path handling -BUILD_CFLAGS += -Wno-error=stringop-overflow +CFLAGS += -Wno-error=stringop-overflow endif endif endif diff --git a/BaseTools/Source/C/LzmaCompress/GNUmakefile b/BaseTools/Source/C/LzmaCompress/GNUmakefile index c837e7782373..a00ef4bc8061 100644 --- a/BaseTools/Source/C/LzmaCompress/GNUmakefile +++ b/BaseTools/Source/C/LzmaCompress/GNUmakefile @@ -24,4 +24,4 @@ OBJECTS = \ include $(MAKEROOT)/Makefiles/app.makefile -BUILD_CFLAGS += -D_7ZIP_ST +CFLAGS += -D_7ZIP_ST diff --git a/BaseTools/Source/C/Makefiles/app.makefile b/BaseTools/Source/C/Makefiles/app.makefile index 6a2a8f5e8a0e..506343a6e0b4 100644 --- a/BaseTools/Source/C/Makefiles/app.makefile +++ b/BaseTools/Source/C/Makefiles/app.makefile @@ -15,7 +15,7 @@ APPLICATION = $(MAKEROOT)/bin/$(APPNAME) all: $(MAKEROOT)/bin $(APPLICATION) $(APPLICATION): $(OBJECTS) - $(LINKER) -o $(APPLICATION) $(BUILD_LFLAGS) $(OBJECTS) -L$(MAKEROOT)/libs $(LIBS) + $(LINKER) -o $(APPLICATION) $(LDFLAGS) $(OBJECTS) -L$(MAKEROOT)/libs $(LIBS) $(OBJECTS): $(MAKEROOT)/Include/Common/BuildVersion.h diff --git a/BaseTools/Source/C/Makefiles/footer.makefile b/BaseTools/Source/C/Makefiles/footer.makefile index 85c3374224f2..7546da8cf5a0 100644 --- a/BaseTools/Source/C/Makefiles/footer.makefile +++ b/BaseTools/Source/C/Makefiles/footer.makefile @@ -15,13 +15,13 @@ install: $(MAKEROOT)/libs-$(HOST_ARCH) $(LIBRARY) cp $(LIBRARY) $(MAKEROOT)/libs-$(HOST_ARCH) $(LIBRARY): $(OBJECTS) - $(BUILD_AR) crs $@ $^ + $(AR) crs $@ $^ %.o : %.c - $(BUILD_CC) -c $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) $< -o $@ + $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ %.o : %.cpp - $(BUILD_CXX) -c $(BUILD_CPPFLAGS) $(BUILD_CXXFLAGS) $< -o $@ + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ .PHONY: clean clean: diff --git a/BaseTools/Source/C/Makefiles/header.makefile b/BaseTools/Source/C/Makefiles/header.makefile index 4e88a4fbd86b..347918c7d4fa 100644 --- a/BaseTools/Source/C/Makefiles/header.makefile +++ b/BaseTools/Source/C/Makefiles/header.makefile @@ -45,19 +45,19 @@ CYGWIN:=$(findstring CYGWIN, $(shell uname -s)) LINUX:=$(findstring Linux, $(shell uname -s)) DARWIN:=$(findstring Darwin, $(shell uname -s)) ifeq ($(CXX), llvm) -BUILD_CC ?= $(CLANG_BIN)clang -BUILD_CXX ?= $(CLANG_BIN)clang++ -BUILD_AS ?= $(CLANG_BIN)clang -BUILD_AR ?= $(CLANG_BIN)llvm-ar -BUILD_LD ?= $(CLANG_BIN)llvm-ld -else -BUILD_CC ?= gcc -BUILD_CXX ?= g++ -BUILD_AS ?= gcc -BUILD_AR ?= ar -BUILD_LD ?= ld +CC ?= $(CLANG_BIN)clang +CXX ?= $(CLANG_BIN)clang++ +AS ?= $(CLANG_BIN)clang +AR ?= $(CLANG_BIN)llvm-ar +LD ?= $(CLANG_BIN)llvm-ld +else ifeq ($(origin CC),default) +CC = gcc +CXX = g++ +AS = gcc +AR = ar +LD = ld endif -LINKER ?= $(BUILD_CC) +LINKER ?= $(CC) ifeq ($(HOST_ARCH), IA32) ARCH_INCLUDE = -I $(MAKEROOT)/Include/Ia32/ @@ -81,34 +81,34 @@ $(error Bad HOST_ARCH) endif INCLUDE = $(TOOL_INCLUDE) -I $(MAKEROOT) -I $(MAKEROOT)/Include/Common -I $(MAKEROOT)/Include/ -I $(MAKEROOT)/Include/IndustryStandard -I $(MAKEROOT)/Common/ -I .. -I . $(ARCH_INCLUDE) -BUILD_CPPFLAGS = $(INCLUDE) +CPPFLAGS = $(INCLUDE) # keep EXTRA_OPTFLAGS last BUILD_OPTFLAGS = -O2 $(EXTRA_OPTFLAGS) ifeq ($(DARWIN),Darwin) # assume clang or clang compatible flags on OS X -BUILD_CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror \ +CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror \ -Wno-deprecated-declarations -Wno-self-assign -Wno-unused-result -nostdlib -g else ifeq ($(CXX), llvm) -BUILD_CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \ +CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \ -fno-delete-null-pointer-checks -Wall -Werror \ -Wno-deprecated-declarations -Wno-self-assign \ -Wno-unused-result -nostdlib -g else -BUILD_CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \ +CFLAGS = -MD -fshort-wchar -fno-strict-aliasing -fwrapv \ -fno-delete-null-pointer-checks -Wall -Werror \ -Wno-deprecated-declarations -Wno-stringop-truncation -Wno-restrict \ -Wno-unused-result -nostdlib -g endif endif ifeq ($(CXX), llvm) -BUILD_LFLAGS = -BUILD_CXXFLAGS = -Wno-deprecated-register -Wno-unused-result +LDFLAGS = +CXXFLAGS = -Wno-deprecated-register -Wno-unused-result else -BUILD_LFLAGS = -BUILD_CXXFLAGS = -Wno-unused-result +LDFLAGS = +CXXFLAGS = -Wno-unused-result endif ifeq ($(HOST_ARCH), IA32) # @@ -117,18 +117,18 @@ ifeq ($(HOST_ARCH), IA32) # so only do this is uname -m returns i386. # ifeq ($(DARWIN),Darwin) - BUILD_CFLAGS += -arch i386 - BUILD_CPPFLAGS += -arch i386 - BUILD_LFLAGS += -arch i386 + CFLAGS += -arch i386 + CPPFLAGS += -arch i386 + LDFLAGS += -arch i386 endif endif # keep BUILD_OPTFLAGS last -BUILD_CFLAGS += $(BUILD_OPTFLAGS) -BUILD_CXXFLAGS += $(BUILD_OPTFLAGS) +CFLAGS += $(BUILD_OPTFLAGS) +CXXFLAGS += $(BUILD_OPTFLAGS) # keep EXTRA_LDFLAGS last -BUILD_LFLAGS += $(EXTRA_LDFLAGS) +LDFLAGS += $(EXTRA_LDFLAGS) .PHONY: all .PHONY: install diff --git a/BaseTools/Source/C/VfrCompile/GNUmakefile b/BaseTools/Source/C/VfrCompile/GNUmakefile index fc329944b992..9fbaaaba21d7 100644 --- a/BaseTools/Source/C/VfrCompile/GNUmakefile +++ b/BaseTools/Source/C/VfrCompile/GNUmakefile @@ -17,9 +17,9 @@ TOOL_INCLUDE = -I Pccts/h OBJECTS = AParser.o DLexerBase.o ATokenBuffer.o EfiVfrParser.o VfrLexer.o VfrSyntax.o \ VfrFormPkg.o VfrError.o VfrUtilityLib.o VfrCompiler.o ifeq ($(CXX), llvm) -VFR_CPPFLAGS = -Wno-deprecated-register -DPCCTS_USE_NAMESPACE_STD $(BUILD_CPPFLAGS) +VFR_CPPFLAGS = -Wno-deprecated-register -DPCCTS_USE_NAMESPACE_STD $(CPPFLAGS) else -VFR_CPPFLAGS = -DPCCTS_USE_NAMESPACE_STD $(BUILD_CPPFLAGS) +VFR_CPPFLAGS = -DPCCTS_USE_NAMESPACE_STD $(CPPFLAGS) endif # keep BUILD_OPTFLAGS last VFR_CXXFLAGS = $(BUILD_OPTFLAGS) @@ -27,7 +27,7 @@ VFR_CXXFLAGS = $(BUILD_OPTFLAGS) # keep EXTRA_LDFLAGS last VFR_LFLAGS = $(EXTRA_LDFLAGS) -LINKER = $(BUILD_CXX) +LINKER = $(CXX) EXTRA_CLEAN_OBJECTS = EfiVfrParser.cpp EfiVfrParser.h VfrParser.dlg VfrTokens.h VfrLexer.cpp VfrLexer.h VfrSyntax.cpp tokens.h @@ -60,16 +60,16 @@ Pccts/dlg/dlg: BIN_DIR='.' $(MAKE) -C Pccts/dlg ATokenBuffer.o: Pccts/h/ATokenBuffer.cpp - $(BUILD_CXX) -c $(VFR_CPPFLAGS) $(INC) $(VFR_CXXFLAGS) $? -o $@ + $(CXX) -c $(VFR_CPPFLAGS) $(INC) $(VFR_CXXFLAGS) $? -o $@ DLexerBase.o: Pccts/h/DLexerBase.cpp - $(BUILD_CXX) -c $(VFR_CPPFLAGS) $(INC) $(VFR_CXXFLAGS) $? -o $@ + $(CXX) -c $(VFR_CPPFLAGS) $(INC) $(VFR_CXXFLAGS) $? -o $@ AParser.o: Pccts/h/AParser.cpp - $(BUILD_CXX) -c $(VFR_CPPFLAGS) $(INC) $(VFR_CXXFLAGS) $? -o $@ + $(CXX) -c $(VFR_CPPFLAGS) $(INC) $(VFR_CXXFLAGS) $? -o $@ VfrSyntax.o: VfrSyntax.cpp - $(BUILD_CXX) -c $(VFR_CPPFLAGS) $(INC) $(VFR_CXXFLAGS) $? -o $@ + $(CXX) -c $(VFR_CPPFLAGS) $(INC) $(VFR_CXXFLAGS) $? -o $@ clean: localClean diff --git a/BaseTools/Source/C/VfrCompile/Pccts/antlr/makefile b/BaseTools/Source/C/VfrCompile/Pccts/antlr/makefile index 559b1c99f1ef..558d2f7b0111 100644 --- a/BaseTools/Source/C/VfrCompile/Pccts/antlr/makefile +++ b/BaseTools/Source/C/VfrCompile/Pccts/antlr/makefile @@ -157,7 +157,7 @@ PCCTS_H=../h # $(DLG) -C2 parser.dlg scan.c # #set.$(OBJ_EXT): $(SET)/set.c -# $(BUILD_CC) $(BUILD_CFLAGS) -c $(OUT_OBJ)set.$(OBJ_EXT) $(SET)/set.c +# $(CC) $(CFLAGS) -c $(OUT_OBJ)set.$(OBJ_EXT) $(SET)/set.c @@ -165,17 +165,17 @@ PCCTS_H=../h # UNIX (default) # ifeq ($(CXX), llvm) -BUILD_CC?=$(CLANG_BIN)clang -else -BUILD_CC?=gcc +CC?=$(CLANG_BIN)clang +else ifeq ($(origin CC),default) +CC=gcc endif COPT=-O ANTLR=${BIN_DIR}/antlr DLG=${BIN_DIR}/dlg OBJ_EXT=o OUT_OBJ = -o -BUILD_CFLAGS= $(COPT) -I. -I$(SET) -I$(PCCTS_H) -DUSER_ZZSYN $(COTHER) -DZZLEXBUFSIZE=65536 -BUILD_CPPFLAGS= +CFLAGS= $(COPT) -I. -I$(SET) -I$(PCCTS_H) -DUSER_ZZSYN $(COTHER) -DZZLEXBUFSIZE=65536 +CPPFLAGS= # # SGI Users, use this CFLAGS # @@ -184,7 +184,7 @@ OBJ=antlr.o scan.o err.o bits.o build.o fset2.o fset.o gen.o \ globals.o hash.o lex.o main.o misc.o set.o pred.o egman.o mrhoist.o fcache.o $(BIN_DIR)/antlr : $(OBJ) $(SRC) - $(BUILD_CC) $(BUILD_CFLAGS) -o $(BIN_DIR)/antlr $(OBJ) + $(CC) $(CFLAGS) -o $(BIN_DIR)/antlr $(OBJ) # what files does PCCTS generate (both ANTLR and DLG) PCCTS_GEN=antlr.c scan.c err.c tokens.h mode.h parser.dlg stdpccts.h remap.h @@ -207,10 +207,10 @@ scan.o : scan.c mode.h tokens.h # $(DLG) -C2 parser.dlg scan.c set.o : $(SET)/set.c - $(BUILD_CC) $(BUILD_CFLAGS) -c -o set.o $(SET)/set.c + $(CC) $(CFLAGS) -c -o set.o $(SET)/set.c %.o : %.c - $(BUILD_CC) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $< -o $@ + $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ # # ****** These next targets are common to UNIX and PC world ******** diff --git a/BaseTools/Source/C/VfrCompile/Pccts/dlg/makefile b/BaseTools/Source/C/VfrCompile/Pccts/dlg/makefile index 5a3561edecd4..e214b35ab5e1 100644 --- a/BaseTools/Source/C/VfrCompile/Pccts/dlg/makefile +++ b/BaseTools/Source/C/VfrCompile/Pccts/dlg/makefile @@ -35,7 +35,7 @@ PCCTS_H=../h # #$(LIBS: = +^ #) -#$(DEF_FILE) $(LFLAGS) ; +#$(DEF_FILE) $(LDFLAGS) ; #<< # bind $@ c:\os2\doscalls.lib # copy *.exe ..\bin @@ -59,7 +59,7 @@ PCCTS_H=../h #$@ /Tde /c # #$(LIBS) -#$(DEF_FILE) $(LFLAGS) ; +#$(DEF_FILE) $(LDFLAGS) ; #| # copy *.exe ..\bin # @@ -83,7 +83,7 @@ PCCTS_H=../h # #$(LIBS: = +^ #) -#$(DEF_FILE) $(LFLAGS) ; +#$(DEF_FILE) $(LDFLAGS) ; #<< # copy *.exe ..\bin # @@ -115,22 +115,22 @@ PCCTS_H=../h # UNIX # ifeq ($(CXX), llvm) -BUILD_CC?=$(CLANG_BIN)clang -else -BUILD_CC?=cc +CC?=$(CLANG_BIN)clang +else ifeq ($(origin CC),default) +CC=cc endif COPT=-O ANTLR=${BIN_DIR}/antlr DLG=${BIN_DIR}/dlg -BUILD_CFLAGS= $(COPT) -I. -I$(SET) -I$(PCCTS_H) -DUSER_ZZSYN -DZZLEXBUFSIZE=65536 -BUILD_CPPFLAGS= +CFLAGS= $(COPT) -I. -I$(SET) -I$(PCCTS_H) -DUSER_ZZSYN -DZZLEXBUFSIZE=65536 +CPPFLAGS= OBJ_EXT=o OUT_OBJ = -o OBJ = dlg_p.o dlg_a.o main.o err.o set.o support.o output.o \ relabel.o automata.o $(BIN_DIR)/dlg : $(OBJ) $(SRC) - $(BUILD_CC) $(BUILD_CFLAGS) -o $(BIN_DIR)/dlg $(OBJ) + $(CC) $(CFLAGS) -o $(BIN_DIR)/dlg $(OBJ) SRC = dlg_p.c dlg_a.c main.c err.c $(SET)/set.c support.c output.c \ relabel.c automata.c @@ -142,19 +142,19 @@ SRC = dlg_p.c dlg_a.c main.c err.c $(SET)/set.c support.c output.c \ # $(DLG) -C2 parser.dlg dlg_a.c dlg_p.$(OBJ_EXT) : dlg_p.c dlg.h tokens.h mode.h - $(BUILD_CC) $(BUILD_CFLAGS) -c dlg_p.c + $(CC) $(CFLAGS) -c dlg_p.c dlg_a.$(OBJ_EXT) : dlg_a.c dlg.h tokens.h mode.h - $(BUILD_CC) $(BUILD_CFLAGS) -c dlg_a.c + $(CC) $(CFLAGS) -c dlg_a.c main.$(OBJ_EXT) : main.c dlg.h - $(BUILD_CC) $(BUILD_CFLAGS) -c main.c + $(CC) $(CFLAGS) -c main.c set.$(OBJ_EXT) : $(SET)/set.c - $(BUILD_CC) -c $(BUILD_CFLAGS) $(SET)/set.c + $(CC) -c $(CFLAGS) $(SET)/set.c %.o : %.c - $(BUILD_CC) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $< -o $@ + $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ lint: lint *.c diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py index 73c6ee40061b..8fd949dc50b6 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -89,7 +89,7 @@ PcdMakefileHeader = ''' ''' WindowsCFLAGS = 'CFLAGS = $(CFLAGS) /wd4200 /wd4034 /wd4101 ' -LinuxCFLAGS = 'BUILD_CFLAGS += -Wno-pointer-to-int-cast -Wno-unused-variable ' +LinuxCFLAGS = 'CFLAGS += -Wno-pointer-to-int-cast -Wno-unused-variable ' PcdMakefileEnd = ''' !INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.common !INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.app -- 2.30.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#100298): https://edk2.groups.io/g/devel/message/100298 Mute This Topic: https://groups.io/mt/97022154/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-