#!/usr/bin/env bash # # SPDX-License-Identifier: GPL-2.0 # # Copyright (c) 2013-2026 Igor Pecovnik, igor@armbian.com # # This file is a part of the Armbian Build Framework # https://github.com/armbian/build/ # Functions: # compile_atf # compile_uboot # compile_kernel # compile_firmware # compile_xilinx_bootgen # grab_version # advanced_patch # process_patch_file # overlayfs_wrapper grab_version() { local ver=() ver[0]=$(grep "^VERSION" "${1}"/Makefile | head -1 | awk '{print $(NF)}' | grep -oE '^[[:digit:]]+' || true) ver[1]=$(grep "^PATCHLEVEL" "${1}"/Makefile | head -1 | awk '{print $(NF)}' | grep -oE '^[[:digit:]]+' || true) ver[2]=$(grep "^SUBLEVEL" "${1}"/Makefile | head -1 | awk '{print $(NF)}' | grep -oE '^[[:digit:]]+' || true) ver[3]=$(grep "^EXTRAVERSION" "${1}"/Makefile | head -1 | awk '{print $(NF)}' | grep -oE '^-rc[[:digit:]]+' || true) ver[4]=$(if [ -f localversion-next ]; then echo $(cat localversion-next); fi || true) echo "${ver[0]:-0}${ver[1]:+.${ver[1]}}${ver[2]:+.${ver[2]}}${ver[3]}${ver[4]}" return 0 } # overlayfs_wrapper # # : wrap|cleanup # : path to source directory # : suffix for merged directory to help locating it in /tmp # return value: new directory # # Assumptions/notes: # - Ubuntu Xenial host # - /tmp is mounted as tmpfs # - there is enough space on /tmp # - UB if running multiple compilation tasks in parallel # - should not be used with CREATE_PATCHES=yes # overlayfs_wrapper() { local operation="$1" if [[ $operation == wrap ]]; then local srcdir="$2" local description="$3" mkdir -p /tmp/overlay_components/ /tmp/armbian_build/ local tempdir workdir mergeddir tempdir=$(mktemp -d --tmpdir="/tmp/overlay_components/") # @TODO: WORKDIR? otherwise uses host's root disk, which might be small workdir=$(mktemp -d --tmpdir="/tmp/overlay_components/") mergeddir=$(mktemp -d --suffix="_$description" --tmpdir="/tmp/armbian_build/") mount -t overlay overlay -o lowerdir="$srcdir",upperdir="$tempdir",workdir="$workdir" "$mergeddir" # this is executed in a subshell, so use temp files to pass extra data outside echo "$tempdir" >> /tmp/.overlayfs_wrapper_cleanup echo "$mergeddir" >> /tmp/.overlayfs_wrapper_umount echo "$mergeddir" >> /tmp/.overlayfs_wrapper_cleanup echo "$mergeddir" return fi if [[ $operation == cleanup ]]; then if [[ -f /tmp/.overlayfs_wrapper_umount ]]; then for dir in $(< /tmp/.overlayfs_wrapper_umount); do [[ $dir == /tmp/* ]] && umount -l "$dir" > /dev/null 2>&1 done fi if [[ -f /tmp/.overlayfs_wrapper_cleanup ]]; then for dir in $(< /tmp/.overlayfs_wrapper_cleanup); do [[ $dir == /tmp/* ]] && rm -rf "$dir" done fi rm -f /tmp/.overlayfs_wrapper_umount /tmp/.overlayfs_wrapper_cleanup fi }