arm-sdk

os build toolkit for various embedded devices
git clone https://git.parazyd.org/arm-sdk
Log | Files | Refs | Submodules | README | LICENSE

helpers (3695B)


      1 #!/usr/bin/env zsh
      2 # Copyright (c) 2016-2021 Ivan J. <parazyd@dyne.org>
      3 # This file is part of arm-sdk
      4 #
      5 # This source code is free software: you can redistribute it and/or modify
      6 # it under the terms of the GNU General Public License as published by
      7 # the Free Software Foundation, either version 3 of the License, or
      8 # (at your option) any later version.
      9 #
     10 # This software is distributed in the hope that it will be useful,
     11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 # GNU General Public License for more details.
     14 #
     15 # You should have received a copy of the GNU General Public License
     16 # along with this source code. If not, see <http://www.gnu.org/licenses/>.
     17 
     18 ## helper functions for arm-sdk
     19 
     20 get-kernel-sources() {
     21 	fn get-kernel-sources
     22 	req=(R device_name gitkernel gitbranch)
     23 	ckreq || return 1
     24 
     25 	notice "grabbing kernel sources"
     26 
     27 	if [[ $gitkernel = mainline ]]; then
     28 		clone-git "$linuxmainline" "$R/tmp/kernels/$device_name/${device_name}-linux"
     29 	else
     30 		clone-git "$gitkernel" "$R/tmp/kernels/$device_name/${device_name}-linux" "$gitbranch"
     31 	fi
     32 }
     33 
     34 get-kernel-firmware() {
     35 	fn get-kernel-firmware
     36 	req=(linuxfirmware R)
     37 	ckreq || return 1
     38 
     39 	notice "grabbing latest linux-firmware"
     40 
     41 	clone-git "$linuxfirmware" "$R/tmp/linux-firmware"
     42 }
     43 
     44 install-kernel-mods() {
     45 	fn install-kernel-mods
     46 	req=(MAKEOPTS PATH compiler strapdir)
     47 	ckreq || return 1
     48 
     49 	# We need this function to avoid sudo -E calls, which are
     50 	# forbidden by jenkins.
     51 	cat <<EOF > install_mods
     52 #!/bin/sh
     53 export PATH="${PATH}"
     54 make \
     55 	${MAKEOPTS} \
     56 	ARCH="${1}" \
     57 	CROSS_COMPILE=${compiler} \
     58 	INSTALL_MOD_PATH=${strapdir} \
     59 		modules_install || exit 1
     60 EOF
     61 	chmod +x install_mods || zerr
     62 	sudo ./install_mods   || zerr
     63 }
     64 
     65 clone-git() {
     66 	fn clone-git "$@"
     67 	req=(giturl clonepath)
     68 	local giturl="$1"
     69 	local clonepath="$2"
     70 	local gitbr="$3"
     71 	ckreq || return 1
     72 
     73 	notice "grabbing $(basename $clonepath)"
     74 
     75 	if [[ -d $clonepath ]]; then
     76 		pushd $clonepath
     77 			git pull
     78 		popd
     79 	else
     80 		[[ -n $gitbr ]] && gitbr="$gitbr" || gitbr="master"
     81 		git clone --depth 1 -b "$gitbr" "$giturl" "$clonepath"
     82 	fi
     83 }
     84 
     85 copy-kernel-config() {
     86 	fn copy-kernel-config
     87 	req=(device_name)
     88 	ckreq || return 1
     89 
     90 	notice "copying available kernel config"
     91 	cp -f $R/boards/kernel-configs/${device_name}.config \
     92 		$R/tmp/kernels/$device_name/${device_name}-linux/.config
     93 }
     94 
     95 vars+=(skip_arm_generic_root skip_arm_device_root)
     96 copy-root-overlay() {
     97 	fn copy-root-overlay
     98 	req=(strapdir device_name R)
     99 	ckreq || return 1
    100 
    101 	if [ -z "$skip_arm_generic_root" ]; then
    102 		if [ -d "$R/extra/generic-root" ]; then
    103 			notice "copying generic-root"
    104 			sudo cp -rfv "$R/extra/generic-root"/* "$strapdir"
    105 		fi
    106 	fi
    107 
    108 	if [ -z "$skip_arm_device_root" ]; then
    109 		if [ -d "$R/extra/$device_name" ]; then
    110 			notice "copyring ${device_name}-root"
    111 			sudo cp -rfv "$R/extra/$device_name"/* "$strapdir"
    112 		fi
    113 	fi
    114 
    115 	sudo sed -e "s/{{{BOOTFS}}}/$bootfs/" -i "$strapdir/etc/fstab"
    116 
    117 	return 0
    118 }
    119 
    120 postbuild-clean() {
    121 	fn postbuild-clean
    122 	req=(strapdir release)
    123 	ckreq || return 1
    124 
    125 	case "$release" in
    126 		jessie)
    127 			cat <<EOF | sudo tee ${strapdir}/postbuild >/dev/null
    128 #!/bin/sh
    129 # jessie-backports e2fsprogs because 4.x kernels
    130 apt-get update
    131 apt-get --yes --force-yes -t jessie-backports install e2fsprogs
    132 EOF
    133 			chroot-script -d postbuild || zerr
    134 			;;
    135 	esac
    136 
    137 	cat <<EOF | sudo tee ${strapdir}/postbuild >/dev/null
    138 #!/bin/sh
    139 apt-get update
    140 apt-get --yes --force-yes upgrade
    141 apt-get --yes --force-yes autoremove
    142 apt-get clean
    143 EOF
    144 
    145 	chroot-script -d postbuild || zerr
    146 	[[ -n "$BLEND" ]] || sudo rm -f \
    147 		"$strapdir/$armel_qemu_bin" \
    148 		"$strapdir/$armhf_qemu_bin" \
    149 		"$strapdir/$arm64_qemu_bin"
    150 
    151 	return 0
    152 }