From e08271489cbe4a889d0ba66123ab4b11dd2c8bf1 Mon Sep 17 00:00:00 2001 From: Stephane Desneux Date: Fri, 21 Sep 2018 11:24:25 +0000 Subject: [PATCH] packagegroup-agl-core-boot: add package distro-build-manifest the purpose of distro-build-manifest is to generate and distribute a unique build manifest for a given AGL image. The recipe will generate the build manifest 'platform-build-info' at each build (no caching) and this manifest is then stored in 2 locations: * image: in /etc/platform-build-info * deploy dir An example of generated build manifest (sorry for long lines): ------------------------------------------------------------------------------ DIST_MACHINE="h3ulcb" DIST_FEATURES="agl-appfw-smack agl-audio-4a-framework agl-demo agl-devel agl-hmi-framework agl-netboot agl-profile-graphical agl-profile-graphical-qt5 agl-pulseaudio " DIST_FEATURES_MD5="154fe3f690b6102dbc5025faf98307e5" DIST_BUILD_HOST="devel@bsp-devkit-odin-0-sdx" DIST_BUILD_OS="Debian GNU/Linux 8 (jessie)" DIST_METADIR="/xdt/meta" DIST_SETUP_TS="20181003_201029_UTC" DIST_SETUP_MANIFEST="/xdt/build/h3ulcb/aglsetup.manifest" DIST_BUILD_TS="20181004_123848_UTC" DIST_LAYERS="agl-manifest:fcd4190 meta-agl-demo:6.90.0-1-gc9539d4 meta-agl-devel:6.90.0-2-g3b2111f meta-agl-extra:6.90.0-0-ged8c0a7 meta-agl:6.90.0-14-g5648a93-dirty meta-gplv2:f875c60 meta-intel:8.1-rocko-2.4.2-21-g718bb38 meta-intel-iot-security:v1.0.0-34-g20bbb97 meta-iot-bzh:4.99.3-45-g1de6fff meta-oic:70d5bec meta-openembedded:3525310 meta-qt5:5.2.1+origin/release-445-g682ad61 meta-raspberrypi:8e4c537 meta-rcar:a055159 meta-renesas-rcar-gen3:6.90.0-0-gb3625d6 meta-security:8f6969a meta-security-isafw:489abdc meta-updater:ff555e8 meta-updater-qemux86-64:697632d poky:rocko-18.0.3-114-g05711ba" DIST_LAYERS_MD5="b84c7f9c960d97290f4ceb5f91ccfcfd" DIST_BUILD_HASH="F154fe3f6-Lb84c7f9c" DIST_BUILD_ID="AGL-h3ulcb-F154fe3f6-Lb84c7f9c" DIST_BB_MACHINE_ARCH="h3ulcb" DIST_BB_MACHINEOVERRIDES="rcar-gen3:r8a7795:h3ulcb:aarch64:ulcb" DIST_BB_MACHINE_FEATURES="biglittle agl-egvirt gsx multimedia rtc qemu-usermode" DIST_BB_DISTRO="poky-agl" DIST_BB_DISTRO_NAME="Automotive Grade Linux" DIST_BB_DISTRO_CODENAME="guppy" DIST_BB_DISTRO_VERSION="6.90.0+snapshot-20181004" DIST_BB_DISTRO_FEATURES="acl alsa argp bluetooth ext2 irda largefile pcmcia usbgadget usbhost wifi xattr nfs zeroconf pci 3g nfc ipv4 ipv6 libc-backtrace libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab libc-ftraverse libc-getlogin libc-idn libc-inet-anl libc-libm libc-locales libc-locale-code libc-memusage libc-nis libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp libc-posix-regexp-glibc libc-posix-wchar-io largefile systemd opengl wayland pam bluetooth bluez5 surroundview bluetooth netboot smack dbus-cynara xattr automount agl-audio-4a-framework agl-hmi-framework agl-devel pulseaudio pam use_eva_pkg h264dec_lib h264enc_lib aaclcdec_lib aaclcdec_mdw gobject-introspection-data ldconfig" DIST_BB_DISTROOVERRIDES="poky-agl" DIST_BB_DISTRO_BRANCH_VERSION_TAG="guppy/6.90.0" DIST_BB_AGLVERSION="6.90.0" DIST_BB_AGL_BRANCH="master" DIST_BB_AGLRELEASETYPE="agldevelopment" DIST_BB_HOST_SYS="allarch-agl-linux" DIST_BB_TARGET_SYS="allarch-agl-linux" DIST_BB_TARGET_VENDOR="-agl" DIST_BB_TUNE_FEATURES="aarch64" DIST_BB_TUNE_PKGARCH="aarch64" DIST_BB_ALL_MULTILIB_PACKAGE_ARCHS="all any noarch aarch64 h3ulcb" DIST_BB_SDK_ARCH="none" DIST_BB_SDK_VENDOR="-aglsdk" DIST_BB_SDK_VERSION="6.90.0+snapshot" DIST_BB_SDK_OS="linux" ------------------------------------------------------------------------------ Bug-AGL: SPEC-720, SPEC-1741 Change-Id: I934acc87e13d2f6ec867684af515b89a89a89338 Signed-off-by: Stephane Desneux --- .../distro-build-manifest/distro-build-manifest.bb | 87 ++++++++++++++++++++++ .../packagegroups/packagegroup-agl-core-boot.bb | 1 + 2 files changed, 88 insertions(+) create mode 100644 meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb diff --git a/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb b/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb new file mode 100644 index 000000000..c0b54088a --- /dev/null +++ b/meta-agl-profile-core/recipes-core/distro-build-manifest/distro-build-manifest.bb @@ -0,0 +1,87 @@ +SUMMARY = "Distribution build manifest" +DESCRIPTION = "The /etc/platform-build-info file contains build manifest (SPEC-720)." +LICENSE = "MIT" + +# dependencies of ${DISTRO_MANIFEST_GENERATOR} +DEPENDS = "coreutils-native bash-native git-native gawk-native sed-native" + +inherit allarch + +# force a rebuild everytime a build is started +do_compile[nostamp] = "1" + +do_compilestep1 () { + rc=99 + outfile=${B}/platform-build-info + if [ -f "${DISTRO_MANIFEST_GENERATOR}" -a -f "${DISTRO_SETUP_MANIFEST}" ]; then + ${DISTRO_MANIFEST_GENERATOR} ${DISTRO_SETUP_MANIFEST} >$outfile + rc=$? + fi + + if [ "$rc" -ne 0 ]; then + echo "distro-build-manifest generation failed." + fi + return $rc +} + +# borrowed to os-release.bb (output format is very close) +python do_compilestep2 () { + import shutil + with open(d.expand('${B}/platform-build-info'),'a') as f: + for field in d.getVar('BUILD_MANIFEST_FIELDS').split(): + value=d.getVar(field) + if value: + f.write('DIST_BB_{0}="{1}"\n'.format(field,value)) +} +do_compilestep2[vardeps] += "${BUILD_MANIFEST_FIELDS}" + +# combine the two steps +python do_compile() { + bb.build.exec_func("do_compilestep1",d) + bb.build.exec_func("do_compilestep2",d) +} + +do_install () { + install -d ${D}${sysconfdir} + install -m 0644 platform-build-info ${D}${sysconfdir}/ + + # also copy in deploy dir + install -d ${DEPLOY_DIR_IMAGE} + install -m 0644 platform-build-info ${DEPLOY_DIR_IMAGE}/ +} + +# list of variables to add to the manifest +BUILD_MANIFEST_FIELDS = "\ + MACHINE_ARCH \ + MACHINEOVERRIDES \ + MACHINE_FEATURES \ + DISTRO \ + DISTRO_NAME \ + DISTRO_CODENAME \ + DISTRO_VERSION \ + DISTRO_FEATURES \ + DISTROOVERRIDES \ + DISTRO_BRANCH_VERSION_TAG \ + AGLVERSION \ + AGL_BRANCH \ + AGLRELEASETYPE \ + HOST_SYS \ + TARGET_SYS \ + TARGET_VENDOR \ + TUNE_FEATURES \ + TUNE_PKGARCH \ + ALL_MULTILIB_PACKAGE_ARCHS \ + SDK_ARCH \ + SDK_VENDOR \ + SDK_VERSION \ + SDK_OS \ +" + +# remove useless tasks +deltask do_fetch +deltask do_unpack +deltask do_patch +deltask do_configure + +addtask do_prepare_recipe_sysroot before do_compile + diff --git a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb index 1633feddc..690dc9e15 100644 --- a/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb +++ b/meta-agl-profile-core/recipes-platform/packagegroups/packagegroup-agl-core-boot.bb @@ -34,6 +34,7 @@ RDEPENDS_${PN} = "\ base-files \ base-passwd \ busybox \ + distro-build-manifest \ rng-tools \ run-agl-postinsts \ ${@bb.utils.contains("DISTRO_FEATURES", "sysvinit", "${SYSVINIT_SCRIPTS}", "", d)} \ -- 2.16.6