summaryrefslogtreecommitdiffstats
path: root/meta-agl-profile-core/conf
AgeCommit message (Collapse)AuthorFilesLines
2020-08-31Remove eclipse integration from agl-develJan-Simon Moeller1-1/+1
The eclipse plugin is no longer actively supported upstream. Remove the plugin from agl-devel. Bug-AGL: SPEC-3555 Signed-off-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org> Change-Id: I455472cd93fb4db93e72c5be91f66bddc4b7e460 Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/25165 Tested-by: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>
2020-06-25Remove unused config include for pulseaudioJan-Simon Möller1-1/+0
Cleanup. Bug-AGL: SPEC-3452 Signed-off-by: Jan-Simon Möller <jsmoeller@linuxfoundation.org> Change-Id: I0664d1374b613e126e9e4524dd377b911346890e Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/24870 Tested-by: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org> ci-image-build: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org> ci-image-boot-test: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>
2020-05-18Rework test/debug image features and crosssdk image definitionsScott Murray1-4/+0
Changes include: - The agl-test-wgt/agl-devel-wgt image features and the scheme of appending to their FEATURE_PACKAGES definitions turned out to be problematic with respect to resulting in unexpected extra packages ending up in agl-image-{minimal,ivi}, etc., when building with agl-demo configured (which is typical usage). To avoid this, the FEATURE_PACKAGE definitions for the image features have been replaced with tweaks to define COMPLEMENTARY_GLOBS for the features to bring in the test/debug/coverage packages via that mechanism. - The above removes the need to define the extra test/devel packagegroups, and requires some minor tweaks to aglwgt.bbclass to use a -debug package for the debug widget instead of -dbg, to avoid collisions with the dbg-pkgs image feature. As well, the afb-test package has been added as to RDEPENDS of all test widget packages, since that seems sensible and avoids needing to explicitly adding it elsewhere. - Attempt to rework the various crosssdk image definitions to use a layered set of .inc files to remove duplication and ensure that additions to the SDK are declared once in the appropriate profile. It is likely that a clean sheet implementation would have some things coming from meta-agl-profile-graphical, so further rework may be required/desired to continue cleaning things up. Bug-AGL: SPEC-3300, SPEC-3375 Signed-off-by: Scott Murray <scott.murray@konsulko.com> Change-Id: I942b61501beb41d037001b70a501f90b9a59c45d
2020-05-12Widget packaging reworkScott Murray2-0/+6
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 <scott.murray@konsulko.com> Change-Id: I3a28615db94bbc04e30e98ac3dce8cae942a499f
2020-04-27Declare layer compatibility for dunfellScott Murray1-1/+1
For the upgrade to YP dunfell/3.1 we need to update the layer compatibility. Bug-AGL: SPEC-3302 Signed-off-by: Scott Murray <scott.murray@konsulko.com> Change-Id: Ieb1ac9ef1f48f077c9cd312c4ac295ae1cc062b0
2020-04-10af-main: Sign widgets when agl-develJosé Bollo1-0/+3
This change introduce signature of widgets with sample keys and certificates of app-framework-main when the feature agl-devel is selected. It also shows how to sign widget
#!/usr/bin/env bash

################################################################################
#
# The MIT License (MIT)
#
# Copyright (c) 2018 Stéphane Desneux <sdx@iot.bzh>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
################################################################################

mode=deploy
manifest=
verbose=0
format=bash
sourcefile=

function info() { echo "$@" >&2; }
function error() { echo "$BASH_SOURCE: $@" >&2; }
function out() { echo -n "$@"; }
function out_object() {
	# expected stdin stream is:
	# --------------
	# key
	# value
	# key
	# value
	# ...
	# --------------
	local sep=""
	local k
	case $format in
		bash)
			while read x; do
				[[ -z "$k" ]] && { k="$x"; continue; }
				out "$sep${k}="
				out_value "$x"
				sep=$'\n'
				k=
			done
			out "$sep"
			;;
		json)
			out "{"
			while read x; do
				[[ -z "$k" ]] && { k="$x"; continue; }
				out "$sep\"${k}\":"
				out_value "$x"
				sep=","
				k=
			done
			out "}"
			;;
	esac
}

function out_array() {
	# expected stdin stream is:
	# --------------
	# value
	# value
	# ...
	# --------------
	local sep=""
	case $format in
		bash)
			while read x; do
				out "$sep"
				out_value "$x"
				sep=" "
			done
			;;
		json)
			out "["
			while read x; do
				out $sep
				out_value "$x"
				sep=","
			done
			out "]"
			;;
	esac
}

function out_value() {
	# string
	# number
	# object
	# array
	# 'true'
	# 'false'
	# 'null'

	x=$1

	# litterals
	if [[ "$x" =~ ^(true|false|null)$ ]]; then
		out "$x"
	# number
	elif [[ "$x" =~ ^[+-]?[0-9]+(\.[0-9]+)?$ ]]; then
		out "$x"
	# object
	elif [[ "$x" =~ ^\{.*\}$ ]]; then
		out "$x"
	# array
	elif [[ "$x" =~ ^\[.*\]$ ]]; then
		out "$x"
	# string
	else
		out "\"$(sed 's/\("\)/\\\1/g' <<<$x)\""
	fi
}

function out_comment() {
	case $format in
		bash)
			[[ "$verbose" == 1 ]] && echo "# $@" || true
			;;
		json)
			;;
	esac
}

function _getgitmanifest() {
	# this function takes the setup.manifest generated by setup script and uses DIST_METADIR
	# to analyze git repos

	local manifest=$1 mode=$2
	[[ -f $manifest ]] && source $manifest || { error "Invalid setup manifest '$manifest'"; return 1; }
	[[ ! -d "$DIST_METADIR" ]] && {
		error "Invalid meta directory. Check variable DIST_METADIR in manifest file '$manifest'."
		error "$BASH_SOURCE: Also, check directory '$DIST_METADIR'."
		return 2
	}
	local GIT=$(which git) REALPATH=$(which realpath)
	[[ ! -x $GIT ]] && { error "$BASH_SOURCE: Unable to find git command in $PATH."; return 3; }
	[[ ! -x $REALPATH ]] && { error "$BASH_SOURCE: Unable to find realpath command in $PATH."; return 4; }

	local gitrepo gitrev metagitdir sep=""
	DIST_LAYERS=""
	for metagitdir in $(find $DIST_METADIR -type d -name ".git"); do
		gitrepo=$($REALPATH -Ls $metagitdir/.. --relative-to=$DIST_METADIR)
		pushd $DIST_METADIR/$gitrepo &>/dev/null && {
			gitrev=$( { $GIT describe --long --dirty --always 2>/dev/null || echo "unknown_revision"; } | tr ' \t' '__' )
			popd &>/dev/null
		} || {
			gitrev=unknown
		}
		DIST_LAYERS="${DIST_LAYERS}${sep}${gitrepo}:${gitrev}"
		sep=" "
	done

	# layers checksum
	DIST_LAYERS_MD5=$(echo $DIST_LAYERS|md5sum -|awk '{print $1;}')

	# in json, transform layers in an object, features in array
	[[ "$format" == "json" ]] && {
		DIST_FEATURES=$(for x in $DIST_FEATURES; do
			echo $x
		done | out_array)
		DIST_LAYERS=$(for x in $DIST_LAYERS; do
			echo ${x%%:*}
			echo ${x#*:}
		done | out_object)
	}


	# compute build hash
	DIST_BUILD_HASH="F${DIST_FEATURES_MD5:0:8}-L${DIST_LAYERS_MD5:0:8}"
	DIST_BUILD_ID="${DIST_DISTRO_NAME}-${DIST_MACHINE}-F${DIST_FEATURES_MD5:0:8}-L${DIST_LAYERS_MD5:0:8}"

	# compute setup manifest path and build TS
	DIST_SETUP_MANIFEST="$($REALPATH $manifest)"

	# Manifest build timestamp
	DIST_BUILD_TS="$(date -u +%Y%m%d_%H%M%S_%Z)"

	# what to retain from setup manifest?
	# to generate the full list: cat setup.manifest  | grep = | cut -f1 -d"=" | awk '{printf("%s ",$1);}'
	declare -A SETUP_VARS
	SETUP_VARS[deploy]="DIST_MACHINE DIST_FEATURES DIST_FEATURES_MD5 DIST_BUILD_HOST DIST_BUILD_OS DIST_SETUP_TS"
	SETUP_VARS[target]="DIST_MACHINE DIST_FEATURES"
	SETUP_VARS[sdk]="DIST_MACHINE DIST_FEATURES"

	# extra vars not coming from setup.manifest but generated here
	declare -A EXTRA_VARS
	EXTRA_VARS[deploy]="DIST_SETUP_MANIFEST DIST_BUILD_TS DIST_LAYERS DIST_LAYERS_MD5 DIST_BUILD_HASH DIST_BUILD_ID"
	EXTRA_VARS[target]="DIST_LAYERS DIST_BUILD_HASH DIST_BUILD_ID"
	EXTRA_VARS[sdk]="DIST_LAYERS DIST_BUILD_HASH DIST_BUILD_ID"

	# BITBAKE_VARS may be defined from external file to source (--source arg)
	# this is used to dump extra vars from inside bitbake recipe

	{ for x in ${SETUP_VARS[$mode]} ${EXTRA_VARS[$mode]} ${BITBAKE_VARS[$mode]}; do
		k=$x
		[[ "$format" == "json" ]] && {
			k=${k#DIST_} # remove prefix
			k=${k,,*} # to lower case
		}
		echo $k
		echo ${!x}
	done } | out_object
}

function getmanifest() {
	local rc=0
	out_comment "DISTRO BUILD MANIFEST"
	out_comment

	# add layers manifest
	out_comment "----- this fragment has been generated by $BASH_SOURCE"
	_getgitmanifest $1 $2 || rc=$?
	out_comment "------------ end of $BASH_SOURCE fragment --------"

	return $rc
}

function __usage() {
	cat <<EOF >&2
Usage: $BASH_SOURCE [-v|--verbose] [-f|--format <fmt>] [-m|--mode <mode>] [-s|--source <file>] <setup_manifest_file>
   Options:
      -v|--verbose: generate comments in the output file
      -s|--source: extra file to source (get extra variables generated from bitbake recipe)
      -f|--format: specify output format: 'bash' or 'json'
      -m|--mode: specify the destination for the generated manifest
         'deploy' : for the tmp/deploy/images/* directories
         'target' : for the manifest to be installed inside a target image
         'sdk'    : for the manifest to be installed inside the SDK

   <setup_manifest_file> is the input manifest generated from setup script
EOF
}

set -e

tmp=$(getopt -o h,v,m:,f:,s: --long help,verbose,mode:,format:,source: -n "$BASH_SOURCE" -- "$@") || {
	error "Invalid arguments."
	__usage
	exit 1
}
eval set -- $tmp

while true; do
	case "$1" in
		-h|--help) __usage; exit 0;;
		-v|--verbose) verbose=1; shift ;;
		-f|--format) format=$2; shift 2;;
		-m|--mode) mode=$2; shift 2;;
		-s|--source) sourcefile=$2; shift 2;;
		--) shift; break;;
		*) fatal "Internal error";;
	esac
done

manifest=$1
shift
[[ ! -f "$manifest" ]] && { __usage; exit 1; }

case $mode in
	deploy|target|sdk) ;;
	*) error "Invalid mode specified. Allowed modes are: 'deploy', 'target', 'sdk'"; __usage; exit 42;;
esac

case $format in
	bash|json) ;;
	*) error "Invalid format specified. Allowed formats are 'json' or 'bash'"; __usage; exit 43;;
esac

info "Generating manifest: mode=$mode format=$format manifest=$manifest"
[[ -f "$sourcefile" ]] && {
	info "Sourcing file $sourcefile"
	. $sourcefile
	# this may define extra vars: to be taken into account BITBAKE_VARS must be defined
}

[[ "$format" == "json" ]] && {
	# if jq is present, use it to format json output
	jq=$(which jq || true)
	[[ -n "$jq" ]] && {
		getmanifest $manifest $mode | $jq ""
		exit ${PIPESTATUS[0]}
	}
}

getmanifest $manifest $mode