On 4/8/20 8:13 PM, michael.kuba...@outlook.com wrote:
From: Sean Brogan <sean.bro...@microsoft.com>

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2570

Add new Azure Pipeline definitions to build and run ArmVirtPkg with:
   * Ubuntu GCC5
Add PyTool based build of ArmVirtPkg
Add extdep for managing the iasl dependency
Add ArmVirtPkg.ci.yaml for Core CI
Add README-pytools for details and instructions

Cc: Laszlo Ersek <ler...@redhat.com>
Cc: Ard Biesheuvel <ard.biesheu...@arm.com>
Cc: Leif Lindholm <l...@nuviainc.com>
Signed-off-by: Sean Brogan <sean.bro...@microsoft.com>

---
  ArmVirtPkg/.azurepipelines/Ubuntu-GCC5.yml |  89 +++++++
  ArmVirtPkg/ArmVirtPkg.ci.yaml              | 103 ++++++++
  ArmVirtPkg/PlatformBuild.py                | 263 ++++++++++++++++++++
  ArmVirtPkg/README-pytools.md               | 123 +++++++++
  ArmVirtPkg/iasl_ext_dep.yaml               |  21 ++
  5 files changed, 599 insertions(+)


Hello Michael,

I agree with Laszlo's point here: it would be nice if we can keep these files organized a bit better, although I suppose there is already precent for keep <package>.ci.yaml files at the package's root level, so that one should stay where it is.

More comments below.

...

diff --git a/ArmVirtPkg/README-pytools.md b/ArmVirtPkg/README-pytools.md
new file mode 100644
index 000000000000..ea70018e510a
--- /dev/null
+++ b/ArmVirtPkg/README-pytools.md
@@ -0,0 +1,123 @@
+# ArmVirtPkg
+
+This README-pytools.md summarizes the current state of Platform CI for 
ArmVirtPkg.  It also describes how to _build_ ArmVirtPkg using the Pytools 
build system.
+
+## Platform CI Current Status
+
+<table>
+  <tr>
+    <th>Config</th>
+    <th colspan="3">Build & Run</th>
+    <th>Notes</th>
+  </tr>
+  <tr>
+    <th></th>
+    <th>DEBUG</th>
+    <th>RELEASE</th>
+    <th>NOOPT</th>
+    <th></th>
+  </tr>
+  <tr>
+    <th colspan="5" align="left">
+    Ubuntu 18.04 GCC5
+    </th>
+  </tr>
+  <tr>
+    <td>AARCH64</td>
+    <td>
+      <a  
href="https://dev.azure.com/tianocore/edk2-ci-play/_build/latest?definitionId=41&branchName=master";>
+      <img 
src="https://dev.azure.com/tianocore/edk2-ci-play/_apis/build/status/ArmVirtPkg/ArmVirtQemu%20Ubuntu%20GCC5?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_AARCH64_DEBUG"/></a>
+    </td>
+    <td>
+      <a  
href="https://dev.azure.com/tianocore/edk2-ci-play/_build/latest?definitionId=41&branchName=master";>
+      <img 
src="https://dev.azure.com/tianocore/edk2-ci-play/_apis/build/status/ArmVirtPkg/ArmVirtQemu%20Ubuntu%20GCC5?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_AARCH64_RELEASE"/></a>
+    </td>
+    <td>
+      <a  
href="https://dev.azure.com/tianocore/edk2-ci-play/_build/latest?definitionId=41&branchName=master";>
+      <img 
src="https://dev.azure.com/tianocore/edk2-ci-play/_apis/build/status/ArmVirtPkg/ArmVirtQemu%20Ubuntu%20GCC5?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_AARCH64_NOOPT"/></a>
+    </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>ARM</td>
+    <td>
+      <a  
href="https://dev.azure.com/tianocore/edk2-ci-play/_build/latest?definitionId=41&branchName=master";>
+      <img 
src="https://dev.azure.com/tianocore/edk2-ci-play/_apis/build/status/ArmVirtPkg/ArmVirtQemu%20Ubuntu%20GCC5?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_ARM_DEBUG"/></a>
+    </td>
+    <td>
+      <a  
href="https://dev.azure.com/tianocore/edk2-ci-play/_build/latest?definitionId=41&branchName=master";>
+      <img 
src="https://dev.azure.com/tianocore/edk2-ci-play/_apis/build/status/ArmVirtPkg/ArmVirtQemu%20Ubuntu%20GCC5?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_ARM_RELEASE"/></a>
+    </td>
+    <td>
+      <a  
href="https://dev.azure.com/tianocore/edk2-ci-play/_build/latest?definitionId=41&branchName=master";>
+      <img 
src="https://dev.azure.com/tianocore/edk2-ci-play/_apis/build/status/ArmVirtPkg/ArmVirtQemu%20Ubuntu%20GCC5?branchName=master&jobName=Platform_CI&configuration=Platform_CI%20QEMU_ARM_NOOPT"/></a>
+    </td>
+    <td></td>
+  </tr>
+</table>
+
+### Config Details
+
+| Config       | Architectures      |Additional Flags |
+| :----        | :-----             | :----           |
+| AARCH64      | AARCH64            | None            |
+| ARM          | ARM                | None            |
+
+## Setup
+
+### The Usual EDK2 Build Setup
+
+- [Python 3.8.x - Download & Install](https://www.python.org/downloads/)
+- [GIT - Download & Install](https://git-scm.com/download/)
+- [GIT - Configure for EDK 
II](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems#github-help)
+- [QEMU - Download, Install, and add to your 
path](https://www.qemu.org/download/)
+- [EDKII Source - Download/Checkout from 
Github](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems#download)
+  - **NOTE:** Do _not_ follow the EDK II Compile Tools and Build instructions, 
see below...
+
+### Differences from EDK Classic Build Setup
+
+- Build BaseTools using "`C:\git\edk2>python BaseTools\Edk2ToolsBuild.py [-t 
<ToolChainTag>]`"
+  - This replaces "`edksetup Rebuild`" from the classic build system
+  - For Windows `<ToolChainTag>` examples, refer to [Windows ToolChain 
Matrix](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems-ToolChain-Matrix),
 defaults to `VS2017` if not specified
+- **No Action:** Submodule initialization and manual installation/setup of 
NASM and iASL is **not** required, it is handled by the PyTools build system
+
+### Building with Pytools for ArmVirtPkg
+
+- Install Pytools
+  - `pip install --upgrade -r pip-requirements.txt`
+- Initialize & Update Submodules
+  - `stuart_setup -c ArmVirt\PlatformBuild.py TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a 
<TARGET_ARCH>`

Typo here ^^^

Also, could we standardize on forward slashes everywhere (as in the examples below)?


+- Initialize & Update Dependencies (e.g. iASL, NASM & GCC Arm/Aarch64 
Compilers)
+  - `stuart_update -c ArmVirtPkg\PlatformBuild.py TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a 
<TARGET_ARCH>`
+- Compile (AARCH64 supported / ARM support coming soon)
+  - `stuart_build -c ArmVirtPkg\PlatformBuild.py TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a 
<TARGET_ARCH>`
+- Running Emulator
+  - You can add `--FlashRom` to the end of your build command and the emulator 
will run after the build is complete.
+  - or use the FlashOnly feature like `stuart_build -c ArmVirtPkg\PlatformBuild.py 
TOOL_CHAIN_TAG=<TOOL_CHAIN_TAG> -a <TARGET_ARCH> --FlashOnly` to just run the 
emulator.
+
+### Notes
+
+1. Including the expected build architecture and toolchain to the 
_stuart_update_ command is critical. This is because there are extra scopes and 
tools that will be resolved during the update step that need to match your 
build step.
+2. Configuring _ACTIVE_PLATFORM_ and _TARGET_ARCH_ in Conf/target.txt is _not_ required. This 
environment is set by PlatformBuild.py based upon the "`[-a <TARGET_ARCH>]`" 
parameter.
+3. QEMU must be on your path.  On Windows this is a manual process and not 
part of the QEMU installer.
+
+**NOTE:** Logging the execution output will be in the normal stuart log as 
well as to your console.
+
+## Custom Build Options
+
+**MAKE_STARTUP_NSH=TRUE** will output a _startup.nsh_ file to the location 
mapped as fs0. This is used in CI in combination with the --FlashOnly feature 
to run QEMU to the UEFI shell and then execute the contents of startup.nsh.
+
+**QEMU_HEADLESS=TRUE** Since CI servers run headless QEMU must be told to run 
with no display otherwise an error occurs. Locally you don't need to set this.
+
+## Passing Build Defines
+
+To pass build defines through _stuart_build_, prepend `BLD_*_`to the define 
name and pass it on the command-line. _stuart_build_ currently requires values 
to be assigned, so add an`=1` suffix for bare defines.
+For example, to enable the TPM2 support, instead of the traditional "-D 
TPM2_ENABLE=TRUE", the stuart_build command-line would be:
+
+`stuart_build -c ArmVirtPkg/PlatformBuild.py BLD_*_TPM2_ENABLE=TRUE`
+
+## References
+
+- [Installing 
Pytools](https://github.com/tianocore/edk2-pytool-extensions/blob/master/docs/using.md#installing)
+- For each workspace, consider creating & using a [Python Virtual 
Environment](https://docs.python.org/3/library/venv.html). For example 
<https://microsoft.github.io/mu/CodeDevelopment/prerequisites/#workspace-virtual-environment-setup-process>
+- [stuart_build command-line 
parser](https://github.com/tianocore/edk2-pytool-extensions/blob/56f6a7aee09995c2f22da4765e8b0a29c1cbf5de/edk2toolext/edk2_invocable.py#L109)
diff --git a/ArmVirtPkg/iasl_ext_dep.yaml b/ArmVirtPkg/iasl_ext_dep.yaml
new file mode 100644
index 000000000000..8869ed3ecef1
--- /dev/null
+++ b/ArmVirtPkg/iasl_ext_dep.yaml
@@ -0,0 +1,21 @@
+## @file
+# Download iasl executable tool from a nuget.org package
+# - package contains different binaries based on host
+# Add the folder with the tool to the path
+#
+# This is only downloaded for scope armvirt thus
+# should have no impact on the asl compiler used by any
+# other platform build
+#
+# Copyright (c) Microsoft Corporation.
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+{
+  "id": "iasl-armvirt-1",
+  "scope": "armvirt",
+  "type": "nuget",
+  "name": "iasl",
+  "source": "https://api.nuget.org/v3/index.json";,
+  "version": "20190215.0.0",
+  "flags": ["set_path", "host_specific"],
+}



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#57103): https://edk2.groups.io/g/devel/message/57103
Mute This Topic: https://groups.io/mt/72880537/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to