diff options
Diffstat (limited to 'meta/classes/native.bbclass')
| -rw-r--r-- | meta/classes/native.bbclass | 168 |
1 files changed, 97 insertions, 71 deletions
diff --git a/meta/classes/native.bbclass b/meta/classes/native.bbclass index 98b62a054..bca48d463 100644 --- a/meta/classes/native.bbclass +++ b/meta/classes/native.bbclass @@ -1,13 +1,19 @@ +# We want native packages to be relocatable +inherit relocatable + # Native packages are built indirectly via dependency, # no need for them to be a direct target of 'world' EXCLUDE_FROM_WORLD = "1" PACKAGES = "" +PACKAGES_virtclass-native = "" +PACKAGES_DYNAMIC = "" +PACKAGES_DYNAMIC_virtclass-native = "" PACKAGE_ARCH = "${BUILD_ARCH}" -BASE_PACKAGE_ARCH = "${BUILD_ARCH}" -BASEPKG_HOST_SYS = "${BUILD_ARCH}${BUILD_VENDOR}-${BUILD_OS}" -BASEPKG_TARGET_SYS = "${BUILD_ARCH}${BUILD_VENDOR}-${BUILD_OS}" +# used by cmake class +OECMAKE_RPATH = "${libdir}" +OECMAKE_RPATH_virtclass-native = "${libdir}" # When this class has packaging enabled, setting # RPROVIDES becomes unnecessary. @@ -18,12 +24,17 @@ TARGET_OS = "${BUILD_OS}" TARGET_VENDOR = "${BUILD_VENDOR}" TARGET_PREFIX = "${BUILD_PREFIX}" TARGET_CC_ARCH = "${BUILD_CC_ARCH}" +TARGET_LD_ARCH = "${BUILD_LD_ARCH}" +TARGET_AS_ARCH = "${BUILD_AS_ARCH}" +TARGET_FPU = "" HOST_ARCH = "${BUILD_ARCH}" HOST_OS = "${BUILD_OS}" HOST_VENDOR = "${BUILD_VENDOR}" HOST_PREFIX = "${BUILD_PREFIX}" HOST_CC_ARCH = "${BUILD_CC_ARCH}" +HOST_LD_ARCH = "${BUILD_LD_ARCH}" +HOST_AS_ARCH = "${BUILD_AS_ARCH}" CPPFLAGS = "${BUILD_CPPFLAGS}" CFLAGS = "${BUILD_CFLAGS}" @@ -34,6 +45,11 @@ LDFLAGS_build-darwin = "-L${STAGING_LIBDIR_NATIVE} " STAGING_BINDIR = "${STAGING_BINDIR_NATIVE}" STAGING_BINDIR_CROSS = "${STAGING_BINDIR_NATIVE}" +# native pkg doesn't need the TOOLCHAIN_OPTIONS. +TOOLCHAIN_OPTIONS = "" + +DEPENDS_GETTEXT = "gettext-native" + # Don't use site files for native builds export CONFIG_SITE = "" @@ -41,94 +57,104 @@ export CONFIG_SITE = "" 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 CPP = "${HOST_PREFIX}gcc ${HOST_CC_ARCH} -E" +export LD = "${HOST_PREFIX}ld ${HOST_LD_ARCH} " export CCLD = "${CC}" export AR = "${HOST_PREFIX}ar" -export AS = "${HOST_PREFIX}as" +export AS = "${HOST_PREFIX}as ${HOST_AS_ARCH}" export RANLIB = "${HOST_PREFIX}ranlib" export STRIP = "${HOST_PREFIX}strip" # Path prefixes -export base_prefix = "${STAGING_DIR_NATIVE}" -export prefix = "${STAGING_DIR_NATIVE}${layout_prefix}" -export exec_prefix = "${STAGING_DIR_NATIVE}${layout_exec_prefix}" +base_prefix = "${STAGING_DIR_NATIVE}" +prefix = "${STAGING_DIR_NATIVE}${prefix_native}" +exec_prefix = "${STAGING_DIR_NATIVE}${prefix_native}" -# Base paths -export base_bindir = "${STAGING_DIR_NATIVE}${layout_base_bindir}" -export base_sbindir = "${STAGING_DIR_NATIVE}${layout_base_sbindir}" -export base_libdir = "${STAGING_DIR_NATIVE}${layout_base_libdir}" +libdir = "${STAGING_DIR_NATIVE}${libdir_native}" -# Architecture independent paths -export datadir = "${STAGING_DIR_NATIVE}${layout_datadir}" -export sysconfdir = "${STAGING_DIR_NATIVE}${layout_sysconfdir}" -export sharedstatedir = "${STAGING_DIR_NATIVE}${layout_sharedstatedir}" -export localstatedir = "${STAGING_DIR_NATIVE}${layout_localstatedir}" -export infodir = "${STAGING_DIR_NATIVE}${layout_infodir}" -export mandir = "${STAGING_DIR_NATIVE}${layout_mandir}" -export docdir = "${STAGING_DIR_NATIVE}${layout_docdir}" -export servicedir = "${STAGING_DIR_NATIVE}${layout_servicedir}" +baselib = "lib" -# Architecture dependent paths -export bindir = "${STAGING_DIR_NATIVE}${layout_bindir}" -export sbindir = "${STAGING_DIR_NATIVE}${layout_sbindir}" -export libexecdir = "${STAGING_DIR_NATIVE}${layout_libexecdir}" -export libdir = "${STAGING_DIR_NATIVE}${layout_libdir}" -export includedir = "${STAGING_DIR_NATIVE}${layout_includedir}" -export oldincludedir = "${STAGING_DIR_NATIVE}${layout_includedir}" +# Libtool's default paths are correct for the native machine +lt_cv_sys_lib_dlsearch_path_spec[unexport] = "1" -do_stage () { - if [ "${INHIBIT_NATIVE_STAGE_INSTALL}" != "1" ] - then - # If autotools is active, use the autotools staging function, else - # use our "make install" equivalent - if [ "${AUTOTOOLS_NATIVE_STAGE_INSTALL}" != "1" ] - then - oe_runmake install - else - autotools_stage_all - fi - fi -} +NATIVE_PACKAGE_PATH_SUFFIX ?= "" +bindir .= "${NATIVE_PACKAGE_PATH_SUFFIX}" +libdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}" +libexecdir .= "${NATIVE_PACKAGE_PATH_SUFFIX}" -do_install () { - true -} +do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}/${STAGING_DIR_NATIVE}" +do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_NATIVE}" + +# Since we actually install these into situ there is no staging prefix +STAGING_DIR_HOST = "" +STAGING_DIR_TARGET = "" +SHLIBSDIR = "${STAGING_DIR_NATIVE}/shlibs" +PKG_CONFIG_DIR = "${libdir}/pkgconfig" +EXTRA_NATIVE_PKGCONFIG_PATH ?= "" PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}" PKG_CONFIG_SYSROOT_DIR = "" -python __anonymous () { - pn = bb.data.getVar("PN", d, True) - depends = bb.data.getVar("DEPENDS", d, True) - deps = bb.utils.explode_deps(depends) - if "native" in (bb.data.getVar('BBCLASSEXTEND', d, True) or ""): - autoextend = True - else: - autoextend = False - for dep in deps: - if dep.endswith("-cross"): - if autoextend: - depends = depends.replace(dep, dep.replace("-cross", "-native")) - else: - bb.note("%s has depends %s which ends in -cross?" % (pn, dep)) +# we dont want libc-uclibc or libc-glibc to kick in for native recipes +LIBCOVERRIDE = "" +CLASSOVERRIDE = "class-native" + +PATH =. "${COREBASE}/scripts/native-intercept:" - if not dep.endswith("-native"): - if autoextend: - depends = depends.replace(dep, dep + "-native") +python native_virtclass_handler () { + if not isinstance(e, bb.event.RecipePreFinalise): + return + + classextend = e.data.getVar('BBCLASSEXTEND', True) or "" + if "native" not in classextend: + return + + pn = e.data.getVar("PN", True) + if not pn.endswith("-native"): + return + + def map_dependencies(varname, d, suffix = ""): + if suffix: + varname = varname + "_" + suffix + deps = d.getVar(varname, True) + if not deps: + return + deps = bb.utils.explode_deps(deps) + newdeps = [] + for dep in deps: + if dep.endswith("-cross"): + newdeps.append(dep.replace("-cross", "-native")) + elif not dep.endswith("-native"): + newdeps.append(dep + "-native") else: - bb.note("%s has depends %s which doesn't end in -native?" % (pn, dep)) - bb.data.setVar("DEPENDS", depends, d) - provides = bb.data.getVar("PROVIDES", d, True) + newdeps.append(dep) + d.setVar(varname, " ".join(newdeps)) + + map_dependencies("DEPENDS", e.data) + for pkg in [e.data.getVar("PN", True), "", "${PN}"]: + map_dependencies("RDEPENDS", e.data, pkg) + map_dependencies("RRECOMMENDS", e.data, pkg) + map_dependencies("RSUGGESTS", e.data, pkg) + map_dependencies("RPROVIDES", e.data, pkg) + map_dependencies("RREPLACES", e.data, pkg) + + provides = e.data.getVar("PROVIDES", True) for prov in provides.split(): if prov.find(pn) != -1: continue if not prov.endswith("-native"): - if autoextend: - provides = provides.replace(prov, prov + "-native") - #else: - # bb.note("%s has rouge PROVIDES of %s which doesn't end in -sdk?" % (pn, prov)) - bb.data.setVar("PROVIDES", provides, d) - bb.data.setVar("OVERRIDES", bb.data.getVar("OVERRIDES", d, False) + ":virtclass-native", d) + provides = provides.replace(prov, prov + "-native") + e.data.setVar("PROVIDES", provides) + + e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + ":virtclass-native") } +addhandler native_virtclass_handler + +do_package[noexec] = "1" +do_package_write_ipk[noexec] = "1" +do_package_write_deb[noexec] = "1" +do_package_write_rpm[noexec] = "1" + +do_populate_sysroot[stamp-extra-info] = "" +do_package[stamp-extra-info] = "" |
