From mboxrd@z Thu Jan 1 00:00:00 1970
Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131])
by mx.groups.io with SMTP id smtpd.web11.5938.1670474836783839486
for
> + Click to download Visual Studio 2022 Build Tools
> +
> + Click to download Visual Studio 2019 Build Tools
> +
> + Click to download Visual Studio 2017 Build Tools
> +
> + Pre-requisites (Git, Python, Compiler)
> +
> +
> +
> +
git
to pull the edk2 source code onto your sys=
tem, make changes in the code, and submit
> + your changes back to the GitHub repository.
> +
> + Git Down=
load Page
> + stu=
art
, which is written in Python.
> +
> + It is recommended you install a Python version that is equal to the =
version used in the
> + UsePythonVersion@0
step in this file
> + .azurepipelines/templ=
ates/pr-gate-steps.yml.
> +
> + That version is constantly tested against the code in the repository.
> +
> + Pyth=
on Download Page
> +
> +
Ubuntu GCC Installation Instructions
> + apt-get update && apt-get install -y build-essential git n=
asm wget m4 bison flex uuid-dev python unzip acpica-tools gcc-multilib
> +
Visual Studio Installation Instructions (Windows)
> +
> + Visual Studio 2022 Installation Instructions
> +
> +
> +
> + vs_=
BuildTools.exe
file
> + (e.g. C:\Downloads
)
> +
> +
> + start /w vs_BuildTools.exe --quiet --wait --norestart --=
nocache --installPath C:\BuildTools ^
> + --add Microsoft.VisualStudio.Component.VC.CoreBuildTools=
--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ^
> + --add Microsoft.VisualStudio.Component.Windows11SDK.2200=
0 --add Microsoft.VisualStudio.Component.VC.Tools.ARM ^
> + --add Microsoft.VisualStudio.Component.VC.Tools.ARM64
> +
> +
> + Visual Studio 2019 Installation Instructions
> +
> +
> +
> + vs_Bu=
ildTools.exe
file
> + (e.g. C:\Downloads
)
> +
> +
> + start /w vs_BuildTools.exe --quiet --wait --norestart --no=
cache --installPath C:\BuildTools ^
> + --add Microsoft.VisualStudio.Component.VC.CoreBuildTools -=
-add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ^
> + --add Microsoft.VisualStudio.Component.Windows10SDK.19041 =
--add Microsoft.VisualStudio.Component.VC.Tools.ARM ^
> + --add Microsoft.VisualStudio.Component.VC.Tools.ARM64
> +
> +
> + Visual Studio 2017 Installation Instructions
> +
> +
> +
> + vs_Buil=
dTools.exe
file
> + (e.g. C:\Downloads
)
> +
> +
> + start /w vs_BuildTools.exe --quiet --wait --norestart --no=
cache --installPath C:\BuildTools ^
> + --add Microsoft.VisualStudio.Component.VC.CoreBuildTools -=
-add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ^
> + --add Microsoft.VisualStudio.Component.Windows10SDK.17763 =
--add Microsoft.VisualStudio.Component.VC.Tools.ARM ^
> + --add Microsoft.VisualStudio.Component.VC.Tools.ARM64
> +
> +
> +
> +
> +
> + Download the Windows Software Development Kit (SDK) from > + Windows Dev Center - Windows SDK > +
> +> + Follow the default options until you reach the "Select= the features you want to install" page. > +
> + Select the following options: > +> + Click Download and complete the installation = process. > +
> +Mono= needs to be installed on Linux.
> + apt-get install mono-complete > +python -m venv .venv
> + source .venv/bin/activate
> + py -m venv .venv
> + .venv\Scripts\activate.bat
> +
> + The important parameter here is the -p
parameter whic=
h specifies that MdeModulePkg
> + should be built.
> +
> + The example below uses: > +
TOOL_CHAIN_TAG
parameter to specify the build=
should use VS2019
> + (Visual Studio 2019).
> + -a
parameter is used to specify that the X64
architectures
> + should be built.
> + > + OvmfPkg is considered a "platform firmware" for the > + QEMU open-sour= ce emulator. > +
> +stuart_build
instead of
> + stuart_ci_build
to compile the code
> +
> + If you want to run CI checks such as CI plugins, you can use stuart_ci_build
with the CI build file.
> +
> + OvmfPkg is considered a "platform firmware" for the > + QEMU open-sour= ce emulator. > +
> + > +stuart_build
instead of
> + stuart_ci_build
> +
> + To see what parameters are supported by this platform build file (=
at the time this page was written), we can pass
> + the --help
argument to the stuart_build
=
command:
> +
> + =E2=9D=AF stuart_build -c PlatformBuild.py --help > + usage: stuart_build [-h] [--SKIPBUILD] [--SKIPPREBUILD] [--SKIPPOS= TBUILD] [--FLASHONLY] [--FLASHROM] > + [--UPDATECONF] [--CLEAN] [--CLEANONLY] [--OUTP= UTCONFIG OUTPUTCONFIG] [-a BUILD_ARCH] > + [--build-config BUILD_CONFIG] [--verbose] > + > + options: > + -h, --help show this help message and exit > + --SKIPBUILD, --skipbuild, --SkipBuild > + Skip the build process > + --SKIPPREBUILD, --skipprebuild, --SkipPrebuild > + Skip prebuild process > + --SKIPPOSTBUILD, --skippostbuild, --SkipPostBuild > + Skip postbuild process > + --FLASHONLY, --flashonly, --FlashOnly > + Flash rom after build. > + --FLASHROM, --flashrom, --FlashRom > + Flash rom. Rom must be built previously. > + --UPDATECONF, --updateconf, --UpdateConf > + Update Conf. Builders Conf files will be r= eplaced with latest template files > + --CLEAN, --clean, --CLEAN > + Clean. Remove all old build artifacts and = intermediate files > + --CLEANONLY, --cleanonly, --CleanOnly > + Clean Only. Do clean operation and don't b= uild just exit. > + --OUTPUTCONFIG OUTPUTCONFIG, --outputconfig OUTPUTCONFIG, --Outp= utConfig OUTPUTCONFIG > + Provide shell variables in a file > + -a BUILD_ARCH, --arch BUILD_ARCH > + Optional - CSV of architecture to build. I= A32 will use IA32 for Pei & Dxe. X64 will use > + X64 for both PEI and DXE. IA32,X64 will us= e IA32 for PEI and X64 for DXE. default is > + IA32,X64 > + --build-config BUILD_CONFIG > + Provide shell variables in a file > + --verbose, --VERBOSE, -v > + verbose > + > + positional arguments: > +> +=3D - Set an env variable for the pre/p= ost build process > + BLD_*_ =3D - Set a build flag for all build ty= pes > + (key=3Dvalue will get passed to buil= d process) > + BLD_ _ =3D - Set a build flag for build type o= f > + (key=3Dvalue will get passed to buil= d process for given build type) > +
> + The --flashonly
and --flashrom
commands =
are especially useful with OvmfPkg. They
> + automatically load QEMU with the newly built firmware.
> +
> + The example below uses: > +
TOOL_CHAIN_TAG
parameter to specify that the =
build should use GCC5
> + to build with GCC.
> + -a
parameter is used to specify the IA3=
2
and X64
architectures should be
> + built.
> + --flashrom
parameter is used to load the firm=
ware in QEMU and boot QEMU after the firmware build
> + is completed.
> + > + The file BaseTools/Edk2ToolsBuild.p= y > + can be called as a standalone Python script. You just need to pass= the tool chain tag you would like to build with. > +
> +> + Example: > + python BaseTools/Edk2ToolsBuild.py -t GCC5 > +
> +
> + The NO-TARGET
build target specifies that the actual =
firmware source code should not be built for any
> + particular target and, instead, the other parts of the CI process =
will be active such as the non-compiler checks
> + (plugins).
> +
> + In the following example, the CI plugins will be run against all p= ackages supported by the > + CISettings.py file. > +
> + stuart_ci_build -c .pytool/CISettings.py -t NO-TARGET > +
> + The CI checks could be run against a single package (or a selectio=
n of packages) by passing the package names to
> + with the -p
parameter.
> +
> + Plugins are automatically discovered in the workspace by stuart. > +
> +> + The easiest way to have stuart only one run plugin if many others = are present (as is the case in edk2) is to simply > + delete the other plugin directories so they are not discovered. Yo= u can then test with the remaining plugins and > + then use git to restore the deleted plugin directories back when d= one testing. > +
> +
> + For example, to only test with the SpellCheck
plugin,=
delete every other plugin folder from
> + .pytool/Plugin in your
> + workspace.
> +
> + Run the command to only perform CI checks:
> +
> + stuart_ci_build -c .pytool/CISettings.py -t NO-TARGET
> +
> + When done, restore the other plugin directories:
> +
> + git restore .pytool/Plugin/**
> +
> + Continuous Integration > +
> +> + Continuous integration is used in edk2 to test new contributions b= efore they are merged to the edk2 main branch. > + Stuart is used within the edk2 CI process to pull build dependenci= es and build the code. > +
> +> + You can use stuart to perform the same CI checks locally that are = done on the server (see the examples section). > +
> +> + Also see EDK II Continuou= s Integration. > +
> +A collection of build related tools for edk2.
> +> + Examples: > + > +
> + Each tool has a user manual located in Ba= seTools/UserManuals. > +
> +> + A more complete list of BaseTools is located in the EDK II Tools List. > +
> +A collection of Python code for working with edk2.
> +
> + CISettings.py
is a common name given to a configurati=
on file used with Stuart for CI. It is often
> + stored in a folder named .pytools
in the root of a re=
pository. So you'll likely encounter commands
> + like the following be used with the file:
> +
> + PlatformBuild.py
is a common name given to a configur=
ation file used with Stuart for platform build.
> + It is often stored in the root directory of the package it builds.
> +
> + For example: > +
> +> + Like Stuart CI has "CI plugins", the build process has "build plug= ins". These can hook into the build in > + "pre-build" or "post-build". > +
> +> + Note: Build plugins will also run during CI if a CompilerPlugin is= present that builds the code. > +> +
stuart_ci_build
and stuart_ci_build
- Runs CI plugins. By default, ofte=
n runs CI on several packages at once. This
> + includes all of the checks needed to consider the code ready for=
integration to the mainline.
> + stuart_build
- Does not run CI plugins. Builds one =
platform. Platforms often expose
> + platform-specific parameters as defined in their PlatformB=
uild.py
file.
> + stuart_=
ci_build
do exactly?> + The Stuart CI process is composed of "CI plugins" that get discove= red in the code tree at CI time and hook into > + the CI process. Some examples of CI plugins are a host-based unit = test compile and execution, spell checking the > + code, performing markdown lint on the code, etc. Firmware (C code)= compilation is performed during CI by a compiler > + CI plugin. > +
> +
> + Each plugin reports back a pass/fail status. If any plugin fails, =
CI fails. However, plugins usually provide some
> + level of customization in a "CI package configuration file". If th=
is file is present, it is in the root of the
> + package with the naming convention PkgName.ci.yaml
. F=
or example,
> + MdePkg.ci.yaml is
> + the CI package configuration file for MdePkg
. Sometim=
es, CI plugins will allow the plugin to be set to
> + run in "audit mode" so the plugin will run and report results but =
not fail CI if errors are found. As an example,
> + some packages in edk2 currently use this file to run the spell che=
cker CI plugin in audit mode.
> +
> + The two main places to look for CI settings are: > +
> + You can pass the -v
argument to Stuart commands to ge=
t more detailed output.
> +
> + Also, look in your /Build
directory.
> +
> + Each Stuart command produces a separate file. Open the file corres= ponding to the command you're using that has the > + failure. > +
> +stuart_ci_setup
- CISETUP.txt
stuart_setup
- SETUPLOG.txt
stuart_update
- UPDATE_LOG.txt
stuart_ci_build
- CI_BUILDLOG.txt
> + stuart_build
- BUILDLOG_PACKAGENAME.txt
> + The different types of plugins supported by Stuart and details abo= ut each type are available in the > + edk2-pyt= ool-extensions Plugin Manager > + page. > +
> +> + Start in the > + edk2-pytool-extensions Use= r Documentation. > +
> +