#!/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