diff options
author | Feng, Bob C <bob.c.feng@intel.com> | 2019-08-28 16:56:11 +0800 |
---|---|---|
committer | Feng, Bob C <bob.c.feng@intel.com> | 2019-09-17 10:19:05 +0800 |
commit | bc9e4194cf3edaf9524c83098ba3f72008c70190 (patch) | |
tree | 7387cbe5a229b4a14e33b091fcebaf80cf73a5bc /BaseTools/Source/Python | |
parent | e32f7bc96dc8db7af0c1c532e4990c9a36a12354 (diff) | |
download | edk2-bc9e4194cf3edaf9524c83098ba3f72008c70190.tar.gz edk2-bc9e4194cf3edaf9524c83098ba3f72008c70190.tar.bz2 edk2-bc9e4194cf3edaf9524c83098ba3f72008c70190.zip |
BaseTools: Improve GetDependencyList function
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2102
GetDependencyList get the header file via
re.findall in the whole header file.
This patch is to pre-process the header file and
to feed the shorter string to re.findall.
This patch is to improve GetDependencyList() efficiency
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Diffstat (limited to 'BaseTools/Source/Python')
-rwxr-xr-x | BaseTools/Source/Python/AutoGen/GenMake.py | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py index 3185ebe368..cda1fbe610 100755 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -1694,22 +1694,25 @@ def GetDependencyList(AutoGenObject, FileCache, File, ForceList, SearchPathList) CurrentFileDependencyList = DepDb[F]
else:
try:
- Fd = open(F.Path, 'rb')
- FileContent = Fd.read()
- Fd.close()
+ with open(F.Path, 'rb') as Fd:
+ FileContent = Fd.read(1)
+ Fd.seek(0)
+ if not FileContent:
+ continue
+ if FileContent[0] == 0xff or FileContent[0] == 0xfe:
+ FileContent2 = Fd.read()
+ FileContent2 = FileContent2.decode('utf-16')
+ IncludedFileList = gIncludePattern.findall(FileContent2)
+ else:
+ FileLines = Fd.readlines()
+ FileContent2 = [line for line in FileLines if str(line).lstrip("#\t ")[:8] == "include "]
+ simpleFileContent="".join(FileContent2)
+
+ IncludedFileList = gIncludePattern.findall(simpleFileContent)
except BaseException as X:
EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=F.Path + "\n\t" + str(X))
- if len(FileContent) == 0:
- continue
- try:
- if FileContent[0] == 0xff or FileContent[0] == 0xfe:
- FileContent = FileContent.decode('utf-16')
- else:
- FileContent = FileContent.decode()
- except:
- # The file is not txt file. for example .mcb file
+ if not FileContent:
continue
- IncludedFileList = gIncludePattern.findall(FileContent)
for Inc in IncludedFileList:
Inc = Inc.strip()
|