release.sh revision 262314
1#!/bin/sh
2#
3# $FreeBSD: projects/release-embedded/release/arm/release.sh 262314 2014-02-21 23:18:35Z gjb $
4#
5
6# This script is intended to be called by release/release.sh to build ARM
7# images for release.  It is not intended to be run directly.  This sets up
8# the software needed within a build chroot, then runs crochet to provide
9# downloadable images for embedded devices.
10
11set -e
12
13before_build() {
14	WANT_UBOOT=
15	KNOWNHASH=
16	UBOOT_VERSION=
17	case ${KERNEL} in
18		BEAGLEBONE)
19			WANT_UBOOT=1
20			KNOWNHASH="4150e5a4480707c55a8d5b4570262e43af68d8ed3bdc0a433d8e7df47989a69e"
21			UBOOT_VERSION="u-boot-2013.04"
22			;;
23		PANDABOARD)
24			WANT_UBOOT=1
25			KNOWNHASH="e08e20a6979bfca6eebb9a2b0e42aa4416af3d796332fd63a3470495a089d496"
26			UBOOT_VERSION="u-boot-2012.07"
27			;;
28		WANDBOARD-QUAD)
29			WANT_UBOOT=1
30			KNOWNHASH="0d71e62beb952b41ebafb20a7ee4df2f960db64c31b054721ceb79ff14014c55"
31			UBOOT_VERSION="u-boot-2013.10"
32			;;
33		*)
34			# Fallthrough.
35			;;
36	esac
37	if [ ! -z ${WANT_UBOOT} ]; then
38		chroot ${CHROOTDIR} fetch -o /tmp/crochet/${UBOOT_VERSION}.tar.bz2 \
39			http://people.freebsd.org/~gjb/${UBOOT_VERSION}.tar.bz2
40		UBOOT_HASH="$(sha256 -q ${CHROOTDIR}/tmp/crochet/${UBOOT_VERSION}.tar.bz2)"
41		if [ "${UBOOT_HASH}" != "${KNOWNHASH}" ]; then
42			echo "Checksum mismatch!  Exiting now."
43			exit 1
44		fi
45		chroot ${CHROOTDIR} tar xf /tmp/crochet/${UBOOT_VERSION}.tar.bz2 \
46			-C /tmp/crochet/ 
47	fi
48}
49
50install_crochet() {
51	chroot ${CHROOTDIR} svn co -q ${CROCHETSRC}/${CROCHETBRANCH} \
52		/tmp/crochet
53}
54
55install_uboot() {
56	# Only fetch u-boot sources if UBOOTSRC is set; otherwise it is
57	# not needed.
58	if [ "X${UBOOTSRC}" != "X" ]; then
59		continue
60	else
61		return 0
62	fi
63	chroot ${CHROOTDIR} svn co -q ${UBOOTSRC}/${UBOOTBRANCH} \
64		/${UBOOTDIR}
65}
66
67main() {
68	# Build gcc for use in the chroot for arm builds.
69	# This is not '-j'-safe, so force '-j1' to allow using
70	# additional, non-'-j' options specified in WORLD_FLAGS.
71	eval chroot ${CHROOTDIR} make -C /usr/src/gnu/usr.bin/cc \
72		WITH_GCC=1 ${WORLD_FLAGS} -j1 obj depend all install
73	# Build the 'xdev' target for crochet.
74	eval chroot ${CHROOTDIR} make -C /usr/src \
75		XDEV=${XDEV} XDEV_ARCH=${XDEV_ARCH} WITH_GCC=1 \
76		${WORLD_FLAGS} xdev
77
78	# Run the ldconfig(8) startup script so /var/run/ld-elf*.so.hints
79	# is created.
80	eval chroot ${CHROOTDIR} /etc/rc.d/ldconfig forcerestart
81	# Install security/ca_root_nss since we need to check the https
82	# certificate of github.
83	eval chroot ${CHROOTDIR} make -C /usr/ports/security/ca_root_nss \
84		OPTIONS_SET="ETCSYMLINK" BATCH=1 FORCE_PKG_REGISTER=1 \
85		install clean distclean
86	EMBEDDEDPORTS="${EMBEDDEDPORTS} devel/subversion"
87	for _PORT in ${EMBEDDEDPORTS}; do
88		eval chroot ${CHROOTDIR} make -C /usr/ports/${_PORT} \
89			BATCH=1 FORCE_PKG_REGISTER=1 install clean distclean
90	done
91
92	mkdir -p ${CHROOTDIR}/tmp/crochet/work
93	before_build
94	install_crochet
95	install_uboot
96	eval chroot ${CHROOTDIR} /bin/sh /tmp/crochet/crochet.sh \
97		-c /tmp/external/${XDEV}/crochet-${KERNEL}.conf
98	mkdir -p ${CHROOTDIR}/R/
99	cp -p ${CHROOTDIR}/usr/obj/*.img ${CHROOTDIR}/R/
100	bzip2 ${CHROOTDIR}/R/FreeBSD*.img
101	cd ${CHROOTDIR}/R/ && sha256 FreeBSD*.img.bz2 > CHECKSUM.SHA256
102	cd ${CHROOTDIR}/R/ && md5 FreeBSD*.img.bz2 > CHECKSUM.MD5
103}
104
105main "$@"
106exit 0
107