#!/bin/bash # Copyright (c) 2012 Wind River Systems, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Global vars cache_dir= confirm= fsym= total_deleted=0 verbose= debug=0 usage () { cat << EOF Welcome to sstate cache management utilities. sstate-cache-management.sh <OPTION> Options: -h, --help Display this help and exit. --cache-dir=<sstate cache dir> Specify sstate cache directory, will use the environment variable SSTATE_CACHE_DIR if it is not specified. --extra-archs=<arch1>,<arch2>...<archn> Specify list of architectures which should be tested, this list will be extended with native arch, allarch and empty arch. The script won't be trying to generate list of available archs from AVAILTUNES in tune files. --extra-layer=<layer1>,<layer2>...<layern> Specify the layer which will be used for searching the archs, it will search the meta and meta-* layers in the top dir by default, and will search meta, meta-*, <layer1>, <layer2>, ...<layern> when specified. Use "," as the separator. This is useless for --stamps-dir or when --extra-archs is used. -d, --remove-duplicated Remove the duplicated sstate cache files of one package, only the newest one will be kept. The duplicated sstate cache files of one package must have the same arch, which means sstate cache files with multiple archs are not considered duplicate. Conflicts with --stamps-dir. --stamps-dir=<dir1>,<dir2>...<dirn> Specify the build directory's stamps directories, the sstate cache file which IS USED by these build diretories will be KEPT, other sstate cache files in cache-dir will be removed. Use "," as the separator. For example: --stamps-dir=build1/tmp/stamps,build2/tmp/stamps Conflicts with --remove-duplicated. -L, --follow-symlink Remove both the symbol link and the destination file, default: no. -y, --yes Automatic yes to prompts; assume "yes" as answer to all prompts and run non-interactively. -v, --verbose Explain what is being done. -D, --debug Show debug info, repeat for more debug info. EOF } if [ $# -lt 1 ]; then usage exit 0 fi # Echo no files to remove no_files () { echo No files to remove } # Echo nothing to do do_nothing () { echo Nothing to do } # Read the input "y" read_confirm () { echo "$total_deleted out of $total_files files will be removed! " if [ "$confirm" != "y" ]; then echo "Do you want to continue (y/n)? " while read confirm; do [ "$confirm" = "Y" -o "$confirm" = "y" -o "$confirm" = "n" \ -o "$confirm" = "N" ] && break echo "Invalid input \"$confirm\", please input 'y' or 'n': " done else echo fi } # Print error information and exit. echo_error () { echo "ERROR: $1" >&2 exit 1 } # Generate the remove list: # # * Add .done/.siginfo to the remove list # * Add destination of symlink to the remove list # # $1: output file, others: sstate cache file (.tgz) gen_rmlist (){ local rmlist_file="$1" shift local files="$@" for i in $files; do echo $i >> $rmlist_file # Add the ".siginfo" if [ -e $i.siginfo ]; then echo $i.siginfo >> $rmlist_file fi # Add the destination of symlink if [ -L "$i" ]; then if [ "$fsym" = "y" ]; then dest="`readlink -e $i`" if [ -n "$dest" ]; then echo $dest >> $rmlist_file # Remove the .siginfo when .tgz is removed if [ -f "$dest.siginfo" ]; then echo $dest.siginfo >> $rmlist_file fi fi fi # Add the ".tgz.done" and ".siginfo.done" (may exist in the future) base_fn="${i##/*/}" t_fn="$base_fn.done" s_fn="$base_fn.siginfo.done" for d in $t_fn $s_fn; do if [ -f $cache_dir/$d ]; then echo $cache_dir/$d >> $rmlist_file fi done fi done } # Remove the duplicated cache files for the pkg, keep the newest one remove_duplicated () { local topdir local oe_core_dir local tunedirs local all_archs local all_machines local ava_archs local arch local file_names local sstate_files_list local fn_tmp local list_suffix=`mktemp` || exit 1 if [ -z "$extra_archs" ] ; then # Find out the archs in all the layers echo "Figuring out the archs in the layers ... " oe_core_dir=$(dirname $(dirname $(readlink -e $0))) topdir=$(dirname $oe_core_dir) tunedirs="`find $topdir/meta* ${oe_core_dir}/meta* $layers -path '*/meta*/conf/machine/include' 2>/dev/null`" [ -n "$tunedirs" ] || echo_error "Can't find the tune directory" all_machines="`find $topdir/meta* ${oe_core_dir}/meta* $layers -path '*/meta*/conf/machine/*' -name '*.conf' 2>/dev/null | sed -e 's/.*\///' -e 's/.conf$//'`" all_archs=`grep -r -h "^AVAILTUNES .*=" $tunedirs | sed -e 's/.*=//' -e 's/\"//g'` fi # Use the "_" to substitute "-", e.g., x86-64 to x86_64, but not for extra_archs which can be something like cortexa9t2-vfp-neon # Sort to remove the duplicated ones # Add allarch and builder arch (native) builder_arch=$(uname -m) all_archs="$(echo allarch $all_archs $all_machines $builder_arch \ | sed -e 's/-/_/g' -e 's/ /\n/g' | sort -u) $extra_archs" echo "Done" # Total number of files including sstate-, .siginfo and .done files total_files=`find $cache_dir -name 'sstate*' | wc -l` # Save all the sstate files in a file sstate_files_list=`mktemp` || exit 1 find $cache_dir -name 'sstate:*:*:*:*:*:*:*.tgz*' >$sstate_files_list echo "Figuring out the suffixes in the sstate cache dir ... " sstate_suffixes="`sed 's%.*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^_]*_\([^:]*\)\.tgz.*%\1%g' $sstate_files_list | sort -u`" echo "Done" echo "The following suffixes have been found in the cache dir:" echo $sstate_suffixes echo "Figuring out the archs in the sstate cache dir ... " # Using this SSTATE_PKGSPEC definition it's 6th colon separated field # SSTATE_PKGSPEC = "sstate:${PN}:${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}:${PV}:${PR}:${SSTATE_PKGARCH}:${SSTATE_VERSION}:" for arch in $all_archs; do grep -q ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:$arch:[^:]*:[^:]*\.tgz$" $sstate_files_list [ $? -eq 0 ] && ava_archs="$ava_archs $arch" # ${builder_arch}_$arch used by toolchain sstate grep -q ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:${builder_arch}_$arch:[^:]*:[^:]*\.tgz$" $sstate_files_list [ $? -eq 0 ] && ava_archs="$ava_archs ${builder_arch}_$arch" done echo "Done" echo "The following archs have been found in the cache dir:" echo $ava_archs echo "" # Save the file list which needs to be removed local remove_listdir=`mktemp -d` || exit 1 for suffix in $sstate_suffixes; do if [ "$suffix" = "populate_lic" ] ; then echo "Skipping populate_lic, because removing duplicates doesn't work correctly for them (use --stamps-dir instead)" continue fi # Total number of files including .siginfo and .done files total_files_suffix=`grep ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:_]*_$suffix\.tgz.*" $sstate_files_list | wc -l 2>/dev/null` total_tgz_suffix=`grep ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:_]*_$suffix\.tgz$" $sstate_files_list | wc -l 2>/dev/null` # Save the file list to a file, some suffix's file may not exist grep ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:_]*_$suffix\.tgz.*" $sstate_files_list >$list_suffix 2>/dev/null local deleted_tgz=0 local deleted_files=0 for ext in tgz tgz.siginfo tgz.done; do echo "Figuring out the sstate:xxx_$suffix.$ext ... " # Uniq BPNs file_names=`for arch in $ava_archs ""; do sed -ne "s%.*/sstate:\([^:]*\):[^:]*:[^:]*:[^:]*:$arch:[^:]*:[^:]*\.${ext}$%\1%p" $list_suffix done | sort -u` fn_tmp=`mktemp` || exit 1 rm_list="$remove_listdir/sstate:xxx_$suffix" for fn in $file_names; do [ -z "$verbose" ] || echo "Analyzing sstate:$fn-xxx_$suffix.${ext}" for arch in $ava_archs ""; do grep -h ".*/sstate:$fn:[^:]*:[^:]*:[^:]*:$arch:[^:]*:[^:]*\.${ext}$" $list_suffix >$fn_tmp if [ -s $fn_tmp ] ; then [ $debug -gt 1 ] && echo "Available files for $fn-$arch- with suffix $suffix.${ext}:" && cat $fn_tmp # Use the modification time to_del=$(ls -t $(cat $fn_tmp) | sed -n '1!p') [ $debug -gt 2 ] && echo "Considering to delete: $to_del" # The sstate file which is downloaded from the SSTATE_MIRROR is # put in SSTATE_DIR, and there is a symlink in SSTATE_DIR/??/ to # it, so filter it out from the remove list if it should not be # removed. to_keep=$(ls -t $(cat $fn_tmp) | sed -n '1p') [ $debug -gt 2 ] && echo "Considering to keep: $to_keep" for k in $to_keep; do if [ -L "$k" ]; then # The symlink's destination k_dest="`readlink -e $k`" # Maybe it is the one in cache_dir k_maybe="$cache_dir/${k##/*/}" # Remove it from the remove list if they are the same. if [ "$k_dest" = "$k_maybe" ]; then to_del="`echo $to_del | sed 's#'\"$k_maybe\"'##g'`" fi fi done rm -f $fn_tmp [ $debug -gt 2 ] && echo "Decided to delete: $to_del" gen_rmlist $rm_list.$ext "$to_del" fi done done done deleted_tgz=`cat $rm_list.* 2>/dev/null | grep ".tgz$" | wc -l` deleted_files=`cat $rm_list.* 2>/dev/null | wc -l` [ "$deleted_files" -gt 0 -a $debug -gt 0 ] && cat $rm_list.* echo "($deleted_tgz out of $total_tgz_suffix .tgz files for $suffix suffix will be removed or $deleted_files out of $total_files_suffix when counting also .siginfo and .done files)" let total_deleted=$total_deleted+$deleted_files done deleted_tgz=0 rm_old_list=$remove_listdir/sstate-old-filenames find $cache_dir -name 'sstate-*.tgz' >$rm_old_list [ -s "$rm_old_list" ] && deleted_tgz=`cat $rm_old_list | grep ".tgz$" | wc -l` [ -s "$rm_old_list" ] && deleted_files=`cat $rm_old_list | wc -l` [ -s "$rm_old_list" -a $debug -gt 0 ] && cat $rm_old_list echo "($deleted_tgz .tgz files with old sstate-* filenames will be removed or $deleted_files when counting also .siginfo and .done files)" let total_deleted=$total_deleted+$deleted_files rm -f $list_suffix rm -f $sstate_files_list if [ $total_deleted -gt 0 ]; then read_confirm if [ "$confirm" = "y" -o "$confirm" = "Y" ]; then for list in `ls $remove_listdir/`; do echo "Removing $list.tgz (`cat $remove_listdir/$list | wc -w` files) ... " # Remove them one by one to avoid the argument list too long error for i in `cat $remove_listdir/$list`; do rm -f $verbose $i done echo "Done" done echo "$total_deleted files have been removed!" else do_nothing fi else no_files fi [ -d $remove_listdir ] && rm -fr $remove_listdir } # Remove the sstate file by stamps dir, the file not used by the stamps dir # will be removed. rm_by_stamps (){ local cache_list=`mktemp` || exit 1 local keep_list=`mktemp` || exit 1 local rm_list=`mktemp` || exit 1 local sums local all_sums # Total number of files including sstate-, .siginfo and .done files total_files=`find $cache_dir -type f -name 'sstate*' | wc -l` # Save all the state file list to a file find $cache_dir -type f -name 'sstate*' | sort -u -o $cache_list echo "Figuring out the suffixes in the sstate cache dir ... " local sstate_suffixes="`sed 's%.*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^_]*_\([^:]*\)\.tgz.*%\1%g' $cache_list | sort -u`" echo "Done" echo "The following suffixes have been found in the cache dir:" echo $sstate_suffixes # Figure out all the md5sums in the stamps dir. echo "Figuring out all the md5sums in stamps dir ... " for i in $sstate_suffixes; do # There is no "\.sigdata" but "_setcene" when it is mirrored # from the SSTATE_MIRRORS, use them to figure out the sum. sums=`find $stamps -maxdepth 3 -name "*.do_$i.*" \ -o -name "*.do_${i}_setscene.*" | \ sed -ne 's#.*_setscene\.##p' -e 's#.*\.sigdata\.##p' | \ sed -e 's#\..*##' | sort -u` all_sums="$all_sums $sums" done echo "Done" echo "Figuring out the files which will be removed ... " for i in $all_sums; do grep ".*/sstate:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:${i}_.*" $cache_list >>$keep_list done echo "Done" if [ -s $keep_list ]; then sort -u $keep_list -o $keep_list to_del=`comm -1 -3 $keep_list $cache_list` gen_rmlist $rm_list "$to_del" let total_deleted=`cat $rm_list | sort -u | wc -w` if [ $total_deleted -gt 0 ]; then [ $debug -gt 0 ] && cat $rm_list | sort -u read_confirm if [ "$confirm" = "y" -o "$confirm" = "Y" ]; then echo "Removing sstate cache files ... ($total_deleted files)" # Remove them one by one to avoid the argument list too long error for i in `cat $rm_list | sort -u`; do rm -f $verbose $i done echo "$total_deleted files have been removed" else do_nothing fi else no_files fi else echo_error "All files in cache dir will be removed! Abort!" fi rm -f $cache_list rm -f $keep_list rm -f $rm_list } # Parse arguments while [ -n "$1" ]; do case $1 in --cache-dir=*) cache_dir=`echo $1 | sed -e 's#^--cache-dir=##' | xargs readlink -e` [ -d "$cache_dir" ] || echo_error "Invalid argument to --cache-dir" shift ;; --remove-duplicated|-d) rm_duplicated="y" shift ;; --yes|-y) confirm="y" shift ;; --follow-symlink|-L) fsym="y" shift ;; --extra-archs=*) extra_archs=`echo $1 | sed -e 's#^--extra-archs=##' -e 's#,# #g'` [ -n "$extra_archs" ] || echo_error "Invalid extra arch parameter" shift ;; --extra-layer=*) extra_layers=`echo $1 | sed -e 's#^--extra-layer=##' -e 's#,# #g'` [ -n "$extra_layers" ] || echo_error "Invalid extra layer parameter" for i in $extra_layers; do l=`readlink -e $i` if [ -d "$l" ]; then layers="$layers $l" else echo_error "Can't find layer $i" fi done shift ;; --stamps-dir=*) stamps=`echo $1 | sed -e 's#^--stamps-dir=##' -e 's#,# #g'` [ -n "$stamps" ] || echo_error "Invalid stamps dir $i" for i in $stamps; do [ -d "$i" ] || echo_error "Invalid stamps dir $i" done shift ;; --verbose|-v) verbose="-v" shift ;; --debug|-D) debug=`expr $debug + 1` echo "Debug level $debug" shift ;; --help|-h) usage exit 0 ;; *) echo "Invalid arguments $*" echo_error "Try 'sstate-cache-management.sh -h################################################################## # Standard target filesystem paths. ################################################################## # # If changing these values, beware that native/cross/nativesdk bbclass # files may also need changes to keep in sync. # # Used by multilib code to change the library paths baselib = "${BASELIB}" baselib[vardepvalue] = "${baselib}" BASELIB = "lib" BASELIB_powerpc64 = "lib64" # Path prefixes export base_prefix = "" export prefix = "/usr" export exec_prefix = "/usr" # Base paths export base_bindir = "${base_prefix}/bin" export base_sbindir = "${base_prefix}/sbin" export base_libdir = "${base_prefix}/${baselib}" export nonarch_base_libdir = "${base_prefix}/lib" # Architecture independent paths export sysconfdir = "${base_prefix}/etc" export servicedir = "${base_prefix}/srv" export sharedstatedir = "${base_prefix}/com" export localstatedir = "${base_prefix}/var" export datadir = "${prefix}/share" export infodir = "${datadir}/info" export mandir = "${datadir}/man" export docdir = "${datadir}/doc" export systemd_unitdir = "/lib/systemd" # Architecture dependent paths export bindir = "${exec_prefix}/bin" export sbindir = "${exec_prefix}/sbin" export libdir = "${exec_prefix}/${baselib}" export libexecdir = "${libdir}/${BPN}" export includedir = "${exec_prefix}/include" export oldincludedir = "${exec_prefix}/include" localedir = "${libdir}/locale" # Linkage between native/cross/nativesdk layouts base_bindir_native = "/bin" base_sbindir_native = "/sbin" sysconfdir_native = "/etc" prefix_native = "/usr" bindir_native = "${prefix_native}/bin" sbindir_native = "${prefix_native}/sbin" includedir_native = "${prefix_native}/include" libdir_native = "${prefix_native}/lib" libexecdir_native = "${libdir_native}/${BPN}" base_libdir_native = "/lib" datadir_native = "${prefix_native}/share" bindir_cross = "/bin" bindir_crossscripts = "${bindir}/crossscripts" prefix_nativesdk = "/usr" bindir_nativesdk = "${prefix_nativesdk}/bin" includedir_nativesdk = "${prefix_nativesdk}/include" libdir_nativesdk = "${prefix_nativesdk}/lib" base_libdir_nativesdk = "/lib" localstatedir_nativesdk = "/var" # # Cross recipes need to know about the target layout # := is used carefully here # target_datadir := "${datadir}" # Used to find env/perl/python USRBINPATH = "${bindir}" USRBINPATH_class-native = "/usr/bin" USRBINPATH_class-nativesdk = "/usr/bin" # Root home directory ROOT_HOME ??= "/home/root" ################################################################## # Architecture-dependent build variables. ################################################################## BUILD_ARCH = "${@os.uname()[4]}" BUILD_OS = "${@os.uname()[0].lower()}" BUILD_VENDOR = "" BUILD_SYS = "${BUILD_ARCH}${BUILD_VENDOR}-${BUILD_OS}" BUILD_PREFIX = "" BUILD_CC_ARCH = "" BUILD_LD_ARCH = "" BUILD_AS_ARCH = "" BUILD_EXEEXT = "" HOST_ARCH = "${TARGET_ARCH}" HOST_OS = "${TARGET_OS}" HOST_VENDOR = "${TARGET_VENDOR}" HOST_SYS = "${HOST_ARCH}${HOST_VENDOR}-${HOST_OS}" HOST_PREFIX = "${TARGET_PREFIX}" HOST_CC_ARCH = "${TARGET_CC_ARCH}" HOST_LD_ARCH = "${TARGET_LD_ARCH}" HOST_AS_ARCH = "${TARGET_AS_ARCH}" HOST_EXEEXT = "" TUNE_ARCH ??= "INVALID" TUNE_CCARGS ??= "" TUNE_CCARGS[vardepvalue] = "${TUNE_CCARGS}" TUNE_LDARGS ??= "" TUNE_ASARGS ??= "" TUNE_FEATURES ??= "${TUNE_FEATURES_tune-${DEFAULTTUNE}}" LIBCEXTENSION ??= "" ABIEXTENSION ??= "" USE_NLS ??= "yes" SDKUSE_NLS ??= "yes" TARGET_ARCH = "${TUNE_ARCH}" TARGET_OS = "linux${LIBCEXTENSION}${ABIEXTENSION}" TARGET_VENDOR = "-oe" TARGET_SYS = "${TARGET_ARCH}${TARGET_VENDOR}${@['-' + d.getVar('TARGET_OS', True), ''][d.getVar('TARGET_OS', True) == ('' or 'custom')]}" TARGET_PREFIX = "${TARGET_SYS}-" TARGET_CC_ARCH = "${TUNE_CCARGS}" TARGET_LD_ARCH = "${TUNE_LDARGS}" TARGET_AS_ARCH = "${TUNE_ASARGS}" SDK_ARCH = "${BUILD_ARCH}" SDK_OS = "${BUILD_OS}" SDK_VENDOR = "-oesdk" SDK_SYS = "${SDK_ARCH}${SDK_VENDOR}${@['-' + d.getVar('SDK_OS', True), ''][d.getVar('SDK_OS', True) == ('' or 'custom')]}" SDK_PREFIX = "${SDK_SYS}-" SDK_CC_ARCH = "${BUILD_CC_ARCH}" SDKPKGSUFFIX = "nativesdk" SDK_PACKAGE_ARCHS = "all any noarch ${SDK_ARCH}-${SDKPKGSUFFIX}" SDK_LD_ARCH = "${BUILD_LD_ARCH}" SDK_AS_ARCH = "${BUILD_AS_ARCH}" TUNE_PKGARCH ??= "" PACKAGE_ARCH = "${TUNE_PKGARCH}" MACHINE_ARCH = "${@[d.getVar('TUNE_PKGARCH', True), d.getVar('MACHINE', True)][bool(d.getVar('MACHINE', True))].replace('-', '_')}" PACKAGE_EXTRA_ARCHS ??= "${PACKAGE_EXTRA_ARCHS_tune-${DEFAULTTUNE}}" PACKAGE_ARCHS = "all any noarch ${PACKAGE_EXTRA_ARCHS} ${MACHINE_ARCH}" # MACHINE_ARCH shouldn't be included here as a variable dependency # since machine specific packages are handled using multimachine PACKAGE_ARCHS[vardepsexclude] = "MACHINE_ARCH" MULTIMACH_TARGET_SYS = "${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}" MULTIMACH_HOST_SYS = "${PACKAGE_ARCH}${HOST_VENDOR}-${HOST_OS}" ################################################################## # Date/time variables. ################################################################## DATE := "${@time.strftime('%Y%m%d',time.gmtime())}" TIME := "${@time.strftime('%H%M%S',time.gmtime())}" DATETIME = "${DATE}${TIME}" ################################################################## # Openembedded Software Prerequisites. ################################################################## # python-native should be here but python relies on building # its own in staging ASSUME_PROVIDED = "\ bzip2-native \ chrpath-native \ git-native \ grep-native \ diffstat-native \ patch-native \ perl-native-runtime \ python-native-runtime \ tar-native \ virtual/libintl-native \ texinfo-native\ " # gzip-native should be listed above? ################################################################## # Package default variables. ################################################################## PN = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE'),d)[0] or 'defaultpkgname'}" PV = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE'),d)[1] or '1.0'}" PR = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE'),d)[2] or 'r0'}" PRINC ?= "0" PF = "${PN}-${EXTENDPE}${PV}-${PR}" EXTENDPE = "${@['','${PE\x7d_'][int(d.getVar('PE',1) or 0) > 0]}" P = "${PN}-${PV}" EXTENDPRAUTO = "${@['.${PRAUTO\x7d',''][d.getVar('PRAUTO',1) is None]}" PRAUTOINX = "${PF}" PKGV ?= "${PV}" PKGR ?= "${PR}${EXTENDPRAUTO}" PKGE ?= "${@['','${PE\x7d'][int(d.getVar('PE',1) or 0) > 0]}" EXTENDPKGEVER = "${@['','${PKGE\x7d:'][d.getVar('PKGE',1).strip() != '']}" EXTENDPKGV ?= "${EXTENDPKGEVER}${PKGV}-${PKGR}" # Base package name # Automatically derives "foo" from "foo-native", "foo-cross" or "foo-initial" # otherwise it is the same as PN and P SPECIAL_PKGSUFFIX = "-native -cross -initial -intermediate -crosssdk -cross-canadian" BPN = "${@base_prune_suffix(d.getVar('PN', True), d.getVar('SPECIAL_PKGSUFFIX', True).split(), d)}" BP = "${BPN}-${PV}" # Package info. SECTION = "base" PRIORITY = "optional" SUMMARY ?= "${PN} version ${PV}-${PR}" DESCRIPTION ?= "${SUMMARY}." # The following two are commented out because they result in a recursive # definition of the variable in some corner cases. These are left in # to illustrate the intended behavior. #SUMMARY_${PN} ?= "${SUMMARY}" #DESCRIPTION_${PN} ?= "${DESCRIPTION}" SUMMARY_${PN}-dbg ?= "${SUMMARY} - Debugging files" DESCRIPTION_${PN}-dbg ?= "${DESCRIPTION} \ This package contains ELF symbols and related sources for debugging purposes." SUMMARY_${PN}-dev ?= "${SUMMARY} - Development files" DESCRIPTION_${PN}-dev ?= "${DESCRIPTION} \ This package contains symbolic links, header files, and \ related items necessary for software development." SUMMARY_${PN}-staticdev ?= "${SUMMARY} - Development files (Static Libraries)" DESCRIPTION_${PN}-staticdev?= "${DESCRIPTION} \ This package contains static libraries for software development." SUMMARY_${PN}-doc ?= "${SUMMARY} - Documentation files" DESCRIPTION_${PN}-doc ?= "${DESCRIPTION} \ This package contains documentation." LICENSE = "INVALID" MAINTAINER = "OE-Core Developers <openembedded-core@lists.openembedded.org>" HOMEPAGE = "" # Package dependencies and provides. # Ensure that -dev packages recommend the corresponding -dev packages of their # deps, and the same for -dbg. DEPCHAIN_PRE = "" DEPCHAIN_POST = "-dev -dbg" DEPENDS = "" RDEPENDS = "" PROVIDES = "" PROVIDES_prepend = "${PN} " RPROVIDES = "" MULTI_PROVIDER_WHITELIST = "virtual/libintl virtual/libintl-native virtual/nativesdk-libintl virtual/xserver virtual/update-alternatives-native virtual/update-alternatives" SOLIBS = ".so.*" SOLIBS_darwin = ".dylib" SOLIBSDEV = ".so" # Due to the ordering of PACKAGES and the naming of the dev symlinks on darwin, # we can't make the symlinks end up in the -dev packages easily at this point. This hack # at least means builds aren't completely broken and symlinks don't take up much space. SOLIBSDEV_darwin = ".dylibbroken" PACKAGE_BEFORE_PN ?= "" PACKAGES = "${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}" PACKAGES_DYNAMIC = "^${PN}-locale-.*" FILES = "" FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \ ${sysconfdir} ${sharedstatedir} ${localstatedir} \ ${base_bindir}/* ${base_sbindir}/* \ ${base_libdir}/*${SOLIBS} \ ${base_prefix}/lib/udev/rules.d ${prefix}/lib/udev/rules.d \ ${datadir}/${BPN} ${libdir}/${BPN}/* \ ${datadir}/pixmaps ${datadir}/applications \ ${datadir}/idl ${datadir}/omf ${datadir}/sounds \ ${libdir}/bonobo/servers" FILES_${PN}-bin = "${bindir}/* ${sbindir}/*" FILES_${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \ ${datadir}/gnome/help" SECTION_${PN}-doc = "doc" FILES_SOLIBSDEV ?= "${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}" FILES_${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \ ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \ ${datadir}/aclocal ${base_libdir}/*.o \ ${libdir}/${BPN}/*.la ${base_libdir}/*.la" SECTION_${PN}-dev = "devel" ALLOW_EMPTY_${PN}-dev = "1" RDEPENDS_${PN}-dev = "${PN} (= ${EXTENDPKGV})" FILES_${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a" SECTION_${PN}-staticdev = "devel" RDEPENDS_${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})" DOTDEBUG-dbg = "${bindir}/.debug ${sbindir}/.debug ${libexecdir}/.debug ${libdir}/.debug \ ${base_bindir}/.debug ${base_sbindir}/.debug ${base_libdir}/.debug ${libdir}/${BPN}/.debug \ ${libdir}/matchbox-panel/.debug ${libexecdir}/${BPN}/.debug /usr/src/debug" DEBUGFILEDIRECTORY-dbg = "/usr/lib/debug /usr/src/debug" FILES_${PN}-dbg = "${@d.getVar(['DOTDEBUG-dbg', 'DEBUGFILEDIRECTORY-dbg'][d.getVar('PACKAGE_DEBUG_SPLIT_STYLE', True) == 'debug-file-directory'], True)}" SECTION_${PN}-dbg = "devel" ALLOW_EMPTY_${PN}-dbg = "1" FILES_${PN}-locale = "${datadir}/locale" # File manifest FILE_DIRNAME = "${@os.path.dirname(d.getVar('FILE'))}" # FILESPATH is set in base.bbclass #FILESPATH = "${FILE_DIRNAME}/${PF}:${FILE_DIRNAME}/${P}:${FILE_DIRNAME}/${PN}:${FILE_DIRNAME}/${BP}:${FILE_DIRNAME}/${BPN}:${FILE_DIRNAME}/files:${FILE_DIRNAME}" ################################################################## # General work and output directories for the build system. ################################################################## TMPDIR ?= "${TOPDIR}/tmp" CACHE = "${TMPDIR}/cache${@['', '/' + str(d.getVar('MACHINE', True))][bool(d.getVar('MACHINE', True))]}${@['', '/' + str(d.getVar('SDKMACHINE', True))][bool(d.getVar('SDKMACHINE', True))]}" # The persistent cache should be shared by all builds PERSISTENT_DIR = "${TOPDIR}/cache" LOG_DIR = "${TMPDIR}/log" CO_DIR = "${DL_DIR}" CVSDIR = "${CO_DIR}/cvs" SVNDIR = "${CO_DIR}/svn" GITDIR = "${CO_DIR}/git2" BZRDIR = "${CO_DIR}/bzr" HGDIR = "${CO_DIR}/hg" STAMPS_DIR ?= "${TMPDIR}/stamps" STAMP = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}" STAMPCLEAN = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/*-*" BASE_WORKDIR ?= "${TMPDIR}/work" WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}" T = "${WORKDIR}/temp" D = "${WORKDIR}/image" S = "${WORKDIR}/${BP}" B = "${S}" STAGING_DIR = "${TMPDIR}/sysroots" STAGING_DIR_NATIVE = "${STAGING_DIR}/${BUILD_SYS}" STAGING_BINDIR_NATIVE = "${STAGING_DIR_NATIVE}${bindir_native}" STAGING_BINDIR_CROSS = "${STAGING_BINDIR}/crossscripts" STAGING_BINDIR_TOOLCHAIN = "${STAGING_DIR_NATIVE}${bindir_native}/${TARGET_ARCH}${TARGET_VENDOR}-${TARGET_OS}" STAGING_LIBDIR_NATIVE = "${STAGING_DIR_NATIVE}${libdir_native}" STAGING_LIBEXECDIR_NATIVE = "${STAGING_DIR_NATIVE}${libexecdir_native}" STAGING_BASE_LIBDIR_NATIVE = "${STAGING_DIR_NATIVE}${base_libdir_native}" STAGING_SBINDIR_NATIVE = "${STAGING_DIR_NATIVE}${sbindir_native}" STAGING_INCDIR_NATIVE = "${STAGING_DIR_NATIVE}${includedir_native}" STAGING_ETCDIR_NATIVE = "${STAGING_DIR_NATIVE}${sysconfdir_native}" STAGING_DATADIR_NATIVE = "${STAGING_DIR_NATIVE}${datadir_native}" STAGING_DIR_HOST = "${STAGING_DIR}/${MACHINE}" STAGING_BINDIR = "${STAGING_DIR_HOST}${bindir}" STAGING_LIBDIR = "${STAGING_DIR_HOST}${libdir}" STAGING_LIBEXECDIR = "${STAGING_DIR_HOST}${libexecdir}" STAGING_BASELIBDIR = "${STAGING_DIR_HOST}${base_libdir}" STAGING_INCDIR = "${STAGING_DIR_HOST}${includedir}" STAGING_DATADIR = "${STAGING_DIR_HOST}${datadir}" STAGING_EXECPREFIXDIR = "${STAGING_DIR_HOST}${exec_prefix}" STAGING_LOADER_DIR = "${STAGING_DIR_HOST}/loader" STAGING_FIRMWARE_DIR = "${STAGING_DIR_HOST}/firmware" STAGING_DIR_TARGET = "${STAGING_DIR}/${MACHINE}" STAGING_DIR_TCBOOTSTRAP = "${STAGING_DIR_TARGET}-tcbootstrap" # Setting DEPLOY_DIR outside of TMPDIR is helpful, when you are using # packaged staging and/or multimachine. DEPLOY_DIR ?= "${TMPDIR}/deploy" DEPLOY_DIR_TAR = "${DEPLOY_DIR}/tar" DEPLOY_DIR_IPK = "${DEPLOY_DIR}/ipk" DEPLOY_DIR_RPM = "${DEPLOY_DIR}/rpm" DEPLOY_DIR_DEB = "${DEPLOY_DIR}/deb" DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR}/images/${MACHINE}" DEPLOY_DIR_TOOLS = "${DEPLOY_DIR}/tools" PKGDATA_DIR = "${STAGING_DIR_HOST}/pkgdata" ################################################################## # SDK variables. ################################################################## SDK_NAME_PREFIX ?= "oecore" SDK_NAME = "${SDK_NAME_PREFIX}-${SDK_ARCH}-${TUNE_PKGARCH}" SDKPATH = "/usr/local/${SDK_NAME_PREFIX}-${SDK_ARCH}" SDKPATHNATIVE = "${SDKPATH}/sysroots/${SDK_SYS}" ################################################################## # Kernel info. ################################################################## OLDEST_KERNEL = "2.6.16" STAGING_KERNEL_DIR = "${STAGING_DIR_HOST}/usr/src/kernel" ################################################################## # Specific image creation and rootfs population info. ################################################################## IMAGE_ROOTFS = "${WORKDIR}/rootfs" IMAGE_BASENAME = "${PN}" IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-${DATETIME}" IMAGE_NAME[vardepsexclude] += "DATETIME" IMAGE_LINK_NAME = "${IMAGE_BASENAME}-${MACHINE}" # This option allows for a percentage overage of the actual image size rather than a # fixed extra space, this is space needed for initial startup and basic operations. IMAGE_OVERHEAD_FACTOR ?= "1.3" # This option allows for adding additional space in K above and beyond what the # IMAGE_OVERHEAD_FACTOR might add. This space is for additional packages, user data, ... # To set a fixed size then overriding IMAGE_ROOTFS_SIZE with the max size one wants # should do the trick IMAGE_ROOTFS_EXTRA_SPACE ?= "0" EXTRA_IMAGEDEPENDS = "" ################################################################## # Toolchain info. ################################################################## PATH_prepend = "${COREBASE}/scripts:${STAGING_BINDIR_TOOLCHAIN}:${STAGING_BINDIR_CROSS}:${STAGING_DIR_NATIVE}${sbindir_native}:${STAGING_BINDIR_NATIVE}:${STAGING_DIR_NATIVE}${base_sbindir_native}:${STAGING_DIR_NATIVE}${base_bindir_native}:" export PATH ################################################################## # Build utility info. ################################################################## CCACHE ??= "" # Disable ccache explicitly if CCACHE is null since gcc may be a symlink # of ccache some distributions (e.g., Fedora 17). export CCACHE_DISABLE ??= "${@[0,1][d.getVar('CCACHE', True) == '']}" # Assign CCACHE_DIR a default value to fix a bug of ccache 3.1.7, # since it would always create CCACHE_DIR/.ccache even if # CCACHE_DISABLE = 1. export CCACHE_DIR ??= "${@os.getenv('HOME')}" TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TARGET}" export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" export CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" export FC = "${CCACHE}${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" export CPP = "${HOST_PREFIX}gcc -E${TOOLCHAIN_OPTIONS} ${HOST_CC_ARCH}" export LD = "${HOST_PREFIX}ld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}" export CCLD = "${CC}" export AR = "${HOST_PREFIX}ar" export AS = "${HOST_PREFIX}as ${HOST_AS_ARCH}" export RANLIB = "${HOST_PREFIX}ranlib" export STRIP = "${HOST_PREFIX}strip" export OBJCOPY = "${HOST_PREFIX}objcopy" export OBJDUMP = "${HOST_PREFIX}objdump" export STRINGS = "${HOST_PREFIX}strings" export NM = "${HOST_PREFIX}nm" PYTHON = "${@sys.executable}" export BUILD_CC = "${CCACHE}${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}" export BUILD_CXX = "${CCACHE}${BUILD_PREFIX}g++ ${BUILD_CC_ARCH}" export BUILD_FC = "${CCACHE}${BUILD_PREFIX}gfortran ${BUILD_CC_ARCH}" export BUILD_CPP = "${BUILD_PREFIX}cpp ${BUILD_CC_ARCH}" export BUILD_LD = "${BUILD_PREFIX}ld ${BUILD_LD_ARCH}" export BUILD_CCLD = "${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}" export BUILD_AR = "${BUILD_PREFIX}ar" export BUILD_AS = "${BUILD_PREFIX}as ${BUILD_AS_ARCH}" export BUILD_RANLIB = "${BUILD_PREFIX}ranlib" export BUILD_STRIP = "${BUILD_PREFIX}strip" export BUILD_NM = "${BUILD_PREFIX}nm" export MAKE = "make" EXTRA_OEMAKE = "-e MAKEFLAGS=" EXTRA_OECONF = "" export LC_ALL = "C" ################################################################## # Patch handling. ################################################################## PATCHTOOL = 'quilt' PATCHRESOLVE = 'user' ################################################################## # Build flags and options. ################################################################## export BUILD_CPPFLAGS = "-isystem${STAGING_INCDIR_NATIVE}" BUILDSDK_CPPFLAGS = "-isystem${STAGING_INCDIR}" export CPPFLAGS = "${TARGET_CPPFLAGS}" export TARGET_CPPFLAGS = "" #export TARGET_CPPFLAGS = "-isystem${STAGING_DIR_TARGET}${includedir}" export BUILD_CFLAGS = "${BUILD_CPPFLAGS} ${BUILD_OPTIMIZATION}" BUILDSDK_CFLAGS = "${BUILDSDK_CPPFLAGS} ${BUILD_OPTIMIZATION}" export CFLAGS = "${TARGET_CFLAGS}" export TARGET_CFLAGS = "${TARGET_CPPFLAGS} ${SELECTED_OPTIMIZATION}" export BUILD_CXXFLAGS = "${BUILD_CFLAGS}" export CXXFLAGS = "${TARGET_CXXFLAGS}" export TARGET_CXXFLAGS = "${TARGET_CFLAGS}" export BUILD_LDFLAGS = "-L${STAGING_LIBDIR_NATIVE} \ -L${STAGING_BASE_LIBDIR_NATIVE} \ -Wl,-rpath-link,${STAGING_LIBDIR_NATIVE} \ -Wl,-rpath-link,${STAGING_BASE_LIBDIR_NATIVE} \ -Wl,-rpath,${STAGING_LIBDIR_NATIVE} \ -Wl,-rpath,${STAGING_BASE_LIBDIR_NATIVE} \ -Wl,-O1" BUILDSDK_LDFLAGS = "-L${STAGING_LIBDIR} \ -Wl,-rpath-link,${STAGING_LIBDIR} \ -Wl,-rpath,${libdir} -Wl,-O1 \ -L${STAGING_DIR_HOST}${base_libdir} \ -Wl,-rpath-link,${STAGING_DIR_HOST}${base_libdir} \ -Wl,-rpath,${base_libdir} -Wl,-O1" LINKER_HASH_STYLE ??= "gnu" # mips does not support GNU hash style therefore we override LINKER_HASH_STYLE_mips = "sysv" LINKER_HASH_STYLE_mipsel = "sysv" LINKER_HASH_STYLE_mips64 = "sysv" LINKER_HASH_STYLE_mips64el = "sysv" TARGET_LINK_HASH_STYLE ?= "${@['-Wl,--hash-style=gnu',''][d.getVar('LINKER_HASH_STYLE', True) != 'gnu']}" export LDFLAGS = "${TARGET_LDFLAGS}" export TARGET_LDFLAGS = "-Wl,-O1 ${TARGET_LINK_HASH_STYLE}" #export TARGET_LDFLAGS = "-L${STAGING_DIR_TARGET}${libdir} \ # -Wl,-rpath-link,${STAGING_DIR_TARGET}${libdir} \ # -Wl,-O1" # Which flags to leave by strip-flags() in bin/build/oebuild.sh ? ALLOWED_FLAGS = "-O -mcpu -march -pipe" # Pass parallel make options to the compile task EXTRA_OEMAKE_prepend_task-compile = "${PARALLEL_MAKE} " PARALLEL_MAKEINST ??= "${PARALLEL_MAKE}" # Pass parallel make options to the install task EXTRA_OEMAKE_prepend_task-install = "${PARALLEL_MAKEINST} " ################################################################## # Optimization flags. ################################################################## DEBUG_FLAGS ?= "-g -feliminate-unused-debug-types" # Disabled until the option works properly -feliminate-dwarf2-dups FULL_OPTIMIZATION = "-O2 -pipe ${DEBUG_FLAGS}" DEBUG_OPTIMIZATION = "-O -fno-omit-frame-pointer ${DEBUG_FLAGS} -pipe" SELECTED_OPTIMIZATION = "${@d.getVar(['FULL_OPTIMIZATION', 'DEBUG_OPTIMIZATION'][d.getVar('DEBUG_BUILD', True) == '1'], True)}" SELECTED_OPTIMIZATION[vardeps] += "FULL_OPTIMIZATION DEBUG_OPTIMIZATION" BUILD_OPTIMIZATION = "-O2 -pipe" ################################################################## # Download locations and utilities. ################################################################## APACHE_MIRROR = "http://www.apache.org/dist" DEBIAN_MIRROR = "ftp://ftp.debian.org/debian/pool" GENTOO_MIRROR = "http://distfiles.gentoo.org/distfiles" GNOME_GIT = "git://git.gnome.org" GNOME_MIRROR = "http://ftp.gnome.org/pub/GNOME/sources" GNU_MIRROR = "ftp://ftp.gnu.org/gnu" GPE_MIRROR = "http://gpe.linuxtogo.org/download/source" KERNELORG_MIRROR = "http://kernel.org/pub" SOURCEFORGE_MIRROR = "http://downloads.sourceforge.net" XLIBS_MIRROR = "http://xlibs.freedesktop.org/release" XORG_MIRROR = "http://xorg.freedesktop.org/releases" SAVANNAH_GNU_MIRROR = "http://download.savannah.gnu.org/releases" SAVANNAH_NONGNU_MIRROR = "http://download.savannah.nongnu.org/releases" CPAN_MIRROR = "http://search.cpan.org/CPAN" # You can use the mirror of your country to get faster downloads by putting # export DEBIAN_MIRROR = "ftp://ftp.de.debian.org/debian/pool" # into your local.conf FETCHCMD_svn = "/usr/bin/env svn --non-interactive --trust-server-cert" FETCHCMD_cvs = "/usr/bin/env cvs" FETCHCMD_wget = "/usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate" FETCHCMD_bzr = "/usr/bin/env bzr" FETCHCMD_hg = "/usr/bin/env hg" SRCDATE = "${DATE}" SRCREV ??= "INVALID" AUTOREV = "${@bb.fetch2.get_autorev(d)}" SRCPV = "${@bb.fetch2.get_srcrev(d)}" SRCPV[vardepvalue] = "${SRCPV}" SRC_URI = "" # Use pseudo as the fakeroot implementation PSEUDO_LOCALSTATEDIR ?= "${WORKDIR}/pseudo/" PSEUDO_PASSWD ?= "${STAGING_DIR_TARGET}" export PSEUDO_DISABLED = "1" #export PSEUDO_PREFIX = "${STAGING_DIR_NATIVE}${prefix_native}" #export PSEUDO_BINDIR = "${STAGING_DIR_NATIVE}${bindir_native}" #export PSEUDO_LIBDIR = "${STAGING_DIR_NATIVE}$PSEUDOBINDIR/../lib/pseudo/lib FAKEROOTBASEENV = "PSEUDO_BINDIR=${STAGING_BINDIR_NATIVE} PSEUDO_LIBDIR=${STAGING_BINDIR_NATIVE}/../lib/pseudo/lib PSEUDO_PREFIX=${STAGING_BINDIR_NATIVE}/../../ PSEUDO_DISABLED=1" FAKEROOTCMD = "${STAGING_BINDIR_NATIVE}/pseudo" FAKEROOTENV = "PSEUDO_PREFIX=${STAGING_DIR_NATIVE}${prefix_native} PSEUDO_LOCALSTATEDIR=${PSEUDO_LOCALSTATEDIR} PSEUDO_PASSWD=${PSEUDO_PASSWD} PSEUDO_NOSYMLINKEXP=1 PSEUDO_DISABLED=0" FAKEROOTNOENV = "PSEUDO_UNLOAD=1" FAKEROOTDIRS = "${PSEUDO_LOCALSTATEDIR}" PREFERRED_PROVIDER_virtual/fakeroot-native ?= "pseudo-native" ################################################################## # Miscellaneous utilities. ################################################################## MKTEMPDIRCMD = "mktemp -d -q ${TMPBASE}" MKTEMPCMD = "mktemp -q ${TMPBASE}" # GNU patch tries to be intellgent about checking out read-only files from # a RCS, which freaks out those special folks with active Perforce clients # the following makes patch ignore RCS: export PATCH_GET="0" ################################################################## # Not sure about the rest of this yet. ################################################################## # Pre-build configuration output BUILDCFG_HEADER = "Build Configuration:" BUILDCFG_VARS = "BB_VERSION BUILD_SYS NATIVELSBSTRING TARGET_SYS MACHINE DISTRO DISTRO_VERSION TUNE_FEATURES TARGET_FPU" BUILDCFG_VARS[type] = "list" BUILDCFG_NEEDEDVARS = "TARGET_ARCH TARGET_OS" BUILDCFG_NEEDEDVARS[type] = "list" # Other export PKG_CONFIG_DIR = "${STAGING_DIR_HOST}${libdir}/pkgconfig" export PKG_CONFIG_PATH = "${PKG_CONFIG_DIR}:${STAGING_DATADIR}/pkgconfig" export PKG_CONFIG_LIBDIR = "${PKG_CONFIG_DIR}" export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR_HOST}" export PKG_CONFIG_DISABLE_UNINSTALLED = "yes" # library package naming AUTO_LIBNAME_PKGS = "${PACKAGES}" ### ### Config file processing ### # An empty distro leads to :: entries in OVERRIDES and FILEOVERRIDES which # is a bad idea. Setting a dummy value is better than a ton of anonymous python. DISTRO ??= "nodistro" # Overrides are processed left to right, so the ones that are named later take precedence. # You generally want them to go from least to most specific. # # This means that an envionment variable named '<foo>_arm' overrides an # environment variable '<foo>' (when ${TARGET_ARCH} is arm). # An environment variable '<foo>_qemuarm' overrides '<foo>' and overrides # '<foo>_arm' when ${MACHINE} is 'qemuarm'. # If you use combination ie '<foo>_qemuarm_arm', then '<foo>_qemuarm_arm' will override # '<foo>_qemuarm' and then '<foo>' will be overriden with that value from '<foo>_qemuarm'. # And finally '<foo>_forcevariable' overrides any standard variable, with the highest priority. # # This works for functions as well, they are really just environment variables. # Default OVERRIDES to make compilation fail fast in case of build system misconfiguration. OVERRIDES = "${TARGET_OS}:${TRANSLATED_TARGET_ARCH}:build-${BUILD_OS}:pn-${PN}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${CLASSOVERRIDE}:forcevariable" OVERRIDES[vardepsexclude] = "MACHINEOVERRIDES" CLASSOVERRIDE ?= "class-target" DISTROOVERRIDES ?= "${@d.getVar('DISTRO', True) or ''}" MACHINEOVERRIDES ?= "${MACHINE}" MACHINEOVERRIDES[vardepsexclude] = "MACHINE" FILESOVERRIDES = "${TRANSLATED_TARGET_ARCH}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}" ################################################################## # Include the rest of the config files. ################################################################## require conf/abi_version.conf include conf/site.conf include conf/auto.conf include conf/local.conf include conf/build/${BUILD_SYS}.conf include conf/target/${TARGET_SYS}.conf include conf/machine/${MACHINE}.conf include conf/machine-sdk/${SDKMACHINE}.conf include conf/distro/${DISTRO}.conf include conf/distro/defaultsetup.conf include conf/documentation.conf include conf/licenses.conf require conf/sanity.conf ################################################################## # Weak variables (usually to retain backwards compatibility) ################################################################## DL_DIR ?= "${TOPDIR}/downloads" SSTATE_DIR ?= "${TOPDIR}/sstate-cache" IMAGE_FSTYPES ?= "tar.gz" INITRAMFS_FSTYPES ?= "cpio.gz" DEFAULT_TASK_PROVIDER ?= "packagegroup-base" MACHINE_TASK_PROVIDER ?= "${DEFAULT_TASK_PROVIDER}" # The size in Kbytes for the generated image if it is larger than # the required size (du -ks IMAGE_ROOTFS * IMAGE_OVERHEAD_FACTOR), # and no effect if less than it. IMAGE_ROOTFS_SIZE ?= "65536" # Forcefully set CACHE now so future changes to things like # MACHINE don't change the path to the cache CACHE := "${CACHE}" # Default to setting automatically based on cpu count BB_NUMBER_THREADS ?= "${@oe.utils.cpu_count()}" # Default to setting automatically based on cpu count PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count()}" ################################################################## # Magic Cookie for SANITY CHECK ################################################################## OES_BITBAKE_CONF = "1" ################################################################## # Machine properties and packagegroup-base stuff ################################################################## MACHINE_FEATURES ?= "" DISTRO_FEATURES ?= "" DISTRO_EXTRA_RDEPENDS ?= "" DISTRO_EXTRA_RRECOMMENDS ?= "" MACHINE_EXTRA_RDEPENDS ?= "" MACHINE_EXTRA_RRECOMMENDS ?= "" MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= "" MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= "" EXTRA_IMAGE_FEATURES ??= "" IMAGE_FEATURES += "${EXTRA_IMAGE_FEATURES}" DISTRO_FEATURES_BACKFILL = "pulseaudio sysvinit" MACHINE_FEATURES_BACKFILL = "rtc" COMBINED_FEATURES = "\ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "alsa", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "bluetooth", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "ext2", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "vfat", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "irda", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "pcmcia", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "pci", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "usbgadget", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "usbhost", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "wifi", d)}" COMBINED_FEATURES[vardeps] += "DISTRO_FEATURES MACHINE_FEATURES" SERIAL_CONSOLE ??= "" SERIAL_CONSOLES ??= "${@d.getVar('SERIAL_CONSOLE', True).replace(' ', ';')}" NO_RECOMMENDATIONS ?= "" BAD_RECOMMENDATIONS ?= "" # Make sure MACHINE isn't exported # (breaks binutils at least) MACHINE[unexport] = "1" # Make sure TARGET_ARCH isn't exported # (breaks Makefiles using implicit rules, e.g. quilt, as GNU make has this # in them, undocumented) TARGET_ARCH[unexport] = "1" # Make sure DISTRO isn't exported # (breaks sysvinit at least) DISTRO[unexport] = "1" # Used by canadian-cross to handle string conversions on TARGET_ARCH where needed TRANSLATED_TARGET_ARCH ??= "${@d.getVar('TARGET_ARCH', True).replace("_", "-")}" # Complete output from bitbake BB_CONSOLELOG ?= "${LOG_DIR}/cooker/${MACHINE}/${DATETIME}.log" # Setup our default hash policy BB_SIGNATURE_HANDLER ?= "OEBasicHash" BB_HASHBASE_WHITELIST ?= "TMPDIR FILE PATH PWD BB_TASKHASH BBPATH DL_DIR \ SSTATE_DIR THISDIR FILESEXTRAPATHS FILE_DIRNAME HOME LOGNAME SHELL TERM \ USER FILESPATH STAGING_DIR_HOST STAGING_DIR_TARGET COREBASE PRSERV_HOST \ PRSERV_DUMPDIR PRSERV_DUMPFILE PRSERV_LOCKDOWN PARALLEL_MAKE \ CCACHE_DIR EXTERNAL_TOOLCHAIN CCACHE CCACHE_DISABLE LICENSE_PATH SDKPKGSUFFIX \ WARN_QA ERROR_QA WORKDIR STAMPCLEAN" BB_HASHCONFIG_WHITELIST ?= "${BB_HASHBASE_WHITELIST} DATE TIME SSH_AGENT_PID \ SSH_AUTH_SOCK PSEUDO_BUILD BB_ENV_EXTRAWHITE DISABLE_SANITY_CHECKS \ PARALLEL_MAKE BB_NUMBER_THREADS BB_ORIGENV BB_INVALIDCONF BBINCLUDED" BB_SIGNATURE_EXCLUDE_FLAGS ?= "doc defaultval _append _prepend deps depends \ lockfiles type vardepsexclude vardeps vardepvalue vardepvalueexclude \ file-checksums python func task export unexport noexec nostamp dirs cleandirs \ sstate-lockfile-shared prefuncs postfuncs export_func deptask rdeptask \ recrdeptask nodeprrecs stamp-base stamp-extra-info" MLPREFIX ??= "" MULTILIB_VARIANTS ??= ""
################################################################## # Standard target filesystem paths. ################################################################## # # If changing these values, beware that native/cross/nativesdk bbclass # files may also need changes to keep in sync. # # Used by multilib code to change the library paths baselib = "${BASELIB}" baselib[vardepvalue] = "${baselib}" BASELIB = "lib" BASELIB_powerpc64 = "lib64" # Path prefixes export base_prefix = "" export prefix = "/usr" export exec_prefix = "/usr" # Base paths export base_bindir = "${base_prefix}/bin" export base_sbindir = "${base_prefix}/sbin" export base_libdir = "${base_prefix}/${baselib}" export nonarch_base_libdir = "${base_prefix}/lib" # Architecture independent paths export sysconfdir = "${base_prefix}/etc" export servicedir = "${base_prefix}/srv" export sharedstatedir = "${base_prefix}/com" export localstatedir = "${base_prefix}/var" export datadir = "${prefix}/share" export infodir = "${datadir}/info" export mandir = "${datadir}/man" export docdir = "${datadir}/doc" export systemd_unitdir = "/lib/systemd" # Architecture dependent paths export bindir = "${exec_prefix}/bin" export sbindir = "${exec_prefix}/sbin" export libdir = "${exec_prefix}/${baselib}" export libexecdir = "${libdir}/${BPN}" export includedir = "${exec_prefix}/include" export oldincludedir = "${exec_prefix}/include" localedir = "${libdir}/locale" # Linkage between native/cross/nativesdk layouts base_bindir_native = "/bin" base_sbindir_native = "/sbin" sysconfdir_native = "/etc" prefix_native = "/usr" bindir_native = "${prefix_native}/bin" sbindir_native = "${prefix_native}/sbin" includedir_native = "${prefix_native}/include" libdir_native = "${prefix_native}/lib" libexecdir_native = "${libdir_native}/${BPN}" base_libdir_native = "/lib" datadir_native = "${prefix_native}/share" bindir_cross = "/bin" bindir_crossscripts = "${bindir}/crossscripts" prefix_nativesdk = "/usr" bindir_nativesdk = "${prefix_nativesdk}/bin" includedir_nativesdk = "${prefix_nativesdk}/include" libdir_nativesdk = "${prefix_nativesdk}/lib" base_libdir_nativesdk = "/lib" localstatedir_nativesdk = "/var" # # Cross recipes need to know about the target layout # := is used carefully here # target_datadir := "${datadir}" # Used to find env/perl/python USRBINPATH = "${bindir}" USRBINPATH_class-native = "/usr/bin" USRBINPATH_class-nativesdk = "/usr/bin" # Root home directory ROOT_HOME ??= "/home/root" ################################################################## # Architecture-dependent build variables. ################################################################## BUILD_ARCH = "${@os.uname()[4]}" BUILD_OS = "${@os.uname()[0].lower()}" BUILD_VENDOR = "" BUILD_SYS = "${BUILD_ARCH}${BUILD_VENDOR}-${BUILD_OS}" BUILD_PREFIX = "" BUILD_CC_ARCH = "" BUILD_LD_ARCH = "" BUILD_AS_ARCH = "" BUILD_EXEEXT = "" HOST_ARCH = "${TARGET_ARCH}" HOST_OS = "${TARGET_OS}" HOST_VENDOR = "${TARGET_VENDOR}" HOST_SYS = "${HOST_ARCH}${HOST_VENDOR}-${HOST_OS}" HOST_PREFIX = "${TARGET_PREFIX}" HOST_CC_ARCH = "${TARGET_CC_ARCH}" HOST_LD_ARCH = "${TARGET_LD_ARCH}" HOST_AS_ARCH = "${TARGET_AS_ARCH}" HOST_EXEEXT = "" TUNE_ARCH ??= "INVALID" TUNE_CCARGS ??= "" TUNE_CCARGS[vardepvalue] = "${TUNE_CCARGS}" TUNE_LDARGS ??= "" TUNE_ASARGS ??= "" TUNE_FEATURES ??= "${TUNE_FEATURES_tune-${DEFAULTTUNE}}" LIBCEXTENSION ??= "" ABIEXTENSION ??= "" USE_NLS ??= "yes" SDKUSE_NLS ??= "yes" TARGET_ARCH = "${TUNE_ARCH}" TARGET_OS = "linux${LIBCEXTENSION}${ABIEXTENSION}" TARGET_VENDOR = "-oe" TARGET_SYS = "${TARGET_ARCH}${TARGET_VENDOR}${@['-' + d.getVar('TARGET_OS', True), ''][d.getVar('TARGET_OS', True) == ('' or 'custom')]}" TARGET_PREFIX = "${TARGET_SYS}-" TARGET_CC_ARCH = "${TUNE_CCARGS}" TARGET_LD_ARCH = "${TUNE_LDARGS}" TARGET_AS_ARCH = "${TUNE_ASARGS}" SDK_ARCH = "${BUILD_ARCH}" SDK_OS = "${BUILD_OS}" SDK_VENDOR = "-oesdk" SDK_SYS = "${SDK_ARCH}${SDK_VENDOR}${@['-' + d.getVar('SDK_OS', True), ''][d.getVar('SDK_OS', True) == ('' or 'custom')]}" SDK_PREFIX = "${SDK_SYS}-" SDK_CC_ARCH = "${BUILD_CC_ARCH}" SDKPKGSUFFIX = "nativesdk" SDK_PACKAGE_ARCHS = "all any noarch ${SDK_ARCH}-${SDKPKGSUFFIX}" SDK_LD_ARCH = "${BUILD_LD_ARCH}" SDK_AS_ARCH = "${BUILD_AS_ARCH}" TUNE_PKGARCH ??= "" PACKAGE_ARCH = "${TUNE_PKGARCH}" MACHINE_ARCH = "${@[d.getVar('TUNE_PKGARCH', True), d.getVar('MACHINE', True)][bool(d.getVar('MACHINE', True))].replace('-', '_')}" PACKAGE_EXTRA_ARCHS ??= "${PACKAGE_EXTRA_ARCHS_tune-${DEFAULTTUNE}}" PACKAGE_ARCHS = "all any noarch ${PACKAGE_EXTRA_ARCHS} ${MACHINE_ARCH}" # MACHINE_ARCH shouldn't be included here as a variable dependency # since machine specific packages are handled using multimachine PACKAGE_ARCHS[vardepsexclude] = "MACHINE_ARCH" MULTIMACH_TARGET_SYS = "${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}" MULTIMACH_HOST_SYS = "${PACKAGE_ARCH}${HOST_VENDOR}-${HOST_OS}" ################################################################## # Date/time variables. ################################################################## DATE := "${@time.strftime('%Y%m%d',time.gmtime())}" TIME := "${@time.strftime('%H%M%S',time.gmtime())}" DATETIME = "${DATE}${TIME}" ################################################################## # Openembedded Software Prerequisites. ################################################################## # python-native should be here but python relies on building # its own in staging ASSUME_PROVIDED = "\ bzip2-native \ chrpath-native \ git-native \ grep-native \ diffstat-native \ patch-native \ perl-native-runtime \ python-native-runtime \ tar-native \ virtual/libintl-native \ texinfo-native\ " # gzip-native should be listed above? ################################################################## # Package default variables. ################################################################## PN = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE'),d)[0] or 'defaultpkgname'}" PV = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE'),d)[1] or '1.0'}" PR = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE'),d)[2] or 'r0'}" PRINC ?= "0" PF = "${PN}-${EXTENDPE}${PV}-${PR}" EXTENDPE = "${@['','${PE\x7d_'][int(d.getVar('PE',1) or 0) > 0]}" P = "${PN}-${PV}" EXTENDPRAUTO = "${@['.${PRAUTO\x7d',''][d.getVar('PRAUTO',1) is None]}" PRAUTOINX = "${PF}" PKGV ?= "${PV}" PKGR ?= "${PR}${EXTENDPRAUTO}" PKGE ?= "${@['','${PE\x7d'][int(d.getVar('PE',1) or 0) > 0]}" EXTENDPKGEVER = "${@['','${PKGE\x7d:'][d.getVar('PKGE',1).strip() != '']}" EXTENDPKGV ?= "${EXTENDPKGEVER}${PKGV}-${PKGR}" # Base package name # Automatically derives "foo" from "foo-native", "foo-cross" or "foo-initial" # otherwise it is the same as PN and P SPECIAL_PKGSUFFIX = "-native -cross -initial -intermediate -crosssdk -cross-canadian" BPN = "${@base_prune_suffix(d.getVar('PN', True), d.getVar('SPECIAL_PKGSUFFIX', True).split(), d)}" BP = "${BPN}-${PV}" # Package info. SECTION = "base" PRIORITY = "optional" SUMMARY ?= "${PN} version ${PV}-${PR}" DESCRIPTION ?= "${SUMMARY}." # The following two are commented out because they result in a recursive # definition of the variable in some corner cases. These are left in # to illustrate the intended behavior. #SUMMARY_${PN} ?= "${SUMMARY}" #DESCRIPTION_${PN} ?= "${DESCRIPTION}" SUMMARY_${PN}-dbg ?= "${SUMMARY} - Debugging files" DESCRIPTION_${PN}-dbg ?= "${DESCRIPTION} \ This package contains ELF symbols and related sources for debugging purposes." SUMMARY_${PN}-dev ?= "${SUMMARY} - Development files" DESCRIPTION_${PN}-dev ?= "${DESCRIPTION} \ This package contains symbolic links, header files, and \ related items necessary for software development." SUMMARY_${PN}-staticdev ?= "${SUMMARY} - Development files (Static Libraries)" DESCRIPTION_${PN}-staticdev?= "${DESCRIPTION} \ This package contains static libraries for software development." SUMMARY_${PN}-doc ?= "${SUMMARY} - Documentation files" DESCRIPTION_${PN}-doc ?= "${DESCRIPTION} \ This package contains documentation." LICENSE = "INVALID" MAINTAINER = "OE-Core Developers <openembedded-core@lists.openembedded.org>" HOMEPAGE = "" # Package dependencies and provides. # Ensure that -dev packages recommend the corresponding -dev packages of their # deps, and the same for -dbg. DEPCHAIN_PRE = "" DEPCHAIN_POST = "-dev -dbg" DEPENDS = "" RDEPENDS = "" PROVIDES = "" PROVIDES_prepend = "${PN} " RPROVIDES = "" MULTI_PROVIDER_WHITELIST = "virtual/libintl virtual/libintl-native virtual/nativesdk-libintl virtual/xserver virtual/update-alternatives-native virtual/update-alternatives" SOLIBS = ".so.*" SOLIBS_darwin = ".dylib" SOLIBSDEV = ".so" # Due to the ordering of PACKAGES and the naming of the dev symlinks on darwin, # we can't make the symlinks end up in the -dev packages easily at this point. This hack # at least means builds aren't completely broken and symlinks don't take up much space. SOLIBSDEV_darwin = ".dylibbroken" PACKAGE_BEFORE_PN ?= "" PACKAGES = "${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}" PACKAGES_DYNAMIC = "^${PN}-locale-.*" FILES = "" FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*${SOLIBS} \ ${sysconfdir} ${sharedstatedir} ${localstatedir} \ ${base_bindir}/* ${base_sbindir}/* \ ${base_libdir}/*${SOLIBS} \ ${base_prefix}/lib/udev/rules.d ${prefix}/lib/udev/rules.d \ ${datadir}/${BPN} ${libdir}/${BPN}/* \ ${datadir}/pixmaps ${datadir}/applications \ ${datadir}/idl ${datadir}/omf ${datadir}/sounds \ ${libdir}/bonobo/servers" FILES_${PN}-bin = "${bindir}/* ${sbindir}/*" FILES_${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \ ${datadir}/gnome/help" SECTION_${PN}-doc = "doc" FILES_SOLIBSDEV ?= "${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV}" FILES_${PN}-dev = "${includedir} ${FILES_SOLIBSDEV} ${libdir}/*.la \ ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \ ${datadir}/aclocal ${base_libdir}/*.o \ ${libdir}/${BPN}/*.la ${base_libdir}/*.la" SECTION_${PN}-dev = "devel" ALLOW_EMPTY_${PN}-dev = "1" RDEPENDS_${PN}-dev = "${PN} (= ${EXTENDPKGV})" FILES_${PN}-staticdev = "${libdir}/*.a ${base_libdir}/*.a ${libdir}/${BPN}/*.a" SECTION_${PN}-staticdev = "devel" RDEPENDS_${PN}-staticdev = "${PN}-dev (= ${EXTENDPKGV})" DOTDEBUG-dbg = "${bindir}/.debug ${sbindir}/.debug ${libexecdir}/.debug ${libdir}/.debug \ ${base_bindir}/.debug ${base_sbindir}/.debug ${base_libdir}/.debug ${libdir}/${BPN}/.debug \ ${libdir}/matchbox-panel/.debug ${libexecdir}/${BPN}/.debug /usr/src/debug" DEBUGFILEDIRECTORY-dbg = "/usr/lib/debug /usr/src/debug" FILES_${PN}-dbg = "${@d.getVar(['DOTDEBUG-dbg', 'DEBUGFILEDIRECTORY-dbg'][d.getVar('PACKAGE_DEBUG_SPLIT_STYLE', True) == 'debug-file-directory'], True)}" SECTION_${PN}-dbg = "devel" ALLOW_EMPTY_${PN}-dbg = "1" FILES_${PN}-locale = "${datadir}/locale" # File manifest FILE_DIRNAME = "${@os.path.dirname(d.getVar('FILE'))}" # FILESPATH is set in base.bbclass #FILESPATH = "${FILE_DIRNAME}/${PF}:${FILE_DIRNAME}/${P}:${FILE_DIRNAME}/${PN}:${FILE_DIRNAME}/${BP}:${FILE_DIRNAME}/${BPN}:${FILE_DIRNAME}/files:${FILE_DIRNAME}" ################################################################## # General work and output directories for the build system. ################################################################## TMPDIR ?= "${TOPDIR}/tmp" CACHE = "${TMPDIR}/cache${@['', '/' + str(d.getVar('MACHINE', True))][bool(d.getVar('MACHINE', True))]}${@['', '/' + str(d.getVar('SDKMACHINE', True))][bool(d.getVar('SDKMACHINE', True))]}" # The persistent cache should be shared by all builds PERSISTENT_DIR = "${TOPDIR}/cache" LOG_DIR = "${TMPDIR}/log" CO_DIR = "${DL_DIR}" CVSDIR = "${CO_DIR}/cvs" SVNDIR = "${CO_DIR}/svn" GITDIR = "${CO_DIR}/git2" BZRDIR = "${CO_DIR}/bzr" HGDIR = "${CO_DIR}/hg" STAMPS_DIR ?= "${TMPDIR}/stamps" STAMP = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}" STAMPCLEAN = "${STAMPS_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/*-*" BASE_WORKDIR ?= "${TMPDIR}/work" WORKDIR = "${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}" T = "${WORKDIR}/temp" D = "${WORKDIR}/image" S = "${WORKDIR}/${BP}" B = "${S}" STAGING_DIR = "${TMPDIR}/sysroots" STAGING_DIR_NATIVE = "${STAGING_DIR}/${BUILD_SYS}" STAGING_BINDIR_NATIVE = "${STAGING_DIR_NATIVE}${bindir_native}" STAGING_BINDIR_CROSS = "${STAGING_BINDIR}/crossscripts" STAGING_BINDIR_TOOLCHAIN = "${STAGING_DIR_NATIVE}${bindir_native}/${TARGET_ARCH}${TARGET_VENDOR}-${TARGET_OS}" STAGING_LIBDIR_NATIVE = "${STAGING_DIR_NATIVE}${libdir_native}" STAGING_LIBEXECDIR_NATIVE = "${STAGING_DIR_NATIVE}${libexecdir_native}" STAGING_BASE_LIBDIR_NATIVE = "${STAGING_DIR_NATIVE}${base_libdir_native}" STAGING_SBINDIR_NATIVE = "${STAGING_DIR_NATIVE}${sbindir_native}" STAGING_INCDIR_NATIVE = "${STAGING_DIR_NATIVE}${includedir_native}" STAGING_ETCDIR_NATIVE = "${STAGING_DIR_NATIVE}${sysconfdir_native}" STAGING_DATADIR_NATIVE = "${STAGING_DIR_NATIVE}${datadir_native}" STAGING_DIR_HOST = "${STAGING_DIR}/${MACHINE}" STAGING_BINDIR = "${STAGING_DIR_HOST}${bindir}" STAGING_LIBDIR = "${STAGING_DIR_HOST}${libdir}" STAGING_LIBEXECDIR = "${STAGING_DIR_HOST}${libexecdir}" STAGING_BASELIBDIR = "${STAGING_DIR_HOST}${base_libdir}" STAGING_INCDIR = "${STAGING_DIR_HOST}${includedir}" STAGING_DATADIR = "${STAGING_DIR_HOST}${datadir}" STAGING_EXECPREFIXDIR = "${STAGING_DIR_HOST}${exec_prefix}" STAGING_LOADER_DIR = "${STAGING_DIR_HOST}/loader" STAGING_FIRMWARE_DIR = "${STAGING_DIR_HOST}/firmware" STAGING_DIR_TARGET = "${STAGING_DIR}/${MACHINE}" STAGING_DIR_TCBOOTSTRAP = "${STAGING_DIR_TARGET}-tcbootstrap" # Setting DEPLOY_DIR outside of TMPDIR is helpful, when you are using # packaged staging and/or multimachine. DEPLOY_DIR ?= "${TMPDIR}/deploy" DEPLOY_DIR_TAR = "${DEPLOY_DIR}/tar" DEPLOY_DIR_IPK = "${DEPLOY_DIR}/ipk" DEPLOY_DIR_RPM = "${DEPLOY_DIR}/rpm" DEPLOY_DIR_DEB = "${DEPLOY_DIR}/deb" DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR}/images/${MACHINE}" DEPLOY_DIR_TOOLS = "${DEPLOY_DIR}/tools" PKGDATA_DIR = "${STAGING_DIR_HOST}/pkgdata" ################################################################## # SDK variables. ################################################################## SDK_NAME_PREFIX ?= "oecore" SDK_NAME = "${SDK_NAME_PREFIX}-${SDK_ARCH}-${TUNE_PKGARCH}" SDKPATH = "/usr/local/${SDK_NAME_PREFIX}-${SDK_ARCH}" SDKPATHNATIVE = "${SDKPATH}/sysroots/${SDK_SYS}" ################################################################## # Kernel info. ################################################################## OLDEST_KERNEL = "2.6.16" STAGING_KERNEL_DIR = "${STAGING_DIR_HOST}/usr/src/kernel" ################################################################## # Specific image creation and rootfs population info. ################################################################## IMAGE_ROOTFS = "${WORKDIR}/rootfs" IMAGE_BASENAME = "${PN}" IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-${DATETIME}" IMAGE_NAME[vardepsexclude] += "DATETIME" IMAGE_LINK_NAME = "${IMAGE_BASENAME}-${MACHINE}" # This option allows for a percentage overage of the actual image size rather than a # fixed extra space, this is space needed for initial startup and basic operations. IMAGE_OVERHEAD_FACTOR ?= "1.3" # This option allows for adding additional space in K above and beyond what the # IMAGE_OVERHEAD_FACTOR might add. This space is for additional packages, user data, ... # To set a fixed size then overriding IMAGE_ROOTFS_SIZE with the max size one wants # should do the trick IMAGE_ROOTFS_EXTRA_SPACE ?= "0" EXTRA_IMAGEDEPENDS = "" ################################################################## # Toolchain info. ################################################################## PATH_prepend = "${COREBASE}/scripts:${STAGING_BINDIR_TOOLCHAIN}:${STAGING_BINDIR_CROSS}:${STAGING_DIR_NATIVE}${sbindir_native}:${STAGING_BINDIR_NATIVE}:${STAGING_DIR_NATIVE}${base_sbindir_native}:${STAGING_DIR_NATIVE}${base_bindir_native}:" export PATH ################################################################## # Build utility info. ################################################################## CCACHE ??= "" # Disable ccache explicitly if CCACHE is null since gcc may be a symlink # of ccache some distributions (e.g., Fedora 17). export CCACHE_DISABLE ??= "${@[0,1][d.getVar('CCACHE', True) == '']}" # Assign CCACHE_DIR a default value to fix a bug of ccache 3.1.7, # since it would always create CCACHE_DIR/.ccache even if # CCACHE_DISABLE = 1. export CCACHE_DIR ??= "${@os.getenv('HOME')}" TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TARGET}" export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" export CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" export FC = "${CCACHE}${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" export CPP = "${HOST_PREFIX}gcc -E${TOOLCHAIN_OPTIONS} ${HOST_CC_ARCH}" export LD = "${HOST_PREFIX}ld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}" export CCLD = "${CC}" export AR = "${HOST_PREFIX}ar" export AS = "${HOST_PREFIX}as ${HOST_AS_ARCH}" export RANLIB = "${HOST_PREFIX}ranlib" export STRIP = "${HOST_PREFIX}strip" export OBJCOPY = "${HOST_PREFIX}objcopy" export OBJDUMP = "${HOST_PREFIX}objdump" export STRINGS = "${HOST_PREFIX}strings" export NM = "${HOST_PREFIX}nm" PYTHON = "${@sys.executable}" export BUILD_CC = "${CCACHE}${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}" export BUILD_CXX = "${CCACHE}${BUILD_PREFIX}g++ ${BUILD_CC_ARCH}" export BUILD_FC = "${CCACHE}${BUILD_PREFIX}gfortran ${BUILD_CC_ARCH}" export BUILD_CPP = "${BUILD_PREFIX}cpp ${BUILD_CC_ARCH}" export BUILD_LD = "${BUILD_PREFIX}ld ${BUILD_LD_ARCH}" export BUILD_CCLD = "${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}" export BUILD_AR = "${BUILD_PREFIX}ar" export BUILD_AS = "${BUILD_PREFIX}as ${BUILD_AS_ARCH}" export BUILD_RANLIB = "${BUILD_PREFIX}ranlib" export BUILD_STRIP = "${BUILD_PREFIX}strip" export BUILD_NM = "${BUILD_PREFIX}nm" export MAKE = "make" EXTRA_OEMAKE = "-e MAKEFLAGS=" EXTRA_OECONF = "" export LC_ALL = "C" ################################################################## # Patch handling. ################################################################## PATCHTOOL = 'quilt' PATCHRESOLVE = 'user' ################################################################## # Build flags and options. ################################################################## export BUILD_CPPFLAGS = "-isystem${STAGING_INCDIR_NATIVE}" BUILDSDK_CPPFLAGS = "-isystem${STAGING_INCDIR}" export CPPFLAGS = "${TARGET_CPPFLAGS}" export TARGET_CPPFLAGS = "" #export TARGET_CPPFLAGS = "-isystem${STAGING_DIR_TARGET}${includedir}" export BUILD_CFLAGS = "${BUILD_CPPFLAGS} ${BUILD_OPTIMIZATION}" BUILDSDK_CFLAGS = "${BUILDSDK_CPPFLAGS} ${BUILD_OPTIMIZATION}" export CFLAGS = "${TARGET_CFLAGS}" export TARGET_CFLAGS = "${TARGET_CPPFLAGS} ${SELECTED_OPTIMIZATION}" export BUILD_CXXFLAGS = "${BUILD_CFLAGS}" export CXXFLAGS = "${TARGET_CXXFLAGS}" export TARGET_CXXFLAGS = "${TARGET_CFLAGS}" export BUILD_LDFLAGS = "-L${STAGING_LIBDIR_NATIVE} \ -L${STAGING_BASE_LIBDIR_NATIVE} \ -Wl,-rpath-link,${STAGING_LIBDIR_NATIVE} \ -Wl,-rpath-link,${STAGING_BASE_LIBDIR_NATIVE} \ -Wl,-rpath,${STAGING_LIBDIR_NATIVE} \ -Wl,-rpath,${STAGING_BASE_LIBDIR_NATIVE} \ -Wl,-O1" BUILDSDK_LDFLAGS = "-L${STAGING_LIBDIR} \ -Wl,-rpath-link,${STAGING_LIBDIR} \ -Wl,-rpath,${libdir} -Wl,-O1 \ -L${STAGING_DIR_HOST}${base_libdir} \ -Wl,-rpath-link,${STAGING_DIR_HOST}${base_libdir} \ -Wl,-rpath,${base_libdir} -Wl,-O1" LINKER_HASH_STYLE ??= "gnu" # mips does not support GNU hash style therefore we override LINKER_HASH_STYLE_mips = "sysv" LINKER_HASH_STYLE_mipsel = "sysv" LINKER_HASH_STYLE_mips64 = "sysv" LINKER_HASH_STYLE_mips64el = "sysv" TARGET_LINK_HASH_STYLE ?= "${@['-Wl,--hash-style=gnu',''][d.getVar('LINKER_HASH_STYLE', True) != 'gnu']}" export LDFLAGS = "${TARGET_LDFLAGS}" export TARGET_LDFLAGS = "-Wl,-O1 ${TARGET_LINK_HASH_STYLE}" #export TARGET_LDFLAGS = "-L${STAGING_DIR_TARGET}${libdir} \ # -Wl,-rpath-link,${STAGING_DIR_TARGET}${libdir} \ # -Wl,-O1" # Which flags to leave by strip-flags() in bin/build/oebuild.sh ? ALLOWED_FLAGS = "-O -mcpu -march -pipe" # Pass parallel make options to the compile task EXTRA_OEMAKE_prepend_task-compile = "${PARALLEL_MAKE} " PARALLEL_MAKEINST ??= "${PARALLEL_MAKE}" # Pass parallel make options to the install task EXTRA_OEMAKE_prepend_task-install = "${PARALLEL_MAKEINST} " ################################################################## # Optimization flags. ################################################################## DEBUG_FLAGS ?= "-g -feliminate-unused-debug-types" # Disabled until the option works properly -feliminate-dwarf2-dups FULL_OPTIMIZATION = "-O2 -pipe ${DEBUG_FLAGS}" DEBUG_OPTIMIZATION = "-O -fno-omit-frame-pointer ${DEBUG_FLAGS} -pipe" SELECTED_OPTIMIZATION = "${@d.getVar(['FULL_OPTIMIZATION', 'DEBUG_OPTIMIZATION'][d.getVar('DEBUG_BUILD', True) == '1'], True)}" SELECTED_OPTIMIZATION[vardeps] += "FULL_OPTIMIZATION DEBUG_OPTIMIZATION" BUILD_OPTIMIZATION = "-O2 -pipe" ################################################################## # Download locations and utilities. ################################################################## APACHE_MIRROR = "http://www.apache.org/dist" DEBIAN_MIRROR = "ftp://ftp.debian.org/debian/pool" GENTOO_MIRROR = "http://distfiles.gentoo.org/distfiles" GNOME_GIT = "git://git.gnome.org" GNOME_MIRROR = "http://ftp.gnome.org/pub/GNOME/sources" GNU_MIRROR = "ftp://ftp.gnu.org/gnu" GPE_MIRROR = "http://gpe.linuxtogo.org/download/source" KERNELORG_MIRROR = "http://kernel.org/pub" SOURCEFORGE_MIRROR = "http://downloads.sourceforge.net" XLIBS_MIRROR = "http://xlibs.freedesktop.org/release" XORG_MIRROR = "http://xorg.freedesktop.org/releases" SAVANNAH_GNU_MIRROR = "http://download.savannah.gnu.org/releases" SAVANNAH_NONGNU_MIRROR = "http://download.savannah.nongnu.org/releases" CPAN_MIRROR = "http://search.cpan.org/CPAN" # You can use the mirror of your country to get faster downloads by putting # export DEBIAN_MIRROR = "ftp://ftp.de.debian.org/debian/pool" # into your local.conf FETCHCMD_svn = "/usr/bin/env svn --non-interactive --trust-server-cert" FETCHCMD_cvs = "/usr/bin/env cvs" FETCHCMD_wget = "/usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate" FETCHCMD_bzr = "/usr/bin/env bzr" FETCHCMD_hg = "/usr/bin/env hg" SRCDATE = "${DATE}" SRCREV ??= "INVALID" AUTOREV = "${@bb.fetch2.get_autorev(d)}" SRCPV = "${@bb.fetch2.get_srcrev(d)}" SRCPV[vardepvalue] = "${SRCPV}" SRC_URI = "" # Use pseudo as the fakeroot implementation PSEUDO_LOCALSTATEDIR ?= "${WORKDIR}/pseudo/" PSEUDO_PASSWD ?= "${STAGING_DIR_TARGET}" export PSEUDO_DISABLED = "1" #export PSEUDO_PREFIX = "${STAGING_DIR_NATIVE}${prefix_native}" #export PSEUDO_BINDIR = "${STAGING_DIR_NATIVE}${bindir_native}" #export PSEUDO_LIBDIR = "${STAGING_DIR_NATIVE}$PSEUDOBINDIR/../lib/pseudo/lib FAKEROOTBASEENV = "PSEUDO_BINDIR=${STAGING_BINDIR_NATIVE} PSEUDO_LIBDIR=${STAGING_BINDIR_NATIVE}/../lib/pseudo/lib PSEUDO_PREFIX=${STAGING_BINDIR_NATIVE}/../../ PSEUDO_DISABLED=1" FAKEROOTCMD = "${STAGING_BINDIR_NATIVE}/pseudo" FAKEROOTENV = "PSEUDO_PREFIX=${STAGING_DIR_NATIVE}${prefix_native} PSEUDO_LOCALSTATEDIR=${PSEUDO_LOCALSTATEDIR} PSEUDO_PASSWD=${PSEUDO_PASSWD} PSEUDO_NOSYMLINKEXP=1 PSEUDO_DISABLED=0" FAKEROOTNOENV = "PSEUDO_UNLOAD=1" FAKEROOTDIRS = "${PSEUDO_LOCALSTATEDIR}" PREFERRED_PROVIDER_virtual/fakeroot-native ?= "pseudo-native" ################################################################## # Miscellaneous utilities. ################################################################## MKTEMPDIRCMD = "mktemp -d -q ${TMPBASE}" MKTEMPCMD = "mktemp -q ${TMPBASE}" # GNU patch tries to be intellgent about checking out read-only files from # a RCS, which freaks out those special folks with active Perforce clients # the following makes patch ignore RCS: export PATCH_GET="0" ################################################################## # Not sure about the rest of this yet. ################################################################## # Pre-build configuration output BUILDCFG_HEADER = "Build Configuration:" BUILDCFG_VARS = "BB_VERSION BUILD_SYS NATIVELSBSTRING TARGET_SYS MACHINE DISTRO DISTRO_VERSION TUNE_FEATURES TARGET_FPU" BUILDCFG_VARS[type] = "list" BUILDCFG_NEEDEDVARS = "TARGET_ARCH TARGET_OS" BUILDCFG_NEEDEDVARS[type] = "list" # Other export PKG_CONFIG_DIR = "${STAGING_DIR_HOST}${libdir}/pkgconfig" export PKG_CONFIG_PATH = "${PKG_CONFIG_DIR}:${STAGING_DATADIR}/pkgconfig" export PKG_CONFIG_LIBDIR = "${PKG_CONFIG_DIR}" export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR_HOST}" export PKG_CONFIG_DISABLE_UNINSTALLED = "yes" # library package naming AUTO_LIBNAME_PKGS = "${PACKAGES}" ### ### Config file processing ### # An empty distro leads to :: entries in OVERRIDES and FILEOVERRIDES which # is a bad idea. Setting a dummy value is better than a ton of anonymous python. DISTRO ??= "nodistro" # Overrides are processed left to right, so the ones that are named later take precedence. # You generally want them to go from least to most specific. # # This means that an envionment variable named '<foo>_arm' overrides an # environment variable '<foo>' (when ${TARGET_ARCH} is arm). # An environment variable '<foo>_qemuarm' overrides '<foo>' and overrides # '<foo>_arm' when ${MACHINE} is 'qemuarm'. # If you use combination ie '<foo>_qemuarm_arm', then '<foo>_qemuarm_arm' will override # '<foo>_qemuarm' and then '<foo>' will be overriden with that value from '<foo>_qemuarm'. # And finally '<foo>_forcevariable' overrides any standard variable, with the highest priority. # # This works for functions as well, they are really just environment variables. # Default OVERRIDES to make compilation fail fast in case of build system misconfiguration. OVERRIDES = "${TARGET_OS}:${TRANSLATED_TARGET_ARCH}:build-${BUILD_OS}:pn-${PN}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${CLASSOVERRIDE}:forcevariable" OVERRIDES[vardepsexclude] = "MACHINEOVERRIDES" CLASSOVERRIDE ?= "class-target" DISTROOVERRIDES ?= "${@d.getVar('DISTRO', True) or ''}" MACHINEOVERRIDES ?= "${MACHINE}" MACHINEOVERRIDES[vardepsexclude] = "MACHINE" FILESOVERRIDES = "${TRANSLATED_TARGET_ARCH}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}" ################################################################## # Include the rest of the config files. ################################################################## require conf/abi_version.conf include conf/site.conf include conf/auto.conf include conf/local.conf include conf/build/${BUILD_SYS}.conf include conf/target/${TARGET_SYS}.conf include conf/machine/${MACHINE}.conf include conf/machine-sdk/${SDKMACHINE}.conf include conf/distro/${DISTRO}.conf include conf/distro/defaultsetup.conf include conf/documentation.conf include conf/licenses.conf require conf/sanity.conf ################################################################## # Weak variables (usually to retain backwards compatibility) ################################################################## DL_DIR ?= "${TOPDIR}/downloads" SSTATE_DIR ?= "${TOPDIR}/sstate-cache" IMAGE_FSTYPES ?= "tar.gz" INITRAMFS_FSTYPES ?= "cpio.gz" DEFAULT_TASK_PROVIDER ?= "packagegroup-base" MACHINE_TASK_PROVIDER ?= "${DEFAULT_TASK_PROVIDER}" # The size in Kbytes for the generated image if it is larger than # the required size (du -ks IMAGE_ROOTFS * IMAGE_OVERHEAD_FACTOR), # and no effect if less than it. IMAGE_ROOTFS_SIZE ?= "65536" # Forcefully set CACHE now so future changes to things like # MACHINE don't change the path to the cache CACHE := "${CACHE}" # Default to setting automatically based on cpu count BB_NUMBER_THREADS ?= "${@oe.utils.cpu_count()}" # Default to setting automatically based on cpu count PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count()}" ################################################################## # Magic Cookie for SANITY CHECK ################################################################## OES_BITBAKE_CONF = "1" ################################################################## # Machine properties and packagegroup-base stuff ################################################################## MACHINE_FEATURES ?= "" DISTRO_FEATURES ?= "" DISTRO_EXTRA_RDEPENDS ?= "" DISTRO_EXTRA_RRECOMMENDS ?= "" MACHINE_EXTRA_RDEPENDS ?= "" MACHINE_EXTRA_RRECOMMENDS ?= "" MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= "" MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= "" EXTRA_IMAGE_FEATURES ??= "" IMAGE_FEATURES += "${EXTRA_IMAGE_FEATURES}" DISTRO_FEATURES_BACKFILL = "pulseaudio sysvinit" MACHINE_FEATURES_BACKFILL = "rtc" COMBINED_FEATURES = "\ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "alsa", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "bluetooth", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "ext2", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "vfat", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "irda", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "pcmcia", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "pci", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "usbgadget", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "usbhost", d)} \ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "wifi", d)}" COMBINED_FEATURES[vardeps] += "DISTRO_FEATURES MACHINE_FEATURES" SERIAL_CONSOLE ??= "" SERIAL_CONSOLES ??= "${@d.getVar('SERIAL_CONSOLE', True).replace(' ', ';')}" NO_RECOMMENDATIONS ?= "" BAD_RECOMMENDATIONS ?= "" # Make sure MACHINE isn't exported # (breaks binutils at least) MACHINE[unexport] = "1" # Make sure TARGET_ARCH isn't exported # (breaks Makefiles using implicit rules, e.g. quilt, as GNU make has this # in them, undocumented) TARGET_ARCH[unexport] = "1" # Make sure DISTRO isn't exported # (breaks sysvinit at least) DISTRO[unexport] = "1" # Used by canadian-cross to handle string conversions on TARGET_ARCH where needed TRANSLATED_TARGET_ARCH ??= "${@d.getVar('TARGET_ARCH', True).replace("_", "-")}" # Complete output from bitbake BB_CONSOLELOG ?= "${LOG_DIR}/cooker/${MACHINE}/${DATETIME}.log" # Setup our default hash policy BB_SIGNATURE_HANDLER ?= "OEBasicHash" BB_HASHBASE_WHITELIST ?= "TMPDIR FILE PATH PWD BB_TASKHASH BBPATH DL_DIR \ SSTATE_DIR THISDIR FILESEXTRAPATHS FILE_DIRNAME HOME LOGNAME SHELL TERM \ USER FILESPATH STAGING_DIR_HOST STAGING_DIR_TARGET COREBASE PRSERV_HOST \ PRSERV_DUMPDIR PRSERV_DUMPFILE PRSERV_LOCKDOWN PARALLEL_MAKE \ CCACHE_DIR EXTERNAL_TOOLCHAIN CCACHE CCACHE_DISABLE LICENSE_PATH SDKPKGSUFFIX \ WARN_QA ERROR_QA WORKDIR STAMPCLEAN" BB_HASHCONFIG_WHITELIST ?= "${BB_HASHBASE_WHITELIST} DATE TIME SSH_AGENT_PID \ SSH_AUTH_SOCK PSEUDO_BUILD BB_ENV_EXTRAWHITE DISABLE_SANITY_CHECKS \ PARALLEL_MAKE BB_NUMBER_THREADS BB_ORIGENV BB_INVALIDCONF BBINCLUDED" BB_SIGNATURE_EXCLUDE_FLAGS ?= "doc defaultval _append _prepend deps depends \ lockfiles type vardepsexclude vardeps vardepvalue vardepvalueexclude \ file-checksums python func task export unexport noexec nostamp dirs cleandirs \ sstate-lockfile-shared prefuncs postfuncs export_func deptask rdeptask \ recrdeptask nodeprrecs stamp-base stamp-extra-info" MLPREFIX ??= "" MULTILIB_VARIANTS ??= ""