VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/BaseTools/Scripts/RunMakefile.py@ 105681

最後變更 在這個檔案從105681是 80721,由 vboxsync 提交於 6 年 前

Devices/EFI/FirmwareNew: Start upgrade process to edk2-stable201908 (compiles on Windows and works to some extent), bugref:4643

  • 屬性 svn:eol-style 設為 native
檔案大小: 5.2 KB
 
1## @file
2# Run a makefile as part of a PREBUILD or POSTBUILD action.
3#
4# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
5# SPDX-License-Identifier: BSD-2-Clause-Patent
6#
7
8'''
9RunMakefile.py
10'''
11
12import os
13import sys
14import argparse
15import subprocess
16
17#
18# Globals for help information
19#
20__prog__ = 'RunMakefile'
21__version__ = '%s Version %s' % (__prog__, '1.0')
22__copyright__ = 'Copyright (c) 2017, Intel Corporation. All rights reserved.'
23__description__ = 'Run a makefile as part of a PREBUILD or POSTBUILD action.\n'
24
25#
26# Globals
27#
28gArgs = None
29
30def Log(Message):
31 if not gArgs.Verbose:
32 return
33 sys.stdout.write (__prog__ + ': ' + Message + '\n')
34
35def Error(Message, ExitValue=1):
36 sys.stderr.write (__prog__ + ': ERROR: ' + Message + '\n')
37 sys.exit (ExitValue)
38
39def RelativePath(target):
40 return os.path.relpath (target, gWorkspace)
41
42def NormalizePath(target):
43 if isinstance(target, tuple):
44 return os.path.normpath (os.path.join (*target))
45 else:
46 return os.path.normpath (target)
47
48if __name__ == '__main__':
49 #
50 # Create command line argument parser object
51 #
52 parser = argparse.ArgumentParser (
53 prog = __prog__,
54 version = __version__,
55 description = __description__ + __copyright__,
56 conflict_handler = 'resolve'
57 )
58 parser.add_argument (
59 '-a', '--arch', dest = 'Arch', nargs = '+', action = 'append',
60 required = True,
61 help = '''ARCHS is one of list: IA32, X64, IPF, ARM, AARCH64 or EBC,
62 which overrides target.txt's TARGET_ARCH definition. To
63 specify more archs, please repeat this option.'''
64 )
65 parser.add_argument (
66 '-t', '--tagname', dest = 'ToolChain', required = True,
67 help = '''Using the Tool Chain Tagname to build the platform,
68 overriding target.txt's TOOL_CHAIN_TAG definition.'''
69 )
70 parser.add_argument (
71 '-p', '--platform', dest = 'PlatformFile', required = True,
72 help = '''Build the platform specified by the DSC file name argument,
73 overriding target.txt's ACTIVE_PLATFORM definition.'''
74 )
75 parser.add_argument (
76 '-b', '--buildtarget', dest = 'BuildTarget', required = True,
77 help = '''Using the TARGET to build the platform, overriding
78 target.txt's TARGET definition.'''
79 )
80 parser.add_argument (
81 '--conf=', dest = 'ConfDirectory', required = True,
82 help = '''Specify the customized Conf directory.'''
83 )
84 parser.add_argument (
85 '-D', '--define', dest = 'Define', nargs='*', action = 'append',
86 help = '''Macro: "Name [= Value]".'''
87 )
88 parser.add_argument (
89 '--makefile', dest = 'Makefile', required = True,
90 help = '''Makefile to run passing in arguments as makefile defines.'''
91 )
92 parser.add_argument (
93 '-v', '--verbose', dest = 'Verbose', action = 'store_true',
94 help = '''Turn on verbose output with informational messages printed'''
95 )
96
97 #
98 # Parse command line arguments
99 #
100 gArgs, remaining = parser.parse_known_args()
101 gArgs.BuildType = 'all'
102 for BuildType in ['all', 'fds', 'genc', 'genmake', 'clean', 'cleanall', 'modules', 'libraries', 'run']:
103 if BuildType in remaining:
104 gArgs.BuildType = BuildType
105 remaining.remove(BuildType)
106 break
107 gArgs.Remaining = ' '.join(remaining)
108
109 #
110 # Start
111 #
112 Log ('Start')
113
114 #
115 # Find makefile in WORKSPACE or PACKAGES_PATH
116 #
117 PathList = ['']
118 try:
119 PathList.append(os.environ['WORKSPACE'])
120 except:
121 Error ('WORKSPACE environment variable not set')
122 try:
123 PathList += os.environ['PACKAGES_PATH'].split(os.pathsep)
124 except:
125 pass
126 for Path in PathList:
127 Makefile = NormalizePath((Path, gArgs.Makefile))
128 if os.path.exists (Makefile):
129 break
130 if not os.path.exists(Makefile):
131 Error ('makefile %s not found' % (gArgs.Makefile))
132
133 #
134 # Build command line arguments converting build arguments to makefile defines
135 #
136 CommandLine = [Makefile]
137 CommandLine.append('TARGET_ARCH="%s"' % (' '.join([Item[0] for Item in gArgs.Arch])))
138 CommandLine.append('TOOL_CHAIN_TAG="%s"' % (gArgs.ToolChain))
139 CommandLine.append('TARGET="%s"' % (gArgs.BuildTarget))
140 CommandLine.append('ACTIVE_PLATFORM="%s"' % (gArgs.PlatformFile))
141 CommandLine.append('CONF_DIRECTORY="%s"' % (gArgs.ConfDirectory))
142 if gArgs.Define:
143 for Item in gArgs.Define:
144 if '=' not in Item[0]:
145 continue
146 Item = Item[0].split('=', 1)
147 CommandLine.append('%s="%s"' % (Item[0], Item[1]))
148 CommandLine.append('EXTRA_FLAGS="%s"' % (gArgs.Remaining))
149 CommandLine.append(gArgs.BuildType)
150 if sys.platform == "win32":
151 CommandLine = 'nmake /f %s' % (' '.join(CommandLine))
152 else:
153 CommandLine = 'make -f %s' % (' '.join(CommandLine))
154
155 #
156 # Run the makefile
157 #
158 try:
159 Process = subprocess.Popen(CommandLine, shell=True)
160 except:
161 Error ('make command not available. Please verify PATH')
162 Process.communicate()
163
164 #
165 # Done
166 #
167 Log ('Done')
168
169 #
170 # Return status from running the makefile
171 #
172 sys.exit(Process.returncode)
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette