From 406020ff1b649c4a02248cef5e82abf5315d44d6 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Tue, 28 Apr 2020 21:10:50 +0000 Subject: Widget packaging rework aglwgt.bbclass changes: - Made the autobuild/agl/autobuild script a hard requirement, as all upstream widgets have it, and this is the first step to actually using it in the class to drive building the widgets after a subsequent round of autobuild script updates. - Reworked wgt packaging to simplify the logic and split the test, debug, and coverage widgets into separate packages to allow installing them separately. - The on target install directories for the widgets have been changed to release, test, debug, and coverage under /usr/AGL/apps, with the previous logic with respect to the AGLWGT_AUTOINSTALL variable being retained for the few widgets that need to go into the manualinstall directory. An "autoinstall" symlink has been added to point at the release directory to maintain previous behavior. This should allow a simple path to configuring installation of the debug or coverage widgets on first boot with future changes. - Added logic to only assume test widgets exist for recipes with names starting with "agl-service-". This can be over-ridden by defining AGLWGT_HAVE_TESTS as "true" in a recipe. - Added AGLWGT_EXTRA_BUILD_ARGS variable for passing extra arguments to widget builds. Currently its default value includes the previous VERBOSE=true that was passed to every autobuild invocation, and "${PARALLEL_MAKE}" which has been added to improve build speed. - Added AGLWGT_PACKAGE_WARN variable to control extra warnings around the existence of test/debug/coverage widgets when packaging. Once further build rework is done, the default for this will likely be changed to "true", currently the output is too verbose to do so. - Removed over-rides to force building of test widget when building with the agl-ptest feature set, as it is now unnecessary and will result in an undesired extra copy of the test widget in the release folder. Other changes: - Created new devel and test packagegroup variants for several of the existing packagegroups to contain the associated widgets. - Added agl-devel-wgt and agl-test-wgt IMAGE_FEATURES to control the addition of dbg/coverage and test widgets to images. Additions to the FEATURE_PACKAGES variables have been added in several places to add the corresponding widget packagegroups. - Added the agl-devel-wgt image feature to the agl-devel feature template definition to match current behavior. Bug-AGL: SPEC-3300 Signed-off-by: Scott Murray Change-Id: I3a28615db94bbc04e30e98ac3dce8cae942a499f --- meta-app-framework/classes/aglwgt.bbclass | 165 ++++++++++++++++-------------- 1 file changed, 86 insertions(+), 79 deletions(-) (limited to 'meta-app-framework/classes/aglwgt.bbclass') diff --git a/meta-app-framework/classes/aglwgt.bbclass b/meta-app-framework/classes/aglwgt.bbclass index 7420baefe..faa17e3a8 100644 --- a/meta-app-framework/classes/aglwgt.bbclass +++ b/meta-app-framework/classes/aglwgt.bbclass @@ -8,7 +8,6 @@ # The makefile needs to use wgtpkg-pack. # - # 'wgtpkg-pack' in af-main-native is required. DEPENDS_append = " af-main-native" @@ -21,57 +20,64 @@ DEPENDS_append = " cmake-apps-module-native" # for hal bindings genskel is required. DEPENDS_append = " af-binder-devtools-native" -EXTRA_OECMAKE_append_agl-ptest = " -DBUILD_TEST_WGT=TRUE" +# Set the default build type for cmake based projects +# NOTE: This can be removed after switching to using the autobuild +# script to do compilation +EXTRA_OECMAKE_append = " -DCMAKE_BUILD_TYPE=RELEASE" # FIXME: Remove once CMake+ninja issues are resolved OECMAKE_GENERATOR = "Unix Makefiles" -do_aglwgt_package() { +AGLWGT_EXTRA_BUILD_ARGS = "VERBOSE=TRUE ${PARALLEL_MAKE}" - mkdir -p ${S}/build-test - mkdir -p ${S}/build-debug - mkdir -p ${S}/build-coverage +# Only widgets with recipe names starting with agl-service- are +# assumed to have tests by default, set this to "true" to force +# building/packaging of the test widget for other widgets. +AGLWGT_HAVE_TESTS = "false" + +# Warning on missing test/debug/coverage packages disabled by default +# for now to reduce build output clutter. +AGLWGT_PACKAGE_WARN = "false" +# There are some widgets with build issues wrt test/debug/coverage +# that are currently non-fatal but do not yield a widget, allow empty +# test and coverage packages for now to allow the build to proceed. +# This matches the default behavior for -dbg packages. +# +# NOTE: This should revisited after a round of autobuild script rework +# to address SPEC-3300. +ALLOW_EMPTY_${PN}-coverage = "1" +ALLOW_EMPTY_${PN}-test = "1" + + +do_aglwgt_package() { bldcmd=${S}/autobuild/agl/autobuild if [ ! -x "$bldcmd" ]; then - bldcmd=${S}/conf.d/autobuild/agl/autobuild - if [ -x "$bldcmd" ]; then - bbwarn "OBSOLETE: Your autobuild script should be located in :" - bbwarn "autobuild/agl/ from the project root source folder" - bbwarn "and generate a .wgt file using wgtpack in the build" - bbwarn "root folder calling:" - bbwarn "./autobuild/agl/autobuild package DEST=" - bbwarn "See: https://wiki.automotivelinux.org/troubleshooting/app-recipes" - else - bbwarn "OBSOLETE: You must have an autobuild script located in:" - bbwarn "autobuild/agl/ from the project root source folder" - bbwarn "with filename autobuild which should generate" - bbwarn "a .wgt file using wgtpack in the build" - bbwarn "root folder calling:" - bbwarn "./autobuild/agl/autobuild package DEST=" - bbwarn "Fix your package as it will not work within the SDK" - bbwarn "See: https://wiki.automotivelinux.org/troubleshooting/app-recipes" - bldcmd=make - fi + bbfatal "Missing autobuild/agl/autobuild script" fi cd ${B} - if ! $bldcmd package BUILD_DIR=${B} DEST=${S}/widgets VERBOSE=TRUE; then + if ! $bldcmd package BUILD_DIR=${B} DEST=${B}/build-release ${AGLWGT_EXTRA_BUILD_ARGS}; then bbwarn "Target: package failed" fi - cd ${S}/build-test - if ! $bldcmd package-test BUILD_DIR=${S}/build-test DEST=${S}/widgets VERBOSE=TRUE; then - bbwarn "Target: package-test failed" + if echo ${BPN} | grep -q '^agl-service-' || [ "${AGLWGT_HAVE_TESTS}" = "true" ]; then + mkdir -p ${S}/build-test + cd ${S}/build-test + if ! $bldcmd package-test BUILD_DIR=${S}/build-test DEST=${B}/build-test ${AGLWGT_EXTRA_BUILD_ARGS}; then + bbwarn "Target: package-test failed" + fi fi + mkdir -p ${S}/build-debug cd ${S}/build-debug - if ! $bldcmd package-debug BUILD_DIR=${S}/build-debug DEST=${S}/widgets VERBOSE=TRUE; then + if ! $bldcmd package-debug BUILD_DIR=${S}/build-debug DEST=${B}/build-debug ${AGLWGT_EXTRA_BUILD_ARGS}; then bbwarn "Target: package-debug failed" fi + mkdir -p ${S}/build-coverage cd ${S}/build-coverage - if ! $bldcmd package-coverage BUILD_DIR=${S}/build-coverage DEST=${S}/widgets VERBOSE=TRUE; then + if ! $bldcmd package-coverage BUILD_DIR=${S}/build-coverage DEST=${B}/build-coverage ${AGLWGT_EXTRA_BUILD_ARGS}; then bbwarn "Target: package-coverage failed" fi } @@ -80,55 +86,48 @@ python () { d.setVarFlag('do_aglwgt_deploy', 'fakeroot', '1') } - POST_INSTALL_LEVEL ?= "10" POST_INSTALL_SCRIPT ?= "${POST_INSTALL_LEVEL}-${PN}.sh" EXTRA_WGT_POSTINSTALL ?= "" do_aglwgt_deploy() { - TEST_WGT="*-test.wgt" - DEBUG_WGT="*-debug.wgt" - COVERAGE_WGT="*-coverage.wgt" - if [ "${AGLWGT_AUTOINSTALL_${PN}}" = "0" ] - then - install -d ${D}/usr/AGL/apps/manualinstall - install -m 0644 ${B}/*.wgt ${D}/usr/AGL/apps/manualinstall || \ - install -m 0644 ${B}/package/*.wgt ${D}/usr/AGL/apps/manualinstall - else - install -d ${D}/usr/AGL/apps/autoinstall - install -m 0644 ${B}/*.wgt ${D}/usr/AGL/apps/autoinstall || \ - install -m 0644 ${B}/package/*.wgt ${D}/usr/AGL/apps/autoinstall - - install -m 0644 ${S}/widgets/*.wgt ${D}/usr/AGL/apps/autoinstall || \ - ( bbwarn "no package found in widget directory") - - if [ "$(find ${D}/usr/AGL/apps/autoinstall -name ${TEST_WGT})" ] - then - install -d ${D}/usr/AGL/apps/testwgt - mv ${D}/usr/AGL/apps/autoinstall/*-test.wgt ${D}/usr/AGL/apps/testwgt - fi - - if [ "$(find ${D}/usr/AGL/apps/autoinstall -name ${DEBUG_WGT})" ] - then - install -d ${D}/usr/AGL/apps/debugwgt - mv ${D}/usr/AGL/apps/autoinstall/*-debug.wgt ${D}/usr/AGL/apps/debugwgt - fi - - if [ "$(find ${D}/usr/AGL/apps/autoinstall -name ${COVERAGE_WGT})" ] - then - install -d ${D}/usr/AGL/apps/coveragewgt - mv ${D}/usr/AGL/apps/autoinstall/*-coverage.wgt ${D}/usr/AGL/apps/coveragewgt - fi + DEST=release + if [ "${AGLWGT_AUTOINSTALL_${PN}}" = "0" ]; then + DEST=manualinstall + fi + if [ "$(find ${B}/build-release -name '*.wgt')" ]; then + install -d ${D}/usr/AGL/apps/$DEST + install -m 0644 ${B}/build-release/*.wgt ${D}/usr/AGL/apps/$DEST/ + else + bberror "no package found in widget directory" fi - APP_FILES="" - for file in ${D}/usr/AGL/apps/autoinstall/*.wgt;do - APP_FILES="${APP_FILES} $(basename $file)"; + for t in test debug coverage; do + if [ "$(find ${B}/build-${t} -name *-${t}.wgt)" ]; then + install -d ${D}/usr/AGL/apps/${t} + install -m 0644 ${B}/build-${t}/*-${t}.wgt ${D}/usr/AGL/apps/${t}/ + elif [ "${AGLWGT_PACKAGE_WARN}" = "true" ]; then + if [ "$t" != "test" ]; then + bbwarn "no package found in ${t} widget directory" + elif echo ${BPN} | grep -q '^agl-service-' || [ "${AGLWGT_HAVE_TESTS}" = "true" ]; then + bbwarn "no package found in ${t} widget directory" + fi + fi done - install -d ${D}/${sysconfdir}/agl-postinsts - cat > ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT} < ${D}/${sysconfdir}/agl-postinsts/${POST_INSTALL_SCRIPT} <