public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Leif Lindholm <leif.lindholm@linaro.org>
To: Chris Co <Christopher.Co@microsoft.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Michael D Kinney <michael.d.kinney@intel.com>
Subject: Re: [PATCH edk2-platforms v1 1/1] Readme: Add instructions to build in a Windows Environment
Date: Fri, 29 Jun 2018 11:52:35 +0100	[thread overview]
Message-ID: <20180629105235.4hyiywrkhw3lodar@bivouac.eciton.net> (raw)
In-Reply-To: <20180629034227.26568-2-christopher.co@microsoft.com>

On Fri, Jun 29, 2018 at 03:42:37AM +0000, Chris Co wrote:
> These instructions detail how to setup a Windows build environment
> and build for ARM platforms using the GCC cross-compiler toolchain.

Hi Chris,

This patch doesn't add Windows instructions - it deletes everything,
then adds everything back (now with Windows instructions).

Presumably this is because I messed up when I added the original, and
you've converted the line-endings to CRLF.
This is all good, but please submit the conversion as a separate
preceding patch so that we can actually tell which bits of
documentation you've added/modified and which remain unchanged.

/
    Leif

> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Christopher Co <christopher.co@microsoft.com>
> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> Cc: Leif Lindholm <leif.lindholm@linaro.org>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> ---
>  Readme.md | 614 ++++++++++++--------
>  1 file changed, 387 insertions(+), 227 deletions(-)
> 
> diff --git a/Readme.md b/Readme.md
> index 3104144634b9..c9f2af9a6948 100644
> --- a/Readme.md
> +++ b/Readme.md
> @@ -1,227 +1,387 @@
> -This branch holds all platforms actively maintained against the
> -[edk2](https://github.com/tianocore/edk2) master branch.
> -
> -For generic information about the edk2-platforms repository, and the process
> -under which _stable_ and _devel_ branches can be added for individual platforms,
> -please see
> -[the introduction on the about branch](https://github.com/tianocore/edk2-platforms/blob/about/Readme.md).
> -
> -# INDEX
> -* [Overview](#overview)
> -* [How To Build (Linux Environment)](#how-to-build-linux-environment)
> -   * [Manual building](#manual-building)
> -   * [Using uefi-tools helper scripts](#using-uefi-tools-helper-scripts)
> -* [How To Build (Windows Environment)](#how-to-build-windows-environment)
> -* [Supported Platforms](#supported-platforms)
> -* [Maintainers](#maintainers)
> -
> -# Overview
> -
> -Platform description files can be found under `Platform/{Vendor}/{Platform}`.
> -
> -Many platforms require additional image processing beyond the EDK2 build.
> -Any such steps should be documented (as a Readme.md), and any necessary helper
> -scripts be contained, under said platform directory.
> -
> -Any contributions to this branch should be submitted via email to the
> -edk2-devel mailing list with a subject prefix of `[platforms]`. See
> -[Laszlo's excellent guide](https://github.com/tianocore/tianocore.github.io/wiki/Laszlo's-unkempt-git-guide-for-edk2-contributors-and-maintainers) for details
> -on how to do this successfully.
> -
> -# How to build (Linux Environment)
> -
> -## Prerequisites
> -The build tools themselves depend on Python (2) and libuuid. Most Linux systems
> -will come with a Python environment installed by default, but you usually need
> -to install uuid-dev (or uuid-devel, depending on distribution) manually.
> -
> -## If cross compiling
> -If building EDK2 for a different archtecture than the build machine, you need to
> -obtain an appropriate cross-compiler. X64 (x86_64) compilers also support IA32,
> -but the reverse may not always be true.
> -
> -Target architecture | Cross compilation prefix
> ---------------------|-------------------------
> -AARCH64             | aarch64-linux-gnu-
> -ARM                 | arm-linux-gnueabihf-
> -IA32                | i?86-linux-gnu-* _or_ x86_64-linux-gnu-
> -IPF                 | ia64-linux-gnu
> -X64                 | x86_64-linux-gnu-
> -
> -\* i386, i486, i586 or i686
> -
> -### GCC
> -Linaro provides GCC toolchains for
> -[aarch64-linux-gnu](https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/)
> -and [arm-linux-gnueabihf](https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/)
> -compiled to run on x86_64/i686 Linux and i686 Windows. Some Linux distributions
> -provide their own packaged cross-toolchains.
> -
> -### clang
> -Clang does not require separate cross compilers, but it does need a
> -target-specific binutils. These are included with any prepackaged GCC toolchain
> -(see above), or can be installed or built separately.
> -
> -## Obtaining source code
> -1. Create a new folder (directory) on your local development machine
> -   for use as your workspace. This example uses `/work/git/tianocore`, modify as
> -   appropriate for your needs.
> -   ```
> -   $ export WORKSPACE=/work/git/tianocore
> -   $ mkdir -p $WORKSPACE
> -   $ cd $WORKSPACE
> -   ```
> -
> -1. Into that folder, clone:
> -   1. [edk2](https://github.com/tianocore/edk2)
> -   1. [edk2-platforms](https://github.com/tianocore/edk2-platforms)
> -   1. [edk2-non-osi](https://github.com/tianocore/edk2-non-osi) (if building
> -      platforms that need it)
> -   ```
> -   $ git clone https://github.com/tianocore/edk2.git
> -   ...
> -   $ git clone https://github.com/tianocore/edk2-platforms.git
> -   ...
> -   $ git clone https://github.com/tianocore/edk2-non-osi.git
> -   ```
> -
> -1. Set up a **PACKAGES_PATH** to point to the locations of these three
> -   repositories:
> -
> -   `$ export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi`
> -
> -## Manual building
> -
> -1. Set up the build environment (this will modify your environment variables)
> -
> -   `$ . edk2/edksetup.sh`
> -
> -   (This step _depends_ on **WORKSPACE** being set as per above.)
> -1. Build BaseTools
> -
> -   `make -C edk2/BaseTools`
> -
> -   (BaseTools can currently not be built in parallel, so do not specify any `-j`
> -   option, either on the command line or in a **MAKEFLAGS** environment
> -   variable.)
> -
> -### Build options
> -There are a number of options that can (or must) be specified at the point of
> -building. Their default values are set in `edk2/Conf/target.txt`. If we are
> -working only on a single platform, it makes sense to just update this file.
> -
> -target.txt option | command line | Description
> -------------------|--------------|------------
> -ACTIVE_PLATFORM   | `-p`         | Description file (.dsc) of platform.
> -TARGET            | `-b`         | One of DEBUG, RELEASE or NOOPT.
> -TARGET_ARCH       | `-a`         | Architecture to build for.
> -TOOL_CHAIN_TAG    | `-t`         | Toolchain profile to use for building.
> -
> -There is also MAX_CONCURRENT_THREAD_NUMBER (`-n`), roughly equivalent to
> -`make -j`.
> -
> -When specified on command line, `-b` can be repeated multiple times in order to
> -build multiple targets sequentially.
> -
> -After a successful build, the resulting images can be found in
> -`Build/{Platform Name}/{TARGET}_{TOOL_CHAIN_TAG}/FV`.
> -
> -### Build a platform
> -The main build process _can_ run in parallel - so figure out how many threads we
> -have available.
> -
> -```
> -$ getconf _NPROCESSORS_ONLN
> -8
> -```
> -OK, so we have 8 CPUs - let's tell the build to use a little more than that:
> -```
> -$ NUM_CPUS=$((`getconf _NPROCESSORS_ONLN` + 2))
> -```
> -For the toolchain tag, use GCC5 for gcc version 5 or later, GCC4x for
> -earlier versions, or CLANG35/CLANG38 as appropriate when building with clang.
> -```
> -$ build -n $NUM_CPUS -a AARCH64 -t GCC5 -p Platform/ARM/JunoPkg/ArmJuno.dsc
> -```
> -(Note that the description file gets resolved by the build command through
> -searching in all locations specified in **PACKAGES_PATH**.)
> -
> -#### If cross-compiling
> -When cross-compiling, or building with a different version of the compiler than
> -the default `gcc` or `clang`(/binutils), we additionally need to inform the
> -build command which toolchain to use. We do this by setting the environment
> -variable `{TOOL_CHAIN_TAG}_{TARGET_ARCH}_PREFIX` - in the case above,
> -**GCC5_AARCH64_PREFIX**.
> -
> -So, referring to the cross compiler toolchain table above, we should prepend the `build` command line with `GCC5_AARCH64_PREFIX=aarch64-linux-gnu-`.
> -
> -## Using uefi-tools helper scripts
> -uefi-tools is a completely unofficial set of helper-scripts developed by Linaro.
> -They automate figuring out all of the manual options above, and store the paths
> -to platform description files in a separate configuration file. Additionally,
> -they simplify bulk-building large numbers of platforms.
> -
> -The (best effort) intent is to keep this configuration up to date with all
> -platforms that exist in the edk2-platforms master branch.
> -
> -The equivalent of the manual example above would be
> -```
> -$ git clone https://git.linaro.org/uefi/uefi-tools.git
> -...
> -$ ./uefi-tools/edk2-build.sh juno
> -...
> -------------------------------------------------------------
> -                         aarch64 Juno (AARCH64) RELEASE	pass
> -------------------------------------------------------------
> -pass	1
> -fail	0
> -```
> -The build finishes with a summary of which platforms/targets were built, which
> -succeeded and which failed (and the total number of either).
> -
> -Like the `build` command itself, `edk2-build.sh` it supports specifying multiple
> -targets on a single command line, but it also lets you specify multiple
> -platforms (or `all` for building all known platforms). So in order to build all
> -platforms described by the configuration file, for both DEBUG and RELEASE
> -targets:
> -```
> -$ ./uefi-tools/edk2-build.sh -b DEBUG -b RELEASE
> -```
> -
> -# How To Build (Windows Environment)
> -
> -(I genuinely have no idea. Please help!)
> -
> -
> -# Supported Platforms
> -
> -These are the platforms currently supported by this tree - grouped by
> -Processor/SoC vendor, rather than platform vendor.
> -
> -If there are any additional build steps beyond the generic ones listed above,
> -they will be documented with the platform.
> -
> -## AMD
> -* [Cello](Platform/LeMaker/CelloBoard)
> -* [Overdrive](Platform/AMD/OverdriveBoard)
> -* [Overdrive 1000](Platform/SoftIron/Overdrive1000Board)
> -
> -## ARM
> -* [Juno](Platform/ARM/JunoPkg)
> -* [Versatile Express](Platform/ARM/VExpressPkg)
> -
> -## Hisilicon
> -* [D02](Platform/Hisilicon/D02)
> -* [D03](Platform/Hisilicon/D03)
> -* [D05](Platform/Hisilicon/D05)
> -* [HiKey](Platform/Hisilicon/HiKey)
> -
> -## Marvell
> -* [Armada 70x0](Platform/Marvell/Armada)
> -
> -## Socionext
> -* [SynQuacer](Platform/Socionext/DeveloperBox)
> -
> -# Maintainers
> -
> -See [Maintainers.txt](Maintainers.txt).
> +This branch holds all platforms actively maintained against the
> +[edk2](https://github.com/tianocore/edk2) master branch.
> +
> +For generic information about the edk2-platforms repository, and the process
> +under which _stable_ and _devel_ branches can be added for individual platforms,
> +please see
> +[the introduction on the about branch](https://github.com/tianocore/edk2-platforms/blob/about/Readme.md).
> +
> +# INDEX
> +* [Overview](#overview)
> +* [How To Build (Linux Environment)](#how-to-build-linux-environment)
> +   * [Manual building](#manual-building)
> +   * [Using uefi-tools helper scripts](#using-uefi-tools-helper-scripts)
> +* [How To Build (Windows Environment)](#how-to-build-windows-environment)
> +* [Supported Platforms](#supported-platforms)
> +* [Maintainers](#maintainers)
> +
> +# Overview
> +
> +Platform description files can be found under `Platform/{Vendor}/{Platform}`.
> +
> +Many platforms require additional image processing beyond the EDK2 build.
> +Any such steps should be documented (as a Readme.md), and any necessary helper
> +scripts be contained, under said platform directory.
> +
> +Any contributions to this branch should be submitted via email to the
> +edk2-devel mailing list with a subject prefix of `[platforms]`. See
> +[Laszlo's excellent guide](https://github.com/tianocore/tianocore.github.io/wiki/Laszlo's-unkempt-git-guide-for-edk2-contributors-and-maintainers) for details
> +on how to do this successfully.
> +
> +# How to build (Linux Environment)
> +
> +## Prerequisites
> +The build tools themselves depend on Python (2) and libuuid. Most Linux systems
> +will come with a Python environment installed by default, but you usually need
> +to install uuid-dev (or uuid-devel, depending on distribution) manually.
> +
> +## If cross compiling
> +If building EDK2 for a different archtecture than the build machine, you need to
> +obtain an appropriate cross-compiler. X64 (x86_64) compilers also support IA32,
> +but the reverse may not always be true.
> +
> +Target architecture | Cross compilation prefix
> +--------------------|-------------------------
> +AARCH64             | aarch64-linux-gnu-
> +ARM                 | arm-linux-gnueabihf-
> +IA32                | i?86-linux-gnu-* _or_ x86_64-linux-gnu-
> +IPF                 | ia64-linux-gnu
> +X64                 | x86_64-linux-gnu-
> +
> +\* i386, i486, i586 or i686
> +
> +### GCC
> +Linaro provides GCC toolchains for
> +[aarch64-linux-gnu](https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/)
> +and [arm-linux-gnueabihf](https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/)
> +compiled to run on x86_64/i686 Linux and i686 Windows. Some Linux distributions
> +provide their own packaged cross-toolchains.
> +
> +### clang
> +Clang does not require separate cross compilers, but it does need a
> +target-specific binutils. These are included with any prepackaged GCC toolchain
> +(see above), or can be installed or built separately.
> +
> +## Obtaining source code
> +1. Create a new folder (directory) on your local development machine
> +   for use as your workspace. This example uses `/work/git/tianocore`, modify as
> +   appropriate for your needs.
> +   ```
> +   $ export WORKSPACE=/work/git/tianocore
> +   $ mkdir -p $WORKSPACE
> +   $ cd $WORKSPACE
> +   ```
> +
> +1. Into that folder, clone:
> +   1. [edk2](https://github.com/tianocore/edk2)
> +   1. [edk2-platforms](https://github.com/tianocore/edk2-platforms)
> +   1. [edk2-non-osi](https://github.com/tianocore/edk2-non-osi) (if building
> +      platforms that need it)
> +   ```
> +   $ git clone https://github.com/tianocore/edk2.git
> +   ...
> +   $ git clone https://github.com/tianocore/edk2-platforms.git
> +   ...
> +   $ git clone https://github.com/tianocore/edk2-non-osi.git
> +   ```
> +
> +1. Set up a **PACKAGES_PATH** to point to the locations of these three
> +   repositories:
> +
> +   `$ export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi`
> +
> +## Manual building
> +
> +1. Set up the build environment (this will modify your environment variables)
> +
> +   `$ . edk2/edksetup.sh`
> +
> +   (This step _depends_ on **WORKSPACE** being set as per above.)
> +1. Build BaseTools
> +
> +   `make -C edk2/BaseTools`
> +
> +   (BaseTools can currently not be built in parallel, so do not specify any `-j`
> +   option, either on the command line or in a **MAKEFLAGS** environment
> +   variable.)
> +
> +### Build options
> +There are a number of options that can (or must) be specified at the point of
> +building. Their default values are set in `edk2/Conf/target.txt`. If we are
> +working only on a single platform, it makes sense to just update this file.
> +
> +target.txt option | command line | Description
> +------------------|--------------|------------
> +ACTIVE_PLATFORM   | `-p`         | Description file (.dsc) of platform.
> +TARGET            | `-b`         | One of DEBUG, RELEASE or NOOPT.
> +TARGET_ARCH       | `-a`         | Architecture to build for.
> +TOOL_CHAIN_TAG    | `-t`         | Toolchain profile to use for building.
> +
> +There is also MAX_CONCURRENT_THREAD_NUMBER (`-n`), roughly equivalent to
> +`make -j`.
> +
> +When specified on command line, `-b` can be repeated multiple times in order to
> +build multiple targets sequentially.
> +
> +After a successful build, the resulting images can be found in
> +`Build/{Platform Name}/{TARGET}_{TOOL_CHAIN_TAG}/FV`.
> +
> +### Build a platform
> +The main build process _can_ run in parallel - so figure out how many threads we
> +have available.
> +
> +```
> +$ getconf _NPROCESSORS_ONLN
> +8
> +```
> +OK, so we have 8 CPUs - let's tell the build to use a little more than that:
> +```
> +$ NUM_CPUS=$((`getconf _NPROCESSORS_ONLN` + 2))
> +```
> +For the toolchain tag, use GCC5 for gcc version 5 or later, GCC4x for
> +earlier versions, or CLANG35/CLANG38 as appropriate when building with clang.
> +```
> +$ build -n $NUM_CPUS -a AARCH64 -t GCC5 -p Platform/ARM/JunoPkg/ArmJuno.dsc
> +```
> +(Note that the description file gets resolved by the build command through
> +searching in all locations specified in **PACKAGES_PATH**.)
> +
> +#### If cross-compiling
> +When cross-compiling, or building with a different version of the compiler than
> +the default `gcc` or `clang`(/binutils), we additionally need to inform the
> +build command which toolchain to use. We do this by setting the environment
> +variable `{TOOL_CHAIN_TAG}_{TARGET_ARCH}_PREFIX` - in the case above,
> +**GCC5_AARCH64_PREFIX**.
> +
> +So, referring to the cross compiler toolchain table above, we should prepend the `build` command line with `GCC5_AARCH64_PREFIX=aarch64-linux-gnu-`.
> +
> +## Using uefi-tools helper scripts
> +uefi-tools is a completely unofficial set of helper-scripts developed by Linaro.
> +They automate figuring out all of the manual options above, and store the paths
> +to platform description files in a separate configuration file. Additionally,
> +they simplify bulk-building large numbers of platforms.
> +
> +The (best effort) intent is to keep this configuration up to date with all
> +platforms that exist in the edk2-platforms master branch.
> +
> +The equivalent of the manual example above would be
> +```
> +$ git clone https://git.linaro.org/uefi/uefi-tools.git
> +...
> +$ ./uefi-tools/edk2-build.sh juno
> +...
> +------------------------------------------------------------
> +                         aarch64 Juno (AARCH64) RELEASE pass
> +------------------------------------------------------------
> +pass    1
> +fail    0
> +```
> +The build finishes with a summary of which platforms/targets were built, which
> +succeeded and which failed (and the total number of either).
> +
> +Like the `build` command itself, `edk2-build.sh` it supports specifying multiple
> +targets on a single command line, but it also lets you specify multiple
> +platforms (or `all` for building all known platforms). So in order to build all
> +platforms described by the configuration file, for both DEBUG and RELEASE
> +targets:
> +```
> +$ ./uefi-tools/edk2-build.sh -b DEBUG -b RELEASE
> +```
> +
> +# How To Build (Windows Environment)
> +
> +These instructions will be a summary of the
> +[Windows Systems wiki entry](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems).
> +The wiki entry is targeted towards using the Visual Studio compiler.  The
> +instructions below will have some extra steps if you are cross-compiling with GCC.
> +
> +## Prerequisites
> +You will need Git for Windows and Visual Studio installed to build EDK2 from source.
> +If you wish to build the build tools, you will also need Python 2.7 for Windows
> +and CxFreeze.
> +
> +## If cross compiling
> +If building EDK2 for a different architecture than the build machine, you need to
> +obtain an appropriate cross-compiler. X64 (x86_64) compilers also support IA32,
> +but the reverse may not always be true.
> +
> +Target architecture | Cross compilation prefix
> +--------------------|-------------------------
> +ARM                 | arm-eabi-
> +
> +### GCC
> +Linaro provides a Windows-compatible GCC toolchain for [arm-eabi](https://releases.linaro.org/components/toolchain/binaries/latest/arm-eabi/)
> +compiled to run on x86_64/i686 Windows.  Select the i686 mingw32 variant.
> +
> +To use the GCC toolchain, you will also need a Windows-compatible GCC environment
> +like [MinGW](http://mingw.org/).  Specifically you will need the GNU make tool.
> +
> +## Obtaining source code
> +1. Create a new folder (directory) on your local development machine
> +   for use as your workspace. This example uses `C:\git\tianocore`, modify as
> +   appropriate for your needs.
> +
> +1. In a Windows command prompt:
> +   ```
> +   > set WORKSPACE=C:\git\tianocore
> +   > mkdir %WORKSPACE%
> +   > cd %WORKSPACE%
> +   ```
> +
> +1. Into that folder, clone:
> +   1. [edk2](https://github.com/tianocore/edk2)
> +   1. [edk2-platforms](https://github.com/tianocore/edk2-platforms)
> +   1. [edk2-non-osi](https://github.com/tianocore/edk2-non-osi) (if building
> +      platforms that need it)
> +   ```
> +   > git clone https://github.com/tianocore/edk2.git
> +   ...
> +   > git clone https://github.com/tianocore/edk2-platforms.git
> +   ...
> +   > git clone https://github.com/tianocore/edk2-non-osi.git
> +   ```
> +
> +1. Clone submodules
> +    ```
> +    > pushd edk2
> +    > git submodule update --init --recursive
> +    > popd
> +    ```
> +
> +1. Set up a **PACKAGES_PATH** to point to the locations of these three
> +   repositories:
> +
> +   `> set PACKAGES_PATH=%WORKSPACE%/edk2;%WORKSPACE%/edk2-platforms;%WORKSPACE%/edk2-non-osi`
> +
> +### If cross-compiling with GCC
> +1. Download [MinGW](http://mingw.org/) and get the **make** executable.  Copy
> +make.exe and any library dependencies to a folder in your workspace.
> +    ```
> +    > mkdir %WORKSPACE%\MinGW
> +    > pushd %WORKSPACE%\MinGW
> +    ... copy make.exe and any library dependencies into MinGW folder ...
> +    > popd
> +    ```
> +(Note sometimes the MinGW installer prepends **mingw32-** before **make.exe**.
> +You should rename the exe to make before proceeding.)
> +
> +1. Download your GCC cross-compiler and place it in your workspace
> +    ```
> +    > mkdir %WORKSPACE%\Toolchains
> +    > pushd %WORKSPACE%\Toolchains
> +    ... copy GCC cross-compiler into Toolchains folder ...
> +    > popd
> +    ```
> +
> +## Manual building
> +1. Set up the build environment (this will modify your environment variables)
> +
> +   `> edk2\edk2setup.bat`
> +
> +   (This step _depends_ on **WORKSPACE** being set as per above.)
> +
> +1. Get the BaseTools.  You can either build them from source or fetch prebuilt binaries.
> +    * To build from source, follow the Windows instructions found [here](https://github.com/tianocore/edk2/blob/master/BaseTools/BuildNotes.txt).
> +    * To use prebuilt binaries, clone
> +    [edk2-BaseTools-win32](https://github.com/tianocore/edk2-BaseTools-win32)
> +    and set **EDK_TOOLS_DIR** to point to this location.
> +    ```
> +    > git clone https://github.com/tianocore/edk2-BaseTools-win32.git
> +    ...
> +    > set EDK_TOOLS_DIR=%WORKSPACE%/edk2-BaseTools-win32
> +    ```
> +
> +1. Install the ASL compiler (if necessary) for your platform. Follow
> +the instructions found [here](https://github.com/tianocore/tianocore.github.io/wiki/Asl-Setup).
> +
> +### If cross-compiling with GCC
> +1. Set **PATH** to include the location of your MinGW make executable and cross-compiling toolchain bin folder.
> +
> +    `> set PATH=%WORKSPACE%\MinGW;%WORKSPACE%\Toolchains\<Cross Compiler>\bin;%PATH%`
> +
> +### Build options
> +There are a number of options that can (or must) be specified at the point of
> +building. Their default values are set in `edk2\Conf\target.txt`. If we are
> +working only on a single platform, it makes sense to just update this file.
> +
> +target.txt option | command line | Description
> +------------------|--------------|------------
> +ACTIVE_PLATFORM   | `-p`         | Description file (.dsc) of platform.
> +TARGET            | `-b`         | One of DEBUG, RELEASE or NOOPT.
> +TARGET_ARCH       | `-a`         | Architecture to build for.
> +TOOL_CHAIN_TAG    | `-t`         | Toolchain profile to use for building.
> +
> +There is also MAX_CONCURRENT_THREAD_NUMBER (`-n`), roughly equivalent to
> +`make -j`.
> +
> +When specified on command line, `-b` can be repeated multiple times in order to
> +build multiple targets sequentially.
> +
> +After a successful build, the resulting images can be found in
> +`%WORKSPACE%\Build\{Platform Name}\{TARGET}_{TOOL_CHAIN_TAG}\FV`.
> +
> +### Build a platform
> +The main build process _can_ run in parallel - so figure out how many threads we
> +have available.
> +
> +```
> +> echo %NUMBER_OF_PROCESSORS%
> +8
> +```
> +OK, so we have 8 CPUs - let's tell the build to use a little more than that:
> +```
> +> set /A NUM_CPUS=%NUMBER_OF_PROCESSORS%+2
> +```
> +For the toolchain tag, select a toolchain that is compatible with building in a Windows Environment. Search for 'Supported Tool Chains' in tools_def.txt to see the valid options for `TOOL_CHAIN_TAG`.  If using Visual Studio Compiler, consult the
> +[VS Toolchain Matrix](https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems-ToolChain-Matrix)
> +to determine the proper VS `TOOL_CHAIN_TAG`.
> +
> +```
> +> build -n %NUM_CPUS% -a ARM -t GCC5 -p Platform/NXP/SABRESD_IMX6Q_1GB/SABRESD_IMX6Q_1GB.dsc
> +```
> +
> +(Note that the description file gets resolved by the build command through
> +searching in all locations specified in **PACKAGES_PATH**.)
> +
> +#### If cross-compiling
> +When cross-compiling, we additionally need to inform the
> +build command which toolchain to use. We do this by setting the environment
> +variable `{TOOL_CHAIN_TAG}_{TARGET_ARCH}_PREFIX` - in the case above,
> +**GCC5_ARM_PREFIX**.
> +
> +So, referring to the cross compiler toolchain table above, we should prepend the `build` command line with
> +
> +    > set GCC5_ARM_PREFIX=arm-eabi-
> +
> +# Supported Platforms
> +
> +These are the platforms currently supported by this tree - grouped by
> +Processor/SoC vendor, rather than platform vendor.
> +
> +If there are any additional build steps beyond the generic ones listed above,
> +they will be documented with the platform.
> +
> +## AMD
> +* [Cello](Platform/LeMaker/CelloBoard)
> +* [Overdrive](Platform/AMD/OverdriveBoard)
> +* [Overdrive 1000](Platform/SoftIron/Overdrive1000Board)
> +
> +## ARM
> +* [Juno](Platform/ARM/JunoPkg)
> +* [Versatile Express](Platform/ARM/VExpressPkg)
> +
> +## Hisilicon
> +* [D02](Platform/Hisilicon/D02)
> +* [D03](Platform/Hisilicon/D03)
> +* [D05](Platform/Hisilicon/D05)
> +* [HiKey](Platform/Hisilicon/HiKey)
> +
> +## Marvell
> +* [Armada 70x0](Platform/Marvell/Armada)
> +
> +## Socionext
> +* [SynQuacer](Platform/Socionext/DeveloperBox)
> +
> +# Maintainers
> +
> +See [Maintainers.txt](Maintainers.txt).
> -- 
> 2.16.2.gvfs.1.33.gf5370f1
> 


      reply	other threads:[~2018-06-29 10:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-29  3:42 [PATCH edk2-platforms v1 0/1]Readme: Add instructions to build in a Windows Environment Chris Co
2018-06-29  3:42 ` [PATCH edk2-platforms v1 1/1] Readme: " Chris Co
2018-06-29 10:52   ` Leif Lindholm [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180629105235.4hyiywrkhw3lodar@bivouac.eciton.net \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox