This commit is contained in:
Holger Hans Peter Freyther 2017-08-03 14:54:24 +08:00
commit de5bcbc362
15 changed files with 240 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
cfg/*/99_do_not_commit
git/
build.*
*.sw?

116
Makefile Normal file
View File

@ -0,0 +1,116 @@
# makefile to set-up the environment for building...
# Make everything more verbose by V=1. Taken from kbuild
ifeq ("$(origin V)", "command line")
Q =
else
Q = @
endif
# Variables
SYSMOCOM_RELEASE=201705
POKY_RELEASE=pyro
REPOS=poky meta-telephony meta-sysmocom-bsp meta-qt5 meta-sysmocom-bsp
TARGETS=sysmobts sysmocom-apu2 sysmocom-alix
#
usage:
@echo "Pick a target like help, update or sysmocom-alix-setup"
help:
@echo "Set-up build environment and execute builds. This is intended"
@echo "for customers and employees."
@echo ""
@echo "Available targets:"
@echo " usage - Default target and print usage"
@echo " help - This output"
@echo " update - git pull --rebase and initial git clone"
@echo " setup-all - Set-up all build directories"
@echo " build-all - Build all targets"
@echo " clean-all - Clean all targets after build"
@echo " upload-all - Upload all targets"
@echo ' install-ssh-config - Install Host to $$HOME/.ssh/config'
@echo "Board specific targets:"
@$(foreach target, $(TARGETS), \
printf " %-16s - Configure build directory\\n" $(target)-setup;)
@$(foreach target, $(TARGETS), \
printf " %-16s - Configure build directory\\n" $(target)-build;)
@$(foreach target, $(TARGETS), \
printf " %-16s - Configure build directory\\n" $(target)-upload;)
@echo "Available variables:"
@echo " V=1 - Enable verbose command output"
@echo " SYSMOCOM_RELEASE=name - Pick branch during clone"
@echo " POKY_RELEASE=name - Pick branch during clone"
# Fetch/update all repos... Expand REPOS and append -update to the rule
# e.g. poky-update meta-telephony-update
update: $(foreach repo, $(REPOS), $(repo)-update)
# helper rules
## Create a new directory
git:
mkdir $@
## Clone repositories. The other option is by variable something like BRNACH_poky, REPO_poky
git/poky: | git
cd git && git clone --branch=$(POKY_RELEASE) --depth=1 git://git.yoctoproject.org/poky
git/meta-sysmocom-bsp: | git
cd git && git clone --branch=$(SYSMOCOM_RELEASE) git://git.sysmocom.de/poky/meta-sysmocom-bsp
git/meta-telephony: | git
cd git && git clone --branch=$(SYSMOCOM_RELEASE) git://github.com/sysmocom/meta-telephony
git/meta-smalltalk: | git
cd git && git clone --branch=$(SYSMOCOM_RELEASE) git://github.com/sysmocom/meta-smalltalk
git/meta-qt5: | git
cd git && git clone --branch=$(SYSMOCOM_RELEASE) git://github.com/sysmocom/meta-qt5
## Create a build directory, e.g. build.sysmobts
## Use Poky to set-up the directory and then customize it. Copy files
## around and append to the local.conf and layers.conf
CFG_FILES = $(sort $(notdir $(wildcard cfg/common/*))) $(sort $(notdir $(wildcard cfg/$(subst build.,,$@)/*)))
build.%: | git/poky
@echo "Creating build directory for $(subst build.,,$@) ..."
@. git/poky/oe-init-build-env $@
# Append entries to conf/local.conf. Common first, machine second... filter
$(Q)$(foreach file,$(CFG_FILES), $(call cat $(file) | sed s,BASE_DIR,$(PWD), >> $@/conf/local.conf))
@echo "require conf/distro/include/sysmocom-defaults.conf" >> $@/conf/local.conf
# layers now..
mkdir -p $@/conf
$(Q)cat cfg/bblayers.conf | sed s,BASE_DIR,$(PWD), > $@/conf/bblayers.conf
# generic git pull --rebase rule. Let's assume this is matching poky-update
# then the dependency will be "git/poky" and a clone rule will be built.
%-update: | git/$(subst -update,,%)
@echo "Updating $(subst -update,,$@) ..."
$(Q)cd git/$(subst -update,,$@) && git pull --rebase
# Setup a build directory
%-setup: | build.$(subst -setup,,%) git/poky
@echo "Please place proprietary firmware into the downloads directory."
# Create all build directories
setup-all: | $(foreach target, $(TARGETS), $(target)-setup)
install-ssh-config: | $(HOME)/.ssh
ifndef SSH_HOST
$(error "Please call with make $@ SSH_HOST=xyz...")
endif
ifndef SSH_PORT
$(error "Please call with make $@ SSH_PORT=abc...")
endif
ifndef SSH_USER
$(error "Please call with make $@ SSH_USER=def...")
endif
@echo "Host = sysmocom-downloads" >> $(HOME)/.ssh/config
@echo " HostName = $(SSH_HOST)" >> $(HOME)/.ssh/config
@echo " Port = $(SSH_PORT)" >> $(HOME)/.ssh/config
@echo " AddressFamily = inet" >> $(HOME)/.ssh/config
@echo " User = $(SSH_USER)" >> $(HOME)/.ssh/config
# Target classification
.PHONY: update
.SECONDARY: $(foreach repo, $(REPOS), git/$(repo)) $(foreach target, $(TARGETS), build.$(target))

45
README Normal file
View File

@ -0,0 +1,45 @@
Scripts and documentation for building system images for our target platforms. The
goal is to help anyone checking out the right repositories, configuring a target
and build the images that are built by CI (in fact CI will use these scripts).
The central piece is a Makefile that helps to:
* Git clone the necessary layers
* Update/git pull --rebase all of them
* Set-up the build as used by sysmocom
* Configure .ssh/config for uploading to sysmocom
* Do the upload
* Clean after a build
The bblayers.conf is created from a template located in cfg/ and the local.conf
will be created by using Poky's oe-init-build-env and then files from cfg/common/*
and cfg/BOARD/*. Files will be sorted in their alphabetically sort order and first
come from the common directory and then the board specific one. At the end an include
directive will be issued.
Using the Makefile:
$ make help
...
Example of building everything
# make install-ssh-config SSH_HOST=build-upload.foo.bar SSH_PORT=2342
$ make setup-all V=1
... git clone
... git pull --rebase
... creating build directories
For the sysmobts firmware needs to be copied to the downloads directory.
As a customer you should have received instructions for doing it and as
an employee it should be mentioned in the wiki
$ make build-all # Build for all boards the default targets
...
$ make upload-all # Make an upload to testing for all boards
...
$ make clean-all # Clean the tmp directory for all boards
...

16
cfg/bblayers.conf Normal file
View File

@ -0,0 +1,16 @@
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
BASE_DIR/git/poky/meta \
BASE_DIR/git/poky/meta-poky \
BASE_DIR/git/poky/meta-yocto-bsp \
BASE_DIR/git/meta-telephony \
BASE_DIR/git/meta-sysmocom-bsp \
BASE_DIR/git/meta-smalltalk \
BASE_DIR/git/meta-qt5 \
"

2
cfg/common/10_debug Normal file
View File

@ -0,0 +1,2 @@
# Do not put the sourcecode into the debug packages
PACKAGE_DEBUG_SPLIT_STYLE = "debug-without-src"

2
cfg/common/10_gpl Normal file
View File

@ -0,0 +1,2 @@
SOURCE_ARCHIVE_PACKAGE_TYPE = "tar"
INHERIT += "sysmocom-archive-patched-source"

5
cfg/common/10_misc Normal file
View File

@ -0,0 +1,5 @@
# Enable the prserver host
PRSERV_HOST = "localhost:0"
# legacy and remove it in the future
ROOTFS_PKGMANAGE_BOOTSTRAP = ""

1
cfg/common/10_packaging Normal file
View File

@ -0,0 +1 @@
PACKAGE_CLASSES = "package_ipk"

2
cfg/common/10_sdk Normal file
View File

@ -0,0 +1,2 @@
# SDK parts
BB_GENERATE_MIRROR_TARBALLS="1"

View File

@ -0,0 +1 @@
DL_DIR = "BASE_DIR/downloads"

3
cfg/common/10_systemd Normal file
View File

@ -0,0 +1,3 @@
# Default to systemd
DISTRO_FEATURES_append = " systemd "
VIRTUAL-RUNTIME_init_manager = "systemd"

11
cfg/sysmobts/01_sysmobts Normal file
View File

@ -0,0 +1,11 @@
MACHINE = "sysmobts-v2"
# feed
PACKAGE_FEED_URIS="https://autoupdate:eechiesuboot@downloads.sysmocom.de/generic/sysmobts/201705/ipk/"
# HW doesn't have rtc
MACHINE_FEATURES_BACKFILL_CONSIDERED = "rtc"
# Ignore old kernels
BBMASK="recipes-bsp/linux/linux_2.6.39.bb recipes-bsp/linux/linux-sysmocom_3.10.bb"
PREFERRED_VERSION_linux-sysmocom = "4.9.14+git%"

View File

@ -0,0 +1,6 @@
MACHINE = "sysmocom-alix"
PACKAGE_FEED_URIS="https://autoupdate:eechiesuboot@downloads.sysmocom.de/generic/sysmocom-alix/201705/ipk/"
MACHINE_FEATURES_BACKFILL_CONSIDERED = "rtc"
BBMASK="recipes-bsp/linux/linux_2.6.39.bb recipes-bsp/linux/linux-sysmocom_3.10.bb recipes-devtools/python/python-argparse_1.2.1.bbappend"

View File

@ -0,0 +1,4 @@
MACHINE = "sysmocom-apu2"
PACKAGE_FEED_URIS="https://autoupdate:eechiesuboot@downloads.sysmocom.de/generic/sysmocom-apu2/201705/ipk/"
MACHINE_FEATURES_BACKFILL_CONSIDERED = "rtc"
BBMASK="recipes-bsp/linux/linux_2.6.39.bb recipes-bsp/linux/linux-sysmocom_3.10.bb recipes-devtools/python/python-argparse_1.2.1.bbappend"

22
scripts/upload-build.sh Executable file
View File

@ -0,0 +1,22 @@
#!/bin/sh
# Upload build results, config and cache to the downloads server. Use
# make install-ssh-config SSH_PORT=XYZ SSH_HOST=abc SSH_USER=foo to
# install the right entry for the .ssh/config.
if [ $# -ne 2 ]; then
echo "Need to pass MACHINE RELEASE as argument for upload"
exit 1
fi
set -ex
rsync --delete -avz tmp/deploy/ipk/ sysmocom-downloads:$1/$2/ipk
rsync --delete -avz tmp/deploy/images/ sysmocom-downloads:$1/$2/images
rsync --delete -avz tmp/deploy/tools/ sysmocom-downloads:$1/$2/tools
rsync --delete -avz tmp/deploy/sdk/ sysmocom-downloads:$1/$2/sdk
rsync --delete -avz tmp/cache/ sysmocom-downloads:$1/$2/cache-state
rsync --delete -avz cache/ sysmocom-downloads:$1/$2/cache
rsync --delete -avz conf/ sysmocom-downloads:$1/$2/conf
rsync -avz tmp/deploy/sources/ sysmocom-downloads:$1/$2/sources