Intel(R) Platform Innovation Framework for EFI
EFI Development Kit II (EDK II)
2011-12-14

Intel is a trademark or registered trademark of Intel Corporation or its
subsidiaries in the United States and other countries.
* Other names and brands may be claimed as the property of others.
Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.

EDK II packages can be checked out from the following SVN address:
https://svn.code.sf.net/p/edk2/code/trunk/edk2

The detailed introduction of these packages can be found in each package
description file. (The *.dec file under the package directory)


-------------------------------------------------------------------------------
The most recent version of the setup instructions is available on the EDK II
web-site:
  http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Step-by-step_instructions


-------------------------------------------------------------------------------
Quick Start (Windows Development Platform)
-----------

In a command prompt window, change to the top-level directory of the EDK II 
source.

Note:
  The first time the edksetup script is executed, it creates three files in the
  %WORKSPACE%\Conf directory. The files: tools_def.txt, target.txt and
  build_rule.txt, are only created if they do not exist, if they exist, they
  are not touched.

First, set up your project workspace. If you have previously initialized this
WORKSPACE, and a newer version of the *.template files in
WORKSPACE\BaseTools\Conf exists, remove the *.txt files in the WORKSPACE\Conf
directory prior to running the edksetup script.

For the reference build of the Nt32 Platform emulation environment, use the 
edksetup.bat option: --nt32. For building other platforms or modules, this
option is not required, as Visual Studio standard includes, libraries and/or
dlls are not required for normal development.

    c:\MyWork\edk2\> edksetup --nt32

The default tool chain (named MYTOOLS) is pre-configured to use VS2008 for IA32
and X64 target architectures and DDK3790 for IPF target architectures. To use a
different tool chain, either modify the tools_def.txt file's MYTOOLS entries,
or modify the %WORKSPACE%\Conf\target.txt file's TOOL_CHAIN_TAG. The pre-defined
tags are listed near the top of the %WORKSPACE%\Conf\tools_def.txt file, below
the Supported Tool Chains comment.
Alternatively, you may use the build command's -t option to specify a different
tool chain tag name: build -t VS2008 ... , for example.  Using this method will
require that you always use the build command's -t option. If you use 64-bit 
windows OS, you should use tool chain tag name with x86, such as VS2008x86.


Next, go to the module directory and begin to build.  This example is for the
HelloWorld application.

    c:\MyWork\edk2\> cd MdeModulePkg\Application\HelloWorld
    c:\MyWork\edk2\> build

If you want to build the a module in another package (for example, 
MdePkg\Library\BaseLib\BaseLib.inf), please edit the file,
%WORKSPACE%\Conf\Target.txt, first.

Change the following line
    ACTIVE_PLATFORM       = MdeModulePkg/MdeModulePkg.dsc
to
    ACTIVE_PLATFORM       = MdePkg/MdePkg.dsc

Then go to MdePkg\Library\BaseLib directory and type build:
    c:\MyWork\edk2\> cd MdePkg\Library\BaseLib
    c:\MyWork\edk2\> build

If you want build a platform, ACTIVE_PLATFORM must be set to your desired
platform dsc file, go to directory which must be not a module's directory, and
run "build" command.

Instead of changing Target.txt, you can specify platform, module and/or
architecture on command line.
For example, if you want to build NT32 platform, you can just type 

    c:\MyWork\edk2\> build -p Nt32Pkg\Nt32Pkg.dsc -a IA32

and if you want to build HelloWorld module, you can just type

    c:\MyWork\edk2\> build -p Nt32Pkg\Nt32Pkg.dsc -a IA32 -m MdeModulePkg\Application\HelloWorld\HelloWorld.inf

Other helpful command line options of build tool include "-v" and "-d".
The "-v" option is used to turn on the verbose build, which provide more
information during the build. "-d <debug level 0-9>" option is used to
turn on the debug information which is helpful debugging build tools.

For more information on build options, please try "build -h" on command line.

Note:
  The Windows style help option "/?" is not a valid option for the build
  command.


-------------------------------------------------------------------------------
Supported build targets
-----------------------

all       - Build whole platform or module. It can be ignored.
genc      - Generate AutoGen.c, AutoGen.h and <ModuleName>.depex files only.
genmake   - Generate makefiles in addition to files generated by "genc" target.
clean     - Clean intermediate files
cleanall  - Clean all generated files and directories during build, except the
            generated Makefile files (top level and module makefiles)
cleanlib  - Clean all generated files and directories during library build
run       - Launch NT32 shell (only valid for NT32 platform)

-------------------------------------------------------------------------------
Tools in Python
---------------

* Run buld tool written in Python from source
  The build tool written in Python can be executed from its source directly as
  long as you have the Python interpreter (version 2.5.4) installed. The source
  of Python code is locating at:

    https://svn.code.sf.net/p/edk2-buildtools/code/trunk/BaseTools

  where:

    build/build.py      - The entry tool of build tools

  "build.py" steps:
    1. Run "edksetup.bat"
    2. set PYTHONPATH to the local directory of above source
       (BaseTools/Source/Python)
    3. Set ACTIVE_PLATFORM in WORKSPACE\Conf
    4. Go to platform or module directory
    5. Run "<python_interpreter.exe> <python_source_dir>/build/build.py" or
       "<python_source_dir>/build/build.py" directly.

* Convert Python source to exe file
  The tools written in Python can be coverted into executable program which can
  be executed without Python interpreter. One of the conversion tools is called
  cx_Freeze, available at: 

    http://sourceforge.net/projects/cx-freeze/

  If you have installed cx_Freeze at c:\cx_Freeze-3.0.3. Use the following
  command lines to convert MyBuild.py to a Windows executable.

    set PYTHONPATH=<buildtools>\BaseTools\Source\Python
    c:\cx_Freeze-3.0.3\FreezePython.exe --include-modules=encodings.cp437,encodings.gbk,encodings.utf_16,encodings.utf_8 --install-dir=.\mybuild MyBuild.py

  The generated .exe files are put in "mybuild" subdirectory.

