edk2: update to edk2-stable202308

v2: include acpi test data updates
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEoDKM/7k6F6eZAf59TLbY7tPocTgFAmUIUYUACgkQTLbY7tPo
 cTiPgQ/9Hfn4ooawA2k7i4KB5mAdNMhG1TYmR05hjIPur8S+UBhfHx3Qdv/lojzr
 9hRkXsi3CpV8E/t7sA/ZUVbc17ukBrJvL2VbW1nGqPZytiNqmU/2HOZEd88WByyg
 O1UYg9FZ1JbrqVbFkrE7Y0CHJmrr4EDWRxEGd7ITPDbR4UEuiQUm7+TeHIbQFCll
 T5vNxkCBP6smY9n/OEMZHX964D7906pBflHSjzpLPV/mXBrlM/rDNtPXA6dcIquh
 cCOndACPpenM8ngtgbW2gvDkkflXv4gtLozJR8XE8O434HmCviUjcxGW6L7nelcZ
 +madon48CZ/5AJUvC09R3xuzWHOBuLOn21O3ooprnCBFWAgCtaMEDWwNbgf1Pig3
 PgwOd1HeiQTKRuNCFDwNX1GJRN7Cyq6tY+ALQal3glDmWEMiyihUHViSsqux3c01
 RAkyyOJAMOZ6+MbZ4HMWNVI9pKRTYY7IDxg3NWSvlCD3KmDuDt8YBuQftZMN+T8X
 yMSa1wQda7ATlrsjUZL5LsEYO3qkho4ybffiFFDVz8QR/sO0TQg9uw6mggIghLAh
 GsSUE9SpVZmu+1lZYV/+/KomGeyNlhfchgIVPApMLQS3j0kDgVeNsrsjfbDgCqsn
 q3Ame+Roul54cv437F02ugt6JoxP76gNXXn8KdZPIDqOHWxMeS0=
 =Grjx
 -----END PGP SIGNATURE-----

Merge tag 'firmware/edk2-20230918-pull-request' of https://gitlab.com/kraxel/qemu into staging

edk2: update to edk2-stable202308

v2: include acpi test data updates

# -----BEGIN PGP SIGNATURE-----
#
# iQIzBAABCgAdFiEEoDKM/7k6F6eZAf59TLbY7tPocTgFAmUIUYUACgkQTLbY7tPo
# cTiPgQ/9Hfn4ooawA2k7i4KB5mAdNMhG1TYmR05hjIPur8S+UBhfHx3Qdv/lojzr
# 9hRkXsi3CpV8E/t7sA/ZUVbc17ukBrJvL2VbW1nGqPZytiNqmU/2HOZEd88WByyg
# O1UYg9FZ1JbrqVbFkrE7Y0CHJmrr4EDWRxEGd7ITPDbR4UEuiQUm7+TeHIbQFCll
# T5vNxkCBP6smY9n/OEMZHX964D7906pBflHSjzpLPV/mXBrlM/rDNtPXA6dcIquh
# cCOndACPpenM8ngtgbW2gvDkkflXv4gtLozJR8XE8O434HmCviUjcxGW6L7nelcZ
# +madon48CZ/5AJUvC09R3xuzWHOBuLOn21O3ooprnCBFWAgCtaMEDWwNbgf1Pig3
# PgwOd1HeiQTKRuNCFDwNX1GJRN7Cyq6tY+ALQal3glDmWEMiyihUHViSsqux3c01
# RAkyyOJAMOZ6+MbZ4HMWNVI9pKRTYY7IDxg3NWSvlCD3KmDuDt8YBuQftZMN+T8X
# yMSa1wQda7ATlrsjUZL5LsEYO3qkho4ybffiFFDVz8QR/sO0TQg9uw6mggIghLAh
# GsSUE9SpVZmu+1lZYV/+/KomGeyNlhfchgIVPApMLQS3j0kDgVeNsrsjfbDgCqsn
# q3Ame+Roul54cv437F02ugt6JoxP76gNXXn8KdZPIDqOHWxMeS0=
# =Grjx
# -----END PGP SIGNATURE-----
# gpg: Signature made Mon 18 Sep 2023 09:32:53 EDT
# gpg:                using RSA key A0328CFFB93A17A79901FE7D4CB6D8EED3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full]
# gpg:                 aka "Gerd Hoffmann <gerd@kraxel.org>" [full]
# gpg:                 aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full]
# Primary key fingerprint: A032 8CFF B93A 17A7 9901  FE7D 4CB6 D8EE D3E8 7138

* tag 'firmware/edk2-20230918-pull-request' of https://gitlab.com/kraxel/qemu:
  tests/acpi: disallow virt/SSDT.memhp updates
  tests/acpi: update virt/SSDT.memhp
  edk2: update binaries to edk2-stable202308
  edk2: update submodule to edk2-stable202308
  edk2: workaround edk-stable202308 bug
  edk2: update build config
  edk2: update build script
  tests/acpi: allow virt/SSDT.memhp updates

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Stefan Hajnoczi 2023-09-19 13:22:10 -04:00
commit 1361bba536
14 changed files with 141 additions and 79 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1 +1 @@
Subproject commit f80f052277c88a67c55e107b550f504eeea947d3 Subproject commit 819cfc6b42a68790a23509e4fcc58ceb70e1965e

View file

@ -26,6 +26,9 @@ DEBUG_PRINT_ERROR_LEVEL = 0x80000000
# grub.efi uses EfiLoaderData for code # grub.efi uses EfiLoaderData for code
PcdDxeNxMemoryProtectionPolicy = 0xC000000000007FD1 PcdDxeNxMemoryProtectionPolicy = 0xC000000000007FD1
[pcds.workaround.202308]
PcdFirstTimeWakeUpAPsBySipi = FALSE
#################################################################################### ####################################################################################
# i386 # i386
@ -57,6 +60,7 @@ desc = ovmf build (64-bit)
conf = OvmfPkg/OvmfPkgX64.dsc conf = OvmfPkg/OvmfPkgX64.dsc
arch = X64 arch = X64
opts = common opts = common
pcds = workaround.202308
plat = OvmfX64 plat = OvmfX64
dest = ../pc-bios dest = ../pc-bios
cpy1 = FV/OVMF_CODE.fd edk2-x86_64-code.fd cpy1 = FV/OVMF_CODE.fd edk2-x86_64-code.fd
@ -67,6 +71,7 @@ conf = OvmfPkg/OvmfPkgIa32X64.dsc
arch = IA32 X64 arch = IA32 X64
opts = common opts = common
ovmf.sb.smm ovmf.sb.smm
pcds = workaround.202308
plat = Ovmf3264 plat = Ovmf3264
dest = ../pc-bios dest = ../pc-bios
cpy1 = FV/OVMF_CODE.fd edk2-x86_64-secure-code.fd cpy1 = FV/OVMF_CODE.fd edk2-x86_64-secure-code.fd
@ -76,6 +81,7 @@ desc = ovmf build for microvm
conf = OvmfPkg/Microvm/MicrovmX64.dsc conf = OvmfPkg/Microvm/MicrovmX64.dsc
arch = X64 arch = X64
opts = common opts = common
pcds = workaround.202308
plat = MicrovmX64 plat = MicrovmX64
dest = ../pc-bios dest = ../pc-bios
cpy1 = FV/MICROVM.fd edk2-x86_64-microvm.fd cpy1 = FV/MICROVM.fd edk2-x86_64-microvm.fd
@ -120,5 +126,7 @@ conf = OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc
arch = RISCV64 arch = RISCV64
plat = RiscVVirtQemu plat = RiscVVirtQemu
dest = ../pc-bios dest = ../pc-bios
cpy1 = FV/RISCV_VIRT.fd edk2-riscv.fd cpy1 = FV/RISCV_VIRT_CODE.fd edk2-riscv-code.fd
pad1 = edk2-riscv.fd 32m cpy2 = FV/RISCV_VIRT_VARS.fd edk2-riscv-vars.fd
pad1 = edk2-riscv-code.fd 32m
pad2 = edk2-riscv-vars.fd 32m

View file

@ -6,6 +6,7 @@ https://gitlab.com/kraxel/edk2-build-config
""" """
import os import os
import sys import sys
import time
import shutil import shutil
import argparse import argparse
import subprocess import subprocess
@ -45,19 +46,28 @@ def get_coredir(cfg):
return os.path.abspath(cfg['global']['core']) return os.path.abspath(cfg['global']['core'])
return os.getcwd() return os.getcwd()
def get_version(cfg): def get_toolchain(cfg, build):
if cfg.has_option(build, 'tool'):
return cfg[build]['tool']
if cfg.has_option('global', 'tool'):
return cfg['global']['tool']
return 'GCC5'
def get_version(cfg, silent = False):
coredir = get_coredir(cfg) coredir = get_coredir(cfg)
if version_override: if version_override:
version = version_override version = version_override
print('') if not silent:
print(f'### version [override]: {version}') print('')
print(f'### version [override]: {version}')
return version return version
if os.environ.get('RPM_PACKAGE_NAME'): if os.environ.get('RPM_PACKAGE_NAME'):
version = os.environ.get('RPM_PACKAGE_NAME') version = os.environ.get('RPM_PACKAGE_NAME')
version += '-' + os.environ.get('RPM_PACKAGE_VERSION') version += '-' + os.environ.get('RPM_PACKAGE_VERSION')
version += '-' + os.environ.get('RPM_PACKAGE_RELEASE') version += '-' + os.environ.get('RPM_PACKAGE_RELEASE')
print('') if not silent:
print(f'### version [rpmbuild]: {version}') print('')
print(f'### version [rpmbuild]: {version}')
return version return version
if os.path.exists(coredir + '/.git'): if os.path.exists(coredir + '/.git'):
cmdline = [ 'git', 'describe', '--tags', '--abbrev=8', cmdline = [ 'git', 'describe', '--tags', '--abbrev=8',
@ -66,16 +76,17 @@ def get_version(cfg):
stdout = subprocess.PIPE, stdout = subprocess.PIPE,
check = True) check = True)
version = result.stdout.decode().strip() version = result.stdout.decode().strip()
print('') if not silent:
print(f'### version [git]: {version}') print('')
print(f'### version [git]: {version}')
return version return version
return None return None
def pcd_string(name, value): def pcd_string(name, value):
return f'{name}=L{value}\\0' return f'{name}=L{value}\\0'
def pcd_version(cfg): def pcd_version(cfg, silent = False):
version = get_version(cfg) version = get_version(cfg, silent)
if version is None: if version is None:
return [] return []
return [ '--pcd', pcd_string('PcdFirmwareVersionString', version) ] return [ '--pcd', pcd_string('PcdFirmwareVersionString', version) ]
@ -85,49 +96,58 @@ def pcd_release_date():
return [] return []
return [ '--pcd', pcd_string('PcdFirmwareReleaseDateString', release_date) ] return [ '--pcd', pcd_string('PcdFirmwareReleaseDateString', release_date) ]
def build_message(line, line2 = None): def build_message(line, line2 = None, silent = False):
if os.environ.get('TERM') in [ 'xterm', 'xterm-256color' ]: if os.environ.get('TERM') in [ 'xterm', 'xterm-256color' ]:
# setxterm title # setxterm title
start = '\x1b]2;' start = '\x1b]2;'
end = '\x07' end = '\x07'
print(f'{start}{rebase_prefix}{line}{end}', end = '') print(f'{start}{rebase_prefix}{line}{end}', end = '')
print('')
print('###')
print(f'### {rebase_prefix}{line}')
if line2:
print(f'### {line2}')
print('###', flush = True)
def build_run(cmdline, name, section, silent = False):
print(cmdline, flush = True)
if silent: if silent:
print('### building in silent mode ...', flush = True) print(f'### {rebase_prefix}{line}', flush = True)
else:
print('')
print('###')
print(f'### {rebase_prefix}{line}')
if line2:
print(f'### {line2}')
print('###', flush = True)
def build_run(cmdline, name, section, silent = False, nologs = False):
if silent:
logfile = f'{section}.log'
if nologs:
print(f'### building in silent mode [no log] ...', flush = True)
else:
print(f'### building in silent mode [{logfile}] ...', flush = True)
start = time.time()
result = subprocess.run(cmdline, check = False, result = subprocess.run(cmdline, check = False,
stdout = subprocess.PIPE, stdout = subprocess.PIPE,
stderr = subprocess.STDOUT) stderr = subprocess.STDOUT)
if not nologs:
logfile = f'{section}.log' with open(logfile, 'wb') as f:
print(f'### writing log to {logfile} ...') f.write(result.stdout)
with open(logfile, 'wb') as f:
f.write(result.stdout)
if result.returncode: if result.returncode:
print('### BUILD FAILURE') print('### BUILD FAILURE')
print('### cmdline')
print(cmdline)
print('### output') print('### output')
print(result.stdout.decode()) print(result.stdout.decode())
print(f'### exit code: {result.returncode}') print(f'### exit code: {result.returncode}')
else: else:
print('### OK') secs = int(time.time() - start)
print(f'### OK ({int(secs/60)}:{secs%60:02d})')
else: else:
print(cmdline, flush = True)
result = subprocess.run(cmdline, check = False) result = subprocess.run(cmdline, check = False)
if result.returncode: if result.returncode:
print(f'ERROR: {cmdline[0]} exited with {result.returncode}' print(f'ERROR: {cmdline[0]} exited with {result.returncode}'
f' while building {name}') f' while building {name}')
sys.exit(result.returncode) sys.exit(result.returncode)
def build_copy(plat, tgt, dstdir, copy): def build_copy(plat, tgt, toolchain, dstdir, copy):
srcdir = f'Build/{plat}/{tgt}_GCC5' srcdir = f'Build/{plat}/{tgt}_{toolchain}'
names = copy.split() names = copy.split()
srcfile = names[0] srcfile = names[0]
if len(names) > 1: if len(names) > 1:
@ -156,66 +176,68 @@ def pad_file(dstdir, pad):
subprocess.run(cmdline, check = True) subprocess.run(cmdline, check = True)
# pylint: disable=too-many-branches # pylint: disable=too-many-branches
def build_one(cfg, build, jobs = None, silent = False): def build_one(cfg, build, jobs = None, silent = False, nologs = False):
cmdline = [ 'build' ] b = cfg[build]
cmdline += [ '-t', 'GCC5' ]
cmdline += [ '-p', cfg[build]['conf'] ]
if (cfg[build]['conf'].startswith('OvmfPkg/') or cmdline = [ 'build' ]
cfg[build]['conf'].startswith('ArmVirtPkg/')): cmdline += [ '-t', get_toolchain(cfg, build) ]
cmdline += pcd_version(cfg) cmdline += [ '-p', b['conf'] ]
if (b['conf'].startswith('OvmfPkg/') or
b['conf'].startswith('ArmVirtPkg/')):
cmdline += pcd_version(cfg, silent)
cmdline += pcd_release_date() cmdline += pcd_release_date()
if jobs: if jobs:
cmdline += [ '-n', jobs ] cmdline += [ '-n', jobs ]
for arch in cfg[build]['arch'].split(): for arch in b['arch'].split():
cmdline += [ '-a', arch ] cmdline += [ '-a', arch ]
if 'opts' in cfg[build]: if 'opts' in b:
for name in cfg[build]['opts'].split(): for name in b['opts'].split():
section = 'opts.' + name section = 'opts.' + name
for opt in cfg[section]: for opt in cfg[section]:
cmdline += [ '-D', opt + '=' + cfg[section][opt] ] cmdline += [ '-D', opt + '=' + cfg[section][opt] ]
if 'pcds' in cfg[build]: if 'pcds' in b:
for name in cfg[build]['pcds'].split(): for name in b['pcds'].split():
section = 'pcds.' + name section = 'pcds.' + name
for pcd in cfg[section]: for pcd in cfg[section]:
cmdline += [ '--pcd', pcd + '=' + cfg[section][pcd] ] cmdline += [ '--pcd', pcd + '=' + cfg[section][pcd] ]
if 'tgts' in cfg[build]: if 'tgts' in b:
tgts = cfg[build]['tgts'].split() tgts = b['tgts'].split()
else: else:
tgts = [ 'DEBUG' ] tgts = [ 'DEBUG' ]
for tgt in tgts: for tgt in tgts:
desc = None desc = None
if 'desc' in cfg[build]: if 'desc' in b:
desc = cfg[build]['desc'] desc = b['desc']
build_message(f'building: {cfg[build]["conf"]} ({cfg[build]["arch"]}, {tgt})', build_message(f'building: {b["conf"]} ({b["arch"]}, {tgt})',
f'description: {desc}') f'description: {desc}',
silent = silent)
build_run(cmdline + [ '-b', tgt ], build_run(cmdline + [ '-b', tgt ],
cfg[build]['conf'], b['conf'],
build + '.' + tgt, build + '.' + tgt,
silent) silent,
nologs)
if 'plat' in cfg[build]: if 'plat' in b:
# copy files # copy files
for cpy in cfg[build]: for cpy in b:
if not cpy.startswith('cpy'): if not cpy.startswith('cpy'):
continue continue
build_copy(cfg[build]['plat'], build_copy(b['plat'], tgt,
tgt, get_toolchain(cfg, build),
cfg[build]['dest'], b['dest'], b[cpy])
cfg[build][cpy])
# pad builds # pad builds
for pad in cfg[build]: for pad in b:
if not pad.startswith('pad'): if not pad.startswith('pad'):
continue continue
pad_file(cfg[build]['dest'], pad_file(b['dest'], b[pad])
cfg[build][pad])
def build_basetools(silent = False): def build_basetools(silent = False, nologs = False):
build_message('building: BaseTools') build_message('building: BaseTools', silent = silent)
basedir = os.environ['EDK_TOOLS_PATH'] basedir = os.environ['EDK_TOOLS_PATH']
cmdline = [ 'make', '-C', basedir ] cmdline = [ 'make', '-C', basedir ]
build_run(cmdline, 'BaseTools', 'build.basetools', silent) build_run(cmdline, 'BaseTools', 'build.basetools', silent, nologs)
def binary_exists(name): def binary_exists(name):
for pdir in os.environ['PATH'].split(':'): for pdir in os.environ['PATH'].split(':'):
@ -223,7 +245,7 @@ def binary_exists(name):
return True return True
return False return False
def prepare_env(cfg): def prepare_env(cfg, silent = False):
""" mimic Conf/BuildEnv.sh """ """ mimic Conf/BuildEnv.sh """
workspace = os.getcwd() workspace = os.getcwd()
packages = [ workspace, ] packages = [ workspace, ]
@ -253,7 +275,7 @@ def prepare_env(cfg):
toolsdef = coredir + '/Conf/tools_def.txt' toolsdef = coredir + '/Conf/tools_def.txt'
if not os.path.exists(toolsdef): if not os.path.exists(toolsdef):
os.makedirs(os.path.dirname(toolsdef), exist_ok = True) os.makedirs(os.path.dirname(toolsdef), exist_ok = True)
build_message('running BaseTools/BuildEnv') build_message('running BaseTools/BuildEnv', silent = silent)
cmdline = [ 'bash', 'BaseTools/BuildEnv' ] cmdline = [ 'bash', 'BaseTools/BuildEnv' ]
subprocess.run(cmdline, cwd = coredir, check = True) subprocess.run(cmdline, cwd = coredir, check = True)
@ -267,20 +289,32 @@ def prepare_env(cfg):
os.environ['PYTHONHASHSEED'] = '1' os.environ['PYTHONHASHSEED'] = '1'
# for cross builds # for cross builds
if binary_exists('arm-linux-gnu-gcc'): if binary_exists('arm-linux-gnueabi-gcc'):
# ubuntu
os.environ['GCC5_ARM_PREFIX'] = 'arm-linux-gnueabi-'
os.environ['GCC_ARM_PREFIX'] = 'arm-linux-gnueabi-'
elif binary_exists('arm-linux-gnu-gcc'):
# fedora
os.environ['GCC5_ARM_PREFIX'] = 'arm-linux-gnu-' os.environ['GCC5_ARM_PREFIX'] = 'arm-linux-gnu-'
os.environ['GCC_ARM_PREFIX'] = 'arm-linux-gnu-'
if binary_exists('loongarch64-linux-gnu-gcc'): if binary_exists('loongarch64-linux-gnu-gcc'):
os.environ['GCC5_LOONGARCH64_PREFIX'] = 'loongarch64-linux-gnu-' os.environ['GCC5_LOONGARCH64_PREFIX'] = 'loongarch64-linux-gnu-'
os.environ['GCC_LOONGARCH64_PREFIX'] = 'loongarch64-linux-gnu-'
hostarch = os.uname().machine hostarch = os.uname().machine
if binary_exists('aarch64-linux-gnu-gcc') and hostarch != 'aarch64': if binary_exists('aarch64-linux-gnu-gcc') and hostarch != 'aarch64':
os.environ['GCC5_AARCH64_PREFIX'] = 'aarch64-linux-gnu-' os.environ['GCC5_AARCH64_PREFIX'] = 'aarch64-linux-gnu-'
os.environ['GCC_AARCH64_PREFIX'] = 'aarch64-linux-gnu-'
if binary_exists('riscv64-linux-gnu-gcc') and hostarch != 'riscv64': if binary_exists('riscv64-linux-gnu-gcc') and hostarch != 'riscv64':
os.environ['GCC5_RISCV64_PREFIX'] = 'riscv64-linux-gnu-' os.environ['GCC5_RISCV64_PREFIX'] = 'riscv64-linux-gnu-'
os.environ['GCC_RISCV64_PREFIX'] = 'riscv64-linux-gnu-'
if binary_exists('x86_64-linux-gnu-gcc') and hostarch != 'x86_64': if binary_exists('x86_64-linux-gnu-gcc') and hostarch != 'x86_64':
os.environ['GCC5_IA32_PREFIX'] = 'x86_64-linux-gnu-' os.environ['GCC5_IA32_PREFIX'] = 'x86_64-linux-gnu-'
os.environ['GCC5_X64_PREFIX'] = 'x86_64-linux-gnu-' os.environ['GCC5_X64_PREFIX'] = 'x86_64-linux-gnu-'
os.environ['GCC5_BIN'] = 'x86_64-linux-gnu-' os.environ['GCC5_BIN'] = 'x86_64-linux-gnu-'
os.environ['GCC_IA32_PREFIX'] = 'x86_64-linux-gnu-'
os.environ['GCC_X64_PREFIX'] = 'x86_64-linux-gnu-'
os.environ['GCC_BIN'] = 'x86_64-linux-gnu-'
def build_list(cfg): def build_list(cfg):
for build in cfg.sections(): for build in cfg.sections():
@ -303,10 +337,12 @@ def main():
parser.add_argument('-j', '--jobs', dest = 'jobs', type = str, parser.add_argument('-j', '--jobs', dest = 'jobs', type = str,
help = 'allow up to JOBS parallel build jobs', help = 'allow up to JOBS parallel build jobs',
metavar = 'JOBS') metavar = 'JOBS')
parser.add_argument('-m', '--match', dest = 'match', type = str, parser.add_argument('-m', '--match', dest = 'match',
type = str, action = 'append',
help = 'only run builds matching INCLUDE (substring)', help = 'only run builds matching INCLUDE (substring)',
metavar = 'INCLUDE') metavar = 'INCLUDE')
parser.add_argument('-x', '--exclude', dest = 'exclude', type = str, parser.add_argument('-x', '--exclude', dest = 'exclude',
type = str, action = 'append',
help = 'skip builds matching EXCLUDE (substring)', help = 'skip builds matching EXCLUDE (substring)',
metavar = 'EXCLUDE') metavar = 'EXCLUDE')
parser.add_argument('-l', '--list', dest = 'list', parser.add_argument('-l', '--list', dest = 'list',
@ -316,6 +352,9 @@ def main():
action = 'store_true', default = False, action = 'store_true', default = False,
help = 'write build output to logfiles, ' help = 'write build output to logfiles, '
'write to console only on errors') 'write to console only on errors')
parser.add_argument('--no-logs', dest = 'nologs',
action = 'store_true', default = False,
help = 'do not write build log files (with --silent)')
parser.add_argument('--core', dest = 'core', type = str, metavar = 'DIR', parser.add_argument('--core', dest = 'core', type = str, metavar = 'DIR',
help = 'location of the core edk2 repository ' help = 'location of the core edk2 repository '
'(i.e. where BuildTools are located)') '(i.e. where BuildTools are located)')
@ -323,6 +362,9 @@ def main():
type = str, action = 'append', metavar = 'DIR', type = str, action = 'append', metavar = 'DIR',
help = 'location(s) of additional packages ' help = 'location(s) of additional packages '
'(can be specified multiple times)') '(can be specified multiple times)')
parser.add_argument('-t', '--toolchain', dest = 'toolchain',
type = str, metavar = 'NAME',
help = 'tool chain to be used to build edk2')
parser.add_argument('--version-override', dest = 'version_override', parser.add_argument('--version-override', dest = 'version_override',
type = str, metavar = 'VERSION', type = str, metavar = 'VERSION',
help = 'set firmware build version') help = 'set firmware build version')
@ -335,7 +377,7 @@ def main():
os.chdir(options.directory) os.chdir(options.directory)
if not os.path.exists(options.configfile): if not os.path.exists(options.configfile):
print('config file "{options.configfile}" not found') print(f'config file "{options.configfile}" not found')
return 1 return 1
cfg = configparser.ConfigParser() cfg = configparser.ConfigParser()
@ -344,7 +386,7 @@ def main():
if options.list: if options.list:
build_list(cfg) build_list(cfg)
return return 0
if not cfg.has_section('global'): if not cfg.has_section('global'):
cfg.add_section('global') cfg.add_section('global')
@ -352,6 +394,8 @@ def main():
cfg.set('global', 'core', options.core) cfg.set('global', 'core', options.core)
if options.pkgs: if options.pkgs:
cfg.set('global', 'pkgs', ' '.join(options.pkgs)) cfg.set('global', 'pkgs', ' '.join(options.pkgs))
if options.toolchain:
cfg.set('global', 'tool', options.toolchain)
global version_override global version_override
global release_date global release_date
@ -361,18 +405,28 @@ def main():
if options.release_date: if options.release_date:
release_date = options.release_date release_date = options.release_date
prepare_env(cfg) prepare_env(cfg, options.silent)
build_basetools(options.silent) build_basetools(options.silent, options.nologs)
for build in cfg.sections(): for build in cfg.sections():
if not build.startswith('build.'): if not build.startswith('build.'):
continue continue
if options.match and options.match not in build: if options.match:
print(f'# skipping "{build}" (not matching "{options.match}")') matching = False
continue for item in options.match:
if options.exclude and options.exclude in build: if item in build:
print(f'# skipping "{build}" (matching "{options.exclude}")') matching = True
continue if not matching:
build_one(cfg, build, options.jobs, options.silent) print(f'# skipping "{build}" (not matching "{"|".join(options.match)}")')
continue
if options.exclude:
exclude = False
for item in options.exclude:
if item in build:
print(f'# skipping "{build}" (matching "{item}")')
exclude = True
if exclude:
continue
build_one(cfg, build, options.jobs, options.silent, options.nologs)
return 0 return 0

Binary file not shown.