BaseTools/Build: Do not use Common.lib in Structured PCD app

https://bugzilla.tianocore.org/show_bug.cgi?id=2496

Reduce the build and env dependencies for the Structured PCD
application by removing the dependency on Common.lib that
is only built when BaseTools is built which does not
happen if pre-compiled BaseToools are used.  Change the
makefile for the Structure PCD application to build all
files from sources which adds PcdValueCommon.c to the
makefile.  Also remove PcdValueCommon.c from Common.lib.

With the change to the makefile for the Structured PCD
application, multiple C files are compiled.  Only
PcdValueInit.c contains the extra information expected
by the error/warning message parser.  Only parse the
DSC line number into an error message if there is an
error/warning in PcdValueInit.c.  Errors/warnings in
other files should be passed through.  This fixes a build
failure with no useful log information that was observed
when there was a compiler error in PcdValueCommon.c.

Cc: Sean Brogan <sean.brogan@microsoft.com>
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>

Reviewed-by: Bob Feng <bob.c.feng@intel.com>
This commit is contained in:
Kinney, Michael D 2020-02-07 07:07:12 +08:00 committed by mergify[bot]
parent 77b738b36f
commit 45b0be3840
3 changed files with 25 additions and 23 deletions

View File

@ -28,7 +28,6 @@ OBJECTS = \
PeCoffLoaderEx.o \ PeCoffLoaderEx.o \
SimpleFileParsing.o \ SimpleFileParsing.o \
StringFuncs.o \ StringFuncs.o \
TianoCompress.o \ TianoCompress.o
PcdValueCommon.o
include $(MAKEROOT)/Makefiles/lib.makefile include $(MAKEROOT)/Makefiles/lib.makefile

View File

@ -28,8 +28,7 @@ OBJECTS = \
PeCoffLoaderEx.obj \ PeCoffLoaderEx.obj \
SimpleFileParsing.obj \ SimpleFileParsing.obj \
StringFuncs.obj \ StringFuncs.obj \
TianoCompress.obj \ TianoCompress.obj
PcdValueCommon.obj
!INCLUDE ..\Makefiles\ms.lib !INCLUDE ..\Makefiles\ms.lib

View File

@ -91,9 +91,6 @@ WindowsCFLAGS = 'CFLAGS = $(CFLAGS) /wd4200 /wd4034 /wd4101 '
LinuxCFLAGS = 'BUILD_CFLAGS += -Wno-pointer-to-int-cast -Wno-unused-variable ' LinuxCFLAGS = 'BUILD_CFLAGS += -Wno-pointer-to-int-cast -Wno-unused-variable '
PcdMakefileEnd = ''' PcdMakefileEnd = '''
!INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.common !INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.common
LIBS = $(LIB_PATH)\Common.lib
!INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.app !INCLUDE $(BASE_TOOLS_PATH)\Source\C\Makefiles\ms.app
''' '''
@ -2637,10 +2634,10 @@ class DscBuildData(PlatformBuildClassObject):
MakeApp = PcdMakefileHeader MakeApp = PcdMakefileHeader
if sys.platform == "win32": if sys.platform == "win32":
MakeApp = MakeApp + 'APPFILE = %s\%s.exe\n' % (self.OutputPath, PcdValueInitName) + 'APPNAME = %s\n' % (PcdValueInitName) + 'OBJECTS = %s\%s.obj\n' % (self.OutputPath, PcdValueInitName) + 'INC = ' MakeApp = MakeApp + 'APPFILE = %s\%s.exe\n' % (self.OutputPath, PcdValueInitName) + 'APPNAME = %s\n' % (PcdValueInitName) + 'OBJECTS = %s\%s.obj %s.obj\n' % (self.OutputPath, PcdValueInitName, os.path.normpath(mws.join(GlobalData.gGlobalDefines["EDK_TOOLS_PATH"], "Source/C/Common/PcdValueCommon"))) + 'INC = '
else: else:
MakeApp = MakeApp + PcdGccMakefile MakeApp = MakeApp + PcdGccMakefile
MakeApp = MakeApp + 'APPFILE = %s/%s\n' % (self.OutputPath, PcdValueInitName) + 'APPNAME = %s\n' % (PcdValueInitName) + 'OBJECTS = %s/%s.o\n' % (self.OutputPath, PcdValueInitName) + \ MakeApp = MakeApp + 'APPFILE = %s/%s\n' % (self.OutputPath, PcdValueInitName) + 'APPNAME = %s\n' % (PcdValueInitName) + 'OBJECTS = %s/%s.o %s.o\n' % (self.OutputPath, PcdValueInitName, os.path.normpath(mws.join(GlobalData.gGlobalDefines["EDK_TOOLS_PATH"], "Source/C/Common/PcdValueCommon"))) + \
'include $(MAKEROOT)/Makefiles/app.makefile\n' + 'INCLUDE +=' 'include $(MAKEROOT)/Makefiles/app.makefile\n' + 'INCLUDE +='
IncSearchList = [] IncSearchList = []
@ -2739,8 +2736,8 @@ class DscBuildData(PlatformBuildClassObject):
IncludeFileFullPaths.append(os.path.normpath(includefullpath)) IncludeFileFullPaths.append(os.path.normpath(includefullpath))
break break
SearchPathList = [] SearchPathList = []
SearchPathList.append(os.path.normpath(mws.join(GlobalData.gWorkspace, "BaseTools/Source/C/Include"))) SearchPathList.append(os.path.normpath(mws.join(GlobalData.gGlobalDefines["EDK_TOOLS_PATH"], "BaseTools/Source/C/Include")))
SearchPathList.append(os.path.normpath(mws.join(GlobalData.gWorkspace, "BaseTools/Source/C/Common"))) SearchPathList.append(os.path.normpath(mws.join(GlobalData.gGlobalDefines["EDK_TOOLS_PATH"], "BaseTools/Source/C/Common")))
SearchPathList.extend(str(item) for item in IncSearchList) SearchPathList.extend(str(item) for item in IncSearchList)
IncFileList = GetDependencyList(IncludeFileFullPaths, SearchPathList) IncFileList = GetDependencyList(IncludeFileFullPaths, SearchPathList)
for include_file in IncFileList: for include_file in IncFileList:
@ -2768,6 +2765,7 @@ class DscBuildData(PlatformBuildClassObject):
returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (MakeCommand) returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (MakeCommand)
Messages = StdErr Messages = StdErr
EdkLogger.verbose ('%s\n%s\n%s' % (MakeCommand, StdOut, StdErr))
Messages = Messages.split('\n') Messages = Messages.split('\n')
MessageGroup = [] MessageGroup = []
if returncode != 0: if returncode != 0:
@ -2777,16 +2775,21 @@ class DscBuildData(PlatformBuildClassObject):
File.close() File.close()
for Message in Messages: for Message in Messages:
if " error" in Message or "warning" in Message: if " error" in Message or "warning" in Message:
FileInfo = Message.strip().split('(') try:
if len (FileInfo) > 1: FileInfo = Message.strip().split('(')
FileName = FileInfo [0] if len (FileInfo) > 1:
FileLine = FileInfo [1].split (')')[0] FileName = FileInfo [0]
else: FileLine = FileInfo [1].split (')')[0]
FileInfo = Message.strip().split(':') else:
if len(FileInfo) < 2: FileInfo = Message.strip().split(':')
continue if len(FileInfo) < 2:
FileName = FileInfo [0] continue
FileLine = FileInfo [1] FileName = FileInfo [0]
FileLine = FileInfo [1]
except:
continue
if "PcdValueInit.c" not in FileName:
continue
if FileLine.isdigit(): if FileLine.isdigit():
error_line = FileData[int (FileLine) - 1] error_line = FileData[int (FileLine) - 1]
if r"//" in error_line: if r"//" in error_line:
@ -2812,13 +2815,14 @@ class DscBuildData(PlatformBuildClassObject):
if MessageGroup: if MessageGroup:
EdkLogger.error("build", PCD_STRUCTURE_PCD_ERROR, "\n".join(MessageGroup) ) EdkLogger.error("build", PCD_STRUCTURE_PCD_ERROR, "\n".join(MessageGroup) )
else: else:
EdkLogger.error('Build', COMMAND_FAILURE, 'Can not execute command: %s' % MakeCommand) EdkLogger.error('Build', COMMAND_FAILURE, 'Can not execute command: %s\n%s\n%s' % (MakeCommand, StdOut, StdErr))
if DscBuildData.NeedUpdateOutput(OutputValueFile, Dest_PcdValueInitExe, InputValueFile): if DscBuildData.NeedUpdateOutput(OutputValueFile, Dest_PcdValueInitExe, InputValueFile):
Command = Dest_PcdValueInitExe + ' -i %s -o %s' % (InputValueFile, OutputValueFile) Command = Dest_PcdValueInitExe + ' -i %s -o %s' % (InputValueFile, OutputValueFile)
returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (Command) returncode, StdOut, StdErr = DscBuildData.ExecuteCommand (Command)
EdkLogger.verbose ('%s\n%s\n%s' % (Command, StdOut, StdErr))
if returncode != 0: if returncode != 0:
EdkLogger.warn('Build', COMMAND_FAILURE, 'Can not collect output from command: %s' % Command) EdkLogger.warn('Build', COMMAND_FAILURE, 'Can not collect output from command: %s\n%s\n' % (Command, StdOut, StdErr))
File = open (OutputValueFile, 'r') File = open (OutputValueFile, 'r')
FileBuffer = File.readlines() FileBuffer = File.readlines()