From 49708ad34cb299b2f057f0e3e848b299cb05f252 Mon Sep 17 00:00:00 2001 From: Tushar Khandelwal Date: Tue, 14 May 2019 23:10:53 +0100 Subject: add corstone700 layers and tiny-image config Change-Id: I08312be44c1ff33e38885e3f0e62fe822bd72ff5 Signed-off-by: Tushar Khandelwal --- bblayers.conf | 34 +++++ local.conf | 53 +++++++ setup-environment | 21 +++ setup-environment-internal | 360 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 468 insertions(+) create mode 100644 bblayers.conf create mode 100644 local.conf create mode 100755 setup-environment create mode 100644 setup-environment-internal diff --git a/bblayers.conf b/bblayers.conf new file mode 100644 index 0000000..b00f8fc --- /dev/null +++ b/bblayers.conf @@ -0,0 +1,34 @@ +# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf +# changes incompatibly +LCONF_VERSION = "7" +OEROOT := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)))}/../.." + +BBPATH = "${TOPDIR}" + +BBFILES = "" + +# These layers hold recipe metadata not found in OE-core, but lack any machine or distro content +BASELAYERS ?= " \ + ${OEROOT}/layers/meta-openembedded/meta-filesystems \ + ${OEROOT}/layers/meta-openembedded/meta-oe \ + ${OEROOT}/layers/meta-yocto/meta-poky \ +" + +# These layers hold machine specific content, aka Board Support Packages +BSPLAYERS ?= " \ +" + +# Add your overlay location to EXTRALAYERS +# Make sure to have a conf/layers.conf in there +EXTRALAYERS ?= " \ + ${OEROOT}/layers/meta-linaro/meta-linaro-toolchain \ +" + +BBLAYERS = " \ + ${OEROOT}/layers/meta-corstone700 \ + ${OEROOT}/layers/meta-iota \ + ${BASELAYERS} \ + ${BSPLAYERS} \ + ${EXTRALAYERS} \ + ${OEROOT}/layers/openembedded-core/meta \ +" diff --git a/local.conf b/local.conf new file mode 100644 index 0000000..857619f --- /dev/null +++ b/local.conf @@ -0,0 +1,53 @@ + +# CONF_VERSION is increased each time build/conf/ changes incompatibly +CONF_VERSION = "1" + +# Which files do we want to parse: +BBMASK = "" + +# Don't generate the mirror tarball for SCM repos, the snapshot is enough +BB_GENERATE_MIRROR_TARBALLS = "0" + +# Disable build time patch resolution. This would lauch a devshell +# and wait for manual intervention. We disable it. +PATCHRESOLVE = "noop" + +# +# Parallelism Options +# +# These two options control how much parallelism BitBake should use. The first +# option determines how many tasks bitbake should run in parallel: +# Default to setting automatically based on cpu count +BB_NUMBER_THREADS ?= "${@oe.utils.cpu_count()}" + +# +# The second option controls how many processes make should run in parallel when +# running compile tasks: +# Default to setting automatically based on cpu count +PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count()}" + +# +# Shared-state files from other locations +# +# Shared state files are prebuilt cache data objects which can +# used to accelerate build time. This variable can be used to configure the system +# to search other mirror locations for these objects before it builds the data itself. +# +# This can be a filesystem directory, or a remote url such as http or ftp. These +# would contain the sstate-cache results from previous builds (possibly from other +# machines). This variable works like fetcher MIRRORS/PREMIRRORS and points to the +# cache locations to check for the shared objects. +#SSTATE_MIRRORS ?= "\ +#file://.* http://someserver.tld/share/sstate/ \n \ +#file://.* file:///some/local/dir/sstate/" + +# enable PR service on build machine itself +# its good for a case when this is the only builder +# generating the feeds +#PRSERV_HOST = "localhost:0" + +# Override default FETCHCMD_wget with increased timeout parameters +# -t: number of tries (default was 2) +# -T: network timeout in seconds (default was 30) +# The rest of the parameters are the same. +FETCHCMD_wget = "/usr/bin/env wget -t 10 -T 90 -nv --passive-ftp --no-check-certificate" diff --git a/setup-environment b/setup-environment new file mode 100755 index 0000000..925277b --- /dev/null +++ b/setup-environment @@ -0,0 +1,21 @@ +#!/bin/sh +# -*- mode: shell-script-mode; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +# +# Copyright (C) 2012-13 O.S. Systems Software LTDA. +# Authored-by: Otavio Salvador +# Adopted to Angstrom: Khem Raj +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +. conf/setup-environment-internal diff --git a/setup-environment-internal b/setup-environment-internal new file mode 100644 index 0000000..cd7c5de --- /dev/null +++ b/setup-environment-internal @@ -0,0 +1,360 @@ +#!/bin/bash +# -*- mode: shell-script-mode; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +# +# Copyright (C) 2012-13 O.S. Systems Software LTDA. +# Authored-by: Otavio Salvador +# Adopted to Angstrom: Khem Raj +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +RPBcleanup() { + unset MACHINETABLE MACHLAYERS DISTROTABLE DISTROLAYERS DISTRO_DIRNAME OEROOT + unset ITEM MANIFESTS EULA EULA_MACHINE REPLY READ_EULA + unset usage oldmach + + if [ -n "$BUILDDIR" ]; then + export BUILDDIR + fi +} +trap RPBcleanup RETURN + +if [ "$(whoami)" = "root" ]; then + echo "ERROR: do not use the BSP as root. Exiting..." + return +fi + +OEROOT=$(pwd) +cd "$OEROOT" +if [ -n "$ZSH_VERSION" ]; then + setopt sh_word_split + setopt clobber +elif [ -n "$BASH_VERSION" ]; then + set +o noclobber +fi + +usage () { + cat <] [MACHINE=] source ${BASH_SOURCE[0]} [BUILDDIR] + +If no MACHINE is set, list all possible machines, and ask user to choose. +If no DISTRO is set, list all possible distros, and ask user to choose. +If no BUILDIR is set, it will be set to build-DISTRO. + +EOF +} + +if [ $# -gt 1 ]; then + usage + return 1 +fi +# create a common list of "()", sorted by +# Blacklist OE-core and meta-linaro, we only want 96boards + vendor layers +MACHLAYERS=$(find layers -print | grep "conf/machine/.*\.conf" | grep -v scripts | grep -v openembedded-core | grep -v meta-linaro | sed -e 's/\.conf//g' -e 's/layers\///' | awk -F'/conf/machine/' '{print $NF "(" $1 ")"}' | LANG=C sort) + +if [ -z "${MACHINE}" ]; then + # whiptail + which whiptail > /dev/null 2>&1 + if [ $? -eq 0 ]; then + MACHINETABLE= + for ITEM in $MACHLAYERS; do + MACHINETABLE="${MACHINETABLE} $(echo "$ITEM" | cut -d'(' -f1) $(echo "$ITEM" | cut -d'(' -f2 | cut -d')' -f1)" + done + MACHINE=$(whiptail --title "Available Machines" --menu \ + "Please choose a machine" 0 0 20 \ + ${MACHINETABLE} 3>&1 1>&2 2>&3) + fi + + # dialog + if [ -z "$MACHINE" ]; then + which dialog > /dev/null 2>&1 + if [ $? -eq 0 ]; then + MACHINETABLE= + for ITEM in $MACHLAYERS; do + MACHINETABLE="$MACHINETABLE $(echo "$ITEM" | cut -d'(' -f1) $(echo "$ITEM" | cut -d'(' -f2 | cut -d')' -f1)" + done + MACHINE=$(dialog --title "Available Machines" --menu "Please choose a machine" 0 0 20 $MACHINETABLE 3>&1 1>&2 2>&3) + fi + fi +fi + +# create a common list of "()", sorted by +# Blacklist OE-core and meta-linaro, we only want 96boards + vendor layers +DISTROLAYERS=$(find layers -print | grep "conf/distro/.*\.conf" | grep -v scripts | grep -v openembedded-core | grep -v meta-linaro | sed -e 's/\.conf//g' -e 's/layers\///' | awk -F'/conf/distro/' '{print $NF "(" $1 ")"}' | LANG=C sort) + +if [ -n "${DISTROLAYERS}" ] && [ -z "${DISTRO}" ]; then + # whiptail + which whiptail > /dev/null 2>&1 + if [ $? -eq 0 ]; then + DISTROTABLE= + for ITEM in $DISTROLAYERS; do + DISTROTABLE="${DISTROTABLE} $(echo "$ITEM" | cut -d'(' -f1) $(echo "$ITEM" | cut -d'(' -f2 | cut -d')' -f1)" + done + DISTRO=$(whiptail --title "Available Distributions" --menu \ + "Please choose a distribution" 0 0 20 \ + ${DISTROTABLE} 3>&1 1>&2 2>&3) + fi + + # dialog + if [ -z "$DISTRO" ]; then + which dialog > /dev/null 2>&1 + if [ $? -eq 0 ]; then + DISTROTABLE= + for ITEM in $DISTROLAYERS; do + DISTROTABLE="$DISTROTABLE $(echo "$ITEM" | cut -d'(' -f1) $(echo "$ITEM" | cut -d'(' -f2 | cut -d')' -f1)" + done + DISTRO=$(dialog --title "Available Distributions" --menu "Please choose a distribution" 0 0 20 $DISTROTABLE 3>&1 1>&2 2>&3) + fi + fi +fi + +# If nothing has been set, go for 'nodistro' +if [ -z "$DISTRO" ]; then + DISTRO="nodistro" +fi + +# guard against Ctrl-D or cancel +if [ -z "$MACHINE" ]; then + echo "To choose a machine interactively please install whiptail or dialog." + echo "To choose a machine non-interactively please use the following syntax:" + echo " MACHINE= . ./setup-environment" + echo "" + echo "Press to see a list of your choices" + read -r + echo "$MACHLAYERS" | sed -e 's/(/ (/g' | sed -e 's/)/)\n/g' | sed -e 's/^ */\t/g' + return +fi + +if [ -z "${SDKMACHINE}" ]; then + SDKMACHINE='x86_64' +fi + +MANIFESTS="${OEROOT}"/.repo/manifests + +# we can be called with only 1 parameter max, folder, or default to build-$distro +BUILDDIR=build-$DISTRO +if [ $# -eq 1 ]; then + BUILDDIR=$1 +fi +BUILDDIR=$OEROOT/$BUILDDIR + +# Clean up PATH, because if it includes tokens to current directories somehow, +# wrong binaries can be used instead of the expected ones during task execution +export PATH=$(echo "${PATH}" | sed 's/\(:.\|:\)*:/:/g;s/^.\?://;s/:.\?$//') +export PATH="${OEROOT}"/layers/openembedded-core/scripts:"${OEROOT}"/bitbake/bin:"${OEROOT}"/.repo/repo:"${PATH}" +#remove duplicate path entries +export PATH=$(echo "$PATH" | awk -F: '{for (i=1;i<=NF;i++) { if ( !x[$i]++ ) printf("%s:",$i); }}' | sed 's/:$//') +# Make sure Bitbake doesn't filter out the following variables from our +# environment. +export BB_ENV_EXTRAWHITE="MACHINE DISTRO TCLIBC TCMODE GIT_PROXY_COMMAND http_proxy ftp_proxy https_proxy all_proxy ALL_PROXY no_proxy SSH_AGENT_PID SSH_AUTH_SOCK BB_SRCREV_POLICY SDKMACHINE BB_NUMBER_THREADS" + +# Helper command for building images for mixed 32bit/64bit +# ARM builds. The command allow to specify a secondary MACHINE +# and image that will be built next to the primary target. +# If no secondary image is specified the rpb-minimal-image image +# will be built. + + +bitbake_secondary_image () { + BITBAKE_OPTIONS="" + unset EXTRA_MACHINE + unset SECONDARY_IMAGE + + SECONDARY_IMAGE='rpb-minimal-image' + while [[ $# -gt 1 ]] + do + key="$1" + case $key in + --extra-machine) + EXTRA_MACHINE="$2" + shift + ;; + --secondary-image) + SECONDARY_IMAGE="$2" + shift + ;; + *) + BITBAKE_OPTIONS=$BITBAKE_OPTIONS" "$1 + ;; + esac + shift + done + BITBAKE_OPTIONS=$BITBAKE_OPTIONS" "$1 + if [ -z "$EXTRA_MACHINE" ] + then + echo " Error: you need to run $FUNCNAME with --extra-machine agument" + echo + echo " Example:" + echo " $ $FUNCNAME --extra-machine hikey rpb-weston-image" + return + fi + + if [ "$EXTRA_MACHINE" == "$MACHINE" ] + then + echo "Error: the extra machine must be different from the machine you already set using setup-environment: "$MACHINE + return + fi + + echo "Building first image. MACHINE:" $EXTRA_MACHINE " DISTRO:" $DISTRO + + MACHINE=$EXTRA_MACHINE bitbake $SECONDARY_IMAGE + + if [ $? != 0 ]; then + printf "Error building image" + return + fi + echo "Building second image. MACHINE:" $MACHINE " DISTRO:" $DISTRO + + MACHINE=$MACHINE bitbake $BITBAKE_OPTIONS +} +mkdir -p "${BUILDDIR}"/conf && cd "${BUILDDIR}" +if [ -f "conf/auto.conf" ]; then + oldmach=$(egrep "^MACHINE" "conf/auto.conf" | sed -e 's%^MACHINE ?= %%' | sed -e 's/^"//' -e 's/"$//') +fi +if [ -e conf/checksum -a "${MACHINE}" = "$oldmach" ] +then + sha512sum --quiet -c conf/checksum > /dev/null 2>&1 + if [ $? -eq 0 ] + then + return + fi +fi + +# evaluate new checksum and regenerate the conf files +sha512sum "${OEROOT}"/conf/setup-environment-internal 2>&1 > conf/checksum + +ln -sf "${OEROOT}"/conf/local.conf conf/local.conf +ln -sf "${OEROOT}"/conf/bblayers.conf conf/bblayers.conf +ln -sf "${MANIFESTS}"/README.md README.md + +ln -sf "${MANIFESTS}" "${OEROOT}"/layers/ + +DISTRO_DIRNAME=$(echo "${DISTRO}" | sed 's#[.-]#_#g') + +cat > conf/auto.conf < conf/site.conf <<_EOF + +SCONF_VERSION = "1" + +# Where to store sources +DL_DIR ?= "${OEROOT}/downloads" + +# Where to save shared state +SSTATE_DIR ?= "${OEROOT}/sstate-cache" + +TMPDIR = "${BUILDDIR}/tmp-${DISTRO_DIRNAME}" + +# Go through the Firewall +#HTTP_PROXY = "http://${PROXYHOST}:${PROXYPORT}/" + +_EOF +fi + +# Handle EULA , if needed. This is a generic method to handle BSPs +# that might (or not) come with a EULA. If a machine has a EULA, we +# assume that its corresponding layers has conf/EULA/$MACHINE file +# with the EULA text, which we will display to the user and request +# for acceptance. If accepted, the variable ACCEPT_EULA_$MACHINE is +# set to 1 in auto.conf, which can later be used by the BSP. +# If the env variable EULA_$MACHINE is set it is used by default, +# without prompting the user. +# FIXME: there is a potential issue if the same $MACHINE is set in more than one layer.. but we should assert that earlier +EULA=$(find ../layers -path "*/conf/eula/$MACHINE" -print | grep -v scripts | grep -v openembedded-core | grep -v meta-linaro || true) + +if [ -n "$EULA" ]; then + + # remove '-' since we are constructing a bash variable name here + EULA_MACHINE="EULA_$(echo "$MACHINE" | sed 's/-//g')" + + # NOTE: indirect reference / dynamic variable + if [ -n "${!EULA_MACHINE}" ]; then + # the EULA_$MACHINE variable is set in the environment, so we just configure + # ACCEPT_EULA_$MACHINE in auto.conf + echo "ACCEPT_EULA_$MACHINE = \"${!EULA_MACHINE}\"" >> conf/auto.conf + else + # so we need to ask user if he/she accepts the EULA: + cat <> conf/auto.conf + ;; + n|N) + echo "EULA has not been accepted." + ;; + *) + REPLY= + ;; + esac + done + fi + fi +fi + +cat <' + +Available targets are: + iota-tiny-image + +EOF -- cgit v1.2.3