Check In tool source code based on Build tool project revision r1655.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8964 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
174
BaseTools/Source/Python/Common/TargetTxtClassObject.py
Normal file
174
BaseTools/Source/Python/Common/TargetTxtClassObject.py
Normal file
@ -0,0 +1,174 @@
|
||||
## @file
|
||||
# This file is used to define each component of Target.txt file
|
||||
#
|
||||
# Copyright (c) 2007, Intel Corporation
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
|
||||
##
|
||||
# Import Modules
|
||||
#
|
||||
import os
|
||||
import EdkLogger
|
||||
import DataType
|
||||
from BuildToolError import *
|
||||
import GlobalData
|
||||
|
||||
gDefaultTargetTxtFile = "Conf/target.txt"
|
||||
|
||||
## TargetTxtClassObject
|
||||
#
|
||||
# This class defined content used in file target.txt
|
||||
#
|
||||
# @param object: Inherited from object class
|
||||
# @param Filename: Input value for full path of target.txt
|
||||
#
|
||||
# @var TargetTxtDictionary: To store keys and values defined in target.txt
|
||||
#
|
||||
class TargetTxtClassObject(object):
|
||||
def __init__(self, Filename = None):
|
||||
self.TargetTxtDictionary = {
|
||||
DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM : '',
|
||||
DataType.TAB_TAT_DEFINES_ACTIVE_MODULE : '',
|
||||
DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF : '',
|
||||
DataType.TAB_TAT_DEFINES_MULTIPLE_THREAD : '',
|
||||
DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER : '',
|
||||
DataType.TAB_TAT_DEFINES_TARGET : [],
|
||||
DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG : [],
|
||||
DataType.TAB_TAT_DEFINES_TARGET_ARCH : [],
|
||||
DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF : '',
|
||||
}
|
||||
if Filename != None:
|
||||
self.LoadTargetTxtFile(Filename)
|
||||
|
||||
## LoadTargetTxtFile
|
||||
#
|
||||
# Load target.txt file and parse it, return a set structure to store keys and values
|
||||
#
|
||||
# @param Filename: Input value for full path of target.txt
|
||||
#
|
||||
# @retval set() A set structure to store keys and values
|
||||
# @retval 1 Error happenes in parsing
|
||||
#
|
||||
def LoadTargetTxtFile(self, Filename):
|
||||
if os.path.exists(Filename) and os.path.isfile(Filename):
|
||||
return self.ConvertTextFileToDict(Filename, '#', '=')
|
||||
else:
|
||||
EdkLogger.error("Target.txt Parser", FILE_NOT_FOUND, ExtraData=Filename)
|
||||
return 1
|
||||
|
||||
## ConvertTextFileToDict
|
||||
#
|
||||
# Convert a text file to a dictionary of (name:value) pairs.
|
||||
# The data is saved to self.TargetTxtDictionary
|
||||
#
|
||||
# @param FileName: Text filename
|
||||
# @param CommentCharacter: Comment char, be used to ignore comment content
|
||||
# @param KeySplitCharacter: Key split char, between key name and key value. Key1 = Value1, '=' is the key split char
|
||||
#
|
||||
# @retval 0 Convert successfully
|
||||
# @retval 1 Open file failed
|
||||
#
|
||||
def ConvertTextFileToDict(self, FileName, CommentCharacter, KeySplitCharacter):
|
||||
F = None
|
||||
try:
|
||||
F = open(FileName,'r')
|
||||
except:
|
||||
EdkLogger.error("build", FILE_OPEN_FAILURE, ExtraData=FileName)
|
||||
if F != None:
|
||||
F.close()
|
||||
|
||||
for Line in F:
|
||||
Line = Line.strip()
|
||||
if Line.startswith(CommentCharacter) or Line == '':
|
||||
continue
|
||||
|
||||
LineList = Line.split(KeySplitCharacter, 1)
|
||||
Key = LineList[0].strip()
|
||||
if len(LineList) == 2:
|
||||
Value = LineList[1].strip()
|
||||
else:
|
||||
Value = ""
|
||||
|
||||
if Key in [DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM, DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF, \
|
||||
DataType.TAB_TAT_DEFINES_ACTIVE_MODULE, DataType.TAB_TAT_DEFINES_BUILD_RULE_CONF]:
|
||||
self.TargetTxtDictionary[Key] = Value.replace('\\', '/')
|
||||
elif Key in [DataType.TAB_TAT_DEFINES_TARGET, DataType.TAB_TAT_DEFINES_TARGET_ARCH, \
|
||||
DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG]:
|
||||
self.TargetTxtDictionary[Key] = Value.split()
|
||||
elif Key == DataType.TAB_TAT_DEFINES_MULTIPLE_THREAD:
|
||||
if Value not in ["Enable", "Disable"]:
|
||||
EdkLogger.error("build", FORMAT_INVALID, "Invalid setting of [%s]: %s." % (Key, Value),
|
||||
ExtraData="\tSetting must be one of [Enable, Disable]",
|
||||
File=FileName)
|
||||
self.TargetTxtDictionary[Key] = Value
|
||||
elif Key == DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER:
|
||||
try:
|
||||
V = int(Value, 0)
|
||||
except:
|
||||
EdkLogger.error("build", FORMAT_INVALID, "Invalid number of [%s]: %s." % (Key, Value),
|
||||
File=FileName)
|
||||
self.TargetTxtDictionary[Key] = Value
|
||||
#elif Key not in GlobalData.gGlobalDefines:
|
||||
# GlobalData.gGlobalDefines[Key] = Value
|
||||
|
||||
F.close()
|
||||
return 0
|
||||
|
||||
## Print the dictionary
|
||||
#
|
||||
# Print all items of dictionary one by one
|
||||
#
|
||||
# @param Dict: The dictionary to be printed
|
||||
#
|
||||
def printDict(Dict):
|
||||
if Dict != None:
|
||||
KeyList = Dict.keys()
|
||||
for Key in KeyList:
|
||||
if Dict[Key] != '':
|
||||
print Key + ' = ' + str(Dict[Key])
|
||||
|
||||
## Print the dictionary
|
||||
#
|
||||
# Print the items of dictionary which matched with input key
|
||||
#
|
||||
# @param list: The dictionary to be printed
|
||||
# @param key: The key of the item to be printed
|
||||
#
|
||||
def printList(Key, List):
|
||||
if type(List) == type([]):
|
||||
if len(List) > 0:
|
||||
if Key.find(TAB_SPLIT) != -1:
|
||||
print "\n" + Key
|
||||
for Item in List:
|
||||
print Item
|
||||
## TargetTxtDict
|
||||
#
|
||||
# Load target.txt in input workspace dir
|
||||
#
|
||||
# @param WorkSpace: Workspace dir
|
||||
#
|
||||
# @retval Target An instance of TargetTxtClassObject() with loaded target.txt
|
||||
#
|
||||
def TargetTxtDict(WorkSpace):
|
||||
Target = TargetTxtClassObject()
|
||||
Target.LoadTargetTxtFile(os.path.normpath(os.path.join(WorkSpace, gDefaultTargetTxtFile)))
|
||||
return Target
|
||||
|
||||
##
|
||||
#
|
||||
# This acts like the main() function for the script, unless it is 'import'ed into another
|
||||
# script.
|
||||
#
|
||||
if __name__ == '__main__':
|
||||
pass
|
||||
Target = TargetTxtDict(os.getenv("WORKSPACE"))
|
||||
print Target.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER]
|
||||
print Target.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET]
|
||||
print Target.TargetTxtDictionary
|
Reference in New Issue
Block a user