1251652Sgjb#!/bin/sh 2251652Sgjb#- 3328429Sgjb# Copyright (c) 2013-2018 The FreeBSD Foundation 4251652Sgjb# Copyright (c) 2013 Glen Barber 5251652Sgjb# Copyright (c) 2011 Nathan Whitehorn 6251652Sgjb# All rights reserved. 7251652Sgjb# 8262499Sgjb# Portions of this software were developed by Glen Barber 9262499Sgjb# under sponsorship from the FreeBSD Foundation. 10262499Sgjb# 11251652Sgjb# Redistribution and use in source and binary forms, with or without 12251652Sgjb# modification, are permitted provided that the following conditions 13251652Sgjb# are met: 14251652Sgjb# 1. Redistributions of source code must retain the above copyright 15251652Sgjb# notice, this list of conditions and the following disclaimer. 16251652Sgjb# 2. Redistributions in binary form must reproduce the above copyright 17251652Sgjb# notice, this list of conditions and the following disclaimer in the 18251652Sgjb# documentation and/or other materials provided with the distribution. 19251652Sgjb# 20251652Sgjb# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 21251652Sgjb# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22251652Sgjb# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23251652Sgjb# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 24251652Sgjb# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25251652Sgjb# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26251652Sgjb# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27251652Sgjb# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28251652Sgjb# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29251652Sgjb# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30251652Sgjb# SUCH DAMAGE. 31251652Sgjb# 32251652Sgjb# release.sh: check out source trees, and build release components with 33251652Sgjb# totally clean, fresh trees. 34251652Sgjb# Based on release/generate-release.sh written by Nathan Whitehorn 35251652Sgjb# 36251652Sgjb# $FreeBSD: stable/11/release/release.sh 341995 2018-12-12 18:18:34Z gjb $ 37251652Sgjb# 38251652Sgjb 39282693Sgjbexport PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin" 40251652Sgjb 41282693SgjbVERSION=2 42282693Sgjb 43269639Sgjb# Prototypes that can be redefined per-chroot or per-target. 44269639Sgjbload_chroot_env() { } 45269639Sgjbload_target_env() { } 46281802Sgjbbuildenv_setup() { } 47269639Sgjb 48282693Sgjbusage() { 49282693Sgjb echo "Usage: $0 [-c release.conf]" 50282693Sgjb exit 1 51282693Sgjb} 52251652Sgjb 53282693Sgjb# env_setup(): Set up the default build environment variables, such as the 54282693Sgjb# CHROOTDIR, VCSCMD, SVNROOT, etc. This is called before the release.conf 55282693Sgjb# file is sourced, if '-c <release.conf>' is specified. 56282693Sgjbenv_setup() { 57282693Sgjb # The directory within which the release will be built. 58282693Sgjb CHROOTDIR="/scratch" 59282693Sgjb RELENGDIR="$(dirname $(realpath ${0}))" 60262499Sgjb 61282693Sgjb # The default version control system command to obtain the sources. 62282693Sgjb for _dir in /usr/bin /usr/local/bin; do 63282693Sgjb for _svn in svn svnlite; do 64282693Sgjb [ -x "${_dir}/${_svn}" ] && VCSCMD="${_dir}/${_svn}" 65282693Sgjb [ ! -z "${VCSCMD}" ] && break 2 66282693Sgjb done 67282693Sgjb done 68282693Sgjb VCSCMD="${VCSCMD} checkout" 69251652Sgjb 70282693Sgjb # The default svn checkout server, and svn branches for src/, doc/, 71282693Sgjb # and ports/. 72282693Sgjb SVNROOT="svn://svn.FreeBSD.org/" 73282693Sgjb SRCBRANCH="base/head@rHEAD" 74282693Sgjb DOCBRANCH="doc/head@rHEAD" 75282693Sgjb PORTBRANCH="ports/head@rHEAD" 76262810Sgjb 77282693Sgjb # Set for embedded device builds. 78282693Sgjb EMBEDDEDBUILD= 79252846Sgjb 80282693Sgjb # Sometimes one needs to checkout src with --force svn option. 81282693Sgjb # If custom kernel configs copied to src tree before checkout, e.g. 82282693Sgjb SRC_FORCE_CHECKOUT= 83251652Sgjb 84282693Sgjb # The default make.conf and src.conf to use. Set to /dev/null 85282693Sgjb # by default to avoid polluting the chroot(8) environment with 86282693Sgjb # non-default settings. 87282693Sgjb MAKE_CONF="/dev/null" 88282693Sgjb SRC_CONF="/dev/null" 89262509Sgjb 90282693Sgjb # The number of make(1) jobs, defaults to the number of CPUs available 91282693Sgjb # for buildworld, and half of number of CPUs available for buildkernel. 92282693Sgjb WORLD_FLAGS="-j$(sysctl -n hw.ncpu)" 93282693Sgjb KERNEL_FLAGS="-j$(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2))" 94251652Sgjb 95282693Sgjb MAKE_FLAGS="-s" 96251652Sgjb 97282693Sgjb # The name of the kernel to build, defaults to GENERIC. 98282693Sgjb KERNEL="GENERIC" 99251652Sgjb 100282693Sgjb # Set to non-empty value to disable checkout of doc/ and/or ports/. 101282693Sgjb # Disabling ports/ checkout also forces NODOC to be set. 102282693Sgjb NODOC= 103282693Sgjb NOPORTS= 104259079Sgjb 105301280Sgarga # Set to non-empty value to disable distributing source tree. 106301280Sgarga NOSRC= 107301280Sgarga 108282693Sgjb # Set to non-empty value to build dvd1.iso as part of the release. 109282693Sgjb WITH_DVD= 110282693Sgjb WITH_COMPRESSED_IMAGES= 111272414Sgjb 112282693Sgjb # Set to non-empty value to build virtual machine images as part of 113282693Sgjb # the release. 114282693Sgjb WITH_VMIMAGES= 115282693Sgjb WITH_COMPRESSED_VMIMAGES= 116282693Sgjb XZ_THREADS=0 117277458Sgjb 118282693Sgjb # Set to non-empty value to build virtual machine images for various 119282693Sgjb # cloud providers as part of the release. 120282693Sgjb WITH_CLOUDWARE= 121251652Sgjb 122282693Sgjb return 0 123282693Sgjb} # env_setup() 124282693Sgjb 125282693Sgjb# env_check(): Perform sanity tests on the build environment, such as ensuring 126282693Sgjb# files/directories exist, as well as adding backwards-compatibility hacks if 127282693Sgjb# necessary. This is called unconditionally, and overrides the defaults set 128282693Sgjb# in env_setup() if '-c <release.conf>' is specified. 129282693Sgjbenv_check() { 130282693Sgjb chroot_build_release_cmd="chroot_build_release" 131282693Sgjb # Fix for backwards-compatibility with release.conf that does not have 132282693Sgjb # the trailing '/'. 133282693Sgjb case ${SVNROOT} in 134282693Sgjb *svn*) 135282693Sgjb SVNROOT="${SVNROOT}/" 136282693Sgjb ;; 137282693Sgjb *) 138282693Sgjb ;; 139251652Sgjb esac 140251652Sgjb 141282693Sgjb # Prefix the branches with the SVNROOT for the full checkout URL. 142282693Sgjb SRCBRANCH="${SVNROOT}${SRCBRANCH}" 143282693Sgjb DOCBRANCH="${SVNROOT}${DOCBRANCH}" 144282693Sgjb PORTBRANCH="${SVNROOT}${PORTBRANCH}" 145262862Sgjb 146282693Sgjb if [ -n "${EMBEDDEDBUILD}" ]; then 147282693Sgjb WITH_DVD= 148282693Sgjb WITH_COMPRESSED_IMAGES= 149282693Sgjb NODOC=yes 150282693Sgjb case ${EMBEDDED_TARGET}:${EMBEDDED_TARGET_ARCH} in 151325898Sgjb arm:arm*|arm64:aarch64) 152325898Sgjb chroot_build_release_cmd="chroot_arm_build_release" 153282693Sgjb ;; 154282693Sgjb *) 155325898Sgjb ;; 156282693Sgjb esac 157282693Sgjb fi 158262499Sgjb 159282693Sgjb # If PORTS is set and NODOC is unset, force NODOC=yes because the ports 160282693Sgjb # tree is required to build the documentation set. 161282693Sgjb if [ -n "${NOPORTS}" ] && [ -z "${NODOC}" ]; then 162282693Sgjb echo "*** NOTICE: Setting NODOC=1 since ports tree is required" 163282693Sgjb echo " and NOPORTS is set." 164282693Sgjb NODOC=yes 165282693Sgjb fi 166262810Sgjb 167301280Sgarga # If NOSRC, NOPORTS and/or NODOC are unset, they must not pass to make 168301280Sgarga # as variables. The release makefile verifies definedness of the 169282693Sgjb # NOPORTS/NODOC variables instead of their values. 170301280Sgarga SRCDOCPORTS= 171282693Sgjb if [ -n "${NOPORTS}" ]; then 172301280Sgarga SRCDOCPORTS="NOPORTS=yes" 173282693Sgjb fi 174282693Sgjb if [ -n "${NODOC}" ]; then 175301280Sgarga SRCDOCPORTS="${SRCDOCPORTS}${SRCDOCPORTS:+ }NODOC=yes" 176282693Sgjb fi 177301280Sgarga if [ -n "${NOSRC}" ]; then 178301280Sgarga SRCDOCPORTS="${SRCDOCPORTS}${SRCDOCPORTS:+ }NOSRC=yes" 179301280Sgarga fi 180252846Sgjb 181282693Sgjb # The aggregated build-time flags based upon variables defined within 182282693Sgjb # this file, unless overridden by release.conf. In most cases, these 183282693Sgjb # will not need to be changed. 184282693Sgjb CONF_FILES="__MAKE_CONF=${MAKE_CONF} SRCCONF=${SRC_CONF}" 185282693Sgjb if [ -n "${TARGET}" ] && [ -n "${TARGET_ARCH}" ]; then 186282693Sgjb ARCH_FLAGS="TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH}" 187282693Sgjb else 188282693Sgjb ARCH_FLAGS= 189282693Sgjb fi 190282693Sgjb # Force src checkout if configured 191282693Sgjb FORCE_SRC_KEY= 192282693Sgjb if [ -n "${SRC_FORCE_CHECKOUT}" ]; then 193282693Sgjb FORCE_SRC_KEY="--force" 194282693Sgjb fi 195252846Sgjb 196282693Sgjb if [ -z "${CHROOTDIR}" ]; then 197282693Sgjb echo "Please set CHROOTDIR." 198282693Sgjb exit 1 199282693Sgjb fi 200251652Sgjb 201282693Sgjb if [ $(id -u) -ne 0 ]; then 202282693Sgjb echo "Needs to be run as root." 203282693Sgjb exit 1 204282693Sgjb fi 205251652Sgjb 206328429Sgjb # Unset CHROOTBUILD_SKIP if the chroot(8) does not appear to exist. 207328429Sgjb if [ ! -z "${CHROOTBUILD_SKIP}" -a ! -e ${CHROOTDIR}/bin/sh ]; then 208328429Sgjb CHROOTBUILD_SKIP= 209328429Sgjb fi 210328429Sgjb 211282693Sgjb CHROOT_MAKEENV="${CHROOT_MAKEENV} \ 212282693Sgjb MAKEOBJDIRPREFIX=${CHROOTDIR}/tmp/obj" 213282693Sgjb CHROOT_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${CONF_FILES}" 214282693Sgjb CHROOT_IMAKEFLAGS="${CONF_FILES}" 215282693Sgjb CHROOT_DMAKEFLAGS="${CONF_FILES}" 216282693Sgjb RELEASE_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${ARCH_FLAGS} \ 217282693Sgjb ${CONF_FILES}" 218282693Sgjb RELEASE_KMAKEFLAGS="${MAKE_FLAGS} ${KERNEL_FLAGS} \ 219282693Sgjb KERNCONF=\"${KERNEL}\" ${ARCH_FLAGS} ${CONF_FILES}" 220282693Sgjb RELEASE_RMAKEFLAGS="${ARCH_FLAGS} \ 221301280Sgarga KERNCONF=\"${KERNEL}\" ${CONF_FILES} ${SRCDOCPORTS} \ 222282693Sgjb WITH_DVD=${WITH_DVD} WITH_VMIMAGES=${WITH_VMIMAGES} \ 223282693Sgjb WITH_CLOUDWARE=${WITH_CLOUDWARE} XZ_THREADS=${XZ_THREADS}" 224251652Sgjb 225282693Sgjb return 0 226282693Sgjb} # env_check() 227251652Sgjb 228282693Sgjb# chroot_setup(): Prepare the build chroot environment for the release build. 229282693Sgjbchroot_setup() { 230282693Sgjb load_chroot_env 231282693Sgjb mkdir -p ${CHROOTDIR}/usr 232251652Sgjb 233282693Sgjb if [ -z "${SRC_UPDATE_SKIP}" ]; then 234282693Sgjb ${VCSCMD} ${FORCE_SRC_KEY} ${SRCBRANCH} ${CHROOTDIR}/usr/src 235282693Sgjb fi 236282693Sgjb if [ -z "${NODOC}" ] && [ -z "${DOC_UPDATE_SKIP}" ]; then 237282693Sgjb ${VCSCMD} ${DOCBRANCH} ${CHROOTDIR}/usr/doc 238282693Sgjb fi 239282693Sgjb if [ -z "${NOPORTS}" ] && [ -z "${PORTS_UPDATE_SKIP}" ]; then 240282693Sgjb ${VCSCMD} ${PORTBRANCH} ${CHROOTDIR}/usr/ports 241282693Sgjb fi 242251652Sgjb 243282693Sgjb if [ -z "${CHROOTBUILD_SKIP}" ]; then 244282693Sgjb cd ${CHROOTDIR}/usr/src 245282693Sgjb env ${CHROOT_MAKEENV} make ${CHROOT_WMAKEFLAGS} buildworld 246282693Sgjb env ${CHROOT_MAKEENV} make ${CHROOT_IMAKEFLAGS} installworld \ 247282693Sgjb DESTDIR=${CHROOTDIR} 248282693Sgjb env ${CHROOT_MAKEENV} make ${CHROOT_DMAKEFLAGS} distribution \ 249282693Sgjb DESTDIR=${CHROOTDIR} 250282693Sgjb fi 251251652Sgjb 252282693Sgjb return 0 253282693Sgjb} # chroot_setup() 254251652Sgjb 255282693Sgjb# extra_chroot_setup(): Prepare anything additional within the build 256282693Sgjb# necessary for the release build. 257282693Sgjbextra_chroot_setup() { 258282693Sgjb mkdir -p ${CHROOTDIR}/dev 259282693Sgjb mount -t devfs devfs ${CHROOTDIR}/dev 260326014Sgjb [ -e /etc/resolv.conf -a ! -e ${CHROOTDIR}/etc/resolv.conf ] && \ 261326014Sgjb cp /etc/resolv.conf ${CHROOTDIR}/etc/resolv.conf 262282693Sgjb # Run ldconfig(8) in the chroot directory so /var/run/ld-elf*.so.hints 263282693Sgjb # is created. This is needed by ports-mgmt/pkg. 264282693Sgjb eval chroot ${CHROOTDIR} /etc/rc.d/ldconfig forcerestart 265259955Sgjb 266282693Sgjb # If MAKE_CONF and/or SRC_CONF are set and not character devices 267282693Sgjb # (/dev/null), copy them to the chroot. 268282693Sgjb if [ -e ${MAKE_CONF} ] && [ ! -c ${MAKE_CONF} ]; then 269282693Sgjb mkdir -p ${CHROOTDIR}/$(dirname ${MAKE_CONF}) 270282693Sgjb cp ${MAKE_CONF} ${CHROOTDIR}/${MAKE_CONF} 271282693Sgjb fi 272282693Sgjb if [ -e ${SRC_CONF} ] && [ ! -c ${SRC_CONF} ]; then 273282693Sgjb mkdir -p ${CHROOTDIR}/$(dirname ${SRC_CONF}) 274282693Sgjb cp ${SRC_CONF} ${CHROOTDIR}/${SRC_CONF} 275282693Sgjb fi 276282693Sgjb 277282693Sgjb if [ -d ${CHROOTDIR}/usr/ports ]; then 278282693Sgjb # Trick the ports 'run-autotools-fixup' target to do the right 279282693Sgjb # thing. 280282693Sgjb _OSVERSION=$(chroot ${CHROOTDIR} /usr/bin/uname -U) 281282693Sgjb REVISION=$(chroot ${CHROOTDIR} make -C /usr/src/release -V REVISION) 282282693Sgjb BRANCH=$(chroot ${CHROOTDIR} make -C /usr/src/release -V BRANCH) 283282693Sgjb UNAME_r=${REVISION}-${BRANCH} 284282693Sgjb if [ -d ${CHROOTDIR}/usr/doc ] && [ -z "${NODOC}" ]; then 285282693Sgjb PBUILD_FLAGS="OSVERSION=${_OSVERSION} BATCH=yes" 286282693Sgjb PBUILD_FLAGS="${PBUILD_FLAGS} UNAME_r=${UNAME_r}" 287282693Sgjb PBUILD_FLAGS="${PBUILD_FLAGS} OSREL=${REVISION}" 288326534Sgjb PBUILD_FLAGS="${PBUILD_FLAGS} WRKDIRPREFIX=/tmp/ports" 289326534Sgjb PBUILD_FLAGS="${PBUILD_FLAGS} DISTDIR=/tmp/distfiles" 290341995Sgjb chroot ${CHROOTDIR} env ${PBUILD_FLAGS} \ 291341995Sgjb OPTIONS_UNSET="AVAHI FOP IGOR" make -C \ 292326534Sgjb /usr/ports/textproc/docproj \ 293293452Sgjb FORCE_PKG_REGISTER=1 \ 294282693Sgjb install clean distclean 295282693Sgjb fi 296282693Sgjb fi 297282693Sgjb 298282693Sgjb if [ ! -z "${EMBEDDEDPORTS}" ]; then 299304014Sgjb _OSVERSION=$(chroot ${CHROOTDIR} /usr/bin/uname -U) 300304014Sgjb REVISION=$(chroot ${CHROOTDIR} make -C /usr/src/release -V REVISION) 301304014Sgjb BRANCH=$(chroot ${CHROOTDIR} make -C /usr/src/release -V BRANCH) 302304014Sgjb PBUILD_FLAGS="OSVERSION=${_OSVERSION} BATCH=yes" 303304014Sgjb PBUILD_FLAGS="${PBUILD_FLAGS} UNAME_r=${UNAME_r}" 304304014Sgjb PBUILD_FLAGS="${PBUILD_FLAGS} OSREL=${REVISION}" 305326534Sgjb PBUILD_FLAGS="${PBUILD_FLAGS} WRKDIRPREFIX=/tmp/ports" 306326534Sgjb PBUILD_FLAGS="${PBUILD_FLAGS} DISTDIR=/tmp/distfiles" 307282693Sgjb for _PORT in ${EMBEDDEDPORTS}; do 308326534Sgjb eval chroot ${CHROOTDIR} env ${PBUILD_FLAGS} make -C \ 309326534Sgjb /usr/ports/${_PORT} \ 310326534Sgjb FORCE_PKG_REGISTER=1 install clean distclean 311282693Sgjb done 312282693Sgjb fi 313282693Sgjb 314282500Sgjb buildenv_setup 315282693Sgjb 316282693Sgjb return 0 317282693Sgjb} # extra_chroot_setup() 318282693Sgjb 319282693Sgjb# chroot_build_target(): Build the userland and kernel for the build target. 320282693Sgjbchroot_build_target() { 321269639Sgjb load_target_env 322282693Sgjb if [ ! -z "${EMBEDDEDBUILD}" ]; then 323282693Sgjb RELEASE_WMAKEFLAGS="${RELEASE_WMAKEFLAGS} \ 324282693Sgjb TARGET=${EMBEDDED_TARGET} \ 325282693Sgjb TARGET_ARCH=${EMBEDDED_TARGET_ARCH}" 326282693Sgjb RELEASE_KMAKEFLAGS="${RELEASE_KMAKEFLAGS} \ 327282693Sgjb TARGET=${EMBEDDED_TARGET} \ 328282693Sgjb TARGET_ARCH=${EMBEDDED_TARGET_ARCH}" 329262810Sgjb fi 330282693Sgjb eval chroot ${CHROOTDIR} make -C /usr/src ${RELEASE_WMAKEFLAGS} buildworld 331282693Sgjb eval chroot ${CHROOTDIR} make -C /usr/src ${RELEASE_KMAKEFLAGS} buildkernel 332262810Sgjb 333282693Sgjb return 0 334282693Sgjb} # chroot_build_target 335257641Sgjb 336282693Sgjb# chroot_build_release(): Invoke the 'make release' target. 337282693Sgjbchroot_build_release() { 338282693Sgjb load_target_env 339288345Sgjb if [ ! -z "${WITH_VMIMAGES}" ]; then 340288345Sgjb if [ -z "${VMFORMATS}" ]; then 341288345Sgjb VMFORMATS="$(eval chroot ${CHROOTDIR} \ 342288345Sgjb make -C /usr/src/release -V VMFORMATS)" 343288345Sgjb fi 344288345Sgjb if [ -z "${VMSIZE}" ]; then 345288345Sgjb VMSIZE="$(eval chroot ${CHROOTDIR} \ 346288345Sgjb make -C /usr/src/release -V VMSIZE)" 347288345Sgjb fi 348288347Sgjb RELEASE_RMAKEFLAGS="${RELEASE_RMAKEFLAGS} \ 349288347Sgjb VMFORMATS=\"${VMFORMATS}\" VMSIZE=${VMSIZE}" 350288345Sgjb fi 351282693Sgjb eval chroot ${CHROOTDIR} make -C /usr/src/release \ 352282693Sgjb ${RELEASE_RMAKEFLAGS} release 353282693Sgjb eval chroot ${CHROOTDIR} make -C /usr/src/release \ 354282693Sgjb ${RELEASE_RMAKEFLAGS} install DESTDIR=/R \ 355282693Sgjb WITH_COMPRESSED_IMAGES=${WITH_COMPRESSED_IMAGES} \ 356282693Sgjb WITH_COMPRESSED_VMIMAGES=${WITH_COMPRESSED_VMIMAGES} 357282693Sgjb 358282693Sgjb return 0 359282693Sgjb} # chroot_build_release() 360282693Sgjb 361336726Smanuefi_boot_name() 362336726Smanu{ 363336726Smanu case $1 in 364336726Smanu arm) 365336726Smanu echo "bootarm.efi" 366336726Smanu ;; 367336726Smanu arm64) 368336726Smanu echo "bootaa64.efi" 369336726Smanu ;; 370336726Smanu amd64) 371336726Smanu echo "bootx86.efi" 372336726Smanu ;; 373336726Smanu esac 374336726Smanu} 375336726Smanu 376325898Sgjb# chroot_arm_build_release(): Create arm SD card image. 377325898Sgjbchroot_arm_build_release() { 378282693Sgjb load_target_env 379282693Sgjb eval chroot ${CHROOTDIR} make -C /usr/src/release obj 380325898Sgjb case ${EMBEDDED_TARGET} in 381325898Sgjb arm|arm64) 382325898Sgjb if [ -e "${RELENGDIR}/tools/arm.subr" ]; then 383325898Sgjb . "${RELENGDIR}/tools/arm.subr" 384325898Sgjb fi 385325898Sgjb ;; 386325898Sgjb *) 387325898Sgjb ;; 388325898Sgjb esac 389282693Sgjb [ ! -z "${RELEASECONF}" ] && . "${RELEASECONF}" 390282693Sgjb WORLDDIR="$(eval chroot ${CHROOTDIR} make -C /usr/src/release -V WORLDDIR)" 391282693Sgjb OBJDIR="$(eval chroot ${CHROOTDIR} make -C /usr/src/release -V .OBJDIR)" 392282693Sgjb DESTDIR="${OBJDIR}/${KERNEL}" 393282693Sgjb IMGBASE="${CHROOTDIR}/${OBJDIR}/${KERNEL}.img" 394282693Sgjb OSRELEASE="$(eval chroot ${CHROOTDIR} make -C /usr/src/release \ 395282693Sgjb TARGET=${EMBEDDED_TARGET} TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \ 396282693Sgjb -V OSRELEASE)" 397282693Sgjb chroot ${CHROOTDIR} mkdir -p ${DESTDIR} 398282693Sgjb chroot ${CHROOTDIR} truncate -s ${IMAGE_SIZE} ${IMGBASE##${CHROOTDIR}} 399282693Sgjb export mddev=$(chroot ${CHROOTDIR} \ 400282693Sgjb mdconfig -f ${IMGBASE##${CHROOTDIR}} ${MD_ARGS}) 401282693Sgjb arm_create_disk 402282693Sgjb arm_install_base 403336726Smanu arm_install_boot 404282693Sgjb arm_install_uboot 405282693Sgjb mdconfig -d -u ${mddev} 406282693Sgjb chroot ${CHROOTDIR} rmdir ${DESTDIR} 407282693Sgjb mv ${IMGBASE} ${CHROOTDIR}/${OBJDIR}/${OSRELEASE}-${KERNEL}.img 408282693Sgjb chroot ${CHROOTDIR} mkdir -p /R 409282693Sgjb chroot ${CHROOTDIR} cp -p ${OBJDIR}/${OSRELEASE}-${KERNEL}.img \ 410282693Sgjb /R/${OSRELEASE}-${KERNEL}.img 411282693Sgjb chroot ${CHROOTDIR} xz -T ${XZ_THREADS} /R/${OSRELEASE}-${KERNEL}.img 412289337Sgjb cd ${CHROOTDIR}/R && sha512 ${OSRELEASE}* \ 413289337Sgjb > CHECKSUM.SHA512 414282693Sgjb cd ${CHROOTDIR}/R && sha256 ${OSRELEASE}* \ 415282693Sgjb > CHECKSUM.SHA256 416252101Sgjb 417282693Sgjb return 0 418325898Sgjb} # chroot_arm_build_release() 419282693Sgjb 420282693Sgjb# main(): Start here. 421282693Sgjbmain() { 422282693Sgjb set -e # Everything must succeed 423282693Sgjb env_setup 424282693Sgjb while getopts c: opt; do 425282693Sgjb case ${opt} in 426282693Sgjb c) 427322817Sgjb RELEASECONF="$(realpath ${OPTARG})" 428282693Sgjb ;; 429282693Sgjb \?) 430282693Sgjb usage 431282693Sgjb ;; 432282693Sgjb esac 433282693Sgjb done 434282693Sgjb shift $(($OPTIND - 1)) 435282693Sgjb if [ ! -z "${RELEASECONF}" ]; then 436282693Sgjb if [ -e "${RELEASECONF}" ]; then 437282693Sgjb . ${RELEASECONF} 438282693Sgjb else 439282693Sgjb echo "Nonexistent configuration file: ${RELEASECONF}" 440282693Sgjb echo "Using default build environment." 441282693Sgjb fi 442282693Sgjb fi 443282693Sgjb env_check 444282693Sgjb trap "umount ${CHROOTDIR}/dev" EXIT # Clean up devfs mount on exit 445282693Sgjb chroot_setup 446282693Sgjb extra_chroot_setup 447282693Sgjb chroot_build_target 448282693Sgjb ${chroot_build_release_cmd} 449282693Sgjb 450282693Sgjb return 0 451282693Sgjb} # main() 452282693Sgjb 453282693Sgjbmain "${@}" 454