blob: 4df0a479b6d6046034996fe6a2ce01c9488b7074 [file] [log] [blame]
Colin Cross0ffa5a02016-04-01 16:45:40 -07001#!/bin/bash -ex
2
Colin Cross9297fad2020-08-10 12:18:51 -07003# Copyright 2020 Google Inc. All rights reserved.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
Sasha Smundak22442732019-11-18 18:27:12 -080017: "${OUT_DIR:?Must set OUT_DIR}"
Colin Cross0ffa5a02016-04-01 16:45:40 -070018TOP=$(pwd)
19
20UNAME="$(uname)"
21case "$UNAME" in
22Linux)
23 OS='linux'
24 ;;
25Darwin)
26 OS='darwin'
27 ;;
28*)
29 exit 1
30 ;;
31esac
32
33build_soong=1
Sasha Smundak22442732019-11-18 18:27:12 -080034[[ ! -d ${TOP}/toolchain/go ]] || build_go=1
Colin Crossc5d12c52021-08-02 11:24:14 -070035
36use_musl=false
37clean=true
38while getopts ":-:" opt; do
39 case "$opt" in
40 -)
41 case "${OPTARG}" in
42 resume) clean= ;;
43 musl) use_musl=true ;;
Colin Cross7d013d52022-03-08 13:13:24 -080044 skip-go) unset build_go ;;
45 skip-soong-tests) skip_soong_tests=--skip-soong-tests ;;
Colin Crossc5d12c52021-08-02 11:24:14 -070046 *) echo "Unknown option --${OPTARG}"; exit 1 ;;
47 esac;;
48 *) echo "'${opt}' '${OPTARG}'"
49 esac
50done
Colin Cross0ffa5a02016-04-01 16:45:40 -070051
Colin Crossc2c5b622022-02-08 12:57:39 -080052secondary_arch=""
53if [[ ${OS} = linux ]]; then
54 secondary_arch="\"HostSecondaryArch\":\"x86\","
55fi
56
Dan Willemsen0d4cca52020-04-29 15:46:22 -070057# Use toybox and other prebuilts even outside of the build (test running, go, etc)
58export PATH=${TOP}/prebuilts/build-tools/path/${OS}-x86:$PATH
59
Colin Cross7d013d52022-03-08 13:13:24 -080060if [ -n "${build_soong}" ]; then
Colin Cross0ffa5a02016-04-01 16:45:40 -070061 SOONG_OUT=${OUT_DIR}/soong
62 SOONG_HOST_OUT=${OUT_DIR}/soong/host/${OS}-x86
Sasha Smundak22442732019-11-18 18:27:12 -080063 [[ -z "${clean}" ]] || rm -rf ${SOONG_OUT}
Colin Cross0ffa5a02016-04-01 16:45:40 -070064 mkdir -p ${SOONG_OUT}
Dan Willemsen9e607a22020-12-16 18:45:34 -080065 rm -rf ${SOONG_OUT}/dist ${SOONG_OUT}/dist-common
Colin Cross0ffa5a02016-04-01 16:45:40 -070066 cat > ${SOONG_OUT}/soong.variables << EOF
67{
68 "Allow_missing_dependencies": true,
Dan Willemsen79299d12020-12-23 16:51:09 -080069 "HostArch":"x86_64",
Colin Crossc2c5b622022-02-08 12:57:39 -080070 ${secondary_arch}
Colin Crossc5d12c52021-08-02 11:24:14 -070071 "HostMusl": $use_musl,
Dan Willemsen79299d12020-12-23 16:51:09 -080072 "VendorVars": {
73 "cpython3": {
74 "force_build_host": "true"
Martin Stjernholm831731c2021-05-21 19:28:14 +010075 },
76 "art_module": {
77 "source_build": "true"
Dan Willemsen79299d12020-12-23 16:51:09 -080078 }
79 }
Colin Cross0ffa5a02016-04-01 16:45:40 -070080}
81EOF
Colin Crossc5042c72017-06-20 17:22:32 -070082 SOONG_BINARIES=(
83 acp
Dan Willemsen52503bb2017-11-17 10:11:03 -080084 aidl
Dan Willemsen10aabfe2018-01-08 17:12:38 -080085 bison
ThiƩbaud Weksteen37013652020-12-15 20:45:36 +010086 bloaty
Colin Crossc5042c72017-06-20 17:22:32 -070087 bpfmt
Yu Liu358af442022-02-03 14:45:40 -080088 bssl_inject_hash
Elliott Hughes8355f232019-02-19 12:57:48 -080089 bzip2
Colin Crossc5042c72017-06-20 17:22:32 -070090 ckati
91 ckati_stamp_dump
Dan Willemsen77ad4b92018-05-22 16:38:31 -070092 flex
Dan Willemsen6656b712019-12-09 15:00:19 -080093 gavinhoward-bc
Sasha Smundak1d2ebbb2019-12-03 18:00:54 -080094 go_extractor
Colin Crossdbb6c202020-09-08 15:25:01 -070095 hidl-gen
Neel Mehta487def62019-07-30 17:26:20 -070096 hidl-lint
Dan Willemsen98670422019-04-22 11:11:58 -070097 m4
Dan Willemsenc4e38f52018-10-04 17:41:49 -070098 make
Jingwen Chena0830362022-03-17 15:47:08 +000099 merge_zips
Colin Crossc5042c72017-06-20 17:22:32 -0700100 ninja
Elliott Hughes8355f232019-02-19 12:57:48 -0800101 one-true-awk
Dan Willemsen1d121b02020-12-16 14:54:34 -0800102 openssl
Dan Willemsen882ed392019-02-17 14:41:11 -0800103 py2-cmd
Dan Willemsenf7bf4cd2019-12-09 08:54:43 -0800104 py3-cmd
Dan Willemsen9e607a22020-12-16 18:45:34 -0800105 py3-launcher64
106 py3-launcher-autorun64
Sasha Smundakeccfaaf2020-04-27 23:03:34 -0700107 runextractor
Colin Crossc5042c72017-06-20 17:22:32 -0700108 soong_zip
Yu Liuf83f22e2022-03-23 10:47:16 -0700109 symbol_inject
Dan Willemsen17dbeae2019-08-21 13:34:54 -0700110 toybox
Dan Willemsen9672d7a2018-03-09 01:00:47 -0800111 xz
Colin Crossc5042c72017-06-20 17:22:32 -0700112 zip2zip
Dan Willemsen52503bb2017-11-17 10:11:03 -0800113 zipalign
Colin Crossc5042c72017-06-20 17:22:32 -0700114 ziptime
Elliott Hughes754018d2019-10-29 13:56:37 -0700115 ziptool
Colin Crossc5042c72017-06-20 17:22:32 -0700116 )
Colin Cross5a739472022-03-08 13:14:09 -0800117 SOONG_MUSL_BINARIES=(
118 py3-launcher-static64
119 py3-launcher-autorun-static64
120 )
Colin Cross14cd25f2017-09-22 14:27:44 -0700121 SOONG_ASAN_BINARIES=(
122 acp
Dan Willemsen52503bb2017-11-17 10:11:03 -0800123 aidl
Colin Cross14cd25f2017-09-22 14:27:44 -0700124 ckati
Dan Willemsen6656b712019-12-09 15:00:19 -0800125 gavinhoward-bc
Colin Cross14cd25f2017-09-22 14:27:44 -0700126 ninja
Dan Willemsen17dbeae2019-08-21 13:34:54 -0700127 toybox
Dan Willemsen52503bb2017-11-17 10:11:03 -0800128 zipalign
Colin Cross14cd25f2017-09-22 14:27:44 -0700129 ziptime
Elliott Hughes754018d2019-10-29 13:56:37 -0700130 ziptool
Colin Cross14cd25f2017-09-22 14:27:44 -0700131 )
132 SOONG_JAVA_LIBRARIES=(
Sasha Smundak22442732019-11-18 18:27:12 -0800133 desugar.jar
134 dx.jar
135 turbine.jar
136 javac_extractor.jar
Colin Cross14cd25f2017-09-22 14:27:44 -0700137 )
138 SOONG_JAVA_WRAPPERS=(
139 dx
Colin Cross14cd25f2017-09-22 14:27:44 -0700140 )
Dan Willemsen7c8949f2018-10-29 11:00:43 -0700141 if [[ $OS == "linux" ]]; then
142 SOONG_BINARIES+=(
David Srbecky7439f812021-04-01 13:39:08 +0000143 create_minidebuginfo
Dan Willemsen5e68d972019-01-10 12:50:28 -0800144 nsjail
Dan Willemsen7c8949f2018-10-29 11:00:43 -0700145 )
146 fi
Colin Cross14cd25f2017-09-22 14:27:44 -0700147
Sasha Smundak22442732019-11-18 18:27:12 -0800148 binaries="${SOONG_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
149 asan_binaries="${SOONG_ASAN_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
150 jars="${SOONG_JAVA_LIBRARIES[@]/#/${SOONG_HOST_OUT}/framework/}"
151 wrappers="${SOONG_JAVA_WRAPPERS[@]/#/${SOONG_HOST_OUT}/bin/}"
Colin Cross14cd25f2017-09-22 14:27:44 -0700152
Dan Willemsen9e607a22020-12-16 18:45:34 -0800153 # TODO: When we have a better method of extracting zips from Soong, use that.
154 py3_stdlib_zip="${SOONG_OUT}/.intermediates/external/python/cpython3/Lib/py3-stdlib-zip/gen/py3-stdlib.zip"
155
Colin Crossf6142832022-02-07 19:50:36 -0800156 musl_sysroot32=""
157 musl_sysroot64=""
158 if [[ ${use_musl} = "true" ]]; then
Colin Cross5a739472022-03-08 13:14:09 -0800159 binaries="${binaries} ${SOONG_MUSL_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
Colin Crossf6142832022-02-07 19:50:36 -0800160 musl_sysroot32="${SOONG_OUT}/.intermediates/external/musl/libc_musl_sysroot/linux_musl_x86/gen/libc_musl_sysroot.zip"
161 musl_sysroot64="${SOONG_OUT}/.intermediates/external/musl/libc_musl_sysroot/linux_musl_x86_64/gen/libc_musl_sysroot.zip"
162 fi
163
Colin Cross14cd25f2017-09-22 14:27:44 -0700164 # Build everything
Colin Cross7d013d52022-03-08 13:13:24 -0800165 build/soong/soong_ui.bash --make-mode --soong-only --skip-config ${skip_soong_tests} \
Colin Cross14cd25f2017-09-22 14:27:44 -0700166 ${binaries} \
167 ${wrappers} \
168 ${jars} \
Dan Willemsen9e607a22020-12-16 18:45:34 -0800169 ${py3_stdlib_zip} \
Colin Crossf6142832022-02-07 19:50:36 -0800170 ${musl_sysroot32} \
171 ${musl_sysroot64} \
Colin Crossacad53f2017-12-12 10:59:25 -0800172 ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test \
Dan Willemsenfe85be02018-02-15 13:59:35 -0800173 ${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test \
Colin Crossacad53f2017-12-12 10:59:25 -0800174 soong_docs
Colin Cross14cd25f2017-09-22 14:27:44 -0700175
176 # Run ninja tests
Dan Willemsen76748492016-04-21 12:40:04 -0700177 ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test
Colin Cross14cd25f2017-09-22 14:27:44 -0700178
Dan Willemsenfe85be02018-02-15 13:59:35 -0800179 # Run ckati tests
180 ${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test
181
Colin Cross14cd25f2017-09-22 14:27:44 -0700182 # Copy arch-specific binaries
Dan Willemsen6adbc362016-10-05 22:41:25 -0700183 mkdir -p ${SOONG_OUT}/dist/bin
Colin Cross14cd25f2017-09-22 14:27:44 -0700184 cp ${binaries} ${SOONG_OUT}/dist/bin/
Dan Willemsen6adbc362016-10-05 22:41:25 -0700185 cp -R ${SOONG_HOST_OUT}/lib* ${SOONG_OUT}/dist/
186
Colin Cross14cd25f2017-09-22 14:27:44 -0700187 # Copy jars and wrappers
Dan Willemsen9e607a22020-12-16 18:45:34 -0800188 mkdir -p ${SOONG_OUT}/dist-common/{bin,flex,framework,py3-stdlib}
Colin Cross14cd25f2017-09-22 14:27:44 -0700189 cp ${wrappers} ${SOONG_OUT}/dist-common/bin
190 cp ${jars} ${SOONG_OUT}/dist-common/framework
191
Dan Willemsen10aabfe2018-01-08 17:12:38 -0800192 cp -r external/bison/data ${SOONG_OUT}/dist-common/bison
Dan Willemsen97f1b902019-12-23 15:13:20 -0800193 cp external/bison/NOTICE ${SOONG_OUT}/dist-common/bison/
194 cp -r external/flex/src/FlexLexer.h ${SOONG_OUT}/dist-common/flex/
195 cp external/flex/NOTICE ${SOONG_OUT}/dist-common/flex/
Dan Willemsen10aabfe2018-01-08 17:12:38 -0800196
Dan Willemsen9e607a22020-12-16 18:45:34 -0800197 unzip -q -d ${SOONG_OUT}/dist-common/py3-stdlib ${py3_stdlib_zip}
198 cp external/python/cpython3/LICENSE ${SOONG_OUT}/dist-common/py3-stdlib/
199
Colin Crossf6142832022-02-07 19:50:36 -0800200 if [[ ${use_musl} = "true" ]]; then
201 cp ${musl_sysroot64} ${SOONG_OUT}/musl-sysroot64.zip
202 cp ${musl_sysroot32} ${SOONG_OUT}/musl-sysroot32.zip
203 fi
204
Dan Willemsen6adbc362016-10-05 22:41:25 -0700205 if [[ $OS == "linux" ]]; then
206 # Build ASAN versions
207 export ASAN_OPTIONS=detect_leaks=0
208 cat > ${SOONG_OUT}/soong.variables << EOF
209{
210 "Allow_missing_dependencies": true,
211 "HostArch":"x86_64",
Colin Crossc2c5b622022-02-08 12:57:39 -0800212 ${secondary_arch}
Martin Stjernholm831731c2021-05-21 19:28:14 +0100213 "SanitizeHost": ["address"],
214 "VendorVars": {
215 "art_module": {
216 "source_build": "true"
217 }
218 }
Dan Willemsen6adbc362016-10-05 22:41:25 -0700219}
220EOF
Colin Cross14cd25f2017-09-22 14:27:44 -0700221
Dan Willemsen070ee5b2020-01-03 20:35:41 -0800222 export ASAN_SYMBOLIZER_PATH=${PWD}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-symbolizer
223
Colin Cross14cd25f2017-09-22 14:27:44 -0700224 # Clean up non-ASAN installed versions
Colin Cross85c2d922017-05-09 20:30:40 -0700225 rm -rf ${SOONG_HOST_OUT}
Colin Cross14cd25f2017-09-22 14:27:44 -0700226
227 # Build everything with ASAN
Colin Cross7d013d52022-03-08 13:13:24 -0800228 build/soong/soong_ui.bash --make-mode --soong-only --skip-config ${skip_soong_tests} \
Dan Willemsend4475082017-10-04 15:40:35 -0700229 ${asan_binaries} \
Dan Willemsenfe85be02018-02-15 13:59:35 -0800230 ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test \
231 ${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test
Colin Cross14cd25f2017-09-22 14:27:44 -0700232
233 # Run ninja tests
Dan Willemsen6adbc362016-10-05 22:41:25 -0700234 ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test
Colin Cross14cd25f2017-09-22 14:27:44 -0700235
Dan Willemsenfe85be02018-02-15 13:59:35 -0800236 # Run ckati tests
237 ${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test
238
Colin Cross14cd25f2017-09-22 14:27:44 -0700239 # Copy arch-specific binaries
Dan Willemsen6adbc362016-10-05 22:41:25 -0700240 mkdir -p ${SOONG_OUT}/dist/asan/bin
Dan Willemsend4475082017-10-04 15:40:35 -0700241 cp ${asan_binaries} ${SOONG_OUT}/dist/asan/bin/
Dan Willemsen6adbc362016-10-05 22:41:25 -0700242 cp -R ${SOONG_HOST_OUT}/lib* ${SOONG_OUT}/dist/asan/
243 fi
244
Colin Cross14cd25f2017-09-22 14:27:44 -0700245 # Package arch-specific prebuilts
Dan Willemsen6adbc362016-10-05 22:41:25 -0700246 (
247 cd ${SOONG_OUT}/dist
248 zip -qryX build-prebuilts.zip *
249 )
Colin Cross14cd25f2017-09-22 14:27:44 -0700250
251 # Package common prebuilts
252 (
253 cd ${SOONG_OUT}/dist-common
254 zip -qryX build-common-prebuilts.zip *
255 )
Colin Cross0ffa5a02016-04-01 16:45:40 -0700256fi
257
258# Go
Colin Cross7d013d52022-03-08 13:13:24 -0800259if [ -n "${build_go}" ]; then
Colin Cross0ffa5a02016-04-01 16:45:40 -0700260 GO_OUT=${OUT_DIR}/obj/go
261 rm -rf ${GO_OUT}
262 mkdir -p ${GO_OUT}
263 cp -a ${TOP}/toolchain/go/* ${GO_OUT}/
264 (
265 cd ${GO_OUT}/src
266 export GOROOT_BOOTSTRAP=${TOP}/prebuilts/go/${OS}-x86
Colin Cross42f43d92016-04-18 12:31:06 -0700267 export GOROOT_FINAL=./prebuilts/go/${OS}-x86
Colin Cross0ffa5a02016-04-01 16:45:40 -0700268 export GO_TEST_TIMEOUT_SCALE=100
269 ./make.bash
Dan Willemsen817bd2e2017-02-21 14:37:36 -0800270 rm -rf ../pkg/bootstrap
Dan Willemsen77ba5532018-07-23 10:48:27 -0700271 rm -rf ../pkg/obj
Colin Cross0ffa5a02016-04-01 16:45:40 -0700272 GOROOT=$(pwd)/.. ../bin/go install -race std
273 )
274 (
275 cd ${GO_OUT}
Colin Crossbe30dd02021-05-14 10:13:34 -0700276 zip -qryX go.zip * --exclude update_prebuilts.sh
Colin Cross0ffa5a02016-04-01 16:45:40 -0700277 )
278fi
279
280if [ -n "${DIST_DIR}" ]; then
281 mkdir -p ${DIST_DIR} || true
282
Colin Cross7d013d52022-03-08 13:13:24 -0800283 if [ -n "${build_soong}" ]; then
Dan Willemsen6adbc362016-10-05 22:41:25 -0700284 cp ${SOONG_OUT}/dist/build-prebuilts.zip ${DIST_DIR}/
Colin Cross14cd25f2017-09-22 14:27:44 -0700285 cp ${SOONG_OUT}/dist-common/build-common-prebuilts.zip ${DIST_DIR}/
Jaewoong Jung8f0c9122019-02-20 15:10:39 -0800286 cp ${SOONG_OUT}/docs/*.html ${DIST_DIR}/
Colin Crossf6142832022-02-07 19:50:36 -0800287 if [ ${use_musl} = "true" ]; then
288 cp ${SOONG_OUT}/musl-sysroot64.zip ${DIST_DIR}/
289 cp ${SOONG_OUT}/musl-sysroot32.zip ${DIST_DIR}/
290 fi
Colin Cross0ffa5a02016-04-01 16:45:40 -0700291 fi
Colin Cross7d013d52022-03-08 13:13:24 -0800292 if [ -n "${build_go}" ]; then
Colin Cross0ffa5a02016-04-01 16:45:40 -0700293 cp ${GO_OUT}/go.zip ${DIST_DIR}/
294 fi
295fi