blob: 7925f477325af41dbe58ceb16f042589495ce6c9 [file] [log] [blame] [edit]
#!/bin/bash
# Copyright 2022 Google Inc. All rights reserved.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set -x
set -u
# comment out -e because partx has error message
# set -o errexit
# set -e
# get script directory
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
if [ -z $ANDROID_BUILD_TOP ]; then
echo "error: run script after 'lunch'"
exit 1
fi
source "${ANDROID_BUILD_TOP}/external/shflags/shflags"
# prepare pre-requested files, including kernel and uboot
# get temp directory
tmpdir=`echo $RANDOM | md5sum | head -c 20`
mkdir "/tmp/$tmpdir"
UBOOT_REPO="/tmp/$tmpdir/uboot"
KERNEL_REPO="/tmp/$tmpdir/kernel"
IMAGE="/tmp/$tmpdir/test_image"
ARCH=
FLAGS_HELP="USAGE: $0 [ARCH]"
mkdir $UBOOT_REPO
mkdir $KERNEL_REPO
cd $KERNEL_REPO
repo init -u persistent-https://android.git.corp.google.com/kernel/manifest -b common-android13-5.15 && repo sync
# parse input parameters
FLAGS "$@" || exit $?
eval set -- "${FLAGS_ARGV}"
for arg in "$@" ; do
if [ -z $ARCH ]; then
ARCH=$arg
else
flags_help
exit 1
fi
done
if [[ "$ARCH" == "arm" ]]; then
cd $UBOOT_REPO
repo init -u persistent-https://android.git.corp.google.com/kernel/manifest -b u-boot-mainline && repo sync
fi
if [ -z $KERNEL_REPO -o -z $UBOOT_REPO ]; then
flags_help
exit 1
fi
if [ ! -e "${UBOOT_REPO}" ]; then
echo "error: can't find '${UBOOT_REPO}'. aborting..."
exit 1
fi
if [ ! -e "${KERNEL_REPO}" ]; then
echo "error: can't find '${KERNEL_REPO}'. aborting..."
exit 1
fi
tmpfile=`mktemp`
bootenv=`mktemp`
cat > ${tmpfile} << "EOF"
bootdelay=2
baudrate=1500000
scriptaddr=0x00500000
boot_targets=mmc1 mmc0
bootcmd=run distro_bootcmd
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
mmc_boot=if mmc dev ${devnum}; then ; run scan_for_boot_part; fi
scan_for_boot_part=part list mmc ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype mmc ${devnum}:${distro_bootpart} bootfstype; then run find_script; fi; done; setenv devplist;
find_script=if test -e mmc ${devnum}:${distro_bootpart} /boot/boot.scr; then echo Found U-Boot script /boot/boot.scr; run run_scr; fi
run_scr=load mmc ${devnum}:${distro_bootpart} ${scriptaddr} /boot/boot.scr; source ${scriptaddr}
EOF
echo "Sha=`${script_dir}/gen_sha.sh --uboot ${UBOOT_REPO} --kernel ${KERNEL_REPO}`" >> ${tmpfile}
${ANDROID_BUILD_TOP}/device/google/cuttlefish_prebuilts/uboot_tools/mkenvimage -s 32768 -o ${bootenv} - < ${tmpfile}
# build uboot based on architecture
cd ${UBOOT_REPO}
if [[ "$ARCH" == "arm" ]]; then
BUILD_CONFIG=u-boot/build.config.rockpi4 build/build.sh -j1
fi
cd -
# build kernel based on architecture
cd ${KERNEL_REPO}
rm -rf out
if [[ "$ARCH" == "arm" ]]; then
BUILD_CONFIG=common/build.config.rockpi4 build/build.sh -j`nproc`
else
BUILD_CONFIG=common/build.config.gce.x86_64 build/build.sh -j`nproc`
fi
cd -
dist_dir=$(echo ${KERNEL_REPO}/out*/dist)
# build rootfs/host images
if [[ "$ARCH" == "arm" ]]; then
${ANDROID_BUILD_TOP}/kernel/tests/net/test/build_rootfs.sh \
-a arm64 -s bullseye-rockpi -n ${IMAGE} -r ${IMAGE}.initrd -e \
-k ${dist_dir}/Image -i ${dist_dir}/initramfs.img \
-d ${dist_dir}/rk3399-rock-pi-4b.dtb:rockchip
else
${ANDROID_BUILD_TOP}/kernel/tests/net/test/build_rootfs.sh \
-a amd64 -s bullseye-server -n ${IMAGE} -r ${IMAGE}.initrd -e \
-k ${dist_dir}/bzImage -i ${dist_dir}/initramfs.img -g
fi
if [ $? -ne 0 ]; then
echo "error: failed to build rootfs. exiting..."
exit 1
fi
rm -f ${IMAGE}.initrd
rm -rf ${ANDROID_BUILD_TOP}/disk.raw
cp ${IMAGE} ${ANDROID_BUILD_TOP}/disk.raw
cd ${ANDROID_BUILD_TOP}
rm -rf disk_${USER}.raw.tar.gz
tar Szcvf disk_${USER}.raw.tar.gz disk.raw