#
#  Copyright (c) 2006, Intel Corporation
#
#  All rights reserved. This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution.  The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php

#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#  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       = EdkNt32Pkg/Nt32.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                = DEBUG

#  TARGET_ARCH           List       Optional    What kind of architecture is the binary being target for. 
#                                               One, or more, of the following, IA32, IPF, 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        = MYTOOLS

#  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