From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=104.47.0.78; helo=eur01-he1-obe.outbound.protection.outlook.com; envelope-from=evan.lloyd@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0078.outbound.protection.outlook.com [104.47.0.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id C7683210BFF51 for ; Tue, 3 Jul 2018 11:55:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gHEISqNObv/ZAK1sJeORe03OSR4xa+5e9Xc9hy4Xs+w=; b=BHjSuLxi3ysEZ3dAgSVBetipKe1064HOQth0FACMCvbclpYGR+V8230mnR2zQyc+brxjv7eNqZDmJr9PKqFWDjZqiWYSX9jQ9BvjfN0U/3KobebmPbNmHBZSyc0UP48DBOuCjV8a01z9qRO8QiP7DdlVg7LO/JLvIdg6zWjZBRc= Received: from DB6PR08MB2806.eurprd08.prod.outlook.com (10.170.222.149) by DB6PR08MB2631.eurprd08.prod.outlook.com (10.175.234.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.906.24; Tue, 3 Jul 2018 18:55:20 +0000 Received: from DB6PR08MB2806.eurprd08.prod.outlook.com ([fe80::3914:1294:dd8f:bdc]) by DB6PR08MB2806.eurprd08.prod.outlook.com ([fe80::3914:1294:dd8f:bdc%4]) with mapi id 15.20.0906.026; Tue, 3 Jul 2018 18:55:20 +0000 From: Evan Lloyd To: Leif Lindholm , Chris Co CC: "edk2-devel@lists.01.org" , Ard Biesheuvel , Michael D Kinney Thread-Topic: [PATCH edk2-platforms v2 3/3] Readme.md: Add instructions to build in a Windows Environment Thread-Index: AQHUEnW3CFa3oJdkVUWnrqId/KtGd6R9SyGAgACNRVA= Date: Tue, 3 Jul 2018 18:55:20 +0000 Message-ID: References: <20180703022925.53408-1-christopher.co@microsoft.com> <20180703022925.53408-4-christopher.co@microsoft.com> <20180703102429.vdtt3iltoie3im5t@bivouac.eciton.net> In-Reply-To: <20180703102429.vdtt3iltoie3im5t@bivouac.eciton.net> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Evan.Lloyd@arm.com; x-originating-ip: [217.140.96.140] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB6PR08MB2631; 7:ZBimSfHqRSpKSS6HgLpcL8Hv8oFZ9ErG1e5gMb7w5R8PSBhufD759qaxwc4gGbq8UTm1VEXTqZTj81XbQI1cujhTxVR85ySDlaECK0MHefFkuIQXACH3mVGch/N8ZURbGfe11dGwhvDCho471goni5/UCcIB+ahLgctLzdVhxE+QVBogDu2N2mqm0goZVh6RWIBU/rw29Yi7pMhVqUgjkjzG3TUUFnbb9wL+9uNqWAFIhUQOclusaJLQJqvIbjrO x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 6b48a437-5e1f-4195-06aa-08d5e116869e x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(48565401081)(5600053)(711020)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020); SRVR:DB6PR08MB2631; x-ms-traffictypediagnostic: DB6PR08MB2631: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(28532068793085)(180628864354917)(89211679590171)(166708455590820)(223705240517415)(111885846020525)(42262312472803)(162533806227266)(5213294742642)(228905959029699); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(6072148)(201708071742011)(7699016); SRVR:DB6PR08MB2631; BCL:0; PCL:0; RULEID:; SRVR:DB6PR08MB2631; x-forefront-prvs: 0722981D2A x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(346002)(376002)(39860400002)(366004)(40434004)(13464003)(174874002)(189003)(199004)(446003)(2906002)(74316002)(305945005)(99286004)(8676002)(81156014)(81166006)(53546011)(54906003)(7736002)(6506007)(316002)(186003)(76176011)(110136005)(26005)(33656002)(53376002)(102836004)(8936002)(4326008)(3846002)(6116002)(68736007)(6246003)(53936002)(25786009)(7696005)(2900100001)(97736004)(9686003)(55016002)(5660300001)(106356001)(105586002)(14454004)(5250100002)(478600001)(72206003)(966005)(45080400002)(476003)(14444005)(486006)(86362001)(229853002)(256004)(5024004)(6436002)(1511001)(11346002)(6306002)(66066001)(460985005)(134885004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR08MB2631; H:DB6PR08MB2806.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: N+jG7fppOVadBCjM/eKsZkfQGp5QzdbEieLiQDvnC6gzp2cc+ftzb1gLlc2d7Xfeck0cjxUDMv80YJMOQTRwCr7Y83dsvFGzyqVRwAfL8a+uZKvBQwi9dZMdWkQJRfyElpdRqNPKXcd29aoYyL8V506+2GiJ7T/iF/HBbXWJIFxZ33zoXh0EZk/wPekiYRa011J1KTT3xwIvj46oWf5rT0aS5lGxsZIRn+mYc9KPPGxl7VjTUQiBglv+2HoX+rJJU6Ohu/T0Ad0Q583wvdK5636bsUHB2SlmRiUlLOsn99VqhA9wj8EBpk6Z1fgHvv++2YLdW5J3331pR/HBmZY7zMFGtwNSn6kQAOWp9JSL6dg= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b48a437-5e1f-4195-06aa-08d5e116869e X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Jul 2018 18:55:20.5889 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR08MB2631 Subject: Re: [PATCH edk2-platforms v2 3/3] Readme.md: Add instructions to build in a Windows Environment X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jul 2018 18:55:25 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Evan Lloyd Leif - would it make sense/be acceptable to add a GNU make.exe image to edk= 2-non-osi? Evan > -----Original Message----- > From: Leif Lindholm > Sent: 03 July 2018 11:24 > To: Chris Co > Cc: edk2-devel@lists.01.org; Ard Biesheuvel ; > Michael D Kinney ; Evan Lloyd > > Subject: Re: [PATCH edk2-platforms v2 3/3] Readme.md: Add instructions to > build in a Windows Environment > > Hi Christopher, > > Patches 1-2 Reviewed-by: Leif Lindholm Pushed > as 5ed298efba..df5cbc93b8 - thanks! > > In general, I'm happy enough with the below that I might just push that a= s > well, but I will give others a chance to pipe up. > (Adding Evan to cc.) > > I have one comment below. > > On Tue, Jul 03, 2018 at 02:29:38AM +0000, Chris Co wrote: > > These instructions explain how to setup a Windows build environment > > with extra instructions to build for ARM platforms using the GCC > > cross-compiler toolchain. > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Christopher Co > > Cc: Ard Biesheuvel > > Cc: Leif Lindholm > > Cc: Michael D Kinney > > --- > > Readme.md | 249 +++++++++++++++++++- > > 1 file changed, 248 insertions(+), 1 deletion(-) > > > > diff --git a/Readme.md b/Readme.md > > index 6ad5953093d6..9916db7f3a1f 100644 > > --- a/Readme.md > > +++ b/Readme.md > > @@ -190,8 +190,255 @@ $ ./uefi-tools/edk2-build.sh -b DEBUG -b > RELEASE > > > > # How To Build (Windows Environment) > > > > -(I genuinely have no idea. Please help!) > > +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 EDK= 2 > from source. > > +If you wish to build the build tools, you will also need Python 2.7 > > +for Windows and cx_Freeze. > > + > > +## 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 GNU > > +Make. These instructions will use [MinGW](http://mingw.org/) but any > > +Windows-compatible GNU Make tool will work. > > + > > +## Obtaining source code > > Ideally, we would have a single section for this, regardless of build pla= tform. > You're adding info about submodule handling here that we'd otherwise need > to duplicate to the Linux section, and keep in sync. > > / > Leif > > > +1. Create a new folder (directory) on your local development machine > > + for use as your workspace. This example uses `C:\git\tianocore`, mo= dify > as > > + appropriate for your needs. > > + > > +1. In a Windows command prompt: > > + ``` > > + > set WORKSPACE=3DC:\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. > > + > > + Note: only set the path with valid locations. If you don't use edk= 2-non- > osi, > > + do not add it to your **PACKAGES_PATH**. Otherwise, you will get > errors during build. > > + > > + `> set > > + PACKAGES_PATH=3D%WORKSPACE%\edk2;%WORKSPACE%\edk2- > platforms;%WORKSPACE > > + %\edk2-non-osi` > > + > > +### If cross-compiling with GCC > > +#### GNU Make > > +These instructions will walk through getting and setting up > > +mingw32-make.exe. You are free to use other GNU make tools if those > > +are more comfortable for you. Just make sure the GNU make is Windows- > compatible and in your PATH. > > + > > +1. Download the latest [MinGW setup > installer](https://sourceforge.net/projects/mingw/files/). > > + > > +1. Run the setup and make sure you note down the installation director= y. > > +This is where you will grab the binary tools later. > > + > > + Note: According to the > > + [MinGW Getting Started](http://mingw.org/wiki/Getting_Started), > > +do not use an installation path which contains containing spaces as > > +the spaces may be problems. > > + > > +1. Once the setup is done, launch the MinGW Installation Manager. > > + > > +1. Now you will get the **make** executable. In this case, you will > > +get **mingw32-make.exe** since this will work directly in a Windows > > +environment. In the installer, select **All Packages**. Scroll throu= gh the > list and select the packages named `mingw32-make`. > > +Specifically, you will need the `bin` class package, which contains > **mingw32-make.exe**. > > + > > +1. Go to the Installation drop down menu and `Apply Changes`. This > > +will start the download of the `mingw32-make` package into your > installation directory from earlier. > > +Once it is done, you should have a **mingw32-make.exe** and a few > > +other .dlls in `\bin` > > + > > +1. Copy the contents of the bin folder to a folder in your workspace. > > +You need to copy **mingw32-make.exe** and its associated dynamically > loaded libraries. > > + ``` > > + > mkdir %WORKSPACE%\GNUMake > > + > pushd %WORKSPACE%\GNUMake > > + > copy \bin %WORKSPACE%\GNUMake > > + > popd > > + ``` > > + > > +1. Update PATH to have GNUMake folder so you can run **mingw32- > make.exe** from anywhere. > > + > > + `> set PATH=3D%WORKSPACE%\GNUMake;%PATH%` > > + > > +1. By default, the EDK2 tools will invoke **make** and not > > +**mingw32-make**. To fix this, set **GNU_HOST_BIN** to add the > `mingw32-` prefix. > > + > > + `> set GNU_HOST_BIN=3Dmingw32-` > > + > > +#### GCC Cross Compiler > > +1. Download your desired GCC cross-compiler. For ARM32, use > > +[arm-eabi](https://releases.linaro.org/components/toolchain/binaries/ > > +latest/arm-eabi/) provided by Linaro. Make sure to download the i686 > > +mingw version. > > + > > +1. Extract the cross compiler. You can use 7-zip or Windows > > +Subsystem for Linux `tar xvf` to extract the contents to a folder. > > + > > +1. Create a new folder in your workspace and copy the contents into yo= ur > workspace. > > + ``` > > + > mkdir %WORKSPACE%\Toolchains > > + > pushd %WORKSPACE%\Toolchains > > + > copy compiler> %WORKSPACE%\Toolchains > > + > popd > > + ``` > > + > > + At this point, you should have the gcc executables in > `%WORKSPACE%\Toolchains\bin`. > > + > > +1. Update PATH to have the Toolchains\bin folder so you can run the > toolchain binaries from anywhere. > > + > > + `> set PATH=3D%WORKSPACE%\Toolchains\bin;%PATH%` > > + > > +## Manual building > > +1. Install the latest Microsoft Visual Studio from the [Visual Studio > website](https://visualstudio.microsoft.com/downloads/). > > + > > +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/BuildNot > es.txt). > > + Note that this requires Python 2.7 and cx_Freeze. > > + * To use prebuilt binaries, clone > > + [edk2-BaseTools-win32](https://github.com/tianocore/edk2-BaseTools- > win32) > > + and set **EDK_TOOLS_BIN** to point to this location. > > + ``` > > + > git clone https://github.com/tianocore/edk2-BaseTools-win32.git > > + ... > > + > set EDK_TOOLS_BIN=3D%WORKSPACE%\edk2-BaseTools-win32 > > + ``` > > + > > +1. Set **PATH** to include the location of the BaseTools. For example= : > > + > > + `> set PATH=3D%WORKSPACE%\edk2-BaseTools-win32;%PATH%` > > + > > +1. Set up the build environment (this will modify your environment > > +variables) > > + > > + `> %WORKSPACE%\edk2\edksetup.bat` > > + > > + (This step _depends_ on **WORKSPACE** being set as per above.) > > + > > + You may see a few warnings or errors: > > + * PYTHON_HOME environment variable is only needed if you plan to > build the BaseTools > > + from source in the next step. > > + * You may see warnings for NASM or CYGWIN paths not being set. > > + These could be benign depending on your build toolchain. > > + For our GCC cross-compile setup, we do not use NASM or Cygwin. > > + > > + `edksetup.bat` script will generate config files into the > `%WORKSPACE%\edk2\Conf` folder. > > + If you have made changes to your general configuration, you will ne= ed > to rerun this > > + script with the `Reconfig` argument to regenerate the files in the = Conf > folder. > > + > > +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= ) > to install the official ASL compiler. > > + > > + Note: certain Windows IoT platforms may require the Microsoft ASL > compiler. > > + The Microsoft ASL compiler (asl.exe) can be obtained from the Windo= ws > Driver Kit > > + ([WDK](https://docs.microsoft.com/en-us/windows- > hardware/drivers/download-the-wdk)). > > + It can be found in the `\tools\ arch>\ACPIVerify\` folder. > > + > > +1. Update **PATH** to include the location of the ASL compiler > > + > > + `> set PATH=3D;%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, i= t > 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 buildi= ng. > > + > > +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`. > > + > > +#### 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` > > + > > +So if we are using GCC5 cross compiler toolchain, we should set > > + > > + > set GCC5_ARM_PREFIX=3Darm-eabi- > > + > > +to prepend the **gcc** build command line with **arm-eabi-** > > + > > +### 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=3D%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**.) > > + > > +### Clean Rebuild > > +EDK2 build system will cache the build configuration in the > > +`edk2\Conf` folder when you first you invoke a build. Subsequent > > +builds will reference this cached configuration. If you make a minor > > +change to the build template, it is recommended to run: > > + > > + `> %WORKSPACE%\edk2\edksetup.bat Reconfig` > > + > > +which will regenerate the contents of `edk2\Conf` folder. > > + > > +You should also delete the output folder > > +(`%WORKSPACE%\Build\{Platform Name}\{TARGET}_{TOOL_CHAIN_TAG}`) > to remove any stale Makefiles and configurations generated during from th= e > previous build. > > > > # Supported Platforms > > > > -- > > 2.16.2.gvfs.1.33.gf5370f1 > > IMPORTANT NOTICE: The contents of this email and any attachments are confid= ential and may also be privileged. If you are not the intended recipient, p= lease notify the sender immediately and do not disclose the contents to any= other person, use it for any purpose, or store or copy the information in = any medium. Thank you.