nativesdk/sdk: Update sdk dummy providers

When we migrated rpm v5 -> v4, we lost the ability to drop "per file"
dependencies from the rpm backend for things like "/bin/bash" and
"/usr/bin/env" which meant the sdks were becomming 'bloated'.

This restores the functionality using a dummy package, similarly to
the way the buildtools perl issue was addressed. It also removes
the non-functional old code so as not to confuse people in future.

I ran into this problem trying to filter dependencies to only rpms
a build directly depends upon and it turns out we have some determinism issues
in this area so this is something key to fix.

(From OE-Core rev: 9d490dc01dcedb216129b22cbe17a6c99efc4f5c)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2018-01-09 11:20:31 +00:00
parent 1117f74385
commit 0d0984e1e6
9 changed files with 65 additions and 41 deletions

View File

@@ -20,6 +20,9 @@ def complementary_globs(featurevar, d):
SDKIMAGE_FEATURES ??= "dev-pkgs dbg-pkgs ${@bb.utils.contains('DISTRO_FEATURES', 'api-documentation', 'doc-pkgs', '', d)}"
SDKIMAGE_INSTALL_COMPLEMENTARY = '${@complementary_globs("SDKIMAGE_FEATURES", d)}'
PACKAGE_ARCHS_append_task-populate-sdk = " sdk-provides-dummy-target"
SDK_PACKAGE_ARCHS += "sdk-provides-dummy-${SDKPKGSUFFIX}"
inherit rootfs_${IMAGE_PKGTYPE}
SDK_DIR = "${WORKDIR}/sdk"
@@ -34,7 +37,8 @@ SDKTARGETSYSROOT = "${SDKPATH}/sysroots/${REAL_MULTIMACH_TARGET_SYS}"
TOOLCHAIN_HOST_TASK ?= "nativesdk-packagegroup-sdk-host packagegroup-cross-canadian-${MACHINE}"
TOOLCHAIN_HOST_TASK_ATTEMPTONLY ?= ""
TOOLCHAIN_TARGET_TASK ?= "${@multilib_pkg_extend(d, 'packagegroup-core-standalone-sdk-target')}"
TOOLCHAIN_TARGET_TASK ?= "${@multilib_pkg_extend(d, 'packagegroup-core-standalone-sdk-target')} \
${@multilib_pkg_extend(d, 'target-sdk-provides-dummy')}"
TOOLCHAIN_TARGET_TASK_ATTEMPTONLY ?= ""
TOOLCHAIN_OUTPUTNAME ?= "${SDK_NAME}-toolchain-${SDK_VERSION}"

View File

@@ -28,6 +28,9 @@ SSTATE_EXTRAPATH[vardepvalue] = ""
SSTATE_DUPWHITELIST = "${DEPLOY_DIR_IMAGE}/ ${DEPLOY_DIR}/licenses/ ${DEPLOY_DIR_RPM}/noarch/"
# Avoid docbook/sgml catalog warnings for now
SSTATE_DUPWHITELIST += "${STAGING_ETCDIR_NATIVE}/sgml ${STAGING_DATADIR_NATIVE}/sgml"
# sdk-provides-dummy-nativesdk and nativesdk-buildtools-perl-dummy overlap for different SDKMACHINE
SSTATE_DUPWHITELIST += "${DEPLOY_DIR_RPM}/sdk_provides_dummy_nativesdk/ ${DEPLOY_DIR_IPK}/sdk-provides-dummy-nativesdk/"
SSTATE_DUPWHITELIST += "${DEPLOY_DIR_RPM}/buildtools_dummy_nativesdk/ ${DEPLOY_DIR_IPK}/buildtools-dummy-nativesdk/"
# Archive the sources for many architectures in one deploy folder
SSTATE_DUPWHITELIST += "${DEPLOY_DIR_SRC}"

View File

@@ -460,7 +460,6 @@ class RpmPM(PackageManager):
target_rootfs,
target_vendor,
task_name='target',
providename=None,
arch_var=None,
os_var=None):
super(RpmPM, self).__init__(d)

View File

@@ -93,34 +93,16 @@ class RpmSdk(Sdk):
self.host_manifest = RpmManifest(d, self.manifest_dir,
Manifest.MANIFEST_TYPE_SDK_HOST)
target_providename = ['/bin/sh',
'/bin/bash',
'/usr/bin/env',
'/usr/bin/perl',
'pkgconfig'
]
self.target_pm = RpmPM(d,
self.sdk_target_sysroot,
self.d.getVar('TARGET_VENDOR'),
'target',
target_providename
)
sdk_providename = ['/bin/sh',
'/bin/bash',
'/usr/bin/env',
'/usr/bin/perl',
'pkgconfig',
'libGL.so()(64bit)',
'libGL.so'
]
self.host_pm = RpmPM(d,
self.sdk_host_sysroot,
self.d.getVar('SDK_VENDOR'),
'host',
sdk_providename,
"SDK_PACKAGE_ARCHS",
"SDK_OS"
)

View File

@@ -0,0 +1,24 @@
SUMMARY = "Dummy packages which handle excluding packages from the sdk, e.g. ensuring perl is excluded from buildtools"
LICENSE = "MIT"
inherit allarch
python() {
# Put the package somewhere separate to ensure it's never used except
# when we want it
# (note that we have to do this in anonymous python here to avoid
# allarch.bbclass disabling itself)
d.setVar('PACKAGE_ARCH', '${DUMMYARCH}')
}
ALLOW_EMPTY_${PN} = "1"
PR[vardeps] += "DUMMYPROVIDES"
python populate_packages_prepend() {
p = d.getVar("PN")
d.appendVar("RPROVIDES_%s" % p, "${DUMMYPROVIDES}")
#d.appendVar("RCONFLICTS_%s" % p, "${DUMMYPROVIDES}")
#d.appendVar("RREPLACES_%s" % p, "${DUMMYPROVIDES}")
}

View File

@@ -1,26 +1,11 @@
SUMMARY = "Dummy package which ensures perl is excluded from buildtools"
LICENSE = "MIT"
DUMMYARCH = "buildtools-dummy-${SDKPKGSUFFIX}"
inherit allarch
DUMMYPROVIDES = "\
nativesdk-perl \
nativesdk-perl-module-file-path"
PR = "r2"
python() {
# Put the package somewhere separate to ensure it's never used except
# when we want it
# (note that we have to do this in anonymous python here to avoid
# allarch.bbclass disabling itself)
d.setVar('PACKAGE_ARCH', 'buildtools-dummy-${SDKPKGSUFFIX}')
}
PERLPACKAGES = "nativesdk-perl \
nativesdk-perl-module-file-path"
ALLOW_EMPTY_${PN} = "1"
python populate_packages_prepend() {
d.appendVar(d.expand('RPROVIDES_${PN}'), '${PERLPACKAGES}')
d.appendVar(d.expand('RCONFLICTS_${PN}'), '${PERLPACKAGES}')
d.appendVar(d.expand('RREPLACES_${PN}'), '${PERLPACKAGES}')
}
require dummy-sdk-package.inc
inherit nativesdk

View File

@@ -0,0 +1,15 @@
DUMMYARCH = "sdk-provides-dummy-${SDKPKGSUFFIX}"
# Add /bin/sh?
DUMMYPROVIDES = "\
/bin/bash \
/usr/bin/env \
/usr/bin/perl \
pkgconfig \
libGL.so()(64bit) \
libGL.so \
"
require dummy-sdk-package.inc
inherit nativesdk

View File

@@ -0,0 +1,11 @@
DUMMYARCH = "sdk-provides-dummy-target"
DUMMYPROVIDES = "\
/bin/sh \
/bin/bash \
/usr/bin/env \
/usr/bin/perl \
pkgconfig \
"
require dummy-sdk-package.inc

View File

@@ -25,6 +25,7 @@ RDEPENDS_${PN} = "\
nativesdk-cmake \
nativesdk-postinst-intercept \
${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'nativesdk-wayland', '', d)} \
nativesdk-sdk-provides-dummy \
"
RDEPENDS_${PN}_darwin = "\