| 2012/03/30 - Mark Hatle <mark.hatle@windriver.com> |
| - Initial Revision |
| |
| |
| Introduction |
| ============ |
| The individual CPU, and ABI tunings are contained in this directory. A |
| number of local and global variables are used to control the way the |
| tunings are setup and how they work together to specify an optimized |
| configuration. |
| |
| The following is brief summary of the generic components that are used |
| in these tunings. |
| |
| AVAILTUNES - This is a list of all of the tuning definitions currently |
| available in the system. Not all tunes in this list may be compatible |
| with the machine configuration, or each other in a multilib |
| configuration. Each tuning file can add to this list using "+=", but |
| should never replace the list using "=". |
| |
| DEFAULTTUNE - This specifies the tune to use for a particular build. |
| Each tune should specify a reasonable default, which can be overriden by |
| a machine or multilib configuration. The specified tune must be listed |
| in the AVAILTUNES. |
| |
| TUNEVALID[feature] - The <feature> is defined with a human readable |
| explanation for what it does. All architectural, cpu, abi, etc tuning |
| features must be defined using TUNEVALID. |
| |
| TUNECONFLICTS[feature] - A list of features which conflict with <feature>. |
| New sanity checks will try to reject combinations in which a single |
| tuning ends up with features which conflict with each other. |
| |
| TUNE_FEATURES - This is automatically defined as TUNE_FEATURES:tune-<tune>. |
| See TUNE_FEATURES:tune-<tune> for more information. |
| |
| TUNE_FEATURES:tune-<tune> - Specify the features used to describe a |
| specific tune. This is a list of features that a tune support, each |
| feature must be in the TUNEVALID list. Note: the tune and a given |
| feature name may be the same, but they have different purposes. Only |
| features may be used to change behavior, while tunes are used to |
| describe an overall set of features. |
| |
| ABIEXTENSION - An ABI extension may be specified by a specific feature |
| or other tuning setting, such as TARGET_FPU. Any ABI extensions either |
| need to be defined in the architectures base arch file, i.e. |
| ABIEXTENSION = "eabi" in the arm case, or appended to in specific tune |
| files with a ".=". Spaces are not allowed in this variable. |
| |
| TUNE_CCARGS - Setup the cflags based on the TUNE_FEATURES settings. |
| These should be additive when defined using "+=". All items in this |
| list should be dynamic! i.e. |
| ${@bb.utils.contains("TUNE_FEATURES", "feature", "cflag", "!cflag", d)} |
| |
| TUNE_ARCH - The GNU canonical arch for a specific architecture. i.e. |
| arm, armeb, mips, mips64, etc. This value is used by bitbake to setup |
| configure. TUNE_ARCH definitions are specific to a given architecture. |
| They may be a single static definition, or may be dynamically adjusted. |
| See each architecture's README for details for that CPU family. |
| |
| TUNE_PKGARCH - The package architecture used by the packaging systems to |
| define the architecture, abi and tuning of a particular package. |
| Similarly to TUNE_ARCH, the definition of TUNE_PKGARCH is specific to |
| each architecture. See each architectures README for details for that |
| CPU family. |
| |
| PACKAGE_EXTRA_ARCHS - Lists all runtime compatible package |
| architectures. By default this is equal to |
| PACKAGE_EXTRA_ARCHS:tune-<tune>. If an architecture deviates from the |
| default it will be listed in the architecture README. |
| |
| PACKAGE_EXTRA_ARCHS:tune-<tune> - List all of the package architectures |
| that are compatible with this specific tune. The package arch of this |
| tune must be in the list. |
| |
| TARGET_FPU - The FPU setting for a given tune, hard (generate floating |
| point instructions), soft (generate internal gcc calls), "other" |
| architecture specific floating point. This is synchronized with the |
| compiler and other toolchain items. This should be dynamically |
| configured in the same way that TUNE_CCARGS is. |
| |
| BASE_LIB:tune-<tune> - The "/lib" location for a specific ABI. This is |
| used in a multilib configuration to place the libraries in the correct, |
| non-conflicting locations. |
| |
| |
| Best Practice |
| ============= |
| The tune infrastructure is designed to be hierarchical. When writing a |
| new tune file for a "fast-forward" CPU architecture (one that supports |
| everything from a previous generation), it is recommended to require the |
| previous generation tune file and specify PACKAGE_EXTRA_ARCHS using the |
| previous generation's override and appending the new tune. Note that |
| only one previous tune file should be included to avoid mutiple includes |
| of the base arch which could lead to a broken configuration due to |
| multiple prepend and append assignments. |
| |
| For example, for x86, there is a common x86/arch-x86.inc which is |
| included in the base i586 tune file. The core2 tune builds |
| on that, and corei7 builds on core2. |