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 <yangx.li@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18579 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -35,6 +35,7 @@ from BuildToolError import *
|
||||
from CommonDataClass.DataClass import *
|
||||
from Parsing import GetSplitValueList
|
||||
from Common.LongFilePathSupport import OpenLongFilePath as open
|
||||
from Common.MultipleWorkspace import MultipleWorkspace as mws
|
||||
|
||||
## Regular expression used to find out place holders in string template
|
||||
gPlaceholderPattern = re.compile("\$\{([^$()\s]+)\}", re.MULTILINE|re.UNICODE)
|
||||
@ -1728,6 +1729,7 @@ class PathClass(object):
|
||||
|
||||
# Remove any '.' and '..' in path
|
||||
if self.Root:
|
||||
self.Root = mws.getWs(self.Root, self.File)
|
||||
self.Path = os.path.normpath(os.path.join(self.Root, self.File))
|
||||
self.Root = os.path.normpath(CommonPath([self.Root, self.Path]))
|
||||
# eliminate the side-effect of 'C:'
|
||||
@ -1838,7 +1840,10 @@ class PathClass(object):
|
||||
RealFile = os.path.join(self.AlterRoot, self.File)
|
||||
elif self.Root:
|
||||
RealFile = os.path.join(self.Root, self.File)
|
||||
return FILE_NOT_FOUND, os.path.join(self.AlterRoot, RealFile)
|
||||
if len (mws.getPkgPath()) == 0:
|
||||
return FILE_NOT_FOUND, os.path.join(self.AlterRoot, RealFile)
|
||||
else:
|
||||
return FILE_NOT_FOUND, "%s is not found in packages path:\n\t%s" % (self.File, '\n\t'.join(mws.getPkgPath()))
|
||||
|
||||
ErrorCode = 0
|
||||
ErrorInfo = ''
|
||||
|
Reference in New Issue
Block a user