aboutsummaryrefslogtreecommitdiff
path: root/android-rockpi-cuttlefish/downloader.sh
blob: 80b1f250798ac7f564722355a07ee7e6ef6436ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#!/bin/bash

# Install needed packages
sudo apt-get update
sudo apt-get install -y unattended-upgrades
sudo unattended-upgrades --verbose
if [ x"${USE_DEBIAN_BACKPORTS}" = x"1" -o x"${USE_DEBIAN_BACKPORTS}" = x"True" ]; then
    echo "deb http://deb.debian.org/debian bullseye-backports main" | sudo tee /etc/apt/sources.list.d/backports.list
    sudo apt-get update
    sudo unattended-upgrades --verbose
fi
sudo apt-get install -y curl rsync wget onionshare
sudo apt-get install -y lz4 cpio xz-utils zstd p7zip-full
sudo apt-get install -y gcc-aarch64-linux-gnu gcc-arm-none-eabi
if [ x"${USE_DEBIAN_BACKPORTS}" = x"1" -o x"${USE_DEBIAN_BACKPORTS}" = x"True" ]; then
    sudo apt-get install -y -t bullseye-backports qemu-user-static
    sudo apt-get install -y -t bullseye-backports qemu-system-arm
else
    sudo apt-get install -y qemu-user-static
    sudo apt-get install -y qemu-system-arm
fi
if [ x"${USE_DEBIAN_BACKPORTS}" = x"1" -o x"${USE_DEBIAN_BACKPORTS}" = x"True" ]; then
    sudo apt-get install -y -t bullseye-backports debootstrap arch-test
else
    sudo apt-get install -y debootstrap arch-test
fi
sudo apt-get install -y procps gdisk dosfstools
sudo apt-get install -y git-buildpackage equivs pristine-tar
sudo apt-get install -y android-sdk-libsparse-utils
sudo apt-get install -y bc flex bison
sudo apt-get install -y e2tools efitools dfu-util
sudo apt-get install -y tree sharutils device-tree-compiler
sudo apt-get install -y libssl-dev openssl
sudo apt-get install -y gnutls-dev

# Download helper scripts (repo)
mkdir -p ${HOME}/bin
mkdir -p repo_build_space
pushd repo_build_space
gbp clone ${REPO_PACKAGE_URL}
pushd repo
sudo mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control
gbp buildpackage --git-ignore-new --git-builder="debuild --no-lintian --set-envvar=DEB_BUILD_OPTIONS=nocheck -i -us -uc -b"
popd
sudo apt-get install -y -f ./repo_*.deb
popd

# Setup git config
git config --global user.email "ci_notify@linaro.org"
git config --global user.name "Linaro CI"

# change to the build directory to repo sync and build
mkdir -p build
pushd build

if [ x"${UBOOT_DIST}" = x"source" ]; then
    mkdir -p u-boot-mainline
    pushd u-boot-mainline
    repo init -u ${UBOOT_MANIFEST_URL} -b ${UBOOT_MANIFEST_BRANCH}
    repo sync
    popd
elif [ x"${UBOOT_DIST}" = x"androidci" ]; then
    mkdir -p u-boot-androidci
    rm -f u-boot-androidci/*

    GRIDURL="https://ci.android.com/builds/branches/aosp_u-boot-mainline/grid?"
    URL=https://ci.android.com/builds/latest/branches/aosp_u-boot-mainline/targets/u-boot_rockpi4/view/BUILD_INFO

    RURL=$(curl -Ls -o /dev/null -w %{url_effective} ${URL})

    wget -O u-boot-androidci/idbloader.img \
	 -nv ${RURL%/view/BUILD_INFO}/raw/idbloader.img
    wget -O u-boot-androidci/u-boot.itb \
	 -nv ${RURL%/view/BUILD_INFO}/raw/u-boot.itb
fi

if [ x"${KERNEL_DIST}" = x"source" ]; then
    mkdir -p kernel
    pushd kernel
    repo init -u ${KERNEL_MANIFEST_URL} -b ${KERNEL_MANIFEST_BRANCH}
    repo sync
    popd
elif [ x"${KERNEL_DIST}" = x"androidci" -o x"${KERNEL_DIST}" = x"androidci-mainline" ]; then
    mkdir -p kernel-androidci
    GRIDURL="https://ci.android.com/builds/branches/aosp_kernel-common-android14-5.15/grid?"
    URL=https://ci.android.com/builds/latest/branches/aosp_kernel-common-android14-5.15/targets/kernel_rockpi4/view/BUILD_INFO

    if [ x"${KERNEL_DIST}" = x"androidci-mainline" ]; then
	GRIDURL="https://ci.android.com/builds/branches/aosp_kernel-common-android-mainline/grid?"
	URL=https://ci.android.com/builds/latest/branches/aosp_kernel-common-android-mainline/targets/kernel_rockpi4/view/BUILD_INFO
    fi

    RURL=$(curl -Ls -o /dev/null -w %{url_effective} ${URL})

    rm -f kernel-androidci/*

    wget -O kernel-androidci/BUILD_INFO \
	 -nv ${RURL%/view/BUILD_INFO}/raw/BUILD_INFO
    wget -O kernel-androidci/Image -nv ${RURL%/view/BUILD_INFO}/raw/Image
    wget -O kernel-androidci/initramfs.img \
	 -nv ${RURL%/view/BUILD_INFO}/raw/initramfs.img
    wget -O kernel-androidci/rk3399-rock-pi-4b.dtb \
	 -nv ${RURL%/view/BUILD_INFO}/raw/rk3399-rock-pi-4b.dtb
    wget -O kernel-androidci/System.map \
	 -nv ${RURL%/view/BUILD_INFO}/raw/System.map

    FILESSET1="modules.builtin modules.builtin.modinfo modules.load"
    for i in ${FILESSET1}; do
	wget -O "kernel-androidci/${i}" -nv ${RURL%/view/BUILD_INFO}/raw/"${i}"
    done

    FILESSET2="vmlinux.symvers gki_aarch64_modules"
    for i in ${FILESSET2}; do
	wget -O "kernel-androidci/${i}" -nv ${RURL%/view/BUILD_INFO}/raw/"${i}"
    done

    # download all the *.ko files
    KOFILES=$(egrep "[\"].*[.]ko[\"]" ${DISTDIR}/BUILD_INFO  | sed 's/["]\(.*[.]ko\)["][,]/\1/' | xargs)

    for i in ${KOFILES}; do
	wget -O "kernel-androidci/${i}" -nv ${RURL%/view/BUILD_INFO}/raw/"${i}"
    done
fi

mkdir -p aosp
pushd aosp
repo init -u ${ANDROID_MANIFEST_URL} -b ${ANDROID_MANIFEST_BRANCH}
repo sync
popd

# clean output and re-create directories
rm -rf output/
mkdir -p output/host/image
mkdir -p pub

# output manifest
pushd aosp
repo manifest -r -o ../pub/pinned-manifest.xml
popd

# apply local patches
function is_in_remote() {
    local repository=${1}
    local branch=${2}

    local existed_in_remote=$(git ls-remote --heads ${repository} ${branch})

    if [[ -z ${existed_in_remote} ]]; then
        return 0
    else
        return 1
    fi
}

pushd aosp/device/google/cuttlefish
head_commit=$(git rev-parse --verify HEAD)
git remote add linarolocalpatch ${LOCAL_AOSP_CUTTLEFISH_GIT_URL}
git remote update
if is_in_remote linarolocalpatch ${LOCAL_AOSP_CUTTLEFISH_GIT_BRANCH}; then
    echo "No local patches for aosp/device/google/cuttlefish"
else
    git checkout linarolocalpatch/${LOCAL_AOSP_CUTTLEFISH_GIT_BRANCH}
    git rebase ${head_commit}
fi
popd

pushd aosp/kernel/tests
head_commit=$(git rev-parse --verify HEAD)
git remote add linarolocalpatch ${LOCAL_AOSP_KERNEL_TESTS_GIT_URL}
git remote update
if is_in_remote linarolocalpatch ${LOCAL_AOSP_KERNEL_TESTS_GIT_BRANCH}; then
    echo "No local patches for aosp/kernel/tests"
else
    git checkout linarolocalpatch/${LOCAL_AOSP_KERNEL_TESTS_GIT_BRANCH}
    git rebase ${head_commit}
fi
popd

if [ x"${KERNEL_DIST}" = x"source" ]; then
    pushd kernel/common
    head_commit=$(git rev-parse --verify HEAD)
    git remote add linarolocalpatch ${LOCAL_KERNEL_COMMON_GIT_URL}
    git remote update
    if is_in_remote linarolocalpatch ${LOCAL_KERNEL_COMMON_GIT_BRANCH}; then
	echo "No local patches for kernel/common"
    else
	git checkout linarolocalpatch/${LOCAL_KERNEL_COMMON_GIT_BRANCH}
	git rebase ${head_commit}
    fi
    popd
fi

if [ x"${UBOOT_DIST}" = x"source" ]; then
    pushd u-boot-mainline/u-boot
    head_commit=$(git rev-parse --verify HEAD)
    git remote add linarolocalpatch ${LOCAL_UBOOTMAINLINE_UBOOT_GIT_URL}
    git remote update
    if is_in_remote linarolocalpatch ${LOCAL_UBOOTMAINLINE_UBOOT_GIT_BRANCH}; then
	echo "No local patches for u-boot-mainline/u-boot"
    else
	git checkout linarolocalpatch/${LOCAL_UBOOTMAINLINE_UBOOT_GIT_BRANCH}
	git rebase ${head_commit}
    fi
    popd
fi

# Download extra tools for testing purpose.
git clone https://github.com/matthuisman/gdrivedl.git
git clone https://git.linaro.org/people/paul.liu/rockpi4cuttlefish/rockpi-buildscripts.git

popd