2007-01-04 02:07:52 +01:00
#!/usr/bin/env python
2007-01-05 22:08:32 +01:00
# 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.
""" The EDK II Build System Context Tool Utility maintains Target.txt settings
in an EDK II Workspace . """
2007-01-04 02:07:52 +01:00
import wx , os , sys , copy
from EdkIIWorkspace import *
class ContextToolModel ( EdkIIWorkspace ) :
def __init__ ( self ) :
self . WorkspaceStatus = EdkIIWorkspace . __init__ ( self )
self . Database = { }
self . OriginalDatabase = { }
def LoadTargetTxtFile ( self ) :
self . ConvertTextFileToDictionary ( ' Tools/Conf/Target.txt ' , self . TargetTxtDictionary , ' # ' , ' = ' , True , None )
if self . TargetTxtDictionary [ ' ACTIVE_PLATFORM ' ] == [ ] :
self . TargetTxtDictionary [ ' ACTIVE_PLATFORM ' ] = [ ' ' ]
else :
self . TargetTxtDictionary [ ' ACTIVE_PLATFORM ' ] = [ self . TargetTxtDictionary [ ' ACTIVE_PLATFORM ' ] [ 0 ] ]
self . TargetTxtDictionary [ ' TOOL_CHAIN_CONF ' ] = [ self . TargetTxtDictionary [ ' TOOL_CHAIN_CONF ' ] [ 0 ] ]
self . TargetTxtDictionary [ ' MULTIPLE_THREAD ' ] = [ self . TargetTxtDictionary [ ' MULTIPLE_THREAD ' ] [ 0 ] ]
self . TargetTxtDictionary [ ' MAX_CONCURRENT_THREAD_NUMBER ' ] = [ self . TargetTxtDictionary [ ' MAX_CONCURRENT_THREAD_NUMBER ' ] [ 0 ] ]
self . TargetTxtDictionary [ ' TARGET ' ] = list ( set ( self . TargetTxtDictionary [ ' TARGET ' ] ) )
self . TargetTxtDictionary [ ' TOOL_CHAIN_TAG ' ] = list ( set ( self . TargetTxtDictionary [ ' TOOL_CHAIN_TAG ' ] ) )
self . TargetTxtDictionary [ ' TARGET_ARCH ' ] = list ( set ( self . TargetTxtDictionary [ ' TARGET_ARCH ' ] ) )
if self . TargetTxtDictionary [ ' TARGET ' ] == [ ] :
self . TargetTxtDictionary [ ' TARGET ' ] = [ ' ' ]
if self . TargetTxtDictionary [ ' TOOL_CHAIN_TAG ' ] == [ ] :
self . TargetTxtDictionary [ ' TOOL_CHAIN_TAG ' ] = [ ' ' ]
if self . TargetTxtDictionary [ ' TARGET_ARCH ' ] == [ ] :
self . TargetTxtDictionary [ ' TARGET_ARCH ' ] = [ ' ' ]
self . TargetTxtDictionary [ ' TARGET ' ] . sort ( )
self . TargetTxtDictionary [ ' TOOL_CHAIN_TAG ' ] . sort ( )
self . TargetTxtDictionary [ ' TARGET_ARCH ' ] . sort ( )
self . OriginalTargetTxtDictionary = copy . deepcopy ( self . TargetTxtDictionary )
def LoadToolsDefTxtFile ( self ) :
self . ToolsDefTxtDictionary = { }
if self . TargetTxtDictionary [ ' TOOL_CHAIN_CONF ' ] != [ ' ' ] :
self . ConvertTextFileToDictionary ( self . TargetTxtDictionary [ ' TOOL_CHAIN_CONF ' ] [ 0 ] , self . ToolsDefTxtDictionary , ' # ' , ' = ' , False , None )
def LoadFrameworkDatabase ( self ) :
self . PlatformDatabase = { }
Fd = self . XmlParseFile ( ' Tools/Conf/FrameworkDatabase.db ' )
PlatformList = XmlList ( Fd , ' /FrameworkDatabase/PlatformList/Filename ' )
for File in PlatformList :
FpdFileName = XmlElementData ( File )
FpdPlatformHeader = self . XmlParseFileSection ( FpdFileName , ' PlatformHeader ' )
FpdPlatformDefinitions = self . XmlParseFileSection ( FpdFileName , ' PlatformDefinitions ' )
PlatformName = XmlElement ( FpdPlatformHeader , ' /PlatformHeader/PlatformName ' )
PlatformVersion = XmlElement ( FpdPlatformHeader , ' /PlatformHeader/Version ' )
PlatformUiName = PlatformName + ' [ ' + PlatformVersion + ' ] '
if PlatformUiName not in self . PlatformDatabase :
self . PlatformDatabase [ PlatformUiName ] = { }
self . PlatformDatabase [ PlatformUiName ] [ ' XmlFileName ' ] = FpdFileName
self . PlatformDatabase [ PlatformUiName ] [ ' SupportedArchitectures ' ] = set ( XmlElement ( FpdPlatformDefinitions , ' /PlatformSurfaceArea/PlatformDefinitions/SupportedArchitectures ' ) . split ( ' ' ) )
self . PlatformDatabase [ PlatformUiName ] [ ' BuildTargets ' ] = set ( XmlElement ( FpdPlatformDefinitions , ' /PlatformSurfaceArea/PlatformDefinitions/BuildTargets ' ) . split ( ' ' ) )
def ComputeToolsDefTxtDatabase ( self ) :
self . ToolsDefTxtDatabase = {
' TARGET ' : [ ] ,
' TOOL_CHAIN_TAG ' : [ ] ,
' TARGET_ARCH ' : [ ]
}
for Key in dict ( self . ToolsDefTxtDictionary ) :
List = Key . split ( ' _ ' )
if len ( List ) != 5 :
del self . ToolsDefTxtDictionary [ Key ]
elif List [ 4 ] == ' * ' :
del self . ToolsDefTxtDictionary [ Key ]
else :
if List [ 0 ] != ' * ' :
self . ToolsDefTxtDatabase [ ' TARGET ' ] + = [ List [ 0 ] ]
if List [ 1 ] != ' * ' :
self . ToolsDefTxtDatabase [ ' TOOL_CHAIN_TAG ' ] + = [ List [ 1 ] ]
if List [ 2 ] != ' * ' :
self . ToolsDefTxtDatabase [ ' TARGET_ARCH ' ] + = [ List [ 2 ] ]
self . ToolsDefTxtDatabase [ ' TARGET ' ] = list ( set ( self . ToolsDefTxtDatabase [ ' TARGET ' ] ) )
self . ToolsDefTxtDatabase [ ' TOOL_CHAIN_TAG ' ] = list ( set ( self . ToolsDefTxtDatabase [ ' TOOL_CHAIN_TAG ' ] ) )
self . ToolsDefTxtDatabase [ ' TARGET_ARCH ' ] = list ( set ( self . ToolsDefTxtDatabase [ ' TARGET_ARCH ' ] ) )
self . ToolsDefTxtDatabase [ ' TARGET ' ] . sort ( )
self . ToolsDefTxtDatabase [ ' TOOL_CHAIN_TAG ' ] . sort ( )
self . ToolsDefTxtDatabase [ ' TARGET_ARCH ' ] . sort ( )
def NewModel ( self ) :
self . TargetTxtDictionary = {
' ACTIVE_PLATFORM ' : [ ' ' ] ,
' TOOL_CHAIN_CONF ' : [ ' ' ] ,
' MULTIPLE_THREAD ' : [ ' Disable ' ] ,
' MAX_CONCURRENT_THREAD_NUMBER ' : [ ' 2 ' ] ,
' TARGET ' : [ ' ' ] ,
' TOOL_CHAIN_TAG ' : [ ' ' ] ,
' TARGET_ARCH ' : [ ' ' ]
}
def RevertModel ( self ) :
self . TargetTxtDictionary = copy . deepcopy ( self . OriginalTargetTxtDictionary )
def RescanModel ( self ) :
self . NewModel ( )
self . LoadTargetTxtFile ( )
def RefreshModel ( self ) :
self . LoadFrameworkDatabase ( )
self . LoadToolsDefTxtFile ( )
self . ComputeToolsDefTxtDatabase ( )
if self . Verbose :
print self . TargetTxtDictionary
print ' ActivePlatform = ' , self . TargetTxtDictionary [ ' ACTIVE_PLATFORM ' ] [ 0 ]
print ' ToolChainConf = ' , self . TargetTxtDictionary [ ' TOOL_CHAIN_CONF ' ] [ 0 ]
print ' MultipleThread = ' , self . TargetTxtDictionary [ ' MULTIPLE_THREAD ' ] [ 0 ]
print ' MaxThreads = ' , self . TargetTxtDictionary [ ' MAX_CONCURRENT_THREAD_NUMBER ' ] [ 0 ]
print ' TargetSet = ' , self . TargetTxtDictionary [ ' TARGET ' ]
print ' ToolChainSet = ' , self . TargetTxtDictionary [ ' TOOL_CHAIN_TAG ' ]
print ' TargetArchSet = ' , self . TargetTxtDictionary [ ' TARGET_ARCH ' ]
Platforms = self . PlatformDatabase . keys ( )
print ' Possible Settings: '
print ' Platforms = ' , Platforms
print ' TargetSet = ' , self . ToolsDefTxtDatabase [ ' TARGET ' ]
print ' ToolChainSet = ' , self . ToolsDefTxtDatabase [ ' TOOL_CHAIN_TAG ' ]
print ' TargetArchSet = ' , self . ToolsDefTxtDatabase [ ' TARGET_ARCH ' ]
return True
def ModelModified ( self ) :
if self . TargetTxtDictionary != self . OriginalTargetTxtDictionary :
return True
return False
def SaveModel ( self , Filename = ' Tools/Conf/Target.txt ' ) :
if self . Verbose :
for Item in self . TargetTxtDictionary :
print Item , ' = ' , self . TargetTxtDictionary [ Item ]
self . ConvertDictionaryToTextFile ( Filename , self . TargetTxtDictionary , ' # ' , ' = ' , True , None )
self . OriginalTargetTxtDictionary = copy . deepcopy ( self . TargetTxtDictionary )
def CloseModel ( self ) :
pass
class Frame ( wx . Frame ) :
def __init__ ( self ) :
wx . Frame . __init__ ( self , None , - 1 , ' EDK II Build System Context Tool ' )
panel = wx . Panel ( self , style = wx . SUNKEN_BORDER | wx . TAB_TRAVERSAL )
wx . HelpProvider_Set ( wx . SimpleHelpProvider ( ) )
self . Model = ContextToolModel ( )
if not self . Model . WorkspaceStatus :
self . Close ( )
return
#
# Help text
#
ActivePlatformHelpText = (
" Specifies the Platform Name and Platform Version of the platform that will be "
" used for build. If set to [Build Directory] and the current directory contains "
" an FPD file, then a plaform build on that FPD file will be performed. If set "
" to [Build Directory] and there is no FPD file in the current directory, then no "
" build will be performed. "
)
ToolChainConfHelpText = (
" Specifies the name of the file that declares all the tools and flag settings "
" required to complete a build. This is typically set to Tools/Conf/tools_def.txt. "
)
MultipleThreadHelpText = (
" Flag to enable or disable multi-thread builds. If your computer is multi-core "
" or contans multiple CPUs, enabling this feature will improve build performance. "
" For multi-thread builds, a log will be written to $ {BUILD_DIR} /build.log. This "
" feature is only for platform builds. Clean, cleanall, and stand-alone module "
" builds only use one thread. "
)
ThreadsHelpText = (
" The number of concurrent threads. The best performance is achieved if this "
" value is set to one greater than the number or cores or CPUs in the build system. "
)
TargetHelpText = (
" Specifies the set of targets to build. If set to All, then all build targets "
" are built. Otherwise, the subset of enabled build targets are built. The "
" standard build targets are RELEASE and DEBUG, but additional user-defined build "
" targets may be declared in the TOOL_CHAIN_CONF file. The DEBUG builds with "
" source level debugging enabled. RELEASE builds with source level debugging "
" disabled and results in smaller firmware images. "
)
ToolChainTagHelpText = (
" Specifies the set of tool chains to use during a build. If set to All, then "
" all of the supported tools chains are used. Otherwise, only the subset of "
" enabled tool chains are used. The TOOL_CHAIN_CONF file declares one or more "
" tool chains that may be used. "
)
TargetArchHelpText = (
" Specifies the set of CPU architectures to build. If set to All, then all the "
" CPU architectures supported by the platform FPD file are built. Otherwise, "
" only the subset of enabled CPU architectures are built. The standard CPU "
" architectures are IA32, X64, IPF, and EBC, but additional CPU architectures "
" may be declared in the TOOL_CHAIN_CONF file. "
)
#
# Status Bar
#
self . CreateStatusBar ( )
#
# Build Menus
#
MenuBar = wx . MenuBar ( )
FileMenu = wx . Menu ( )
NewMenuItem = FileMenu . Append ( - 1 , " &New \t Ctrl+N " , " New target.txt " )
SaveMenuItem = FileMenu . Append ( - 1 , " &Save \t Ctrl+S " , " Save target.txt " )
SaveAsMenuItem = FileMenu . Append ( - 1 , " Save &As... " , " Save target.txt as... " )
RevertMenuItem = FileMenu . Append ( - 1 , " &Revert " , " Revert to the original target.txt " )
ExitMenuItem = FileMenu . Append ( - 1 , " E&xit \t Alt+F4 " , " Exit ContextTool " )
MenuBar . Append ( FileMenu , " &File " )
self . Bind ( wx . EVT_MENU , self . OnSaveClick , SaveMenuItem )
self . Bind ( wx . EVT_MENU , self . OnSaveAsClick , SaveAsMenuItem )
self . Bind ( wx . EVT_MENU , self . OnRevertClick , RevertMenuItem )
self . Bind ( wx . EVT_MENU , self . OnExitClick , ExitMenuItem )
ViewMenu = wx . Menu ( )
RefreshMenuItem = ViewMenu . Append ( - 1 , " &Refresh \t F5 " , " Rescan target.txt " )
ShowToolBarMenuItem = ViewMenu . AppendCheckItem ( - 1 , " Show &Toolbar " , " Shows or hides the toolbar " )
ShowToolBarMenuItem . Check ( True )
MenuBar . Append ( ViewMenu , " &View " )
self . Bind ( wx . EVT_MENU , self . OnViewRefreshClick , RefreshMenuItem )
self . Bind ( wx . EVT_MENU , self . OnShowToolBarClick , ShowToolBarMenuItem )
HelpMenu = wx . Menu ( )
AboutMenuItem = HelpMenu . Append ( - 1 , " &About... " , " About " )
MenuBar . Append ( HelpMenu , " &Help " )
self . Bind ( wx . EVT_MENU , self . OnAboutClick , AboutMenuItem )
self . SetMenuBar ( MenuBar )
#
# Build Toolbar
#
self . ShowToolBar = False
self . OnShowToolBarClick ( self )
#
# Active Platform Combo Box
#
ActivePlatformLabel = wx . StaticText ( panel , - 1 , ' ACTIVE_PLATFORM ' )
ActivePlatformLabel . SetHelpText ( ActivePlatformHelpText )
self . ActivePlatformText = wx . ComboBox ( panel , - 1 , style = wx . CB_DROPDOWN | wx . CB_SORT | wx . CB_READONLY )
self . ActivePlatformText . SetHelpText ( ActivePlatformHelpText )
self . ActivePlatformText . Bind ( wx . EVT_TEXT , self . OnActivePlatformClick )
#
# Tool Chain Configuration Text Control and Browse Button for a File Dialog Box
#
ToolChainConfFileLabel = wx . StaticText ( panel , - 1 , ' TOOL_CHAIN_CONF ' )
ToolChainConfFileLabel . SetHelpText ( ToolChainConfHelpText )
self . ToolChainConfFileText = wx . TextCtrl ( panel , - 1 , style = wx . TE_PROCESS_ENTER )
self . ToolChainConfFileText . Bind ( wx . EVT_TEXT_ENTER , self . OnToolChainConfClick )
self . ToolChainConfFileText . Bind ( wx . EVT_KILL_FOCUS , self . OnToolChainConfClick )
self . ToolChainConfFileText . SetHelpText ( ToolChainConfHelpText )
self . BrowseButton = wx . Button ( panel , - 1 , ' Browse... ' )
self . BrowseButton . Bind ( wx . EVT_BUTTON , self . OnBrowseButtonClick )
#
# Multiple Thread enable/disable radio button
#
MultipleThreadLabel = wx . StaticText ( panel , - 1 , ' MULTIPLE_THREAD ' )
MultipleThreadLabel . SetHelpText ( MultipleThreadHelpText )
self . MultipleThreadRadioBox = wx . RadioBox ( panel , - 1 , choices = [ ' Enable ' , ' Disable ' ] , style = wx . RA_SPECIFY_COLS )
self . MultipleThreadRadioBox . Bind ( wx . EVT_RADIOBOX , self . OnMultipleThreadRadioBox )
self . MultipleThreadRadioBox . SetHelpText ( MultipleThreadHelpText )
#
# Thread count spin control
#
ThreadsLabel = wx . StaticText ( panel , - 1 , ' THREADS ' )
ThreadsLabel . SetHelpText ( ThreadsHelpText )
self . ThreadsSpinCtrl = wx . SpinCtrl ( panel , - 1 , size = ( 50 , - 1 ) , min = 2 )
self . ThreadsSpinCtrl . Bind ( wx . EVT_TEXT , self . OnThreadsSpinCtrl )
self . ThreadsSpinCtrl . SetHelpText ( ThreadsHelpText )
#
# Target, ToolChain, and Arch Check List Boxes
#
TargetLabel = wx . StaticText ( panel , - 1 , ' TARGET ' )
TargetLabel . SetHelpText ( TargetHelpText )
ToolChainTagLabel = wx . StaticText ( panel , - 1 , ' TOOL_CHAIN_TAG ' )
ToolChainTagLabel . SetHelpText ( ToolChainTagHelpText )
TargetArchLabel = wx . StaticText ( panel , - 1 , ' TARGET_ARCH ' )
TargetArchLabel . SetHelpText ( TargetArchHelpText )
self . TargetCheckListBox = wx . CheckListBox ( panel , - 1 )
self . TargetCheckListBox . Bind ( wx . EVT_CHECKLISTBOX , self . OnTargetCheckListClick )
self . TargetCheckListBox . Bind ( wx . EVT_SET_FOCUS , self . OnTargetSetFocus )
self . TargetCheckListBox . Bind ( wx . EVT_KILL_FOCUS , self . OnTargetKillFocus )
self . TargetCheckListBox . SetHelpText ( TargetHelpText )
self . ToolChainTagCheckListBox = wx . CheckListBox ( panel , - 1 )
self . ToolChainTagCheckListBox . Bind ( wx . EVT_CHECKLISTBOX , self . OnToolChainTagCheckListClick )
self . ToolChainTagCheckListBox . Bind ( wx . EVT_SET_FOCUS , self . OnToolChainTagSetFocus )
self . ToolChainTagCheckListBox . Bind ( wx . EVT_KILL_FOCUS , self . OnToolChainTagKillFocus )
self . ToolChainTagCheckListBox . SetHelpText ( ToolChainTagHelpText )
self . TargetArchCheckListBox = wx . CheckListBox ( panel , - 1 )
self . TargetArchCheckListBox . Bind ( wx . EVT_CHECKLISTBOX , self . OnTargetArchCheckListClick )
self . TargetArchCheckListBox . Bind ( wx . EVT_SET_FOCUS , self . OnTargetArchSetFocus )
self . TargetArchCheckListBox . Bind ( wx . EVT_KILL_FOCUS , self . OnTargetArchKillFocus )
self . TargetArchCheckListBox . SetHelpText ( TargetArchHelpText )
#
# Define layout using sizers
#
self . mainSizer = wx . BoxSizer ( wx . VERTICAL )
flexSizer = wx . FlexGridSizer ( cols = 3 , hgap = 5 , vgap = 5 )
flexSizer . AddGrowableCol ( 1 )
flexSizer . Add ( ActivePlatformLabel , 0 , wx . ALIGN_RIGHT | wx . ALIGN_CENTER_VERTICAL )
flexSizer . Add ( self . ActivePlatformText , 0 , wx . EXPAND )
flexSizer . Add ( ( 0 , 0 ) , wx . ALIGN_LEFT | wx . ALIGN_CENTER_VERTICAL )
flexSizer . Add ( ToolChainConfFileLabel , 0 , wx . ALIGN_RIGHT | wx . ALIGN_CENTER_VERTICAL )
flexSizer . Add ( self . ToolChainConfFileText , 0 , wx . EXPAND )
flexSizer . Add ( self . BrowseButton , 0 , wx . ALIGN_LEFT | wx . ALIGN_CENTER_VERTICAL )
self . mainSizer . Add ( flexSizer , 0 , wx . EXPAND | wx . ALL , 10 )
threadsSizer = wx . FlexGridSizer ( cols = 5 , hgap = 5 , vgap = 5 )
threadsSizer . Add ( MultipleThreadLabel , 0 , wx . ALIGN_RIGHT | wx . ALIGN_CENTER_VERTICAL )
threadsSizer . Add ( self . MultipleThreadRadioBox , 0 , wx . ALIGN_LEFT | wx . ALIGN_CENTER_VERTICAL )
threadsSizer . Add ( ThreadsLabel , 0 , wx . ALIGN_RIGHT | wx . ALIGN_CENTER_VERTICAL )
threadsSizer . Add ( self . ThreadsSpinCtrl , 0 , wx . ALIGN_LEFT | wx . ALIGN_CENTER_VERTICAL )
self . mainSizer . Add ( threadsSizer , 0 , wx . ALL , 10 )
listSizer = wx . FlexGridSizer ( rows = 2 , cols = 3 , hgap = 5 , vgap = 5 )
listSizer . AddGrowableRow ( 1 )
listSizer . AddGrowableCol ( 0 )
listSizer . AddGrowableCol ( 1 )
listSizer . AddGrowableCol ( 2 )
listSizer . Add ( TargetLabel , 0 , wx . ALIGN_CENTER )
listSizer . Add ( ToolChainTagLabel , 0 , wx . ALIGN_CENTER )
listSizer . Add ( TargetArchLabel , 0 , wx . ALIGN_CENTER )
listSizer . Add ( self . TargetCheckListBox , 0 , wx . ALL | wx . EXPAND )
listSizer . Add ( self . ToolChainTagCheckListBox , 0 , wx . ALL | wx . EXPAND )
listSizer . Add ( self . TargetArchCheckListBox , 0 , wx . ALL | wx . EXPAND )
self . mainSizer . Add ( listSizer , wx . EXPAND | wx . ALL , wx . EXPAND | wx . ALL , 10 )
panel . SetSizer ( self . mainSizer )
self . Model . RescanModel ( )
self . OnRefreshClick ( self )
def OnActivePlatformClick ( self , event ) :
Platform = self . ActivePlatformText . GetValue ( )
if Platform == ' [Build Directory] ' :
self . Model . TargetTxtDictionary [ ' ACTIVE_PLATFORM ' ] [ 0 ] = ' '
else :
self . Model . TargetTxtDictionary [ ' ACTIVE_PLATFORM ' ] [ 0 ] = self . Model . PlatformDatabase [ Platform ] [ ' XmlFileName ' ]
def OnToolChainConfClick ( self , event ) :
if self . Model . TargetTxtDictionary [ ' TOOL_CHAIN_CONF ' ] [ 0 ] != self . ToolChainConfFileText . GetValue ( ) :
self . Model . TargetTxtDictionary [ ' TOOL_CHAIN_CONF ' ] [ 0 ] = self . ToolChainConfFileText . GetValue ( )
self . OnRefreshClick ( self )
def OnBrowseButtonClick ( self , event ) :
wildcard = " Text Documents (*.txt)|*.txt| " \
" All files (*.*)|*.* "
dialog = wx . FileDialog ( None , ' Choose a Tool Chain Configuration File ' , self . Model . WorkspaceFile ( ' Tools/Conf ' ) , ' ' , wildcard , wx . OPEN )
if dialog . ShowModal ( ) == wx . ID_OK :
print dialog . GetPath ( )
ToolChainConfFile = self . Model . WorkspaceRelativePath ( dialog . GetPath ( ) )
self . ToolChainConfFileText . SetValue ( ToolChainConfFile )
self . Model . TargetTxtDictionary [ ' TOOL_CHAIN_CONF ' ] [ 0 ] = self . ToolChainConfFileText . GetValue ( )
self . OnRefreshClick ( self )
dialog . Destroy ( )
def OnMultipleThreadRadioBox ( self , event ) :
self . Model . TargetTxtDictionary [ ' MULTIPLE_THREAD ' ] = [ self . MultipleThreadRadioBox . GetStringSelection ( ) ]
if self . MultipleThreadRadioBox . GetStringSelection ( ) == ' Disable ' :
self . ThreadsSpinCtrl . Disable ( )
else :
self . ThreadsSpinCtrl . Enable ( )
def OnThreadsSpinCtrl ( self , event ) :
self . Model . TargetTxtDictionary [ ' MAX_CONCURRENT_THREAD_NUMBER ' ] = [ str ( self . ThreadsSpinCtrl . GetValue ( ) ) ]
def CheckListFocus ( self , CheckListBox , Set ) :
Index = 0
while Index < CheckListBox . GetCount ( ) :
CheckListBox . SetSelection ( Index , False )
Index + = 1
if Set :
CheckListBox . SetSelection ( 0 , True )
def CheckListClick ( self , CheckListBox , Name ) :
if CheckListBox . IsChecked ( 0 ) :
Index = 1
while Index < CheckListBox . GetCount ( ) :
CheckListBox . Check ( Index , False )
Index + = 1
if CheckListBox . IsChecked ( 0 ) :
self . Model . TargetTxtDictionary [ Name ] = [ ' ' ]
else :
self . Model . TargetTxtDictionary [ Name ] = [ ]
Index = 1
while Index < CheckListBox . GetCount ( ) :
if CheckListBox . IsChecked ( Index ) :
self . Model . TargetTxtDictionary [ Name ] + = [ CheckListBox . GetString ( Index ) ]
Index + = 1
if self . Model . TargetTxtDictionary [ Name ] == [ ] :
self . Model . TargetTxtDictionary [ Name ] = [ ' ' ]
def OnTargetCheckListClick ( self , event ) :
self . CheckListClick ( self . TargetCheckListBox , ' TARGET ' )
def OnTargetSetFocus ( self , event ) :
self . CheckListFocus ( self . TargetCheckListBox , True )
def OnTargetKillFocus ( self , event ) :
self . CheckListFocus ( self . TargetCheckListBox , False )
def OnToolChainTagCheckListClick ( self , event ) :
self . CheckListClick ( self . ToolChainTagCheckListBox , ' TOOL_CHAIN_TAG ' )
def OnToolChainTagSetFocus ( self , event ) :
self . CheckListFocus ( self . ToolChainTagCheckListBox , True )
def OnToolChainTagKillFocus ( self , event ) :
self . CheckListFocus ( self . ToolChainTagCheckListBox , False )
def OnTargetArchCheckListClick ( self , event ) :
self . CheckListClick ( self . TargetArchCheckListBox , ' TARGET_ARCH ' )
def OnTargetArchSetFocus ( self , event ) :
self . CheckListFocus ( self . TargetArchCheckListBox , True )
def OnTargetArchKillFocus ( self , event ) :
self . CheckListFocus ( self . TargetArchCheckListBox , False )
def OnRevertClick ( self , event ) :
self . Model . RevertModel ( )
self . OnRefreshClick ( self )
def RefreshCheckListBox ( self , CheckListBox , Name ) :
CheckListBox . Set ( [ ' All ' ] + self . Model . ToolsDefTxtDatabase [ Name ] )
Index = 0
MaximumString = ' '
while Index < CheckListBox . GetCount ( ) :
String = CheckListBox . GetString ( Index )
if len ( String ) > len ( MaximumString ) :
MaximumString = String
if String in self . Model . TargetTxtDictionary [ Name ] :
CheckListBox . Check ( Index , True )
else :
CheckListBox . Check ( Index , False )
Index + = 1
if self . Model . TargetTxtDictionary [ Name ] == [ ' ' ] :
CheckListBox . Check ( 0 , True )
Extents = CheckListBox . GetFullTextExtent ( MaximumString )
CheckListBox . SetMinSize ( ( Extents [ 0 ] , ( CheckListBox . GetCount ( ) + 1 ) * ( Extents [ 1 ] + Extents [ 2 ] ) ) )
def OnRefreshClick ( self , event ) :
self . Model . RefreshModel ( )
Platforms = self . Model . PlatformDatabase . keys ( )
Platforms . sort ( )
self . ActivePlatformText . SetItems ( [ ' [Build Directory] ' ] + Platforms )
self . ActivePlatformText . SetValue ( ' [Build Directory] ' )
for Platform in self . Model . PlatformDatabase :
if self . Model . PlatformDatabase [ Platform ] [ ' XmlFileName ' ] == self . Model . TargetTxtDictionary [ ' ACTIVE_PLATFORM ' ] [ 0 ] :
self . ActivePlatformText . SetValue ( Platform )
if self . ActivePlatformText . GetValue ( ) == ' [Build Directory] ' :
self . Model . TargetTxtDictionary [ ' ACTIVE_PLATFORM ' ] [ 0 ] = ' '
MaximumString = ' [Build Directory] '
for String in Platforms :
if len ( String ) > len ( MaximumString ) :
MaximumString = String
Extents = self . ActivePlatformText . GetFullTextExtent ( MaximumString )
self . ActivePlatformText . SetMinSize ( ( Extents [ 0 ] + 24 , - 1 ) )
self . ToolChainConfFileText . SetValue ( self . Model . TargetTxtDictionary [ ' TOOL_CHAIN_CONF ' ] [ 0 ] )
Extents = self . ToolChainConfFileText . GetFullTextExtent ( self . Model . TargetTxtDictionary [ ' TOOL_CHAIN_CONF ' ] [ 0 ] )
self . ToolChainConfFileText . SetMinSize ( ( Extents [ 0 ] + 24 , - 1 ) )
self . MultipleThreadRadioBox . SetStringSelection ( self . Model . TargetTxtDictionary [ ' MULTIPLE_THREAD ' ] [ 0 ] )
if self . MultipleThreadRadioBox . GetStringSelection ( ) == ' Disable ' :
self . ThreadsSpinCtrl . Disable ( )
self . ThreadsSpinCtrl . SetValue ( int ( self . Model . TargetTxtDictionary [ ' MAX_CONCURRENT_THREAD_NUMBER ' ] [ 0 ] ) )
self . RefreshCheckListBox ( self . TargetCheckListBox , ' TARGET ' )
self . RefreshCheckListBox ( self . ToolChainTagCheckListBox , ' TOOL_CHAIN_TAG ' )
self . RefreshCheckListBox ( self . TargetArchCheckListBox , ' TARGET_ARCH ' )
self . mainSizer . SetSizeHints ( self )
self . mainSizer . Fit ( self )
def OnViewRefreshClick ( self , event ) :
self . Model . RescanModel ( )
self . OnRefreshClick ( self )
def AddTool ( self , Handler , ArtId , Label , HelpText ) :
Tool = self . ToolBar . AddSimpleTool (
- 1 ,
wx . ArtProvider . GetBitmap ( ArtId , wx . ART_TOOLBAR , self . ToolSize ) ,
Label ,
HelpText
)
self . Bind ( wx . EVT_MENU , Handler , Tool )
def OnShowToolBarClick ( self , event ) :
if self . ShowToolBar :
self . ShowToolBar = False
self . ToolBar . Destroy ( )
else :
self . ShowToolBar = True
self . ToolBar = self . CreateToolBar ( )
self . ToolSize = ( 24 , 24 )
self . ToolBar . SetToolBitmapSize ( self . ToolSize )
self . AddTool ( self . OnNewClick , wx . ART_NEW , " New " , " New target.txt " )
self . AddTool ( self . OnSaveClick , wx . ART_FILE_SAVE , " Save " , " Save target.txt " )
self . AddTool ( self . OnSaveAsClick , wx . ART_FILE_SAVE_AS , " Save As... " , " Save target.txt as... " )
self . AddTool ( self . OnRevertClick , wx . ART_UNDO , " Revert " , " Revert to original target.txt " )
self . AddTool ( self . OnHelpClick , wx . ART_HELP , " Help " , " Context Sensitive Help " )
self . AddTool ( self . OnExitClick , wx . ART_QUIT , " Exit " , " Exit Context Tool application " )
self . ToolBar . Realize ( )
def OnNewClick ( self , event ) :
self . Model . NewModel ( )
self . OnRefreshClick ( self )
def OnSaveClick ( self , event ) :
self . Model . SaveModel ( )
def OnSaveAsClick ( self , event ) :
wildcard = " Text Documents (*.txt)|*.txt| " \
" All files (*.*)|*.* "
dialog = wx . FileDialog ( None , ' Save As ' , self . Model . WorkspaceFile ( ' Tools/Conf ' ) , ' ' , wildcard , wx . SAVE | wx . OVERWRITE_PROMPT )
if dialog . ShowModal ( ) == wx . ID_OK :
TargetTxtFile = self . Model . WorkspaceRelativePath ( dialog . GetPath ( ) )
if TargetTxtFile != ' ' :
self . Model . SaveModel ( TargetTxtFile )
dialog . Destroy ( )
def OnExitClick ( self , event ) :
if self . Model . ModelModified ( ) :
dialog = wx . MessageDialog ( None , ' The contents have changed. \n Do you want to save changes? ' , ' EDK II Build System Context Tool ' , style = wx . YES_NO | wx . YES_DEFAULT | wx . CANCEL | wx . ICON_EXCLAMATION )
Status = dialog . ShowModal ( )
dialog . Destroy ( )
if Status == wx . ID_YES :
self . OnSaveClick ( self )
elif Status == wx . ID_CANCEL :
return
self . Model . CloseModel ( )
self . Close ( )
def OnHelpClick ( self , event ) :
wx . ContextHelp ( ) . BeginContextHelp ( )
def OnAboutClick ( self , event ) :
AboutInfo = wx . AboutDialogInfo ( )
AboutInfo . Name = ' EDK II Build System Context Tool '
AboutInfo . Version = ' 0.3 '
AboutInfo . Copyright = ' Copyright (c) 2006, Intel Corporation '
AboutInfo . Description = """
The EDK II Build System Context Tool maintains the target . txt
settings in an EDK II Workspace . """
AboutInfo . WebSite = ( " http://tianocore.org " , " Tiano Core home page " )
AboutInfo . License = """
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 . """
if self . Model . Icon != None :
AboutInfo . Icon = self . Model . Icon
wx . AboutBox ( AboutInfo )
if __name__ == ' __main__ ' :
app = wx . PySimpleApp ( )
frame = Frame ( )
frame . Show ( )
app . MainLoop ( )