blob: f7b2bcd94ffeb805144f51d41cfe712a7ac7f041 [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
35clean=t
36[[ "${1:-}" != '--resume' ]] || clean=''
Colin Cross0ffa5a02016-04-01 16:45:40 -070037
Dan Willemsen0d4cca52020-04-29 15:46:22 -070038# Use toybox and other prebuilts even outside of the build (test running, go, etc)
39export PATH=${TOP}/prebuilts/build-tools/path/${OS}-x86:$PATH
40
Colin Cross0ffa5a02016-04-01 16:45:40 -070041if [ -n ${build_soong} ]; then
Colin Cross0ffa5a02016-04-01 16:45:40 -070042 SOONG_OUT=${OUT_DIR}/soong
43 SOONG_HOST_OUT=${OUT_DIR}/soong/host/${OS}-x86
Sasha Smundak22442732019-11-18 18:27:12 -080044 [[ -z "${clean}" ]] || rm -rf ${SOONG_OUT}
Colin Cross0ffa5a02016-04-01 16:45:40 -070045 mkdir -p ${SOONG_OUT}
46 cat > ${SOONG_OUT}/soong.variables << EOF
47{
48 "Allow_missing_dependencies": true,
Dan Willemsen0455a262018-08-28 17:50:21 -070049 "HostArch":"x86_64"
Colin Cross0ffa5a02016-04-01 16:45:40 -070050}
51EOF
Colin Crossc5042c72017-06-20 17:22:32 -070052 SOONG_BINARIES=(
53 acp
Dan Willemsen52503bb2017-11-17 10:11:03 -080054 aidl
Dan Willemsen10aabfe2018-01-08 17:12:38 -080055 bison
Colin Crossc5042c72017-06-20 17:22:32 -070056 bpfmt
Elliott Hughes8355f232019-02-19 12:57:48 -080057 bzip2
Colin Crossc5042c72017-06-20 17:22:32 -070058 ckati
59 ckati_stamp_dump
Dan Willemsen77ad4b92018-05-22 16:38:31 -070060 flex
Dan Willemsen6656b712019-12-09 15:00:19 -080061 gavinhoward-bc
Sasha Smundak1d2ebbb2019-12-03 18:00:54 -080062 go_extractor
Neel Mehta487def62019-07-30 17:26:20 -070063 hidl-lint
Dan Willemsen98670422019-04-22 11:11:58 -070064 m4
Dan Willemsenc4e38f52018-10-04 17:41:49 -070065 make
Colin Crossc5042c72017-06-20 17:22:32 -070066 ninja
Elliott Hughes8355f232019-02-19 12:57:48 -080067 one-true-awk
Dan Willemsen882ed392019-02-17 14:41:11 -080068 py2-cmd
Dan Willemsenf7bf4cd2019-12-09 08:54:43 -080069 py3-cmd
Sasha Smundakeccfaaf2020-04-27 23:03:34 -070070 runextractor
Colin Crossc5042c72017-06-20 17:22:32 -070071 soong_zip
Dan Willemsen17dbeae2019-08-21 13:34:54 -070072 toybox
Dan Willemsen9672d7a2018-03-09 01:00:47 -080073 xz
Colin Crossc5042c72017-06-20 17:22:32 -070074 zip2zip
Dan Willemsen52503bb2017-11-17 10:11:03 -080075 zipalign
Colin Crossc5042c72017-06-20 17:22:32 -070076 ziptime
Elliott Hughes754018d2019-10-29 13:56:37 -070077 ziptool
Colin Crossc5042c72017-06-20 17:22:32 -070078 )
Colin Cross14cd25f2017-09-22 14:27:44 -070079 SOONG_ASAN_BINARIES=(
80 acp
Dan Willemsen52503bb2017-11-17 10:11:03 -080081 aidl
Colin Cross14cd25f2017-09-22 14:27:44 -070082 ckati
Dan Willemsen6656b712019-12-09 15:00:19 -080083 gavinhoward-bc
Colin Cross14cd25f2017-09-22 14:27:44 -070084 ninja
Dan Willemsen17dbeae2019-08-21 13:34:54 -070085 toybox
Dan Willemsen52503bb2017-11-17 10:11:03 -080086 zipalign
Colin Cross14cd25f2017-09-22 14:27:44 -070087 ziptime
Elliott Hughes754018d2019-10-29 13:56:37 -070088 ziptool
Colin Cross14cd25f2017-09-22 14:27:44 -070089 )
90 SOONG_JAVA_LIBRARIES=(
Sasha Smundak22442732019-11-18 18:27:12 -080091 desugar.jar
92 dx.jar
93 turbine.jar
94 javac_extractor.jar
Colin Cross14cd25f2017-09-22 14:27:44 -070095 )
96 SOONG_JAVA_WRAPPERS=(
97 dx
Colin Cross14cd25f2017-09-22 14:27:44 -070098 )
Dan Willemsen7c8949f2018-10-29 11:00:43 -070099 if [[ $OS == "linux" ]]; then
100 SOONG_BINARIES+=(
Dan Willemsen5e68d972019-01-10 12:50:28 -0800101 nsjail
Dan Willemsen7c8949f2018-10-29 11:00:43 -0700102 )
103 fi
Colin Cross14cd25f2017-09-22 14:27:44 -0700104
Sasha Smundak22442732019-11-18 18:27:12 -0800105 binaries="${SOONG_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
106 asan_binaries="${SOONG_ASAN_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
107 jars="${SOONG_JAVA_LIBRARIES[@]/#/${SOONG_HOST_OUT}/framework/}"
108 wrappers="${SOONG_JAVA_WRAPPERS[@]/#/${SOONG_HOST_OUT}/bin/}"
Colin Cross14cd25f2017-09-22 14:27:44 -0700109
110 # Build everything
111 build/soong/soong_ui.bash --make-mode --skip-make \
112 ${binaries} \
113 ${wrappers} \
114 ${jars} \
Colin Crossacad53f2017-12-12 10:59:25 -0800115 ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test \
Dan Willemsenfe85be02018-02-15 13:59:35 -0800116 ${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test \
Colin Crossacad53f2017-12-12 10:59:25 -0800117 soong_docs
Colin Cross14cd25f2017-09-22 14:27:44 -0700118
119 # Run ninja tests
Dan Willemsen76748492016-04-21 12:40:04 -0700120 ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test
Colin Cross14cd25f2017-09-22 14:27:44 -0700121
Dan Willemsenfe85be02018-02-15 13:59:35 -0800122 # Run ckati tests
123 ${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test
124
Colin Cross14cd25f2017-09-22 14:27:44 -0700125 # Copy arch-specific binaries
Dan Willemsen6adbc362016-10-05 22:41:25 -0700126 mkdir -p ${SOONG_OUT}/dist/bin
Colin Cross14cd25f2017-09-22 14:27:44 -0700127 cp ${binaries} ${SOONG_OUT}/dist/bin/
Dan Willemsen6adbc362016-10-05 22:41:25 -0700128 cp -R ${SOONG_HOST_OUT}/lib* ${SOONG_OUT}/dist/
129
Colin Cross14cd25f2017-09-22 14:27:44 -0700130 # Copy jars and wrappers
Dan Willemsen97f1b902019-12-23 15:13:20 -0800131 mkdir -p ${SOONG_OUT}/dist-common/{bin,flex,framework}
Colin Cross14cd25f2017-09-22 14:27:44 -0700132 cp ${wrappers} ${SOONG_OUT}/dist-common/bin
133 cp ${jars} ${SOONG_OUT}/dist-common/framework
134
Dan Willemsen10aabfe2018-01-08 17:12:38 -0800135 cp -r external/bison/data ${SOONG_OUT}/dist-common/bison
Dan Willemsen97f1b902019-12-23 15:13:20 -0800136 cp external/bison/NOTICE ${SOONG_OUT}/dist-common/bison/
137 cp -r external/flex/src/FlexLexer.h ${SOONG_OUT}/dist-common/flex/
138 cp external/flex/NOTICE ${SOONG_OUT}/dist-common/flex/
Dan Willemsen10aabfe2018-01-08 17:12:38 -0800139
Dan Willemsen6adbc362016-10-05 22:41:25 -0700140 if [[ $OS == "linux" ]]; then
141 # Build ASAN versions
142 export ASAN_OPTIONS=detect_leaks=0
143 cat > ${SOONG_OUT}/soong.variables << EOF
144{
145 "Allow_missing_dependencies": true,
146 "HostArch":"x86_64",
Dan Willemsen6adbc362016-10-05 22:41:25 -0700147 "SanitizeHost": ["address"]
148}
149EOF
Colin Cross14cd25f2017-09-22 14:27:44 -0700150
Dan Willemsen070ee5b2020-01-03 20:35:41 -0800151 export ASAN_SYMBOLIZER_PATH=${PWD}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-symbolizer
152
Colin Cross14cd25f2017-09-22 14:27:44 -0700153 # Clean up non-ASAN installed versions
Colin Cross85c2d922017-05-09 20:30:40 -0700154 rm -rf ${SOONG_HOST_OUT}
Colin Cross14cd25f2017-09-22 14:27:44 -0700155
156 # Build everything with ASAN
157 build/soong/soong_ui.bash --make-mode --skip-make \
Dan Willemsend4475082017-10-04 15:40:35 -0700158 ${asan_binaries} \
Dan Willemsenfe85be02018-02-15 13:59:35 -0800159 ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test \
160 ${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test
Colin Cross14cd25f2017-09-22 14:27:44 -0700161
162 # Run ninja tests
Dan Willemsen6adbc362016-10-05 22:41:25 -0700163 ${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test
Colin Cross14cd25f2017-09-22 14:27:44 -0700164
Dan Willemsenfe85be02018-02-15 13:59:35 -0800165 # Run ckati tests
166 ${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test
167
Colin Cross14cd25f2017-09-22 14:27:44 -0700168 # Copy arch-specific binaries
Dan Willemsen6adbc362016-10-05 22:41:25 -0700169 mkdir -p ${SOONG_OUT}/dist/asan/bin
Dan Willemsend4475082017-10-04 15:40:35 -0700170 cp ${asan_binaries} ${SOONG_OUT}/dist/asan/bin/
Dan Willemsen6adbc362016-10-05 22:41:25 -0700171 cp -R ${SOONG_HOST_OUT}/lib* ${SOONG_OUT}/dist/asan/
172 fi
173
Colin Cross14cd25f2017-09-22 14:27:44 -0700174 # Package arch-specific prebuilts
Dan Willemsen6adbc362016-10-05 22:41:25 -0700175 (
176 cd ${SOONG_OUT}/dist
177 zip -qryX build-prebuilts.zip *
178 )
Colin Cross14cd25f2017-09-22 14:27:44 -0700179
180 # Package common prebuilts
181 (
182 cd ${SOONG_OUT}/dist-common
183 zip -qryX build-common-prebuilts.zip *
184 )
Colin Cross0ffa5a02016-04-01 16:45:40 -0700185fi
186
187# Go
188if [ -n ${build_go} ]; then
189 GO_OUT=${OUT_DIR}/obj/go
190 rm -rf ${GO_OUT}
191 mkdir -p ${GO_OUT}
192 cp -a ${TOP}/toolchain/go/* ${GO_OUT}/
193 (
194 cd ${GO_OUT}/src
195 export GOROOT_BOOTSTRAP=${TOP}/prebuilts/go/${OS}-x86
Colin Cross42f43d92016-04-18 12:31:06 -0700196 export GOROOT_FINAL=./prebuilts/go/${OS}-x86
Colin Cross0ffa5a02016-04-01 16:45:40 -0700197 export GO_TEST_TIMEOUT_SCALE=100
198 ./make.bash
Dan Willemsen817bd2e2017-02-21 14:37:36 -0800199 rm -rf ../pkg/bootstrap
Dan Willemsen77ba5532018-07-23 10:48:27 -0700200 rm -rf ../pkg/obj
Colin Cross0ffa5a02016-04-01 16:45:40 -0700201 GOROOT=$(pwd)/.. ../bin/go install -race std
202 )
203 (
204 cd ${GO_OUT}
205 zip -qryX go.zip *
206 )
207fi
208
209if [ -n "${DIST_DIR}" ]; then
210 mkdir -p ${DIST_DIR} || true
211
212 if [ -n ${build_soong} ]; then
Dan Willemsen6adbc362016-10-05 22:41:25 -0700213 cp ${SOONG_OUT}/dist/build-prebuilts.zip ${DIST_DIR}/
Colin Cross14cd25f2017-09-22 14:27:44 -0700214 cp ${SOONG_OUT}/dist-common/build-common-prebuilts.zip ${DIST_DIR}/
Jaewoong Jung8f0c9122019-02-20 15:10:39 -0800215 cp ${SOONG_OUT}/docs/*.html ${DIST_DIR}/
Colin Cross0ffa5a02016-04-01 16:45:40 -0700216 fi
Colin Cross0ffa5a02016-04-01 16:45:40 -0700217 if [ -n ${build_go} ]; then
218 cp ${GO_OUT}/go.zip ${DIST_DIR}/
219 fi
220fi