1
0
mirror of https://github.com/rancher/os-kernel.git synced 2025-04-28 10:33:19 +00:00
os-kernel/scripts/build-common

138 lines
3.5 KiB
Plaintext
Raw Permalink Normal View History

2015-08-05 16:53:05 +00:00
#!/bin/bash
set -e
if [[ "$KERNEL_TAG" == "" ]]; then
2018-11-08 08:10:23 +00:00
echo "ERROR: Please set the KERNEL_TAG (the mainline KERNEL version is also the git tag) you're building"
echo " e.g., KERNEL_TAG=4.9.10 make release"
exit 1
fi
2015-08-05 16:53:05 +00:00
: ${ARTIFACTS:=$(pwd)/assets}
2015-09-17 07:44:12 +00:00
: ${BUILD:=/usr/src}
2015-08-05 16:53:05 +00:00
: ${CONFIG:=$(pwd)/config}
: ${DIST:=$(pwd)/dist}
: ${PATCHES:=$(pwd)/patches}
mkdir -p ${DIST}/kernel
2015-08-05 16:53:05 +00:00
2015-09-17 07:44:12 +00:00
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
find . -name objtool -type f
2015-09-17 07:44:12 +00:00
}
2015-10-01 15:43:09 +00:00
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
2019-06-10 05:13:25 +00:00
pushd linux-firmware
git checkout -b ${FIRMWARE_TAG} ${FIRMWARE_TAG}
popd
2015-10-01 15:43:09 +00:00
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 WARNING: Firmware listed in $list Not found $i
2015-10-01 15:43:09 +00:00
fi
fi
done
tar cf firmware.tar --transform 's,^,lib/firmware/,' -C linux-firmware $(<files)
2016-04-20 04:58:56 +00:00
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 --exclude .git .
2016-04-20 04:58:56 +00:00
}
move_files() {
local module_list=$1
local target=$2
local target_file=${DIST}/kernel/modules-${target}.list
2016-04-20 04:58:56 +00:00
for i in $(<$module_list); do
if [ ! -e $i ]; then
echo "WARNING move_files into $target, $i does not exist"
2016-04-20 04:58:56 +00:00
continue
fi
2016-06-16 05:19:44 +00:00
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
echo $j >> ${target_file}
2016-06-16 05:19:44 +00:00
fi
done
2016-04-20 04:58:56 +00:00
done
sort ${target_file} -o ${target_file}
2016-04-20 04:58:56 +00:00
}
2016-06-16 05:19:44 +00:00
declare -A DEPS
build_deps() {
while read LINE; do
DEPS[${LINE%%:*}]="${LINE##*:}"
done < <(cat modules.dep)
}
2016-04-20 04:58:56 +00:00
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
/sbin/depmod -b tar/build $(basename tar/build/lib/modules/*)
2016-04-20 04:58:56 +00:00
cd tar/build/lib/modules/*/kernel/..
2016-06-16 05:19:44 +00:00
build_deps
2016-04-20 04:58:56 +00:00
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 in $(pwd)
2016-04-20 04:58:56 +00:00
find kernel -type f
2018-02-09 07:36:06 +00:00
echo
echo ERROR: Extra files in $(pwd)
echo ERROR: You may need to either remove some modules from your kernel .config, or
echo ERROR: add these files to $module_list or $module_extra_list
2016-04-20 04:58:56 +00:00
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 .
2015-10-01 15:43:09 +00:00
}