├── .gitignore ├── COPYING.MIT ├── README ├── VERSION ├── conf ├── bblayers.conf └── local.conf ├── oebb.sh ├── scripts ├── ci-config-helper.sh ├── ci-upload-helper.sh ├── layerman ├── layers.awk ├── listpatches.sh ├── listpending.sh └── prserv-import-helper.sh └── sources └── layers.txt /.gitignore: -------------------------------------------------------------------------------- 1 | bitbake.lock 2 | build 3 | sources/* 4 | deploy/ 5 | !sources/layers.txt 6 | conf/auto.conf 7 | conf/bblayers.conf 8 | conf/sanity_info 9 | conf/site.conf 10 | pseudodone 11 | git_config 12 | subversion_config/ 13 | package-depends.dot 14 | pn-depends.dot 15 | task-depends.dot 16 | tags 17 | -------------------------------------------------------------------------------- /COPYING.MIT: -------------------------------------------------------------------------------- 1 | Permission is hereby granted, free of charge, to any person obtaining a copy 2 | of this software and associated documentation files (the "Software"), to deal 3 | in the Software without restriction, including without limitation the rights 4 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 5 | copies of the Software, and to permit persons to whom the Software is 6 | furnished to do so, subject to the following conditions: 7 | 8 | The above copyright notice and this permission notice shall be included in 9 | all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 17 | THE SOFTWARE. 18 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | These are the setup scripts for the Angstrom buildsystem. If you want to (re)build packages or images for Angstrom, this is the thing to use. 2 | The Angstrom buildsystem is using various components from the Yocto Project, most importantly the Openembedded buildsystem, the bitbake task executor and various application and BSP layers. 3 | 4 | This is the Angstrom Distribution v2014.12 release. 5 | 6 | To configure the scripts and download the build metadata, do: 7 | 8 | $ MACHINE=beagleboard ./oebb.sh config beagleboard 9 | 10 | You can change the 'beagleboard' in the commandline above into the machine you are targeting. 11 | 12 | To start a build of the kernel, source the environment file and do: 13 | 14 | $ . environment-angstrom 15 | $ MACHINE=beagleboard bitbake virtual/kernel 16 | 17 | For an example workflow for dealing with kernels please read http://www.slimlogic.co.uk/2011/05/openembeddedangstrom-kernel-workflow/ 18 | 19 | To update the metadata, do: 20 | 21 | $ git pull 22 | $ ./oebb.sh update 23 | 24 | The oebb.sh script tries hard to keep your local changes while at the same time keeping close to the original config. Please keep the following in mind: 25 | 26 | * it will reset the origin URI based on layers.txt, so update layers.txt when changing a repo 27 | * it will do a 'git reset --hard ' on locked down repos, so please create a new branch for your changes 28 | * As noted above, it will NOT switch branches, so be carefull when using the update function after you branched a repo 29 | 30 | If you find any bugs please report them here: https://github.com/angstrom-distribution/setup-scripts/issues 31 | 32 | If you have questions or feedback, please subscribe to http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/angstrom-distro-devel 33 | 34 | Angstrom Distribution maintainers: Koen Kooi 35 | Khem Raj 36 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | ANGSTROMVERSION=v2014.12 2 | -------------------------------------------------------------------------------- /conf/bblayers.conf: -------------------------------------------------------------------------------- 1 | # LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf 2 | # changes incompatibly 3 | LCONF_VERSION = "5" 4 | TOPDIR := "${@os.path.dirname(os.path.dirname(d.getVar('FILE', True)))}" 5 | 6 | BBPATH = "${TOPDIR}" 7 | 8 | BBFILES = "" 9 | 10 | # These layers hold recipe metadata not found in OE-core, but lack any machine or distro content 11 | BASELAYERS ?= " \ 12 | ${TOPDIR}/sources/meta-openembedded/meta-oe \ 13 | ${TOPDIR}/sources/meta-openembedded/meta-efl \ 14 | ${TOPDIR}/sources/meta-openembedded/meta-gpe \ 15 | ${TOPDIR}/sources/meta-openembedded/meta-gnome \ 16 | ${TOPDIR}/sources/meta-openembedded/meta-xfce \ 17 | ${TOPDIR}/sources/meta-openembedded/meta-initramfs \ 18 | ${TOPDIR}/sources/meta-openembedded/toolchain-layer \ 19 | ${TOPDIR}/sources/meta-openembedded/meta-multimedia \ 20 | ${TOPDIR}/sources/meta-openembedded/meta-networking \ 21 | ${TOPDIR}/sources/meta-openembedded/meta-webserver \ 22 | ${TOPDIR}/sources/meta-openembedded/meta-ruby \ 23 | ${TOPDIR}/sources/meta-openembedded/meta-filesystems \ 24 | ${TOPDIR}/sources/meta-openembedded/meta-perl \ 25 | ${TOPDIR}/sources/meta-openembedded/meta-python \ 26 | ${TOPDIR}/sources/meta-kde4 \ 27 | ${TOPDIR}/sources/meta-java \ 28 | ${TOPDIR}/sources/meta-browser \ 29 | ${TOPDIR}/sources/meta-mono \ 30 | ${TOPDIR}/sources/meta-qt5 \ 31 | ${TOPDIR}/sources/meta-openembedded/meta-systemd \ 32 | ${TOPDIR}/sources/meta-ros \ 33 | ${TOPDIR}/sources/meta-uav \ 34 | ${TOPDIR}/sources/meta-telephony \ 35 | ${TOPDIR}/sources/meta-beagleboard/meta-beagleboard-extras \ 36 | ${TOPDIR}/sources/meta-photography \ 37 | ${TOPDIR}/sources/meta-ci \ 38 | ${TOPDIR}/sources/meta-intel-iot-middleware \ 39 | ${TOPDIR}/sources/meta-maker \ 40 | " 41 | 42 | # These layers hold machine specific content, aka Board Support Packages 43 | BSPLAYERS ?= " \ 44 | ${TOPDIR}/sources/meta-beagleboard/common-bsp \ 45 | ${TOPDIR}/sources/meta-ti \ 46 | ${TOPDIR}/sources/meta-fsl-arm \ 47 | ${TOPDIR}/sources/meta-fsl-arm-extra \ 48 | ${TOPDIR}/sources/meta-nslu2 \ 49 | ${TOPDIR}/sources/meta-smartphone/meta-htc \ 50 | ${TOPDIR}/sources/meta-smartphone/meta-nokia \ 51 | ${TOPDIR}/sources/meta-smartphone/meta-openmoko \ 52 | ${TOPDIR}/sources/meta-smartphone/meta-palm \ 53 | ${TOPDIR}/sources/meta-handheld \ 54 | ${TOPDIR}/sources/meta-intel \ 55 | ${TOPDIR}/sources/meta-intel/meta-sugarbay \ 56 | ${TOPDIR}/sources/meta-intel/meta-crownbay \ 57 | ${TOPDIR}/sources/meta-intel/meta-emenlow \ 58 | ${TOPDIR}/sources/meta-intel/meta-fri2 \ 59 | ${TOPDIR}/sources/meta-intel/meta-jasperforest \ 60 | ${TOPDIR}/sources/meta-sunxi \ 61 | ${TOPDIR}/sources/meta-raspberrypi \ 62 | ${TOPDIR}/sources/meta-minnow \ 63 | ${TOPDIR}/sources/meta-dominion \ 64 | ${TOPDIR}/sources/meta-atmel \ 65 | ${TOPDIR}/sources/meta-exynos \ 66 | ${TOPDIR}/sources/meta-gumstix-community \ 67 | ${TOPDIR}/sources/meta-qualcomm \ 68 | ${TOPDIR}/sources/meta-edison \ 69 | ${TOPDIR}/sources/meta-96boards \ 70 | " 71 | 72 | # Add your overlay location to EXTRALAYERS 73 | # Make sure to have a conf/layers.conf in there 74 | EXTRALAYERS ?= " \ 75 | ${TOPDIR}/sources/meta-linaro/meta-linaro \ 76 | ${TOPDIR}/sources/meta-linaro/meta-linaro-toolchain \ 77 | ${TOPDIR}/sources/meta-linaro/meta-aarch64 \ 78 | " 79 | 80 | BBLAYERS = " \ 81 | ${TOPDIR}/sources/meta-angstrom \ 82 | ${BASELAYERS} \ 83 | ${BSPLAYERS} \ 84 | ${EXTRALAYERS} \ 85 | ${TOPDIR}/sources/openembedded-core/meta \ 86 | " 87 | -------------------------------------------------------------------------------- /conf/local.conf: -------------------------------------------------------------------------------- 1 | 2 | # CONF_VERSION is increased each time build/conf/ changes incompatibly 3 | CONF_VERSION = "1" 4 | 5 | INHERIT += "rm_work" 6 | 7 | # Which files do we want to parse: 8 | BBMASK = "" 9 | 10 | # What kind of images do we want? 11 | IMAGE_FSTYPES_append = " tar.xz" 12 | IMAGE_FSTYPES_remove = "tar.gz" 13 | 14 | # Disable ISO image by default 15 | NOISO = "1" 16 | 17 | # Make use of SMP: 18 | # PARALLEL_MAKE specifies how many concurrent compiler threads are spawned per bitbake process 19 | # BB_NUMBER_THREADS specifies how many concurrent bitbake tasks will be run 20 | PARALLEL_MAKE = "-j2" 21 | BB_NUMBER_THREADS = "2" 22 | 23 | DISTRO = "angstrom-v2014.12" 24 | # Set DEPLOY_DIR outside of TMPDIR 25 | 26 | DEPLOY_DIR = "${TMPDIR}/../../deploy/${TCLIBC}" 27 | # Don't generate the mirror tarball for SCM repos, the snapshot is enough 28 | BB_GENERATE_MIRROR_TARBALLS = "0" 29 | 30 | # Disable build time patch resolution. This would lauch a devshell 31 | # and wait for manual intervention. We disable it. 32 | PATCHRESOLVE = "noop" 33 | 34 | # 35 | # Shared-state files from other locations 36 | # 37 | # Shared state files are prebuilt cache data objects which can 38 | # used to accelerate build time. This variable can be used to configure the system 39 | # to search other mirror locations for these objects before it builds the data itself. 40 | # 41 | # This can be a filesystem directory, or a remote url such as http or ftp. These 42 | # would contain the sstate-cache results from previous builds (possibly from other 43 | # machines). This variable works like fetcher MIRRORS/PREMIRRORS and points to the 44 | # cache locations to check for the shared objects. 45 | #SSTATE_MIRRORS ?= "\ 46 | #file://.* http://someserver.tld/share/sstate/ \n \ 47 | #file://.* file:///some/local/dir/sstate/" 48 | 49 | #SSTATE_MIRRORS ?= "\ 50 | #file://.* http://dominion.thruhere.net/angstrom/sstate-mirror/ \n " 51 | 52 | # enable PR service on build machine itself 53 | # its good for a case when this is the only builder 54 | # generating the feeds 55 | # 56 | PRSERV_HOST = "localhost:0" 57 | 58 | -------------------------------------------------------------------------------- /oebb.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Original script done by Don Darling 4 | # Later changes by Koen Kooi and Brijesh Singh 5 | 6 | # Revision history: 7 | # 20090902: download from twiki 8 | # 20090903: Weakly assign MACHINE and DISTRO 9 | # 20090904: * Don't recreate local.conf is it already exists 10 | # * Pass 'unknown' machines to OE directly 11 | # 20090918: Fix /bin/env location 12 | # Don't pass MACHINE via env if it's not set 13 | # Changed 'build' to 'bitbake' to prepare people for non-scripted usage 14 | # Print bitbake command it executes 15 | # 20091012: Add argument to accept commit id. 16 | # 20091202: Fix proxy setup 17 | # 18 | # For further changes consult 'git log' or browse to: 19 | # http://git.angstrom-distribution.org/cgi-bin/cgit.cgi/setup-scripts/ 20 | # to see the latest revision history 21 | 22 | # Use this till we get a maintenance branch based of the release tag 23 | 24 | ############################################################################### 25 | # User specific vars like proxy servers 26 | ############################################################################### 27 | 28 | #PROXYHOST=wwwgate.ti.com 29 | #PROXYPORT=80 30 | PROXYHOST="" 31 | 32 | ############################################################################### 33 | # OE_BASE - The root directory for all OE sources and development. 34 | ############################################################################### 35 | OE_BASE=${PWD} 36 | # incremement this to force recreation of config files 37 | BASE_VERSION=9 38 | OE_ENV_FILE=environment-angstrom-v2014.12 39 | 40 | GITMAJOR="$(git --version | awk '{print $3}' | awk -F. '{print $1}')" 41 | GITMINOR="$(git --version | awk '{print $3}' | awk -F. '{print $2}')" 42 | 43 | if [ ${GITMAJOR} -lt 2 ] ; then 44 | if [ ${GITMINOR} -lt 8 ] ; then 45 | if ! git help log | grep -q no-abbrev ; then 46 | echo "Your installed version of git is too old, it lacks --no-abbrev. Please install 1.7.6 or newer" 47 | exit 1 48 | fi 49 | fi 50 | fi 51 | 52 | ############################################################################### 53 | # CONFIG_OE() - Configure OpenEmbedded 54 | ############################################################################### 55 | function config_oe() 56 | { 57 | 58 | MACHINE="${CL_MACHINE}" 59 | 60 | #-------------------------------------------------------------------------- 61 | # Write out the OE bitbake configuration file. 62 | #-------------------------------------------------------------------------- 63 | mkdir -p ${OE_BUILD_DIR}/conf 64 | 65 | # There's no need to rewrite site.conf when changing MACHINE 66 | if [ ! -e ${OE_BUILD_DIR}/conf/site.conf ]; then 67 | cat > ${OE_BUILD_DIR}/conf/site.conf <<_EOF 68 | 69 | SCONF_VERSION = "1" 70 | 71 | # Where to store sources 72 | DL_DIR = "${OE_SOURCE_DIR}/downloads" 73 | 74 | # Where to save shared state 75 | SSTATE_DIR = "${OE_BUILD_DIR}/build/sstate-cache" 76 | 77 | # Which files do we want to parse: 78 | BBFILES ?= "${OE_SOURCE_DIR}/openembedded-core/meta/recipes-*/*/*.bb" 79 | 80 | TMPDIR = "${OE_BUILD_TMPDIR}" 81 | 82 | # Go through the Firewall 83 | #HTTP_PROXY = "http://${PROXYHOST}:${PROXYPORT}/" 84 | 85 | _EOF 86 | fi 87 | if [ ! -e ${OE_BUILD_DIR}/conf/auto.conf ]; then 88 | cat > ${OE_BUILD_DIR}/conf/auto.conf <<_EOF 89 | MACHINE ?= "${MACHINE}" 90 | _EOF 91 | else 92 | eval "sed -i -e 's/^MACHINE.*$/MACHINE ?= \"${MACHINE}\"/g' ${OE_BUILD_DIR}/conf/auto.conf" 93 | fi 94 | } 95 | 96 | ############################################################################### 97 | # SET_ENVIRONMENT() - Setup environment variables for OE development 98 | ############################################################################### 99 | function set_environment() 100 | { 101 | 102 | # Workaround for differences between yocto bitbake and vanilla bitbake 103 | export BBFETCH2=True 104 | 105 | export TAG 106 | 107 | #-------------------------------------------------------------------------- 108 | # If an env already exists, use it, otherwise generate it 109 | #-------------------------------------------------------------------------- 110 | 111 | if [ -e ${OE_ENV_FILE} ] ; then 112 | . ${OE_ENV_FILE} 113 | fi 114 | 115 | if [ x"${BASE_VERSION}" != x"${SCRIPTS_BASE_VERSION}" ] ; then 116 | echo "BASE_VERSION mismatch, recreating ${OE_ENV_FILE}" 117 | rm -f ${OE_ENV_FILE} ${OE_BUILD_DIR}/conf/site.conf 118 | fi 119 | 120 | if [ -e ${OE_ENV_FILE} ] ; then 121 | . ${OE_ENV_FILE} 122 | else 123 | 124 | #-------------------------------------------------------------------------- 125 | # Specify distribution information 126 | #-------------------------------------------------------------------------- 127 | DISTRO=$(grep -w DISTRO conf/local.conf | grep -v '^#' | awk -F\" '{print $2}') 128 | DISTRO_DIRNAME=`echo $DISTRO | sed s#[.-]#_#g` 129 | 130 | echo "export SCRIPTS_BASE_VERSION=${BASE_VERSION}" > ${OE_ENV_FILE} 131 | echo "export BBFETCH2=True" >> ${OE_ENV_FILE} 132 | 133 | echo "export DISTRO=\"${DISTRO}\"" >> ${OE_ENV_FILE} 134 | echo "export DISTRO_DIRNAME=\"${DISTRO_DIRNAME}\"" >> ${OE_ENV_FILE} 135 | 136 | #-------------------------------------------------------------------------- 137 | # Specify the root directory for your OpenEmbedded development 138 | #-------------------------------------------------------------------------- 139 | OE_BUILD_DIR=${OE_BASE} 140 | OE_BUILD_TMPDIR="${OE_BUILD_DIR}/build/tmp-${DISTRO_DIRNAME}" 141 | OE_SOURCE_DIR=${OE_BASE}/sources 142 | OE_LAYERS_TXT="${OE_SOURCE_DIR}/layers.txt" 143 | 144 | export BUILDDIR=${OE_BUILD_DIR} 145 | mkdir -p ${OE_BUILD_DIR} 146 | mkdir -p ${OE_SOURCE_DIR} 147 | export OE_BASE 148 | 149 | echo "export OE_BUILD_DIR=\"${OE_BUILD_DIR}\"" >> ${OE_ENV_FILE} 150 | echo "export BUILDDIR=\"${OE_BUILD_DIR}\"" >> ${OE_ENV_FILE} 151 | echo "export OE_BUILD_TMPDIR=\"${OE_BUILD_TMPDIR}\"" >> ${OE_ENV_FILE} 152 | echo "export OE_SOURCE_DIR=\"${OE_SOURCE_DIR}\"" >> ${OE_ENV_FILE} 153 | echo "export OE_LAYERS_TXT=\"${OE_LAYERS_TXT}\"" >> ${OE_ENV_FILE} 154 | 155 | echo "export OE_BASE=\"${OE_BASE}\"" >> ${OE_ENV_FILE} 156 | 157 | #-------------------------------------------------------------------------- 158 | # Include up-to-date bitbake in our PATH. 159 | #-------------------------------------------------------------------------- 160 | export PATH=${OE_SOURCE_DIR}/openembedded-core/scripts:${OE_SOURCE_DIR}/bitbake/bin:${PATH} 161 | 162 | echo "export PATH=\"${PATH}\"" >> ${OE_ENV_FILE} 163 | 164 | #-------------------------------------------------------------------------- 165 | # Make sure Bitbake doesn't filter out the following variables from our 166 | # environment. 167 | #-------------------------------------------------------------------------- 168 | 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" 169 | 170 | echo "export BB_ENV_EXTRAWHITE=\"${BB_ENV_EXTRAWHITE}\"" >> ${OE_ENV_FILE} 171 | 172 | #-------------------------------------------------------------------------- 173 | # Specify proxy information 174 | #-------------------------------------------------------------------------- 175 | if [ "x$PROXYHOST" != "x" ] ; then 176 | export http_proxy=http://${PROXYHOST}:${PROXYPORT}/ 177 | export ftp_proxy=http://${PROXYHOST}:${PROXYPORT}/ 178 | 179 | export SVN_CONFIG_DIR=${OE_BUILD_DIR}/subversion_config 180 | export GIT_CONFIG_DIR=${OE_BUILD_DIR}/git_config 181 | 182 | echo "export http_proxy=\"${http_proxy}\"" >> ${OE_ENV_FILE} 183 | echo "export ftp_proxy=\"${ftp_proxy}\"" >> ${OE_ENV_FILE} 184 | echo "export SVN_CONFIG_DIR=\"${SVN_CONFIG_DIR}\"" >> ${OE_ENV_FILE} 185 | echo "export GIT_CONFIG_DIR=\"${GIT_CONFIG_DIR}\"" >> ${OE_ENV_FILE} 186 | echo "export GIT_PROXY_COMMAND=\"\${GIT_CONFIG_DIR}/git-proxy.sh\"" >> ${OE_ENV_FILE} 187 | 188 | config_svn_proxy 189 | config_git_proxy 190 | fi 191 | 192 | #-------------------------------------------------------------------------- 193 | # Set up the bitbake path to find the OpenEmbedded recipes. 194 | #-------------------------------------------------------------------------- 195 | export BBPATH=${OE_BUILD_DIR}:${OE_SOURCE_DIR}/openembedded-core/meta${BBPATH_EXTRA} 196 | 197 | echo "export BBPATH=\"${BBPATH}\"" >> ${OE_ENV_FILE} 198 | 199 | #-------------------------------------------------------------------------- 200 | # Look for dash 201 | #-------------------------------------------------------------------------- 202 | if [ "$(readlink /bin/sh)" = "dash" ] ; then 203 | echo "/bin/sh is a symlink to dash, please point it to bash instead" 204 | exit 1 205 | fi 206 | 207 | echo "There now is a sourceable script in ${OE_ENV_FILE} You can do '. ${OE_ENV_FILE}' and run 'bitbake something' without using $0 as wrapper" 208 | fi # if -e ${OE_ENV_FILE} 209 | 210 | if ! [ -e ${OE_BUILD_DIR}/conf/site.conf ] ; then 211 | config_oe 212 | fi 213 | 214 | } 215 | 216 | ############################################################################### 217 | # UPDATE_ALL() - Make sure everything is up to date 218 | ############################################################################### 219 | function update_all() 220 | { 221 | set_environment 222 | update_oe 223 | } 224 | 225 | ############################################################################### 226 | # CLEAN_OE() - Delete TMPDIR 227 | ############################################################################### 228 | function clean_oe() 229 | { 230 | set_environment 231 | echo "Cleaning ${OE_BUILD_TMPDIR}" 232 | rm -rf ${OE_BUILD_TMPDIR} 233 | } 234 | 235 | 236 | ############################################################################### 237 | # OE_BUILD() - Build an OE package or image 238 | ############################################################################### 239 | function oe_build() 240 | { 241 | if [ ! -e ${OE_BUILD_DIR}/conf/auto.conf ] ; then 242 | if [ -z $MACHINE ] ; then 243 | echo "No config found, please run $0 config first" 244 | else 245 | CL_MACHINE=$MACHINE 246 | set_environment 247 | config_oe && update_all 248 | fi 249 | fi 250 | 251 | set_environment 252 | if [ -e ${OE_ENV_FILE} ] ; then 253 | echo "Using ${OE_ENV_FILE} to setup needed variables. It is recommended to do '. ${OE_ENV_FILE}' and run 'bitbake something' without using $0 as wrapper" 254 | fi 255 | cd ${OE_BUILD_DIR} 256 | if [ -z $MACHINE ] ; then 257 | echo "Executing: bitbake" $* 258 | bitbake $* 259 | rc=$? 260 | if [ -z $IGNOREERRORS ] ; then 261 | if [[ $rc != 0 ]] ; then 262 | exit $rc 263 | fi 264 | fi 265 | else 266 | echo "Executing: MACHINE=${MACHINE} bitbake" $* 267 | MACHINE=${MACHINE} bitbake $* 268 | rc=$? 269 | if [ -z $IGNOREERRORS ] ; then 270 | if [[ $rc != 0 ]] ; then 271 | exit $rc 272 | fi 273 | fi 274 | fi 275 | } 276 | 277 | 278 | ############################################################################### 279 | # OE_CONFIG() - Configure OE for a target 280 | ############################################################################### 281 | function oe_config() 282 | { 283 | set_environment 284 | config_oe 285 | update_all 286 | 287 | echo "" 288 | echo "Setup for ${CL_MACHINE} completed" 289 | } 290 | 291 | ############################################################################### 292 | # UPDATE_OE() - Update OpenEmbedded distribution. 293 | ############################################################################### 294 | function update_oe() 295 | { 296 | if [ "x$PROXYHOST" != "x" ] ; then 297 | config_git_proxy 298 | fi 299 | 300 | #manage meta-openembedded and meta-angstrom with layerman 301 | env gawk -v command=update -f ${OE_BASE}/scripts/layers.awk ${OE_LAYERS_TXT} 302 | } 303 | 304 | ############################################################################### 305 | # CONFIG_SVN_PROXY() - Configure subversion proxy information 306 | ############################################################################### 307 | function config_svn_proxy() 308 | { 309 | if [ ! -f ${SVN_CONFIG_DIR}/servers ] 310 | then 311 | mkdir -p ${SVN_CONFIG_DIR} 312 | cat >> ${SVN_CONFIG_DIR}/servers <<_EOF 313 | [global] 314 | http-proxy-host = ${PROXYHOST} 315 | http-proxy-port = ${PROXYPORT} 316 | _EOF 317 | fi 318 | } 319 | 320 | 321 | ############################################################################### 322 | # CONFIG_GIT_PROXY() - Configure GIT proxy information 323 | ############################################################################### 324 | function config_git_proxy() 325 | { 326 | if [ ! -f ${GIT_CONFIG_DIR}/git-proxy.sh ] 327 | then 328 | mkdir -p ${GIT_CONFIG_DIR} 329 | cat > ${GIT_CONFIG_DIR}/git-proxy.sh <<_EOF 330 | if [ -x /bin/env ] ; then 331 | exec /bin/env corkscrew ${PROXYHOST} ${PROXYPORT} \$* 332 | else 333 | exec /usr/bin/env corkscrew ${PROXYHOST} ${PROXYPORT} \$* 334 | fi 335 | _EOF 336 | chmod +x ${GIT_CONFIG_DIR}/git-proxy.sh 337 | export GIT_PROXY_COMMAND=${GIT_CONFIG_DIR}/git-proxy.sh 338 | fi 339 | } 340 | 341 | ############################################################################### 342 | # tag_layers - Tag all layers with a given tag 343 | ############################################################################### 344 | function tag_layers() 345 | { 346 | set_environment 347 | env gawk -v command=tag -v commandarg=$TAG -f ${OE_BASE}/scripts/layers.awk ${OE_LAYERS_TXT} 348 | echo $TAG >> ${OE_BASE}/tags 349 | } 350 | 351 | ############################################################################### 352 | # reset_layers - Remove all local changes including stash and ignored files 353 | ############################################################################### 354 | function reset_layers() 355 | { 356 | set_environment 357 | env gawk -v command=reset -f ${OE_BASE}/scripts/layers.awk ${OE_LAYERS_TXT} 358 | } 359 | 360 | ############################################################################### 361 | # changelog - Display changelog for all layers with a given tag 362 | ############################################################################### 363 | function changelog() 364 | { 365 | set_environment 366 | env gawk -v command=changelog -v commandarg=$TAG -f ${OE_BASE}/scripts/layers.awk ${OE_LAYERS_TXT} 367 | } 368 | 369 | ############################################################################### 370 | # layer_info - Get layer info 371 | ############################################################################### 372 | function layer_info() 373 | { 374 | set_environment 375 | rm -f ${OE_SOURCE_DIR}/info.txt 376 | env gawk -v command=info -f ${OE_BASE}/scripts/layers.awk ${OE_LAYERS_TXT} 377 | echo 378 | echo "Showing contents of ${OE_SOURCE_DIR}/info.txt:" 379 | echo 380 | cat ${OE_SOURCE_DIR}/info.txt 381 | echo 382 | } 383 | 384 | ############################################################################### 385 | # checkout - Checkout all layers with a given tag 386 | ############################################################################### 387 | function checkout() 388 | { 389 | set_environment 390 | env gawk -v command=checkout -v commandarg=$TAG -f ${OE_BASE}/scripts/layers.awk ${OE_LAYERS_TXT} 391 | } 392 | 393 | 394 | ############################################################################### 395 | # Build the specified OE packages or images. 396 | ############################################################################### 397 | 398 | # FIXME: converted to case/esac 399 | 400 | if [ $# -gt 0 ] 401 | then 402 | case $1 in 403 | 404 | "update" ) 405 | update_all 406 | exit 0 407 | ;; 408 | 409 | "info" ) 410 | layer_info 411 | exit 0 412 | ;; 413 | 414 | "reset" ) 415 | reset_layers 416 | exit 0 417 | ;; 418 | 419 | "tag" ) 420 | 421 | if [ -n "$2" ] ; then 422 | TAG="$2" 423 | else 424 | TAG="$(date -u +'%Y%m%d-%H%M')" 425 | fi 426 | 427 | tag_layers $TAG 428 | exit 0 429 | ;; 430 | 431 | "changelog" ) 432 | 433 | if [ -z $2 ] ; then 434 | echo "Changelog needs an argument" 435 | exit 1 436 | else 437 | TAG="$2" 438 | fi 439 | changelog 440 | exit 0 441 | ;; 442 | 443 | "checkout" ) 444 | 445 | if [ -z $2 ] ; then 446 | echo "Checkout needs an argument" 447 | exit 1 448 | else 449 | TAG="$2" 450 | fi 451 | checkout 452 | exit 0 453 | ;; 454 | 455 | "bitbake-k" ) 456 | 457 | shift 458 | export IGNOREERRORS="1" 459 | oe_build $* 460 | exit 0 461 | ;; 462 | 463 | "bitbake" ) 464 | 465 | shift 466 | oe_build $* 467 | exit 0 468 | ;; 469 | 470 | "config" ) 471 | 472 | shift 473 | CL_MACHINE=$1 474 | shift 475 | oe_config $* 476 | exit 0 477 | ;; 478 | 479 | "clean" ) 480 | 481 | clean_oe 482 | exit 0 483 | ;; 484 | 485 | esac 486 | fi 487 | 488 | # Help Screen 489 | echo "" 490 | echo "Usage: $0 config " 491 | echo " $0 update" 492 | echo " $0 reset" 493 | echo " $0 tag [tagname]" 494 | echo " $0 changelog " 495 | echo " $0 checkout " 496 | echo " $0 clean" 497 | echo "" 498 | echo " Not recommended, but also possible:" 499 | echo " $0 bitbake " 500 | echo " It is recommended to do '. ${OE_ENV_FILE}' and run 'bitbake something' inside ${BUILDDIR} without using oebb.sh as wrapper" 501 | echo "" 502 | echo "You must invoke \"$0 config \" and then \"$0 update\" prior" 503 | echo "to your first bitbake command" 504 | echo "" 505 | echo "The argument can be one of the following" 506 | echo " beagleboard: BeagleBoard" 507 | echo " qemuarm Emulated ARM machine" 508 | echo " qemumips: Emulated MIPS machine" 509 | echo " fri2-noemgd: Intel FRI2 machine without graphics" 510 | echo "" 511 | echo "Other machines are valid as well, but listing those would make this message way too long" 512 | -------------------------------------------------------------------------------- /scripts/ci-config-helper.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | SHARED_DL_DIR="$1" 4 | SHARED_SSTATE_DIR="$2" 5 | 6 | if [ -e /usr/bin/getconf ] ; then 7 | NUMCPU="$(getconf _NPROCESSORS_ONLN)" 8 | else 9 | NUMCPU="4" 10 | fi 11 | 12 | echo "Parallel make set to use ${NUMCPU} processors" 13 | 14 | # Use more parallelism 15 | sed -i -e "s:-j2:-j${NUMCPU}:" -e 's:THREADS = "2":THREADS = "4":' conf/local.conf 16 | 17 | # Point to shared download dir 18 | sed -i -e s:'${OE_SOURCE_DIR}/downloads':${SHARED_DL_DIR}: oebb.sh 19 | 20 | if ! [ -d sources/meta-angstrom ] ; then 21 | echo "Metadata checkout missing" 22 | if [ -e ${SHARED_DL_DIR}/../v2014.12-gits.tar.xz ] ; then 23 | echo "Extracting metadata cache" 24 | xz -T0 -dkc ${SHARED_DL_DIR}/../v2014.12-gits.tar.xz | tar x 25 | fi 26 | fi 27 | 28 | # Point to shared sstate-dir 29 | sed -i -e s:'${OE_BUILD_DIR}/build/sstate-cache':${SHARED_SSTATE_DIR}: oebb.sh 30 | 31 | # Freescale EULA 32 | echo 'ACCEPT_FSL_EULA = "1"' >> conf/local.conf 33 | 34 | # Intel EMGD 35 | echo 'LICENSE_FLAGS_WHITELIST += "license_emgd-driver-bin commercial"' >> conf/local.conf 36 | 37 | if [ -e /usr/bin/autogen ] ; then 38 | echo 'ASSUME_PROVIDED += "autogen-native"' >> conf/local.conf 39 | echo "Host autogen install detected" 40 | fi 41 | 42 | if [ -e /usr/bin/svn ] ; then 43 | echo 'ASSUME_PROVIDED += "subversion-native"' >> conf/local.conf 44 | fi 45 | 46 | # Work around guile-native build problems 47 | if [ "$(lsb_release -si)" = "Angstrom" ] ; then 48 | if [ -e /usr/bin/guile ] ; then 49 | echo 'ASSUME_PROVIDED += "guile-native"' >> conf/local.conf 50 | fi 51 | fi 52 | -------------------------------------------------------------------------------- /scripts/ci-upload-helper.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | HOST="$1" 4 | nightlydir="$2" 5 | 6 | # create directory on remote machines 7 | ssh ${HOST} "mkdir -p ${nightlydir}" 8 | 9 | mkdir -p deploy/glibc/images 10 | 11 | # Compress raw images and extX files if needed 12 | for i in $(find deploy/glibc/images/ -name "A*.ext3"; find deploy/glibc/images/ -name "A*img" ; find deploy/glibc/images/ -name "A*.ext2" ; find deploy/glibc/images/ -name "A*.ext4" ; find deploy/glibc/images/ -name "A*sdcard" ; find deploy/glibc/images/ -name "A*iso") ; do xz -f -v -z -T0 -9 -e $i ; done 13 | 14 | # Clean up broken symlinks 15 | find deploy/glibc/images/ -type l -exec sh -c "file -b {} | grep -q ^broken" \; -print | xargs rm || true 16 | 17 | echo "Uploading $machine to ${HOST}:$nightlydir" 18 | 19 | # Copy over images/kernels/modules/etc 20 | rsync -lv --progress deploy/glibc/images/$machine/* ${HOST}:${nightlydir} 21 | -------------------------------------------------------------------------------- /scripts/layerman: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | LAYERNAME=$1 4 | LAYERURI=$2 5 | BRANCH=$3 6 | REV=$4 7 | COMMAND=$5 8 | COMMANDARG=$6 9 | 10 | LAYERDIR="${OE_SOURCE_DIR}/${LAYERNAME}" 11 | 12 | LAYERINFO="layer repository name: ${LAYERNAME}\nlayer uri: ${LAYERURI}\nlayer branch/revision: ${BRANCH}/${REV}\n" 13 | 14 | function check_layer() { 15 | if ! [ -e ${LAYERDIR} ] ; then 16 | echo -e ${LAYERINFO} 17 | echo "Layer checkout missing at ${LAYERDIR}, creating one" 18 | git clone ${LAYERURI} ${LAYERDIR} 19 | cd ${LAYERDIR} 20 | 21 | if [ "${BRANCH}" != "master" ] ; then 22 | git checkout origin/${BRANCH} -b ${BRANCH} 23 | fi 24 | 25 | if [ "${REV}" != "HEAD" ] ; then 26 | git reset --hard ${REV} 27 | fi 28 | 29 | echo "Layers present in repository:" 30 | find ${LAYERDIR} -name "layer.conf" | sed -e s:${LAYERDIR}:${LAYERNAME}:g -e s:/conf/layer\.conf::g 31 | echo 32 | 33 | else 34 | cd ${LAYERDIR} 35 | CURRENTCOMMIT="$(git log --oneline --no-abbrev -1 | awk '{print $1}')" 36 | CURRENTBRANCH="$(git branch | grep '*' | awk '{print $2}')" 37 | CURRENTURI="$(git config remote.origin.url)" 38 | 39 | if [ "${CURRENTURI}" != "${LAYERURI}" ] ; then 40 | echo "WARNING!!!!" 41 | echo "WARNING: ${LAYERNAME} is using a different uri '${CURRENTURI}' than configured in layers.txt '${LAYERURI}'" 42 | echo "WARNING: Changing uri to: '${LAYERURI}'" 43 | echo "WARNING!!!!" 44 | git remote set-url origin ${LAYERURI} 45 | git remote update 46 | fi 47 | if [ "${CURRENTBRANCH}" != "${BRANCH}" ] ; then 48 | #echo -e ${LAYERINFO} 49 | echo "WARNING!!!!" 50 | echo "WARNING: ${LAYERNAME} is using a different branch '${CURRENTBRANCH}' than configured in layers.txt '${BRANCH}'" 51 | echo "WARNING: Changing branch to: '${BRANCH}'" 52 | echo "WARNING!!!!" 53 | git checkout -f origin/${BRANCH} -b ${BRANCH} >/dev/null || git checkout -f ${BRANCH} 54 | fi 55 | fi 56 | } 57 | 58 | 59 | function get_info() { 60 | check_layer 61 | 62 | cd ${LAYERDIR} 63 | CURRENTCOMMIT="$(git log --oneline --no-abbrev -1 | awk '{print $1}')" 64 | CURRENTBRANCH="$(git branch | grep '*' | awk '{print $2}')" 65 | 66 | echo "${LAYERNAME},${LAYERURI},${CURRENTBRANCH},${CURRENTCOMMIT}" >> ${OE_SOURCE_DIR}/info.txt 67 | } 68 | 69 | function update_layers() { 70 | check_layer 71 | 72 | echo -n "Processing ${LAYERNAME}: " 73 | 74 | if [ "${REV}" = "HEAD" ] ; then 75 | cd ${LAYERDIR} || exit 1 76 | git stash >&/dev/null && git pull --rebase && git stash pop >& /dev/null 77 | git gc >& /dev/null && git remote prune origin >& /dev/null 78 | else 79 | cd ${LAYERDIR} || exit 1 80 | CURRENTCOMMIT="$(git log --oneline --no-abbrev -1 | awk '{print $1}')" 81 | CURRENTBRANCH="$(git branch | grep '*' | awk '{print $2}')" 82 | 83 | if [ "${BRANCH}" != "${CURRENTBRANCH}" ] ; then 84 | if [ "${REV}" != "${CURRENTCOMMIT}" ] ; then 85 | echo "WARNING!!!!" 86 | echo "WARNING: ${LAYERNAME} is using a different revision and branch than configured in layers.txt" 87 | echo "WARNING!!!!" 88 | fi 89 | else 90 | if [ "${REV}" != "${CURRENTCOMMIT}" ] ; then 91 | git remote update 92 | echo "updating to ${REV}" 93 | git stash >&/dev/null && git reset --hard ${REV} && git stash pop >& /dev/null 94 | else 95 | echo "Fixed to revision ${REV}, skipping update" 96 | fi 97 | fi 98 | fi 99 | } 100 | 101 | function tag_layers() { 102 | check_layer 103 | cd ${LAYERDIR} && echo "Tagging layer with $COMMANDARG" && git tag $COMMANDARG 104 | echo "" 105 | } 106 | 107 | function reset_layers() { 108 | check_layer 109 | if [ -e ${LAYERDIR} ] ; then 110 | echo "WARNING!!!!" 111 | echo "WARNING: ${LAYERNAME}: Removing local changes including stash and ignored files!!" 112 | echo "WARNING!!!!" 113 | git stash clear 114 | git clean -fdx 115 | if [ "${REV}" != "HEAD" ] ; then 116 | git reset --hard ${REV} 117 | else 118 | git reset --hard ${BRANCH} 119 | fi 120 | fi 121 | echo "" 122 | } 123 | 124 | function diff_tags() { 125 | check_layer 126 | cd ${LAYERDIR} && LOG="$(git shortlog $COMMANDARG)" 127 | if [ -n "$LOG" ] ; then 128 | echo "Changes to ${LAYERNAME} in between $COMMANDARG" && echo "" && echo "$LOG" 129 | echo "" 130 | fi 131 | } 132 | 133 | function checkout_tag() { 134 | check_layer 135 | cd ${LAYERDIR} && echo "Checking out $COMMANDARG" && git checkout -f $COMMANDARG 136 | echo "" 137 | } 138 | 139 | case $COMMAND in 140 | tag) 141 | tag_layers;; 142 | reset) 143 | reset_layers;; 144 | changelog) 145 | diff_tags;; 146 | info) 147 | get_info;; 148 | checkout) 149 | checkout_tag;; 150 | *) 151 | update_layers;; 152 | esac 153 | -------------------------------------------------------------------------------- /scripts/layers.awk: -------------------------------------------------------------------------------- 1 | BEGIN { 2 | FS =","; 3 | } 4 | 5 | $1 !~ "^#" { system("${OE_BASE}/scripts/layerman " $1 " " $2 " " $3 " " $4 " " command " " commandarg);} 6 | -------------------------------------------------------------------------------- /scripts/listpatches.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | if ! [ -r layers.txt ] 6 | then 7 | cd sources 8 | fi 9 | 10 | sed -e '/^#\|^$/d' -e 's/,/ /g' layers.txt | while read dir repo branch rev 11 | do 12 | if [ $rev = "HEAD" ] 13 | then 14 | rev="origin/$branch" 15 | fi 16 | 17 | echo "Layer $dir" 18 | cd $dir 19 | git log --pretty=oneline $rev..HEAD 20 | git diff --stat HEAD 21 | git status -s 22 | cd - >/dev/null 23 | done 24 | -------------------------------------------------------------------------------- /scripts/listpending.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | if ! [ -r layers.txt ] 6 | then 7 | cd sources 8 | fi 9 | 10 | sed -e '/^#\|^$/d' -e 's/,/ /g' layers.txt | while read dir repo branch rev 11 | do 12 | if [ $rev = "HEAD" ] 13 | then 14 | rev="origin/$branch" 15 | fi 16 | 17 | echo "Layer $dir" 18 | cd $dir 19 | git fetch origin 20 | git log --pretty=oneline HEAD..$rev 21 | cd - >/dev/null 22 | done 23 | -------------------------------------------------------------------------------- /scripts/prserv-import-helper.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | PRSERVFILE="$1" 4 | if [ -e "${PRSERVFILE}" ] ; then 5 | echo "Using ${PRSERVFILE} to import PRs" 6 | cp ${PRSERVFILE} . 7 | . ./environment-angstrom-v2014.12 8 | time bitbake-prserv-tool import $(basename ${PRSERVFILE}) || true 9 | fi 10 | -------------------------------------------------------------------------------- /sources/layers.txt: -------------------------------------------------------------------------------- 1 | bitbake,git://github.com/openembedded/bitbake.git,1.24,HEAD 2 | meta-angstrom,git://github.com/Angstrom-distribution/meta-angstrom,angstrom-v2014.12-yocto1.7,HEAD 3 | meta-openembedded,git://github.com/openembedded/meta-openembedded.git,dizzy,HEAD 4 | meta-beagleboard,git://github.com/koenkooi/meta-beagleboard.git,dizzy,HEAD 5 | meta-ti,git://git.yoctoproject.org/meta-ti,master,129783a9cba7902feb7f35d390b37d96b733a201 6 | meta-ettus,git://github.com/balister/meta-ettus.git,master,51422017f3a2065f136c53601f0f139fe80b7fab 7 | meta-fsl-arm,git://git.yoctoproject.org/meta-fsl-arm.git,dizzy,HEAD 8 | meta-fsl-arm-extra,git://github.com/Freescale/meta-fsl-arm-extra.git,dizzy,HEAD 9 | meta-nslu2,git://github.com/kraj/meta-nslu2.git,master,ddf38dba9426b4a2047679e936521a5b1b06653e 10 | meta-smartphone,https://github.com/shr-distribution/meta-smartphone.git,master,04eb33be364d5dad05a8c127fc3b62af9b34ab19 11 | meta-intel,git://git.yoctoproject.org/meta-intel,dizzy,HEAD 12 | meta-xilinx,git://git.yoctoproject.org/meta-xilinx,master,14a88e974ce149030046873250e45c274b26a0d8 13 | meta-openpandora,git://github.com/openpandora/meta-openpandora.git,master,ef92fcb6d87908ae0be44cd9cc9539395a666cc8 14 | meta-raspberrypi,git://git.yoctoproject.org/meta-raspberrypi.git,master,6b63f6fcbdbde1694d55e314b86fadaa74dc858a 15 | meta-handheld,git://git.openembedded.org/meta-handheld,master,57044c88e22443f312fe812cc481449c0110f2ef 16 | meta-sunxi,git://github.com/linux-sunxi/meta-sunxi.git,master,211d55b4374ff3df5eabee39b5173c8e7c824c34 17 | meta-opie,git://git.openembedded.org/meta-opie.git,master,4123fb4d8fdde0a8e67c0d1042119158d0d2df57 18 | meta-java,git://git.yoctoproject.org/meta-java,master,d2b75b615e4612f9fa05950c1d76d4a719e573d4 19 | meta-browser,git://github.com/OSSystems/meta-browser.git,master,4b27058a8275a5310161459c9bb8f4c52a77762c 20 | meta-mono,git://git.yoctoproject.org/meta-mono.git,master,e8c390589dd83659506564c448d086b4f3d13666 21 | meta-kde4,https://github.com/Angstrom-distribution/meta-kde.git,master,f45abfd4d87b0132a2565499392d2d49f465d847 22 | meta-linaro,git://git.linaro.org/openembedded/meta-linaro.git,dizzy,HEAD 23 | meta-minnow,git://git.yoctoproject.org/meta-minnow,master,13a5f2ab84c7284647a3e067a33109c11dae0568 24 | meta-atmel,git://github.com/koenkooi/meta-atmel.git,angstromv2014.12-staging,7b695a7297d257f9e26d87b02787ec9a2f570473 25 | meta-dominion,git://github.com/koenkooi/meta-dominion.git,dizzy,HEAD 26 | meta-exynos,git://github.com/slimlogic/meta-exynos,master,f8395cd11111c7f94938e292592d6f5d66efa64a 27 | meta-ros,git://github.com/bmwcarit/meta-ros.git,master,37c6fd01ddfe862ec6af7a4c2d24b51d9d1cdd55 28 | meta-gumstix-community,https://github.com/gumstix/meta-gumstix.git,dizzy,2a5c6f15f84dbce7a8aba613c6cdd8a1047efc27 29 | meta-qt5,git://github.com/meta-qt5/meta-qt5,master,478fe949a957471a4d20450f6e9375fe1d628591 30 | meta-uav,git://github.com/koenkooi/meta-uav.git,master,edf32a392b55a4267e6b072776e2aab6c8f7617e 31 | meta-photography,git://github.com/koenkooi/meta-photography.git,dizzy,HEAD 32 | meta-telephony,git://github.com/koenkooi/meta-telephony,master,65238f85305f3179491e5e4be8152ea35454ac84 33 | meta-qualcomm,http://git.linaro.org/people/nicolas.dechesne/meta-qualcomm.git,master,1c876ee4dc5cb66d26d960f5b58c958ada2452a1 34 | meta-96boards,git://github.com/96boards/meta-96boards.git,dizzy,HEAD 35 | meta-edison,git://github.com/koenkooi/meta-edison.git,master,bcfe06e72158ec3b84279a27b4a5db9c9c50f5d3 36 | meta-intel-iot-middleware,http://git.yoctoproject.org/git/meta-intel-iot-middleware,master,48604925ea011b6dba2953b407aff0fce5e7cbbb 37 | meta-ci,git://github.com/koenkooi/meta-ci.git,master,HEAD 38 | meta-maker,http://git.yoctoproject.org/git/meta-maker,dizzy,HEAD 39 | openembedded-core,git://github.com/openembedded/openembedded-core.git,dizzy,HEAD 40 | --------------------------------------------------------------------------------