blob: a882992dd5622c1d394f277bf85b0d20765fd32e [file] [log] [blame]
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Recipe for building OVMF firmware and uploading them to CIPD.
The Open Virtual Machine Firmware (OVMF) project supports firmware for Virtual
Machines (e.g., QEMU). The produced OVMF_CODE.fd and OVMF_VARS.fd are used to
emulate EFI bootloading in QEMU in order to boot Zircon off of disk. Currently
this is only supported for x64.
"""
DEPS = [
'fuchsia/git',
'fuchsia/upload',
'recipe_engine/cipd',
'recipe_engine/context',
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/raw_io',
'recipe_engine/step',
]
# Note that this recipe accepts no properties because the recipe itself is quite
# specific, and its required configuration is encoded entirely in the logic.
PROPERTIES = {}
def RunSteps(api):
edk2_repo = 'https://fuchsia.googlesource.com/third_party/edk2'
checkout_dir = api.path['start_dir'].join('edk2')
revision = api.git.checkout(edk2_repo, checkout_dir)
with api.context(cwd=checkout_dir):
# BaseTools binary is needed to build OVMF
api.step('build BaseTools', ['make', '-C', 'BaseTools'])
api.step('build OVMF binaries',
['./OvmfPkg/build.sh', '--arch=X64', '--buildtarget=RELEASE'])
ovmf_bin_dir = checkout_dir.join('Build', 'OvmfX64', 'RELEASE_GCC5', 'FV')
api.upload.cipd_package(
'fuchsia/firmware/ovmf/amd64',
ovmf_bin_dir, [api.upload.DirectoryPath(ovmf_bin_dir)],
{'git_revision': revision},
repository=edk2_repo)
def GenTests(api):
revision = 'abc123'
revision_data = api.step_data('git rev-parse',
api.raw_io.stream_output(revision))
yield (api.test('not yet built for current revision') + revision_data +
api.override_step_data(
'cipd.cipd search fuchsia/firmware/ovmf/amd64 git_revision:%s' %
revision, api.json.output({'result': []})))
yield (api.test('already built for current revision') + revision_data +
api.override_step_data(
'cipd.cipd search fuchsia/firmware/ovmf/amd64 git_revision:%s' %
revision, api.cipd.example_search('fuchsia/firmware/ovmf/amd64')))