#
#  Copyright (c) 2007, Intel Corporation. All rights reserved. <BR>
#
#  This software and associated documentation (if any) is furnished
#  under a license and may only be used or copied in accordance
#  with the terms of the license. Except as permitted by such
#  license, no part of this software or documentation may be
#  reproduced, stored in a retrieval system, or transmitted in any
#  form or by any means without the express written consent of
#  Intel Corporation.    
#
#  Filename: target.template
#
#  ALL Paths are Relative to WORKSPACE

#  Separate multiple LIST entries with a SINGLE SPACE character, do not use comma characters.
#  Un-set an option by either commenting out the line, or not setting a value.

#
#  PROPERTY              Type       Use         Description
#  ----------------      --------   --------    -----------------------------------------------------------
#  ACTIVE_PLATFORM       Filename   Recommended Specify the WORKSPACE relative Path and Filename 
#                                               of the platform FPD file that will be used for the build
#                                               This line is required if and only if the current working
#                                               directory does not contain one or more FPD files.

ACTIVE_PLATFORM	       = EdkUnixPkg/Unix.fpd

#  TARGET                List       Optional    Zero or more of the following: DEBUG, RELEASE, 
#                                               UserDefined; separated by a space character.  
#                                               If the line is missing or no value is specified, all 
#                                               valid targets specified in the FPD file will attempt 
#                                               to be built.  The following line will build all platform
#                                               targets.
# TARGET                = 

#  TARGET_ARCH           List       Optional    What kind of architecture is the binary being target for. 
#                                               One, or more, of the following, IA32, IA64, X64, EBC or ARM.
#                                               Multiple values can be specified on a single line, using 
#                                               space charaters to separate the values.  These are used 
#                                               during the parsing of an FPD file, restricting the build
#                                               output target(s.)
#                                               The Build Target ARCH is determined by a logical AND of:
#                                               FPD BuildOptions: <SupportedArchitectures> tag
#                                               If not specified, then all valid architectures specified 
#                                               in the FPD file, for which tools are available, will be 
#                                               built.
#TARGET_ARCH           = 

#  TOOL_DEFINITION_FILE  Filename  Optional   Specify the name of the filename to use for specifying 
#                                             the tools to use for the build.  If not specified, 
#                                             tools_def.txt will be used for the build.  This file 
#                                             MUST be located in the WORKSPACE/Tools/Conf directory.
TOOL_CHAIN_CONF              = Tools/Conf/tools_def.txt

#  TAGNAME               List      Optional   Specify the name(s) of the tools_def.txt TagName to use.  
#                                             If not specified, all applicable TagName tools will be 
#                                             used for the build.  The list uses space character separation.
TOOL_CHAIN_TAG               = UNIXPKGCYGWINGCC

#  MULTIPLE_THREAD       FLAG      Optional   Flag to enable multi-thread build. If not specified, default
#                                             is "Disable". If your computer is multi-core or multiple CPUs, 
#                                             enabling this feature will bring much benefit. For multi-thread 
#                                             built, the log will write to ${BUILD_DIR}/build.log. 
#                                             This feature is only for PLATFORM build, and clean, cleanall or
#                                             stand-alone module build is still using the normal way. 
MULTIPLE_THREAD              = Enable

# MAX_CONCURRENT_THREAD_NUMBER  NUMBER  Optional  The number of concurrent threads. Default is 2. Recommend to 
#                                                 set this value to one more than the number of your compurter
#                                                 cores or CPUs. 
MAX_CONCURRENT_THREAD_NUMBER = 2
TARGET                       = DEBUG
TARGET_ARCH                  = 
ACTIVE_PLATFORM              = 
