1
0
mirror of https://github.com/rancher/os-kernel.git synced 2025-05-04 13:16:19 +00:00
os-kernel/scripts/build-common
2016-07-10 05:07:19 +00:00

117 lines
2.8 KiB
Bash

#!/bin/bash
set -e
: ${KERNEL_URL:="https://github.com/rancher/linux/archive/Ubuntu-4.4.0-30.49-rancher.tar.gz"}
: ${KERNEL_SHA1:="34b4b41128bed2f8ce585fbee1b893f47b1985da"}
: ${ARTIFACTS:=$(pwd)/assets}
: ${BUILD:=/usr/src}
: ${CONFIG:=$(pwd)/config}
: ${DIST:=$(pwd)/dist}
list_build_files() {
find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl
find $(find ./arch/${SRCARCH} -name include -o -name scripts -type d) ./include ./scripts -type f
find ./arch/${SRCARCH} -name module.lds -o -name Kbuild.platforms -o -name Platform
find . -name Module.symvers -type f
}
create_firmware_tar() {
local list=$1
local temp=firmware-temp
rm -rf $temp
mkdir -p $temp
tar xf linux*.tar -C $temp
if [ ! -e linux-firmware ]; then
git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
fi
(
cd linux-firmware
git rev-parse HEAD > .git-commit
)
echo .git-commit > files
for i in $(<$list); do
if [ ! -e $temp/lib/firmware/$i ]; then
if [ -e linux-firmware/$i ]; then
echo Found $i
echo $i >> files
else
echo Not found $i
fi
fi
done
tar cf firmware.tar --transform 's,^,lib/firmware/,' -C linux-firmware $(<files)
for i in $(<files); do
if [ -e linux-firmware/$i ]; then
rm linux-firmware/$i
fi
done
tar cf firmware-extra.tar --transform 's,^./,lib/firmware/,' -C linux-firmware .
}
move_files() {
local module_list=$1
local target=$2
for i in $(<$module_list); do
if [ ! -e $i ]; then
continue
fi
for j in $i ${DEPS[$i]}; do
if [ -e $j ]; then
dest=$(readlink -f $j | sed 's!/build/!/'$target'/!')
mkdir -p $(dirname $dest)
mv -f $j $dest
fi
done
done
}
declare -A DEPS
build_deps() {
while read LINE; do
DEPS[${LINE%%:*}]="${LINE##*:}"
done < <(cat modules.dep)
}
split_tar() {
local archive=$1
local module_list=$2
local module_extra_list=$3
rm -rf tar
mkdir -p tar/{build,main,extra}
echo Extracting $archive
tar xf $archive -C tar/build
depmod -b tar/build $(basename tar/build/lib/modules/*)
cd tar/build/lib/modules/*/kernel/..
build_deps
echo Separating modules
move_files $module_list main
move_files $module_extra_list extra
if [ $(find kernel -type f | wc -l) -gt 0 ]; then
echo Invalid files
find kernel -type f
exit 1
fi
rm -rf kernel
mv $(pwd | sed 's!/build/!/main/!')/kernel .
echo Creating base.tar
tar cf ../../../../../base.tar -C ../../.. .
echo Creating extra.tar
tar cf ../../../../../extra.tar -C ../../../../extra .
}