################################################################## # Standard target filesystem paths. ################################################################## # Path prefixes export base_prefix = "" export prefix = "/usr" export exec_prefix = "${prefix}" # Base paths export base_bindir = "${base_prefix}/bin" export base_sbindir = "${base_prefix}/sbin" export base_libdir = "${base_prefix}/lib" # Architecture independent paths export datadir = "${prefix}/share" export sysconfdir = "/etc" export sharedstatedir = "${prefix}/com" export localstatedir = "/var" export infodir = "${datadir}/info" export mandir = "${datadir}/man" export docdir = "${datadir}/doc" export servicedir = "/srv" # Architecture dependent paths export bindir = "${exec_prefix}/bin" export sbindir = "${exec_prefix}/sbin" export libexecdir = "${exec_prefix}/libexec" export libdir = "${exec_prefix}/lib" export includedir = "${exec_prefix}/include" export oldincludedir = "${exec_prefix}/include" ################################################################## # 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 = "" 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}" TARGET_ARCH = "INVALID" TARGET_OS = "INVALID" TARGET_VENDOR = "${BUILD_VENDOR}" TARGET_SYS = "${TARGET_ARCH}${TARGET_VENDOR}${@['-' + bb.data.getVar('TARGET_OS', d, 1), ''][bb.data.getVar('TARGET_OS', d, 1) == ('' or 'custom')]}" TARGET_PREFIX = "${TARGET_SYS}-" TARGET_CC_ARCH = "" PACKAGE_ARCH = "${HOST_ARCH}" MACHINE_ARCH = "${@[bb.data.getVar('HOST_ARCH', d, 1), bb.data.getVar('MACHINE', d, 1)][bool(bb.data.getVar('MACHINE', d, 1))]}" PACKAGE_ARCHS = "all any noarch ${TARGET_ARCH} ${PACKAGE_EXTRA_ARCHS} ${MACHINE}" ################################################################## # 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 = "cvs-native svn-native bzip2-native diffstat-native patch-native python-native-runtime perl-native-runtime texinfo-native util-linux-native" ################################################################## # Package default variables. ################################################################## PN = "${@bb.parse.BBHandler.vars_from_file(bb.data.getVar('FILE',d),d)[0] or 'defaultpkgname'}" PV = "${@bb.parse.BBHandler.vars_from_file(bb.data.getVar('FILE',d),d)[1] or '1.0'}" PR = "${@bb.parse.BBHandler.vars_from_file(bb.data.getVar('FILE',d),d)[2] or 'r0'}" PF = "${PN}-${PV}-${PR}" P = "${PN}-${PV}" # Package info. SECTION = "base" PRIORITY = "optional" DESCRIPTION = "Version ${PV}-${PR} of package ${PN}" LICENSE = "unknown" MAINTAINER = "OpenEmbedded Team " HOMEPAGE = "unknown" # 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 = "${P} ${PF} ${PN} " RPROVIDES = "" PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-dev ${PN}-locale" FILES = "" FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*.so.* \ ${sysconfdir} ${sharedstatedir} ${localstatedir} \ /bin/* /sbin/* /lib/*.so* ${datadir}/${PN} ${libdir}/${PN}/* \ ${datadir}/pixmaps ${datadir}/applications \ ${datadir}/idl ${datadir}/omf ${datadir}/sounds \ ${libdir}/bonobo/servers" SECTION_${PN}-doc = "doc" FILES_${PN}-doc = "${docdir} ${mandir} ${infodir} ${datadir}/gtk-doc \ ${datadir}/gnome/help" SECTION_${PN}-dev = "devel" FILES_${PN}-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \ ${libdir}/*.a ${libdir}/*.o ${libdir}/pkgconfig \ /lib/*.a /lib/*.o ${datadir}/aclocal" FILES_${PN}-locale = "${datadir}/locale" FILES_${PN}-dbg = "${bindir}/.debug ${sbindir}/.debug ${libexecdir}/.debug ${libdir}/.debug \ /bin/.debug /sbin/.debug /lib/.debug ${libdir}/${PN}/.debug" # File manifest export MANIFEST = "${FILESDIR}/manifest" FILE_DIRNAME = "${@os.path.dirname(bb.data.getVar('FILE', d))}" FILESPATH = "${FILE_DIRNAME}/${PF}:${FILE_DIRNAME}/${P}:${FILE_DIRNAME}/${PN}:${FILE_DIRNAME}/files:${FILE_DIRNAME}" FILESDIR = "${@bb.which(bb.data.getVar('FILESPATH', d, 1), '.')}" ################################################################## # General work and output directories for the build system. ################################################################## TMPDIR = "${TOPDIR}/tmp" CACHE = "${TMPDIR}/cache${@['', '/' + str(bb.data.getVar('MACHINE', d, 1))][bool(bb.data.getVar('MACHINE', d, 1))]}" DL_DIR = "${TMPDIR}/downloads" CVSDIR = "${DL_DIR}/cvs" SVNDIR = "${DL_DIR}/svn" GITDIR = "${DL_DIR}/git" STAMP = "${TMPDIR}/stamps/${PF}" WORKDIR = "${TMPDIR}/work/${PF}" T = "${WORKDIR}/temp" D = "${WORKDIR}/image" S = "${WORKDIR}/${P}" B = "${S}" STAGING_DIR = "${TMPDIR}/staging" STAGING_BINDIR = "${STAGING_DIR}/${HOST_SYS}/bin" STAGING_BINDIR_CROSS = "${STAGING_DIR}/${BUILD_SYS}/bin/${HOST_SYS}" STAGING_BINDIR_NATIVE = "${STAGING_DIR}/${BUILD_SYS}/bin" STAGING_LIBDIR = "${STAGING_DIR}/${HOST_SYS}/lib" STAGING_INCDIR = "${STAGING_DIR}/${HOST_SYS}/include" STAGING_DATADIR = "${STAGING_DIR}/${HOST_SYS}/share" STAGING_LOADER_DIR = "${STAGING_DIR}/${HOST_SYS}/loader" STAGING_FIRMWARE_DIR = "${STAGING_DIR}/${HOST_SYS}/firmware" STAGING_PYDIR = "${STAGING_DIR}/lib/python2.4" 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" ################################################################## # Kernel info. ################################################################## OLDEST_KERNEL = "2.4.0" STAGING_KERNEL_DIR = "${STAGING_DIR}/${HOST_SYS}/kernel" ################################################################## # Specific image creation and rootfs population info. ################################################################## DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images" IMAGE_ROOTFS = "${TMPDIR}/rootfs" IMAGE_BASENAME = "rootfs" IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-${DATETIME}" IMAGE_CMD = "" IMAGE_CMD_jffs2 = "mkfs.jffs2 --root=${IMAGE_ROOTFS} --faketime \ --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \ ${EXTRA_IMAGECMD}" IMAGE_CMD_cramfs = "mkcramfs ${IMAGE_ROOTFS} ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cramfs ${EXTRA_IMAGECMD}" IMAGE_CMD_ext2 = "genext2fs -b ${IMAGE_ROOTFS_SIZE} -d ${IMAGE_ROOTFS} ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext2 ${EXTRA_IMAGECMD}" IMAGE_CMD_ext2.gz = "rm -rf ${DEPLOY_DIR_IMAGE}/tmp.gz && mkdir ${DEPLOY_DIR_IMAGE}/tmp.gz; genext2fs -b ${IMAGE_ROOTFS_SIZE} -d ${IMAGE_ROOTFS} ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext2 ${EXTRA_IMAGECMD}; gzip -f -9 ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext2; mv ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext2.gz ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext2.gz; rmdir ${DEPLOY_DIR_IMAGE}/tmp.gz" IMAGE_CMD_squashfs = "mksquashfs ${IMAGE_ROOTFS} ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.squashfs ${EXTRA_IMAGECMD} -noappend" IMAGE_CMD_squashfs-lzma = "mksquashfs-lzma ${IMAGE_ROOTFS} ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.squashfs-lzma ${EXTRA_IMAGECMD} -noappend" IMAGE_CMD_tar = "cd ${IMAGE_ROOTFS} && tar -jcvf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.tar.bz2 ." IMAGE_CMD_tar.gz = "cd ${IMAGE_ROOTFS} && tar -zcvf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.tar.gz ." IMAGE_CMD_tar.bz2 = "cd ${IMAGE_ROOTFS} && tar -jcvf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.tar.bz2 ." IMAGE_CMD_cpio = "cd ${IMAGE_ROOTFS} && (find . | cpio -o -H newc >${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio)" IMAGE_CMD_cpio.gz = "cd ${IMAGE_ROOTFS} && (find . | cpio -o -H newc | gzip -c -9 >${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.cpio.gz)" EXTRA_IMAGECMD = "" EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x40000" EXTRA_IMAGECMD_squashfs = "-le -b 16384" EXTRA_IMAGECMD_squashfs-lzma = "-le -b 16384" IMAGE_DEPENDS = "" IMAGE_DEPENDS_jffs2 = "mtd-utils-native" IMAGE_DEPENDS_cramfs = "cramfs-native" IMAGE_DEPENDS_ext2 = "genext2fs-native" IMAGE_DEPENDS_ext2.gz = "genext2fs-native" IMAGE_DEPENDS_squashfs = "squashfs-tools-native" IMAGE_DEPENDS_squashfs-lzma = "squashfs-lzma-tools-native" EXTRA_IMAGEDEPENDS = "" ################################################################## # Toolchain info. ################################################################## CROSS_DIR = "${TMPDIR}/cross" CROSS_DATADIR = "${CROSS_DIR}/share" export PATH_prepend = "${STAGING_BINDIR_CROSS}:${STAGING_BINDIR_NATIVE}:${CROSS_DIR}/bin:" ################################################################## # Build utility info. ################################################################## CCACHE = "${@bb.which(bb.data.getVar('PATH', d), 'ccache') and 'ccache '}" export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}" export CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}" export F77 = "${CCACHE}${HOST_PREFIX}g77 ${HOST_CC_ARCH}" export CPP = "${HOST_PREFIX}gcc -E" export LD = "${HOST_PREFIX}ld" export CCLD = "${CC}" export AR = "${HOST_PREFIX}ar" export AS = "${HOST_PREFIX}as" export RANLIB = "${HOST_PREFIX}ranlib" export STRIP = "${HOST_PREFIX}strip" export OBJCOPY = "${HOST_PREFIX}objcopy" export OBJDUMP = "${HOST_PREFIX}objdump" export BUILD_CC = "${CCACHE}${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}" export BUILD_CXX = "${CCACHE}${BUILD_PREFIX}g++ ${BUILD_CC_ARCH}" export BUILD_F77 = "${CCACHE}${BUILD_PREFIX}g77 ${BUILD_CC_ARCH}" export BUILD_CPP = "${BUILD_PREFIX}cpp" export BUILD_LD = "${BUILD_PREFIX}ld" export BUILD_CCLD = "${BUILD_PREFIX}gcc" export BUILD_AR = "${BUILD_PREFIX}ar" export BUILD_RANLIB = "${BUILD_PREFIX}ranlib" export BUILD_STRIP = "${BUILD_PREFIX}strip" export MAKE = "make" EXTRA_OEMAKE = "-e MAKEFLAGS=" ################################################################## # Patch handling. ################################################################## PATCHTOOL = 'quilt' PATCHRESOLVE = 'user' ################################################################## # Build flags and options. ################################################################## export BUILD_CPPFLAGS = "-isystem${STAGING_DIR}/${BUILD_SYS}/include" export CPPFLAGS = "${TARGET_CPPFLAGS}" export TARGET_CPPFLAGS = "-isystem${STAGING_DIR}/${TARGET_SYS}/include" export BUILD_CFLAGS = "${BUILD_CPPFLAGS} ${BUILD_OPTIMIZATION}" export CFLAGS = "${TARGET_CFLAGS}" export TARGET_CFLAGS = "${TARGET_CPPFLAGS} ${SELECTED_OPTIMIZATION}" export BUILD_CXXFLAGS = "${BUILD_CFLAGS} -fpermissive" export CXXFLAGS = "${TARGET_CXXFLAGS}" export TARGET_CXXFLAGS = "${TARGET_CFLAGS} -fpermissive" export BUILD_LDFLAGS = "-L${STAGING_DIR}/${BUILD_SYS}/lib \ -Wl,-rpath-link,${STAGING_DIR}/${BUILD_SYS}/lib \ -Wl,-rpath,${STAGING_DIR}/${BUILD_SYS}/lib -Wl,-O1" export LDFLAGS = "${TARGET_LDFLAGS}" export TARGET_LDFLAGS = "-L${STAGING_DIR}/${TARGET_SYS}/lib \ -Wl,-rpath-link,${STAGING_DIR}/${TARGET_SYS}/lib \ -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 only EXTRA_OEMAKE_prepend_task_do_compile = "${PARALLEL_MAKE} " ################################################################## # Optimization flags. ################################################################## FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -O2" DEBUG_OPTIMIZATION = "-O -g" SELECTED_OPTIMIZATION = "${@bb.data.getVar(['FULL_OPTIMIZATION', 'DEBUG_OPTIMIZATION'][bb.data.getVar('DEBUG_BUILD', d, 1) == '1'], d, 1)}" BUILD_OPTIMIZATION = "-O2" ################################################################## # Bootstrap stuff. ################################################################## BOOTSTRAP_EXTRA_RDEPENDS = "" BOOTSTRAP_EXTRA_RRECOMMENDS = "" ################################################################## # Palmtop stuff. ################################################################## export QTDIR = "${STAGING_DIR}/${HOST_SYS}/qt2" export QPEDIR = "${STAGING_DIR}/${HOST_SYS}" export OPIEDIR = "${STAGING_DIR}/${HOST_SYS}" export palmtopdir = "/opt/QtPalmtop" export palmqtdir = "/opt/QtPalmtop" ################################################################## # Download locations and utilities. ################################################################## GNU_MIRROR = "ftp://ftp.gnu.org/gnu" DEBIAN_MIRROR = "ftp://ftp.debian.org/debian/pool" SOURCEFORGE_MIRROR = "http://downloads.sourceforge.net" GPE_MIRROR = "http://gpe.linuxtogo.org/download/source" GPEPHONE_MIRROR = "http://gpephone.linuxtogo.org/download/gpephone" GPE_SVN = "svn://projects.linuxtogo.org/svn/gpe/trunk/base;module=${PN}" GPE_EXTRA_SVN = "svn://projects.linuxtogo.org/svn/gpe/trunk/extra;module=${PN}" GPEPHONE_SVN = "svn://projects.linuxtogo.org/svn/gpephone/trunk/source;module=${PN}" XLIBS_MIRROR = "http://xlibs.freedesktop.org/release" XORG_MIRROR = "http://xorg.freedesktop.org/releases" GNOME_MIRROR = "http://ftp.gnome.org/pub/GNOME/sources" FREEBSD_MIRROR = "ftp://ftp.freebsd.org/pub/FreeBSD/" HANDHELDS_CVS = "cvs://anoncvs:anoncvs@anoncvs.handhelds.org/cvs" E_CVS = "cvs://anonymous@anoncvs.enlightenment.org/var/cvs/e" E_URI = "http://enlightenment.freedesktop.org/files" FREEDESKTOP_CVS = "cvs://anoncvs:anoncvs@anoncvs.freedesktop.org/cvs" GENTOO_MIRROR = "http://distro.ibiblio.org/pub/linux/distributions/gentoo/distfiles" APACHE_MIRROR = "http://www.apache.org/dist" KERNELORG_MIRROR = "http://kernel.org/" # You can use the mirror of your country to get faster downloads by putting # export DEBIAN_MIRROR = "ftp://ftp.de.debian.org/debian/pool" # export SOURCEFORGE_MIRROR = "http://belnet.dl.sourceforge.net/sourceforge" # into your local.conf FETCHCOMMAND = "ERROR, this must be a BitBake bug" FETCHCOMMAND_wget = "/usr/bin/env wget -t 5 --passive-ftp -P ${DL_DIR} ${URI}" FETCHCOMMAND_cvs = "/usr/bin/env cvs -d${CVSROOT} co ${CVSCOOPTS} ${CVSMODULE}" FETCHCOMMAND_svn = "/usr/bin/env svn co ${SVNCOOPTS} ${SVNROOT} ${SVNMODULE}" RESUMECOMMAND = "ERROR, this must be a BitBake bug" RESUMECOMMAND_wget = "/usr/bin/env wget -c -t 5 --passive-ftp -P ${DL_DIR} ${URI}" UPDATECOMMAND = "ERROR, this must be a BitBake bug" UPDATECOMMAND_cvs = "/usr/bin/env cvs -d${CVSROOT} update -d -P ${CVSCOOPTS}" UPDATECOMMAND_svn = "/usr/bin/env svn update ${SVNCOOPTS}" SRCDATE = "${DATE}" SRC_URI = "file://${FILE}" ################################################################## # 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" # Program to be used to build ipkg packages IPKGBUILDCMD = "ipkg-build -o 0 -g 0" ################################################################## # Not sure about the rest of this yet. ################################################################## # slot - currently unused by OE. portage remnants SLOT = "0" # Other export PKG_CONFIG_PATH = "${STAGING_DATADIR}/pkgconfig" export PKG_CONFIG_DISABLE_UNINSTALLED = "yes" export QMAKE_MKSPEC_PATH = "${STAGING_DIR}/${BUILD_SYS}/share/qmake" export STAGING_SIPDIR = "${STAGING_DIR}/${BUILD_SYS}/share/sip" export STAGING_IDLDIR = "${STAGING_DATADIR}/idl" # library package naming AUTO_LIBNAME_PKGS = "${PACKAGES}" ### ### Config file processing ### # This means that an envionment variable named '_arm' overrides an # environment variable '' (when ${TARGET_ARCH} is arm). And the same: an # environment variable '_ramses' overrides both '' and '_arm # when ${MACHINE} is 'ramses'. And finally '_local' overrides anything. # # This works for functions as well, they are really just environment variables. #OVERRIDES = "local:${MACHINE}:${DISTRO}:${TARGET_OS}:${TARGET_ARCH}:build-${BUILD_OS}" # Alternative OVERRIDES to make compilation fail fast, we will enable it by default soon OVERRIDES = "local:${MACHINE}:${DISTRO}:${TARGET_OS}:${TARGET_ARCH}:build-${BUILD_OS}:fail-fast:pn-${PN}" ################################################################## # Include the rest of the config files. ################################################################## 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/distro/${DISTRO}.conf include conf/documentation.conf require conf/sanity.conf ################################################################## # Weak variables (usually to retain backwards compatibility) ################################################################## IMAGE_FSTYPES ?= "jffs2" PCMCIA_MANAGER ?= "pcmcia-cs" MACHINE_TASK_PROVIDER ?= "task-base" IMAGE_ROOTFS_SIZE_ext2 ?= "65536" IMAGE_ROOTFS_SIZE_ext2.gz ?= "65536" ################################################################## # Magic Cookie for SANITY CHECK ################################################################## OES_BITBAKE_CONF = "1" ################################################################## # Task-base stuff ################################################################## MACHINE_FEATURES ?= "kernel26" DISTRO_FEATURES ?= "" GUI_MACHINE_CLASS ?= "smallscreen" DISTRO_EXTRA_RDEPENDS ?= "" DISTRO_EXTRA_RRECOMMENDS ?= "" MACHINE_EXTRA_RDEPENDS ?= "" MACHINE_EXTRA_RRECOMMENDS ?= "" MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= "" MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= "" 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", "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)}"