mirror of https://github.com/acidanthera/audk.git
90 lines
2.6 KiB
Python
90 lines
2.6 KiB
Python
## @file
|
|
# Automate the process of building the various reset vector types
|
|
#
|
|
# Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>
|
|
#
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
#
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
PAGE_TABLE_2M = 'PageTable2M'
|
|
PAGE_TABLE_1G = 'PageTable1G'
|
|
FILE_FORMAT = '.raw'
|
|
ALL_RAW_FORMAT = '*' + FILE_FORMAT
|
|
IA32 = 'IA32'
|
|
X64 = 'X64'
|
|
|
|
# Pre-Define a Macros for Page Table
|
|
PAGE_TABLES = {
|
|
PAGE_TABLE_2M : "PAGE_TABLE_2M",
|
|
PAGE_TABLE_1G : "PAGE_TABLE_1G"
|
|
}
|
|
|
|
def RunCommand(commandLine):
|
|
return subprocess.call(commandLine)
|
|
|
|
# Check for all raw binaries and delete them
|
|
for root, dirs, files in os.walk('Bin'):
|
|
for file in files:
|
|
if file.endswith(FILE_FORMAT):
|
|
os.remove(os.path.join(root, file))
|
|
|
|
for arch in ('ia32', 'x64'):
|
|
for debugType in (None, 'port80', 'serial'):
|
|
for pageTable in PAGE_TABLES.keys():
|
|
ret = True
|
|
if arch.lower() == X64.lower():
|
|
directory = os.path.join('Bin', X64, pageTable)
|
|
else:
|
|
directory = os.path.join('Bin', IA32)
|
|
|
|
# output raw binary name with arch type
|
|
fileName = 'ResetVector' + '.' + arch
|
|
|
|
if debugType is not None:
|
|
fileName += '.' + debugType
|
|
fileName += FILE_FORMAT
|
|
|
|
output = os.path.join(directory, fileName)
|
|
|
|
# if the directory not exists then create it
|
|
if not os.path.isdir(directory):
|
|
os.makedirs(directory)
|
|
|
|
# Prepare the command to execute the nasmb
|
|
commandLine = (
|
|
'nasm',
|
|
'-D', 'ARCH_%s' % arch.upper(),
|
|
'-D', 'DEBUG_%s' % str(debugType).upper(),
|
|
'-D', PAGE_TABLES[pageTable].upper(),
|
|
'-o', output,
|
|
'Vtf0.nasmb',
|
|
)
|
|
|
|
print(f"Command : {' '.join(commandLine)}")
|
|
|
|
try:
|
|
ret = RunCommand(commandLine)
|
|
except FileNotFoundError:
|
|
print("NASM not found")
|
|
except:
|
|
pass
|
|
|
|
if ret != 0:
|
|
print(f"something went wrong while executing {commandLine[-1]}")
|
|
sys.exit()
|
|
print('\tASM\t' + output)
|
|
|
|
commandLine = (
|
|
'python',
|
|
'Tools/FixupForRawSection.py',
|
|
output,
|
|
)
|
|
print('\tFIXUP\t' + output)
|
|
ret = RunCommand(commandLine)
|
|
if ret != 0: sys.exit(ret)
|
|
|