# Copyright (C) 2017 Kurt Bodiker # Released under the MIT license (see COPYING.MIT for the terms) COMPATIBLE_HOST = '(x86_64.*).*-linux' require xen-arch.inc # many of the xen stubdom related recipes build and package static instead of shared libraries EXCLUDE_FROM_SHLIBS = "1" # base set of dependencies to be used for xen stubdom recipes DEPENDS += "\ lwip \ mini-os \ " # unset EVERYTHING from the OE environment. # Weird things happen when these are exported into the environment. unset CFLAGS unset BUILD_CFLAGS unset TARGET_CFLAGS unset CFLAGS_FOR_BUILD unset CPPFLAGS unset BUILD_CPPFLAGS unset TARGET_CPPFLAGS unset CPPFLAGS_FOR_BUILD unset LDFLAGS unset BUILD_LDFLAGS unset TARGET_LDFLAGS unset LDFLAGS_FOR_BUILD unset CXXFLAGS unset TARGET_CXXFLAGS unset BUILD_CXXFLAGS unset CXXFLAGS_FOR_BUILD unset BUILD_CC unset BUILD_CPP unset BUILD_CXX unset BUILD_LD unset BUILD_AR unset BUILD_AS unset BUILD_CCLD unset BUILD_FC unset BUILD_RANLIB unset BUILD_NM unset BUILD_STRIP unset BUILD_READELF unset BUILD_OBJCOPY unset BUILD_OBJDUMP unset CC unset CPP unset CXX unset LD unset AR unset AS unset NM unset RANLIB unset STRIP unset STRINGS unset READELF unset OBJCOPY unset OBJDUMP unset READELF unset CCLD unset FC # Provide support to build both 32-bit and 64-bit stubdoms python () { gnu_dict = { 'x86_32': 'i686', 'x86_64': 'x86_64', } if d.expand('${XEN_TARGET_ARCH}') == 'x86_32': d.setVar("GNU_TARGET_ARCH",gnu_dict[d.expand('${XEN_TARGET_ARCH}')]) d.setVar("PACKAGE_ARCH","core2-32") elif d.expand('${XEN_TARGET_ARCH}') == 'x86_64': d.setVar("GNU_TARGET_ARCH",gnu_dict[d.expand('${XEN_TARGET_ARCH}')]) } export GNU_TARGET_ARCH export XEN_TARGET_ARCH="${@map_xen_arch(d.getVar('TARGET_ARCH'), d)}" export XEN_COMPILE_ARCH="${@map_xen_arch(d.getVar('BUILD_ARCH'), d)}" LWIP_SRCDIR = "${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/lwip" MINIOS_SRCDIR = "${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/mini-os" # Base set of CPPFLAGS, CFLAGS needed for each component used to build MiniOS-based stubdoms # LDFLAGS are only used when building stubdoms, so only used in stubdom recipes # Generic name given because each library uses DEF_, BUILD_, TARGET_, and xxxFLAGS differently CPPFLAGS_INCLUDE_DIR = "-isystem ${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include" STUBDOM_CPPFLAGS += "\ -isystem ${MINIOS_SRCDIR}/include \ -D__MINIOS__ \ -DHAVE_LIBC \ -isystem ${MINIOS_SRCDIR}/include/posix \ -isystem ${MINIOS_SRCDIR}/include/xen \ -isystem ${MINIOS_SRCDIR}/include/x86 \ -isystem ${MINIOS_SRCDIR}/include/x86/${XEN_TARGET_ARCH} \ -U __linux__ \ -U __FreeBSD__ \ -U __sun__ \ -nostdinc \ ${CPPFLAGS_INCLUDE_DIR} \ -isystem ${LWIP_SRCDIR}/include \ -isystem ${LWIP_SRCDIR}/include/ipv4 \ " STUBDOM_CFLAGS += "\ -mno-red-zone \ -O1 \ -fno-omit-frame-pointer \ -m64 \ -fno-reorder-blocks \ -fno-asynchronous-unwind-tables \ -DBUILD_ID \ -fno-strict-aliasing \ -std=gnu99 \ -Wall \ -Wstrict-prototypes \ -Wdeclaration-after-statement \ -Wno-unused-but-set-variable \ -Wno-unused-local-typedefs \ -fno-stack-protector \ -fno-exceptions \ " STUBDOM_LDFLAGS = "\ -nostdlib \ -L${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/lib \ " # Need to redefine these for stubdom-related builds. It all starts because of # the prefix used in newlib and then continues because we don't want to # cross-contaminate stubdom-related recipes with headers and libraries found in # the OE-defined locations export prefix="/cross-root-${GNU_TARGET_ARCH}" export includedir="${prefix}/${GNU_TARGET_ARCH}-xen-elf/include" export libdir="${prefix}/${GNU_TARGET_ARCH}-xen-elf/lib" export libexecdir="${libdir}" export STAGING_INCDIR export STAGING_LIBDIR # Typically defined in Xen and Minios .mk files that aren't sourced/read, # defined to trigger some values and paths in Makefiles export debug="y" export stubdom="y" export XEN_OS="MiniOS"