public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH edk2-platforms v1 0/1]Readme: Add instructions to build in a Windows Environment
@ 2018-06-29  3:42 Chris Co
  2018-06-29  3:42 ` [PATCH edk2-platforms v1 1/1] Readme: " Chris Co
  0 siblings, 1 reply; 3+ messages in thread
From: Chris Co @ 2018-06-29  3:42 UTC (permalink / raw)
  To: edk2-devel@lists.01.org; +Cc: Ard Biesheuvel, Leif Lindholm, Michael D Kinney

REF: https://github.com/christopherco/edk2-platforms/tree/win_build_doc_v1

These instructions detail how to setup a Windows build environment
and build for ARM platforms using the GCC cross-compiler toolchain.

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>

Christopher Co (1):
  Readme: Add instructions to build in a Windows Environment

 Readme.md | 614 ++++++++++++--------
 1 file changed, 387 insertions(+), 227 deletions(-)

-- 
2.16.2.gvfs.1.33.gf5370f1



^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH edk2-platforms v1 1/1] Readme: Add instructions to build in a Windows Environment
  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 ` Chris Co
  2018-06-29 10:52   ` Leif Lindholm
  0 siblings, 1 reply; 3+ messages in thread
From: Chris Co @ 2018-06-29  3:42 UTC (permalink / raw)
  To: edk2-devel@lists.01.org; +Cc: Ard Biesheuvel, Leif Lindholm, Michael D Kinney

These instructions detail how to setup a Windows build environment
and build for ARM platforms using the GCC cross-compiler toolchain.

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



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH edk2-platforms v1 1/1] Readme: Add instructions to build in a Windows Environment
  2018-06-29  3:42 ` [PATCH edk2-platforms v1 1/1] Readme: " Chris Co
@ 2018-06-29 10:52   ` Leif Lindholm
  0 siblings, 0 replies; 3+ messages in thread
From: Leif Lindholm @ 2018-06-29 10:52 UTC (permalink / raw)
  To: Chris Co; +Cc: edk2-devel@lists.01.org, Ard Biesheuvel, Michael D Kinney

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
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-06-29 10:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox