From 05cc51ad5894c8904d0fe5cdcf3f4d0a07dab85d Mon Sep 17 00:00:00 2001 From: Li YangX Date: Thu, 8 Oct 2015 09:27:14 +0000 Subject: BaseTools: Update Build tool to support multiple workspaces WORKSPACE is still kept. New PACKAGES_PATH is introduced to specify the additional WORKSPACEs. In PACKAGES_PATH, ';' is separator in Windows, ':' is separator in Linux. Build directory is in WORKSPACE. Package, BaseTools and Conf directory will be found from WORKSPACE and PACKAGES_PATH. In implementation, BaseTools adds MultipleWorkspace class for the file path conversion from WORKSPACE and PACKAGES_PATH. Verify two tree layouts. Root\edk2\MdePkg Root\edk2\MdeMdeModulePkg Root\edk2\... 1. set WORKSPACE=Root\edk2 2. set WORKSPACE=Root, and set PACKAGES_PATH=Root\edk2 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Li YangX Reviewed-by: Liming Gao git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18579 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Source/Python/AutoGen/AutoGen.py | 16 +++++++++------- BaseTools/Source/Python/AutoGen/GenMake.py | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) (limited to 'BaseTools/Source/Python/AutoGen') diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index 259abc519b..fe56574357 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -40,7 +40,7 @@ from GenPatchPcdTable.GenPatchPcdTable import parsePcdInfoFromMapFile import Common.VpdInfoFile as VpdInfoFile from GenPcdDb import CreatePcdDatabaseCode from Workspace.MetaFileCommentParser import UsageList - +from Common.MultipleWorkspace import MultipleWorkspace as mws import InfSectionParser ## Regular expression for splitting Dependency Expression string into tokens @@ -953,7 +953,7 @@ class PlatformAutoGen(AutoGen): self._GuidValue = {} FdfModuleList = [] for InfName in self._AsBuildInfList: - InfName = os.path.join(self.WorkspaceDir, InfName) + InfName = mws.join(self.WorkspaceDir, InfName) FdfModuleList.append(os.path.normpath(InfName)) for F in self.Platform.Modules.keys(): M = ModuleAutoGen(self.Workspace, F, self.BuildTarget, self.ToolChain, self.Arch, self.MetaFile) @@ -1288,7 +1288,7 @@ class PlatformAutoGen(AutoGen): def _GetFdfFile(self): if self._FdfFile == None: if self.Workspace.FdfFile != "": - self._FdfFile= path.join(self.WorkspaceDir, self.Workspace.FdfFile) + self._FdfFile= mws.join(self.WorkspaceDir, self.Workspace.FdfFile) else: self._FdfFile = '' return self._FdfFile @@ -2115,8 +2115,11 @@ class PlatformAutoGen(AutoGen): BuildOptions[Tool][Attr] = "" # check if override is indicated if Value.startswith('='): - BuildOptions[Tool][Attr] = Value[1:] + ToolPath = Value[1:] + ToolPath = mws.handleWsMacro(ToolPath) + BuildOptions[Tool][Attr] = ToolPath else: + Value = mws.handleWsMacro(Value) BuildOptions[Tool][Attr] += " " + Value if Module.AutoGenVersion < 0x00010005 and self.Workspace.UniFlag != None: # @@ -2193,8 +2196,7 @@ class ModuleAutoGen(AutoGen): return False self.SourceDir = self.MetaFile.SubDir - if self.SourceDir.upper().find(self.WorkspaceDir.upper()) == 0: - self.SourceDir = self.SourceDir[len(self.WorkspaceDir) + 1:] + self.SourceDir = mws.relpath(self.SourceDir, self.WorkspaceDir) self.SourceOverrideDir = None # use overrided path defined in DSC file @@ -3042,7 +3044,7 @@ class ModuleAutoGen(AutoGen): self._IncludePathList.append(self.DebugDir) for Package in self.Module.Packages: - PackageDir = path.join(self.WorkspaceDir, Package.MetaFile.Dir) + PackageDir = mws.join(self.WorkspaceDir, Package.MetaFile.Dir) if PackageDir not in self._IncludePathList: self._IncludePathList.append(PackageDir) for Inc in Package.Includes: diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py index 0342709a3a..d9b219e1c7 100644 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -19,7 +19,7 @@ import string import re import os.path as path from Common.LongFilePathSupport import OpenLongFilePath as open - +from Common.MultipleWorkspace import MultipleWorkspace as mws from Common.BuildToolError import * from Common.Misc import * from Common.String import * @@ -559,7 +559,7 @@ cleanlib: found = False while not found and os.sep in package_rel_dir: index = package_rel_dir.index(os.sep) - current_dir = os.path.join(current_dir, package_rel_dir[:index]) + current_dir = mws.join(current_dir, package_rel_dir[:index]) for fl in os.listdir(current_dir): if fl.endswith('.dec'): found = True -- cgit v1.2.3