xref: /aosp_15_r20/prebuilts/build-tools/build-prebuilts.sh (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
1*cda5da8dSAndroid Build Coastguard Worker#!/bin/bash -ex
2*cda5da8dSAndroid Build Coastguard Worker
3*cda5da8dSAndroid Build Coastguard Worker# Copyright 2020 Google Inc. All rights reserved.
4*cda5da8dSAndroid Build Coastguard Worker#
5*cda5da8dSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*cda5da8dSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*cda5da8dSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*cda5da8dSAndroid Build Coastguard Worker#
9*cda5da8dSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
10*cda5da8dSAndroid Build Coastguard Worker#
11*cda5da8dSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*cda5da8dSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*cda5da8dSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cda5da8dSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*cda5da8dSAndroid Build Coastguard Worker# limitations under the License.
16*cda5da8dSAndroid Build Coastguard Worker
17*cda5da8dSAndroid Build Coastguard Worker: "${OUT_DIR:?Must set OUT_DIR}"
18*cda5da8dSAndroid Build Coastguard WorkerTOP=$(pwd)
19*cda5da8dSAndroid Build Coastguard Worker
20*cda5da8dSAndroid Build Coastguard WorkerUNAME="$(uname)"
21*cda5da8dSAndroid Build Coastguard Workercase "$UNAME" in
22*cda5da8dSAndroid Build Coastguard WorkerLinux)
23*cda5da8dSAndroid Build Coastguard Worker    OS='linux'
24*cda5da8dSAndroid Build Coastguard Worker    ;;
25*cda5da8dSAndroid Build Coastguard WorkerDarwin)
26*cda5da8dSAndroid Build Coastguard Worker    OS='darwin'
27*cda5da8dSAndroid Build Coastguard Worker    ;;
28*cda5da8dSAndroid Build Coastguard Worker*)
29*cda5da8dSAndroid Build Coastguard Worker    exit 1
30*cda5da8dSAndroid Build Coastguard Worker    ;;
31*cda5da8dSAndroid Build Coastguard Workeresac
32*cda5da8dSAndroid Build Coastguard Worker
33*cda5da8dSAndroid Build Coastguard Workerbuild_soong=1
34*cda5da8dSAndroid Build Coastguard Workerbuild_asan=1
35*cda5da8dSAndroid Build Coastguard Worker[[ ! -d ${TOP}/toolchain/go ]] || build_go=1
36*cda5da8dSAndroid Build Coastguard Worker
37*cda5da8dSAndroid Build Coastguard Workeruse_musl=false
38*cda5da8dSAndroid Build Coastguard Workerclean=true
39*cda5da8dSAndroid Build Coastguard Workerwhile getopts ":-:" opt; do
40*cda5da8dSAndroid Build Coastguard Worker    case "$opt" in
41*cda5da8dSAndroid Build Coastguard Worker        -)
42*cda5da8dSAndroid Build Coastguard Worker            case "${OPTARG}" in
43*cda5da8dSAndroid Build Coastguard Worker                resume) clean= ;;
44*cda5da8dSAndroid Build Coastguard Worker                musl) use_musl=true ;;
45*cda5da8dSAndroid Build Coastguard Worker                skip-go) unset build_go ;;
46*cda5da8dSAndroid Build Coastguard Worker                skip-soong) unset build_soong ;;
47*cda5da8dSAndroid Build Coastguard Worker                skip-soong-tests) skip_soong_tests=--skip-soong-tests ;;
48*cda5da8dSAndroid Build Coastguard Worker                skip-asan) unset build_asan ;;
49*cda5da8dSAndroid Build Coastguard Worker                *) echo "Unknown option --${OPTARG}"; exit 1 ;;
50*cda5da8dSAndroid Build Coastguard Worker            esac;;
51*cda5da8dSAndroid Build Coastguard Worker        *) echo "'${opt}' '${OPTARG}'"
52*cda5da8dSAndroid Build Coastguard Worker    esac
53*cda5da8dSAndroid Build Coastguard Workerdone
54*cda5da8dSAndroid Build Coastguard Worker
55*cda5da8dSAndroid Build Coastguard Workersecondary_arch=""
56*cda5da8dSAndroid Build Coastguard Workerif [[ ${OS} = linux ]]; then
57*cda5da8dSAndroid Build Coastguard Worker    secondary_arch="\"HostSecondaryArch\":\"x86\","
58*cda5da8dSAndroid Build Coastguard Workerfi
59*cda5da8dSAndroid Build Coastguard Worker
60*cda5da8dSAndroid Build Coastguard Workercross_compile=""
61*cda5da8dSAndroid Build Coastguard Workerif [[ ${use_musl} = "true" ]]; then
62*cda5da8dSAndroid Build Coastguard Worker    cross_compile=$(cat <<EOF
63*cda5da8dSAndroid Build Coastguard Worker    "CrossHost": "linux_musl",
64*cda5da8dSAndroid Build Coastguard Worker    "CrossHostArch": "arm64",
65*cda5da8dSAndroid Build Coastguard Worker    "CrossHostSecondaryArch": "arm",
66*cda5da8dSAndroid Build Coastguard WorkerEOF
67*cda5da8dSAndroid Build Coastguard Worker    )
68*cda5da8dSAndroid Build Coastguard Workerelif [[ ${OS} = darwin ]]; then
69*cda5da8dSAndroid Build Coastguard Worker    cross_compile=$(cat <<EOF
70*cda5da8dSAndroid Build Coastguard Worker    "CrossHost": "darwin",
71*cda5da8dSAndroid Build Coastguard Worker    "CrossHostArch": "arm64",
72*cda5da8dSAndroid Build Coastguard WorkerEOF
73*cda5da8dSAndroid Build Coastguard Worker    )
74*cda5da8dSAndroid Build Coastguard Workerfi
75*cda5da8dSAndroid Build Coastguard Worker
76*cda5da8dSAndroid Build Coastguard Worker# Use toybox and other prebuilts even outside of the build (test running, go, etc)
77*cda5da8dSAndroid Build Coastguard Workerexport PATH=${TOP}/prebuilts/build-tools/path/${OS}-x86:$PATH
78*cda5da8dSAndroid Build Coastguard Worker
79*cda5da8dSAndroid Build Coastguard Workerif [ -n "${build_soong}" ]; then
80*cda5da8dSAndroid Build Coastguard Worker    SOONG_OUT=${OUT_DIR}/soong
81*cda5da8dSAndroid Build Coastguard Worker    SOONG_HOST_OUT=${OUT_DIR}/soong/host/${OS}-x86
82*cda5da8dSAndroid Build Coastguard Worker    [[ -z "${clean}" ]] || rm -rf ${SOONG_OUT}
83*cda5da8dSAndroid Build Coastguard Worker    mkdir -p ${SOONG_OUT}
84*cda5da8dSAndroid Build Coastguard Worker    rm -rf ${SOONG_OUT}/dist ${SOONG_OUT}/dist-common ${SOONG_OUT}/dist-arm64
85*cda5da8dSAndroid Build Coastguard Worker    cat > ${SOONG_OUT}/soong.variables.tmp << EOF
86*cda5da8dSAndroid Build Coastguard Worker{
87*cda5da8dSAndroid Build Coastguard Worker    "Allow_missing_dependencies": true,
88*cda5da8dSAndroid Build Coastguard Worker    "HostArch":"x86_64",
89*cda5da8dSAndroid Build Coastguard Worker    ${secondary_arch}
90*cda5da8dSAndroid Build Coastguard Worker    ${cross_compile}
91*cda5da8dSAndroid Build Coastguard Worker    "HostMusl": $use_musl,
92*cda5da8dSAndroid Build Coastguard Worker    "VendorVars": {
93*cda5da8dSAndroid Build Coastguard Worker        "cpython3": {
94*cda5da8dSAndroid Build Coastguard Worker            "force_build_host": "true"
95*cda5da8dSAndroid Build Coastguard Worker        },
96*cda5da8dSAndroid Build Coastguard Worker        "art_module": {
97*cda5da8dSAndroid Build Coastguard Worker            "source_build": "true"
98*cda5da8dSAndroid Build Coastguard Worker        }
99*cda5da8dSAndroid Build Coastguard Worker    },
100*cda5da8dSAndroid Build Coastguard Worker    "VendorVarTypes": {
101*cda5da8dSAndroid Build Coastguard Worker        "cpython3": {
102*cda5da8dSAndroid Build Coastguard Worker            "force_build_host": "bool"
103*cda5da8dSAndroid Build Coastguard Worker        }
104*cda5da8dSAndroid Build Coastguard Worker    }
105*cda5da8dSAndroid Build Coastguard Worker}
106*cda5da8dSAndroid Build Coastguard WorkerEOF
107*cda5da8dSAndroid Build Coastguard Worker    if cmp -s ${SOONG_OUT}/soong.variables.tmp ${SOONG_OUT}/soong.variables; then
108*cda5da8dSAndroid Build Coastguard Worker        rm ${SOONG_OUT}/soong.variables.tmp
109*cda5da8dSAndroid Build Coastguard Worker    else
110*cda5da8dSAndroid Build Coastguard Worker        mv -f ${SOONG_OUT}/soong.variables.tmp ${SOONG_OUT}/soong.variables
111*cda5da8dSAndroid Build Coastguard Worker    fi
112*cda5da8dSAndroid Build Coastguard Worker    SOONG_GO_BINARIES=(
113*cda5da8dSAndroid Build Coastguard Worker        bpfmt
114*cda5da8dSAndroid Build Coastguard Worker        go_extractor
115*cda5da8dSAndroid Build Coastguard Worker        kotlinc_extractor
116*cda5da8dSAndroid Build Coastguard Worker        merge_zips
117*cda5da8dSAndroid Build Coastguard Worker        soong_zip
118*cda5da8dSAndroid Build Coastguard Worker        runextractor
119*cda5da8dSAndroid Build Coastguard Worker        rust_extractor
120*cda5da8dSAndroid Build Coastguard Worker        zip2zip
121*cda5da8dSAndroid Build Coastguard Worker    )
122*cda5da8dSAndroid Build Coastguard Worker    SOONG_BINARIES=(
123*cda5da8dSAndroid Build Coastguard Worker        aconfig
124*cda5da8dSAndroid Build Coastguard Worker        acp
125*cda5da8dSAndroid Build Coastguard Worker        aidl
126*cda5da8dSAndroid Build Coastguard Worker        bison
127*cda5da8dSAndroid Build Coastguard Worker        bloaty
128*cda5da8dSAndroid Build Coastguard Worker        brotli
129*cda5da8dSAndroid Build Coastguard Worker        bzip2
130*cda5da8dSAndroid Build Coastguard Worker        ckati
131*cda5da8dSAndroid Build Coastguard Worker        edit_monitor
132*cda5da8dSAndroid Build Coastguard Worker        flex
133*cda5da8dSAndroid Build Coastguard Worker        gavinhoward-bc
134*cda5da8dSAndroid Build Coastguard Worker        hidl-gen
135*cda5da8dSAndroid Build Coastguard Worker        hidl-lint
136*cda5da8dSAndroid Build Coastguard Worker        m4
137*cda5da8dSAndroid Build Coastguard Worker        make
138*cda5da8dSAndroid Build Coastguard Worker        n2
139*cda5da8dSAndroid Build Coastguard Worker        ninja
140*cda5da8dSAndroid Build Coastguard Worker        one-true-awk
141*cda5da8dSAndroid Build Coastguard Worker        openssl
142*cda5da8dSAndroid Build Coastguard Worker        py3-cmd
143*cda5da8dSAndroid Build Coastguard Worker        py3-launcher64
144*cda5da8dSAndroid Build Coastguard Worker        py3-launcher-autorun64
145*cda5da8dSAndroid Build Coastguard Worker        tool_event_logger
146*cda5da8dSAndroid Build Coastguard Worker        toybox
147*cda5da8dSAndroid Build Coastguard Worker        xz
148*cda5da8dSAndroid Build Coastguard Worker        zipalign
149*cda5da8dSAndroid Build Coastguard Worker        ziptime
150*cda5da8dSAndroid Build Coastguard Worker        ziptool
151*cda5da8dSAndroid Build Coastguard Worker    )
152*cda5da8dSAndroid Build Coastguard Worker    SOONG_MUSL_BINARIES=(
153*cda5da8dSAndroid Build Coastguard Worker        py3-launcher-static64
154*cda5da8dSAndroid Build Coastguard Worker        py3-launcher-autorun-static64
155*cda5da8dSAndroid Build Coastguard Worker    )
156*cda5da8dSAndroid Build Coastguard Worker    SOONG_ASAN_BINARIES=(
157*cda5da8dSAndroid Build Coastguard Worker        acp
158*cda5da8dSAndroid Build Coastguard Worker        aidl
159*cda5da8dSAndroid Build Coastguard Worker        ckati
160*cda5da8dSAndroid Build Coastguard Worker        gavinhoward-bc
161*cda5da8dSAndroid Build Coastguard Worker        ninja
162*cda5da8dSAndroid Build Coastguard Worker        toybox
163*cda5da8dSAndroid Build Coastguard Worker        zipalign
164*cda5da8dSAndroid Build Coastguard Worker        ziptime
165*cda5da8dSAndroid Build Coastguard Worker        ziptool
166*cda5da8dSAndroid Build Coastguard Worker    )
167*cda5da8dSAndroid Build Coastguard Worker    SOONG_JAVA_LIBRARIES=(
168*cda5da8dSAndroid Build Coastguard Worker        desugar.jar
169*cda5da8dSAndroid Build Coastguard Worker        dx.jar
170*cda5da8dSAndroid Build Coastguard Worker        javac_extractor.jar
171*cda5da8dSAndroid Build Coastguard Worker        ktfmt.jar
172*cda5da8dSAndroid Build Coastguard Worker        turbine.jar
173*cda5da8dSAndroid Build Coastguard Worker    )
174*cda5da8dSAndroid Build Coastguard Worker    SOONG_JAVA_WRAPPERS=(
175*cda5da8dSAndroid Build Coastguard Worker        dx
176*cda5da8dSAndroid Build Coastguard Worker    )
177*cda5da8dSAndroid Build Coastguard Worker    if [[ $OS == "linux" ]]; then
178*cda5da8dSAndroid Build Coastguard Worker        SOONG_BINARIES+=(
179*cda5da8dSAndroid Build Coastguard Worker            create_minidebuginfo
180*cda5da8dSAndroid Build Coastguard Worker            nsjail
181*cda5da8dSAndroid Build Coastguard Worker            py2-cmd
182*cda5da8dSAndroid Build Coastguard Worker        )
183*cda5da8dSAndroid Build Coastguard Worker    fi
184*cda5da8dSAndroid Build Coastguard Worker
185*cda5da8dSAndroid Build Coastguard Worker    go_binaries="${SOONG_GO_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
186*cda5da8dSAndroid Build Coastguard Worker    binaries="${SOONG_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
187*cda5da8dSAndroid Build Coastguard Worker    asan_binaries="${SOONG_ASAN_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
188*cda5da8dSAndroid Build Coastguard Worker    jars="${SOONG_JAVA_LIBRARIES[@]/#/${SOONG_HOST_OUT}/framework/}"
189*cda5da8dSAndroid Build Coastguard Worker    wrappers="${SOONG_JAVA_WRAPPERS[@]/#/${SOONG_HOST_OUT}/bin/}"
190*cda5da8dSAndroid Build Coastguard Worker
191*cda5da8dSAndroid Build Coastguard Worker    # TODO: When we have a better method of extracting zips from Soong, use that.
192*cda5da8dSAndroid Build Coastguard Worker    py3_stdlib_zip="${SOONG_OUT}/.intermediates/external/python/cpython3/Lib/py3-stdlib-zip/gen/py3-stdlib.zip"
193*cda5da8dSAndroid Build Coastguard Worker
194*cda5da8dSAndroid Build Coastguard Worker    musl_x86_sysroot=""
195*cda5da8dSAndroid Build Coastguard Worker    musl_x86_64_sysroot=""
196*cda5da8dSAndroid Build Coastguard Worker    musl_arm_sysroot=""
197*cda5da8dSAndroid Build Coastguard Worker    musl_arm64_sysroot=""
198*cda5da8dSAndroid Build Coastguard Worker    cross_binaries=""
199*cda5da8dSAndroid Build Coastguard Worker    if [[ ${use_musl} = "true" ]]; then
200*cda5da8dSAndroid Build Coastguard Worker        binaries="${binaries} ${SOONG_MUSL_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
201*cda5da8dSAndroid Build Coastguard Worker        musl_x86_sysroot="${SOONG_OUT}/.intermediates/external/musl/libc_musl_sysroot/linux_musl_x86/gen/libc_musl_sysroot.zip"
202*cda5da8dSAndroid Build Coastguard Worker        musl_x86_64_sysroot="${SOONG_OUT}/.intermediates/external/musl/libc_musl_sysroot/linux_musl_x86_64/gen/libc_musl_sysroot.zip"
203*cda5da8dSAndroid Build Coastguard Worker
204*cda5da8dSAndroid Build Coastguard Worker        # Build cross-compiled musl arm64 binaries, except for go binaries
205*cda5da8dSAndroid Build Coastguard Worker        # since Blueprint doesn't have cross compilation support for them.
206*cda5da8dSAndroid Build Coastguard Worker        SOONG_HOST_ARM_OUT=${OUT_DIR}/soong/host/linux-arm64
207*cda5da8dSAndroid Build Coastguard Worker        cross_binaries="${SOONG_BINARIES[@]/#/${SOONG_HOST_ARM_OUT}/bin/}"
208*cda5da8dSAndroid Build Coastguard Worker        cross_binaries="${cross_binaries} ${SOONG_MUSL_BINARIES[@]/#/${SOONG_HOST_ARM_OUT}/bin/}"
209*cda5da8dSAndroid Build Coastguard Worker
210*cda5da8dSAndroid Build Coastguard Worker        musl_arm_sysroot="${SOONG_OUT}/.intermediates/external/musl/libc_musl_sysroot/linux_musl_arm/gen/libc_musl_sysroot.zip"
211*cda5da8dSAndroid Build Coastguard Worker        musl_arm64_sysroot="${SOONG_OUT}/.intermediates/external/musl/libc_musl_sysroot/linux_musl_arm64/gen/libc_musl_sysroot.zip"
212*cda5da8dSAndroid Build Coastguard Worker    fi
213*cda5da8dSAndroid Build Coastguard Worker
214*cda5da8dSAndroid Build Coastguard Worker    # Build everything
215*cda5da8dSAndroid Build Coastguard Worker    build/soong/soong_ui.bash --make-mode --soong-only --skip-config ${skip_soong_tests} \
216*cda5da8dSAndroid Build Coastguard Worker        ${go_binaries} \
217*cda5da8dSAndroid Build Coastguard Worker        ${binaries} \
218*cda5da8dSAndroid Build Coastguard Worker        ${cross_binaries} \
219*cda5da8dSAndroid Build Coastguard Worker        ${wrappers} \
220*cda5da8dSAndroid Build Coastguard Worker        ${jars} \
221*cda5da8dSAndroid Build Coastguard Worker        ${py3_stdlib_zip} \
222*cda5da8dSAndroid Build Coastguard Worker        ${musl_x86_sysroot} \
223*cda5da8dSAndroid Build Coastguard Worker        ${musl_x86_64_sysroot} \
224*cda5da8dSAndroid Build Coastguard Worker        ${musl_arm_sysroot} \
225*cda5da8dSAndroid Build Coastguard Worker        ${musl_arm64_sysroot} \
226*cda5da8dSAndroid Build Coastguard Worker        ${SOONG_HOST_OUT}/nativetest64/n2_e2e_tests/n2_e2e_tests \
227*cda5da8dSAndroid Build Coastguard Worker        ${SOONG_HOST_OUT}/nativetest64/n2_unit_tests/n2_unit_tests \
228*cda5da8dSAndroid Build Coastguard Worker        ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test \
229*cda5da8dSAndroid Build Coastguard Worker        ${SOONG_HOST_OUT}/nativetest64/ckati_find_test/ckati_find_test \
230*cda5da8dSAndroid Build Coastguard Worker        ${SOONG_HOST_OUT}/nativetest64/par_test/par_test \
231*cda5da8dSAndroid Build Coastguard Worker        soong_docs
232*cda5da8dSAndroid Build Coastguard Worker
233*cda5da8dSAndroid Build Coastguard Worker    # Run ninja tests
234*cda5da8dSAndroid Build Coastguard Worker    ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test
235*cda5da8dSAndroid Build Coastguard Worker
236*cda5da8dSAndroid Build Coastguard Worker    # Run n2 tests
237*cda5da8dSAndroid Build Coastguard Worker    timeout -v -k 10 300 ${SOONG_HOST_OUT}/nativetest64/n2_unit_tests/n2_unit_tests
238*cda5da8dSAndroid Build Coastguard Worker    N2_PATH=${SOONG_HOST_OUT}/bin/n2 timeout -v -k 10 300 ${SOONG_HOST_OUT}/nativetest64/n2_e2e_tests/n2_e2e_tests
239*cda5da8dSAndroid Build Coastguard Worker
240*cda5da8dSAndroid Build Coastguard Worker    # Run ckati tests
241*cda5da8dSAndroid Build Coastguard Worker    ${SOONG_HOST_OUT}/nativetest64/ckati_find_test/ckati_find_test
242*cda5da8dSAndroid Build Coastguard Worker
243*cda5da8dSAndroid Build Coastguard Worker    # Run python par/py*-cmd tests
244*cda5da8dSAndroid Build Coastguard Worker    ANDROID_HOST_OUT=${PWD}/${SOONG_HOST_OUT} build/soong/python/tests/runtest.sh
245*cda5da8dSAndroid Build Coastguard Worker
246*cda5da8dSAndroid Build Coastguard Worker    # Copy arch-specific binaries
247*cda5da8dSAndroid Build Coastguard Worker    mkdir -p ${SOONG_OUT}/dist/bin
248*cda5da8dSAndroid Build Coastguard Worker    cp ${go_binaries} ${binaries} ${SOONG_OUT}/dist/bin/
249*cda5da8dSAndroid Build Coastguard Worker    cp -R ${SOONG_HOST_OUT}/lib* ${SOONG_OUT}/dist/
250*cda5da8dSAndroid Build Coastguard Worker
251*cda5da8dSAndroid Build Coastguard Worker    # Copy cross-compiled binaries
252*cda5da8dSAndroid Build Coastguard Worker    if [[ ${use_musl} = "true" ]]; then
253*cda5da8dSAndroid Build Coastguard Worker        mkdir -p ${SOONG_OUT}/dist-arm64/bin
254*cda5da8dSAndroid Build Coastguard Worker        cp ${cross_binaries} ${SOONG_OUT}/dist-arm64/bin/
255*cda5da8dSAndroid Build Coastguard Worker        cp -R ${SOONG_HOST_ARM_OUT}/lib* ${SOONG_OUT}/dist-arm64/
256*cda5da8dSAndroid Build Coastguard Worker    fi
257*cda5da8dSAndroid Build Coastguard Worker
258*cda5da8dSAndroid Build Coastguard Worker    # Copy jars and wrappers
259*cda5da8dSAndroid Build Coastguard Worker    mkdir -p ${SOONG_OUT}/dist-common/{bin,flex,framework,py3-stdlib}
260*cda5da8dSAndroid Build Coastguard Worker    cp ${wrappers} ${SOONG_OUT}/dist-common/bin
261*cda5da8dSAndroid Build Coastguard Worker    cp ${jars} ${SOONG_OUT}/dist-common/framework
262*cda5da8dSAndroid Build Coastguard Worker
263*cda5da8dSAndroid Build Coastguard Worker    cp -r external/bison/data ${SOONG_OUT}/dist-common/bison
264*cda5da8dSAndroid Build Coastguard Worker    cp external/bison/NOTICE ${SOONG_OUT}/dist-common/bison/
265*cda5da8dSAndroid Build Coastguard Worker    cp -r external/flex/src/FlexLexer.h ${SOONG_OUT}/dist-common/flex/
266*cda5da8dSAndroid Build Coastguard Worker    cp external/flex/NOTICE ${SOONG_OUT}/dist-common/flex/
267*cda5da8dSAndroid Build Coastguard Worker
268*cda5da8dSAndroid Build Coastguard Worker    unzip -q -d ${SOONG_OUT}/dist-common/py3-stdlib ${py3_stdlib_zip}
269*cda5da8dSAndroid Build Coastguard Worker    cp external/python/cpython3/LICENSE ${SOONG_OUT}/dist-common/py3-stdlib/
270*cda5da8dSAndroid Build Coastguard Worker
271*cda5da8dSAndroid Build Coastguard Worker    if [[ ${use_musl} = "true" ]]; then
272*cda5da8dSAndroid Build Coastguard Worker        cp ${musl_x86_64_sysroot} ${SOONG_OUT}/musl-sysroot-x86_64-unknown-linux-musl.zip
273*cda5da8dSAndroid Build Coastguard Worker        cp ${musl_x86_sysroot} ${SOONG_OUT}/musl-sysroot-i686-unknown-linux-musl.zip
274*cda5da8dSAndroid Build Coastguard Worker        cp ${musl_arm_sysroot} ${SOONG_OUT}/musl-sysroot-arm-unknown-linux-musleabihf.zip
275*cda5da8dSAndroid Build Coastguard Worker        cp ${musl_arm64_sysroot} ${SOONG_OUT}/musl-sysroot-aarch64-unknown-linux-musl.zip
276*cda5da8dSAndroid Build Coastguard Worker    fi
277*cda5da8dSAndroid Build Coastguard Worker
278*cda5da8dSAndroid Build Coastguard Worker
279*cda5da8dSAndroid Build Coastguard Worker    if [[ $OS == "linux" && -n "${build_asan}" ]]; then
280*cda5da8dSAndroid Build Coastguard Worker        # Build ASAN versions
281*cda5da8dSAndroid Build Coastguard Worker        export ASAN_OPTIONS=detect_leaks=0
282*cda5da8dSAndroid Build Coastguard Worker        cat > ${SOONG_OUT}/soong.variables << EOF
283*cda5da8dSAndroid Build Coastguard Worker{
284*cda5da8dSAndroid Build Coastguard Worker    "Allow_missing_dependencies": true,
285*cda5da8dSAndroid Build Coastguard Worker    "HostArch":"x86_64",
286*cda5da8dSAndroid Build Coastguard Worker    ${secondary_arch}
287*cda5da8dSAndroid Build Coastguard Worker    "SanitizeHost": ["address"],
288*cda5da8dSAndroid Build Coastguard Worker    "VendorVars": {
289*cda5da8dSAndroid Build Coastguard Worker        "art_module": {
290*cda5da8dSAndroid Build Coastguard Worker            "source_build": "true"
291*cda5da8dSAndroid Build Coastguard Worker        }
292*cda5da8dSAndroid Build Coastguard Worker    }
293*cda5da8dSAndroid Build Coastguard Worker}
294*cda5da8dSAndroid Build Coastguard WorkerEOF
295*cda5da8dSAndroid Build Coastguard Worker
296*cda5da8dSAndroid Build Coastguard Worker        export ASAN_SYMBOLIZER_PATH=${PWD}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-symbolizer
297*cda5da8dSAndroid Build Coastguard Worker
298*cda5da8dSAndroid Build Coastguard Worker        # Clean up non-ASAN installed versions
299*cda5da8dSAndroid Build Coastguard Worker        rm -rf ${SOONG_HOST_OUT}
300*cda5da8dSAndroid Build Coastguard Worker
301*cda5da8dSAndroid Build Coastguard Worker        # Build everything with ASAN
302*cda5da8dSAndroid Build Coastguard Worker        build/soong/soong_ui.bash --make-mode --soong-only --skip-config ${skip_soong_tests} \
303*cda5da8dSAndroid Build Coastguard Worker            ${asan_binaries} \
304*cda5da8dSAndroid Build Coastguard Worker            ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test \
305*cda5da8dSAndroid Build Coastguard Worker            ${SOONG_HOST_OUT}/nativetest64/ckati_find_test/ckati_find_test
306*cda5da8dSAndroid Build Coastguard Worker
307*cda5da8dSAndroid Build Coastguard Worker        # Run ninja tests
308*cda5da8dSAndroid Build Coastguard Worker        ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test
309*cda5da8dSAndroid Build Coastguard Worker
310*cda5da8dSAndroid Build Coastguard Worker        # Run ckati tests
311*cda5da8dSAndroid Build Coastguard Worker        ${SOONG_HOST_OUT}/nativetest64/ckati_find_test/ckati_find_test
312*cda5da8dSAndroid Build Coastguard Worker
313*cda5da8dSAndroid Build Coastguard Worker        # Copy arch-specific binaries
314*cda5da8dSAndroid Build Coastguard Worker        mkdir -p ${SOONG_OUT}/dist/asan/bin
315*cda5da8dSAndroid Build Coastguard Worker        cp ${asan_binaries} ${SOONG_OUT}/dist/asan/bin/
316*cda5da8dSAndroid Build Coastguard Worker        cp -R ${SOONG_HOST_OUT}/lib* ${SOONG_OUT}/dist/asan/
317*cda5da8dSAndroid Build Coastguard Worker    fi
318*cda5da8dSAndroid Build Coastguard Worker
319*cda5da8dSAndroid Build Coastguard Worker    # Package arch-specific prebuilts
320*cda5da8dSAndroid Build Coastguard Worker    (
321*cda5da8dSAndroid Build Coastguard Worker        cd ${SOONG_OUT}/dist
322*cda5da8dSAndroid Build Coastguard Worker        zip -qryX build-prebuilts.zip *
323*cda5da8dSAndroid Build Coastguard Worker    )
324*cda5da8dSAndroid Build Coastguard Worker
325*cda5da8dSAndroid Build Coastguard Worker    if [[ ${use_musl} = "true" ]]; then
326*cda5da8dSAndroid Build Coastguard Worker        # Package cross-compiled prebuilts
327*cda5da8dSAndroid Build Coastguard Worker        (
328*cda5da8dSAndroid Build Coastguard Worker            cd ${SOONG_OUT}/dist-arm64
329*cda5da8dSAndroid Build Coastguard Worker            zip -qryX build-arm64-prebuilts.zip *
330*cda5da8dSAndroid Build Coastguard Worker        )
331*cda5da8dSAndroid Build Coastguard Worker    fi
332*cda5da8dSAndroid Build Coastguard Worker
333*cda5da8dSAndroid Build Coastguard Worker    # Package common prebuilts
334*cda5da8dSAndroid Build Coastguard Worker    (
335*cda5da8dSAndroid Build Coastguard Worker        cd ${SOONG_OUT}/dist-common
336*cda5da8dSAndroid Build Coastguard Worker        zip -qryX build-common-prebuilts.zip *
337*cda5da8dSAndroid Build Coastguard Worker    )
338*cda5da8dSAndroid Build Coastguard Workerfi
339*cda5da8dSAndroid Build Coastguard Worker
340*cda5da8dSAndroid Build Coastguard Workerif [ -z "${skip_soong_tests}" ]; then
341*cda5da8dSAndroid Build Coastguard Worker    build/soong/scripts/run-soong-tests-with-go-tools.sh
342*cda5da8dSAndroid Build Coastguard Workerfi
343*cda5da8dSAndroid Build Coastguard Worker
344*cda5da8dSAndroid Build Coastguard Worker# Go
345*cda5da8dSAndroid Build Coastguard Workerif [ -n "${build_go}" ]; then
346*cda5da8dSAndroid Build Coastguard Worker    GO_OUT=${OUT_DIR}/obj/go
347*cda5da8dSAndroid Build Coastguard Worker    rm -rf ${GO_OUT}
348*cda5da8dSAndroid Build Coastguard Worker    mkdir -p ${GO_OUT}
349*cda5da8dSAndroid Build Coastguard Worker    cp -a ${TOP}/toolchain/go/* ${GO_OUT}/
350*cda5da8dSAndroid Build Coastguard Worker    (
351*cda5da8dSAndroid Build Coastguard Worker        cd ${GO_OUT}/src
352*cda5da8dSAndroid Build Coastguard Worker        export GOROOT_BOOTSTRAP=${TOP}/prebuilts/go/${OS}-x86
353*cda5da8dSAndroid Build Coastguard Worker        export GOROOT_FINAL=./prebuilts/go/${OS}-x86
354*cda5da8dSAndroid Build Coastguard Worker        export GO_TEST_TIMEOUT_SCALE=100
355*cda5da8dSAndroid Build Coastguard Worker        export GODEBUG=installgoroot=all
356*cda5da8dSAndroid Build Coastguard Worker        ./make.bash
357*cda5da8dSAndroid Build Coastguard Worker        rm -rf ../pkg/bootstrap
358*cda5da8dSAndroid Build Coastguard Worker        rm -rf ../pkg/obj
359*cda5da8dSAndroid Build Coastguard Worker        GOROOT=$(pwd)/.. ../bin/go install -race std
360*cda5da8dSAndroid Build Coastguard Worker    )
361*cda5da8dSAndroid Build Coastguard Worker    (
362*cda5da8dSAndroid Build Coastguard Worker        cd ${GO_OUT}
363*cda5da8dSAndroid Build Coastguard Worker        zip -qryX go.zip * --exclude update_prebuilts.sh
364*cda5da8dSAndroid Build Coastguard Worker    )
365*cda5da8dSAndroid Build Coastguard Workerfi
366*cda5da8dSAndroid Build Coastguard Worker
367*cda5da8dSAndroid Build Coastguard Workerif [ -n "${DIST_DIR}" ]; then
368*cda5da8dSAndroid Build Coastguard Worker    mkdir -p ${DIST_DIR} || true
369*cda5da8dSAndroid Build Coastguard Worker
370*cda5da8dSAndroid Build Coastguard Worker    if [ -n "${build_soong}" ]; then
371*cda5da8dSAndroid Build Coastguard Worker        cp ${SOONG_OUT}/dist/build-prebuilts.zip ${DIST_DIR}/
372*cda5da8dSAndroid Build Coastguard Worker        cp ${SOONG_OUT}/dist-common/build-common-prebuilts.zip ${DIST_DIR}/
373*cda5da8dSAndroid Build Coastguard Worker        cp ${SOONG_OUT}/docs/*.html ${DIST_DIR}/
374*cda5da8dSAndroid Build Coastguard Worker        if [ ${use_musl} = "true" ]; then
375*cda5da8dSAndroid Build Coastguard Worker            cp ${SOONG_OUT}/dist-arm64/build-arm64-prebuilts.zip ${DIST_DIR}/
376*cda5da8dSAndroid Build Coastguard Worker
377*cda5da8dSAndroid Build Coastguard Worker            cp ${SOONG_OUT}/musl-sysroot-x86_64-unknown-linux-musl.zip ${DIST_DIR}/
378*cda5da8dSAndroid Build Coastguard Worker            cp ${SOONG_OUT}/musl-sysroot-i686-unknown-linux-musl.zip ${DIST_DIR}/
379*cda5da8dSAndroid Build Coastguard Worker            cp ${SOONG_OUT}/musl-sysroot-arm-unknown-linux-musleabihf.zip ${DIST_DIR}/
380*cda5da8dSAndroid Build Coastguard Worker            cp ${SOONG_OUT}/musl-sysroot-aarch64-unknown-linux-musl.zip ${DIST_DIR}/
381*cda5da8dSAndroid Build Coastguard Worker        fi
382*cda5da8dSAndroid Build Coastguard Worker    fi
383*cda5da8dSAndroid Build Coastguard Worker    if [ -n "${build_go}" ]; then
384*cda5da8dSAndroid Build Coastguard Worker        cp ${GO_OUT}/go.zip ${DIST_DIR}/
385*cda5da8dSAndroid Build Coastguard Worker    fi
386*cda5da8dSAndroid Build Coastguard Workerfi
387