diff options
Diffstat (limited to 'BaseTools/Scripts/RunMakefile.py')
| -rw-r--r-- | BaseTools/Scripts/RunMakefile.py | 344 |
1 files changed, 172 insertions, 172 deletions
diff --git a/BaseTools/Scripts/RunMakefile.py b/BaseTools/Scripts/RunMakefile.py index 0e0a0114f9..e5f2c39be0 100644 --- a/BaseTools/Scripts/RunMakefile.py +++ b/BaseTools/Scripts/RunMakefile.py @@ -1,172 +1,172 @@ -## @file
-# Run a makefile as part of a PREBUILD or POSTBUILD action.
-#
-# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-
-'''
-RunMakefile.py
-'''
-
-import os
-import sys
-import argparse
-import subprocess
-
-#
-# Globals for help information
-#
-__prog__ = 'RunMakefile'
-__version__ = '%s Version %s' % (__prog__, '1.0')
-__copyright__ = 'Copyright (c) 2017, Intel Corporation. All rights reserved.'
-__description__ = 'Run a makefile as part of a PREBUILD or POSTBUILD action.\n'
-
-#
-# Globals
-#
-gArgs = None
-
-def Log(Message):
- if not gArgs.Verbose:
- return
- sys.stdout.write (__prog__ + ': ' + Message + '\n')
-
-def Error(Message, ExitValue=1):
- sys.stderr.write (__prog__ + ': ERROR: ' + Message + '\n')
- sys.exit (ExitValue)
-
-def RelativePath(target):
- return os.path.relpath (target, gWorkspace)
-
-def NormalizePath(target):
- if isinstance(target, tuple):
- return os.path.normpath (os.path.join (*target))
- else:
- return os.path.normpath (target)
-
-if __name__ == '__main__':
- #
- # Create command line argument parser object
- #
- parser = argparse.ArgumentParser (
- prog = __prog__,
- version = __version__,
- description = __description__ + __copyright__,
- conflict_handler = 'resolve'
- )
- parser.add_argument (
- '-a', '--arch', dest = 'Arch', nargs = '+', action = 'append',
- required = True,
- help = '''ARCHS is one of list: IA32, X64, IPF, ARM, AARCH64 or EBC,
- which overrides target.txt's TARGET_ARCH definition. To
- specify more archs, please repeat this option.'''
- )
- parser.add_argument (
- '-t', '--tagname', dest = 'ToolChain', required = True,
- help = '''Using the Tool Chain Tagname to build the platform,
- overriding target.txt's TOOL_CHAIN_TAG definition.'''
- )
- parser.add_argument (
- '-p', '--platform', dest = 'PlatformFile', required = True,
- help = '''Build the platform specified by the DSC file name argument,
- overriding target.txt's ACTIVE_PLATFORM definition.'''
- )
- parser.add_argument (
- '-b', '--buildtarget', dest = 'BuildTarget', required = True,
- help = '''Using the TARGET to build the platform, overriding
- target.txt's TARGET definition.'''
- )
- parser.add_argument (
- '--conf=', dest = 'ConfDirectory', required = True,
- help = '''Specify the customized Conf directory.'''
- )
- parser.add_argument (
- '-D', '--define', dest = 'Define', nargs='*', action = 'append',
- help = '''Macro: "Name [= Value]".'''
- )
- parser.add_argument (
- '--makefile', dest = 'Makefile', required = True,
- help = '''Makefile to run passing in arguments as makefile defines.'''
- )
- parser.add_argument (
- '-v', '--verbose', dest = 'Verbose', action = 'store_true',
- help = '''Turn on verbose output with informational messages printed'''
- )
-
- #
- # Parse command line arguments
- #
- gArgs, remaining = parser.parse_known_args()
- gArgs.BuildType = 'all'
- for BuildType in ['all', 'fds', 'genc', 'genmake', 'clean', 'cleanall', 'modules', 'libraries', 'run']:
- if BuildType in remaining:
- gArgs.BuildType = BuildType
- remaining.remove(BuildType)
- break
- gArgs.Remaining = ' '.join(remaining)
-
- #
- # Start
- #
- Log ('Start')
-
- #
- # Find makefile in WORKSPACE or PACKAGES_PATH
- #
- PathList = ['']
- try:
- PathList.append(os.environ['WORKSPACE'])
- except:
- Error ('WORKSPACE environment variable not set')
- try:
- PathList += os.environ['PACKAGES_PATH'].split(os.pathsep)
- except:
- pass
- for Path in PathList:
- Makefile = NormalizePath((Path, gArgs.Makefile))
- if os.path.exists (Makefile):
- break
- if not os.path.exists(Makefile):
- Error ('makefile %s not found' % (gArgs.Makefile))
-
- #
- # Build command line arguments converting build arguments to makefile defines
- #
- CommandLine = [Makefile]
- CommandLine.append('TARGET_ARCH="%s"' % (' '.join([Item[0] for Item in gArgs.Arch])))
- CommandLine.append('TOOL_CHAIN_TAG="%s"' % (gArgs.ToolChain))
- CommandLine.append('TARGET="%s"' % (gArgs.BuildTarget))
- CommandLine.append('ACTIVE_PLATFORM="%s"' % (gArgs.PlatformFile))
- CommandLine.append('CONF_DIRECTORY="%s"' % (gArgs.ConfDirectory))
- if gArgs.Define:
- for Item in gArgs.Define:
- if '=' not in Item[0]:
- continue
- Item = Item[0].split('=', 1)
- CommandLine.append('%s="%s"' % (Item[0], Item[1]))
- CommandLine.append('EXTRA_FLAGS="%s"' % (gArgs.Remaining))
- CommandLine.append(gArgs.BuildType)
- if sys.platform == "win32":
- CommandLine = 'nmake /f %s' % (' '.join(CommandLine))
- else:
- CommandLine = 'make -f %s' % (' '.join(CommandLine))
-
- #
- # Run the makefile
- #
- try:
- Process = subprocess.Popen(CommandLine, shell=True)
- except:
- Error ('make command not available. Please verify PATH')
- Process.communicate()
-
- #
- # Done
- #
- Log ('Done')
-
- #
- # Return status from running the makefile
- #
- sys.exit(Process.returncode)
+## @file +# Run a makefile as part of a PREBUILD or POSTBUILD action. +# +# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +''' +RunMakefile.py +''' + +import os +import sys +import argparse +import subprocess + +# +# Globals for help information +# +__prog__ = 'RunMakefile' +__version__ = '%s Version %s' % (__prog__, '1.0') +__copyright__ = 'Copyright (c) 2017, Intel Corporation. All rights reserved.' +__description__ = 'Run a makefile as part of a PREBUILD or POSTBUILD action.\n' + +# +# Globals +# +gArgs = None + +def Log(Message): + if not gArgs.Verbose: + return + sys.stdout.write (__prog__ + ': ' + Message + '\n') + +def Error(Message, ExitValue=1): + sys.stderr.write (__prog__ + ': ERROR: ' + Message + '\n') + sys.exit (ExitValue) + +def RelativePath(target): + return os.path.relpath (target, gWorkspace) + +def NormalizePath(target): + if isinstance(target, tuple): + return os.path.normpath (os.path.join (*target)) + else: + return os.path.normpath (target) + +if __name__ == '__main__': + # + # Create command line argument parser object + # + parser = argparse.ArgumentParser ( + prog = __prog__, + version = __version__, + description = __description__ + __copyright__, + conflict_handler = 'resolve' + ) + parser.add_argument ( + '-a', '--arch', dest = 'Arch', nargs = '+', action = 'append', + required = True, + help = '''ARCHS is one of list: IA32, X64, IPF, ARM, AARCH64 or EBC, + which overrides target.txt's TARGET_ARCH definition. To + specify more archs, please repeat this option.''' + ) + parser.add_argument ( + '-t', '--tagname', dest = 'ToolChain', required = True, + help = '''Using the Tool Chain Tagname to build the platform, + overriding target.txt's TOOL_CHAIN_TAG definition.''' + ) + parser.add_argument ( + '-p', '--platform', dest = 'PlatformFile', required = True, + help = '''Build the platform specified by the DSC file name argument, + overriding target.txt's ACTIVE_PLATFORM definition.''' + ) + parser.add_argument ( + '-b', '--buildtarget', dest = 'BuildTarget', required = True, + help = '''Using the TARGET to build the platform, overriding + target.txt's TARGET definition.''' + ) + parser.add_argument ( + '--conf=', dest = 'ConfDirectory', required = True, + help = '''Specify the customized Conf directory.''' + ) + parser.add_argument ( + '-D', '--define', dest = 'Define', nargs='*', action = 'append', + help = '''Macro: "Name [= Value]".''' + ) + parser.add_argument ( + '--makefile', dest = 'Makefile', required = True, + help = '''Makefile to run passing in arguments as makefile defines.''' + ) + parser.add_argument ( + '-v', '--verbose', dest = 'Verbose', action = 'store_true', + help = '''Turn on verbose output with informational messages printed''' + ) + + # + # Parse command line arguments + # + gArgs, remaining = parser.parse_known_args() + gArgs.BuildType = 'all' + for BuildType in ['all', 'fds', 'genc', 'genmake', 'clean', 'cleanall', 'modules', 'libraries', 'run']: + if BuildType in remaining: + gArgs.BuildType = BuildType + remaining.remove(BuildType) + break + gArgs.Remaining = ' '.join(remaining) + + # + # Start + # + Log ('Start') + + # + # Find makefile in WORKSPACE or PACKAGES_PATH + # + PathList = [''] + try: + PathList.append(os.environ['WORKSPACE']) + except: + Error ('WORKSPACE environment variable not set') + try: + PathList += os.environ['PACKAGES_PATH'].split(os.pathsep) + except: + pass + for Path in PathList: + Makefile = NormalizePath((Path, gArgs.Makefile)) + if os.path.exists (Makefile): + break + if not os.path.exists(Makefile): + Error ('makefile %s not found' % (gArgs.Makefile)) + + # + # Build command line arguments converting build arguments to makefile defines + # + CommandLine = [Makefile] + CommandLine.append('TARGET_ARCH="%s"' % (' '.join([Item[0] for Item in gArgs.Arch]))) + CommandLine.append('TOOL_CHAIN_TAG="%s"' % (gArgs.ToolChain)) + CommandLine.append('TARGET="%s"' % (gArgs.BuildTarget)) + CommandLine.append('ACTIVE_PLATFORM="%s"' % (gArgs.PlatformFile)) + CommandLine.append('CONF_DIRECTORY="%s"' % (gArgs.ConfDirectory)) + if gArgs.Define: + for Item in gArgs.Define: + if '=' not in Item[0]: + continue + Item = Item[0].split('=', 1) + CommandLine.append('%s="%s"' % (Item[0], Item[1])) + CommandLine.append('EXTRA_FLAGS="%s"' % (gArgs.Remaining)) + CommandLine.append(gArgs.BuildType) + if sys.platform == "win32": + CommandLine = 'nmake /f %s' % (' '.join(CommandLine)) + else: + CommandLine = 'make -f %s' % (' '.join(CommandLine)) + + # + # Run the makefile + # + try: + Process = subprocess.Popen(CommandLine, shell=True) + except: + Error ('make command not available. Please verify PATH') + Process.communicate() + + # + # Done + # + Log ('Done') + + # + # Return status from running the makefile + # + sys.exit(Process.returncode) |
