240 lines
6.3 KiB
Bash
Executable File
240 lines
6.3 KiB
Bash
Executable File
#!/bin/bash -ex
|
|
|
|
# Copyright 2020 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.
|
|
|
|
: "${OUT_DIR:?Must set OUT_DIR}"
|
|
TOP=$(pwd)
|
|
|
|
UNAME="$(uname)"
|
|
case "$UNAME" in
|
|
Linux)
|
|
OS='linux'
|
|
;;
|
|
Darwin)
|
|
OS='darwin'
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
build_soong=1
|
|
[[ ! -d ${TOP}/toolchain/go ]] || build_go=1
|
|
clean=t
|
|
[[ "${1:-}" != '--resume' ]] || clean=''
|
|
|
|
# Use toybox and other prebuilts even outside of the build (test running, go, etc)
|
|
export PATH=${TOP}/prebuilts/build-tools/path/${OS}-x86:$PATH
|
|
|
|
if [ -n ${build_soong} ]; then
|
|
SOONG_OUT=${OUT_DIR}/soong
|
|
SOONG_HOST_OUT=${OUT_DIR}/soong/host/${OS}-x86
|
|
[[ -z "${clean}" ]] || rm -rf ${SOONG_OUT}
|
|
mkdir -p ${SOONG_OUT}
|
|
rm -rf ${SOONG_OUT}/dist ${SOONG_OUT}/dist-common
|
|
cat > ${SOONG_OUT}/soong.variables << EOF
|
|
{
|
|
"Allow_missing_dependencies": true,
|
|
"HostArch":"x86_64",
|
|
"VendorVars": {
|
|
"cpython3": {
|
|
"force_build_host": "true"
|
|
}
|
|
}
|
|
}
|
|
EOF
|
|
SOONG_BINARIES=(
|
|
acp
|
|
aidl
|
|
bison
|
|
bloaty
|
|
bpfmt
|
|
bzip2
|
|
ckati
|
|
ckati_stamp_dump
|
|
flex
|
|
gavinhoward-bc
|
|
go_extractor
|
|
hidl-gen
|
|
hidl-lint
|
|
m4
|
|
make
|
|
ninja
|
|
one-true-awk
|
|
openssl
|
|
py2-cmd
|
|
py3-cmd
|
|
py3-launcher64
|
|
py3-launcher-autorun64
|
|
runextractor
|
|
soong_zip
|
|
toybox
|
|
xz
|
|
zip2zip
|
|
zipalign
|
|
ziptime
|
|
ziptool
|
|
)
|
|
SOONG_ASAN_BINARIES=(
|
|
acp
|
|
aidl
|
|
ckati
|
|
gavinhoward-bc
|
|
ninja
|
|
toybox
|
|
zipalign
|
|
ziptime
|
|
ziptool
|
|
)
|
|
SOONG_JAVA_LIBRARIES=(
|
|
desugar.jar
|
|
dx.jar
|
|
turbine.jar
|
|
javac_extractor.jar
|
|
)
|
|
SOONG_JAVA_WRAPPERS=(
|
|
dx
|
|
)
|
|
if [[ $OS == "linux" ]]; then
|
|
SOONG_BINARIES+=(
|
|
create_minidebuginfo
|
|
nsjail
|
|
)
|
|
fi
|
|
|
|
binaries="${SOONG_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
|
|
asan_binaries="${SOONG_ASAN_BINARIES[@]/#/${SOONG_HOST_OUT}/bin/}"
|
|
jars="${SOONG_JAVA_LIBRARIES[@]/#/${SOONG_HOST_OUT}/framework/}"
|
|
wrappers="${SOONG_JAVA_WRAPPERS[@]/#/${SOONG_HOST_OUT}/bin/}"
|
|
|
|
# TODO: When we have a better method of extracting zips from Soong, use that.
|
|
py3_stdlib_zip="${SOONG_OUT}/.intermediates/external/python/cpython3/Lib/py3-stdlib-zip/gen/py3-stdlib.zip"
|
|
|
|
# Build everything
|
|
build/soong/soong_ui.bash --make-mode --skip-make \
|
|
${binaries} \
|
|
${wrappers} \
|
|
${jars} \
|
|
${py3_stdlib_zip} \
|
|
${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test \
|
|
${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test \
|
|
soong_docs
|
|
|
|
# Run ninja tests
|
|
${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test
|
|
|
|
# Run ckati tests
|
|
${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test
|
|
|
|
# Copy arch-specific binaries
|
|
mkdir -p ${SOONG_OUT}/dist/bin
|
|
cp ${binaries} ${SOONG_OUT}/dist/bin/
|
|
cp -R ${SOONG_HOST_OUT}/lib* ${SOONG_OUT}/dist/
|
|
|
|
# Copy jars and wrappers
|
|
mkdir -p ${SOONG_OUT}/dist-common/{bin,flex,framework,py3-stdlib}
|
|
cp ${wrappers} ${SOONG_OUT}/dist-common/bin
|
|
cp ${jars} ${SOONG_OUT}/dist-common/framework
|
|
|
|
cp -r external/bison/data ${SOONG_OUT}/dist-common/bison
|
|
cp external/bison/NOTICE ${SOONG_OUT}/dist-common/bison/
|
|
cp -r external/flex/src/FlexLexer.h ${SOONG_OUT}/dist-common/flex/
|
|
cp external/flex/NOTICE ${SOONG_OUT}/dist-common/flex/
|
|
|
|
unzip -q -d ${SOONG_OUT}/dist-common/py3-stdlib ${py3_stdlib_zip}
|
|
cp external/python/cpython3/LICENSE ${SOONG_OUT}/dist-common/py3-stdlib/
|
|
|
|
if [[ $OS == "linux" ]]; then
|
|
# Build ASAN versions
|
|
export ASAN_OPTIONS=detect_leaks=0
|
|
cat > ${SOONG_OUT}/soong.variables << EOF
|
|
{
|
|
"Allow_missing_dependencies": true,
|
|
"HostArch":"x86_64",
|
|
"SanitizeHost": ["address"]
|
|
}
|
|
EOF
|
|
|
|
export ASAN_SYMBOLIZER_PATH=${PWD}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-symbolizer
|
|
|
|
# Clean up non-ASAN installed versions
|
|
rm -rf ${SOONG_HOST_OUT}
|
|
|
|
# Build everything with ASAN
|
|
build/soong/soong_ui.bash --make-mode --skip-make \
|
|
${asan_binaries} \
|
|
${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test \
|
|
${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test
|
|
|
|
# Run ninja tests
|
|
${SOONG_HOST_OUT}/nativetest64/ninja_test/ninja_test
|
|
|
|
# Run ckati tests
|
|
${SOONG_HOST_OUT}/nativetest64/ckati_test/find_test
|
|
|
|
# Copy arch-specific binaries
|
|
mkdir -p ${SOONG_OUT}/dist/asan/bin
|
|
cp ${asan_binaries} ${SOONG_OUT}/dist/asan/bin/
|
|
cp -R ${SOONG_HOST_OUT}/lib* ${SOONG_OUT}/dist/asan/
|
|
fi
|
|
|
|
# Package arch-specific prebuilts
|
|
(
|
|
cd ${SOONG_OUT}/dist
|
|
zip -qryX build-prebuilts.zip *
|
|
)
|
|
|
|
# Package common prebuilts
|
|
(
|
|
cd ${SOONG_OUT}/dist-common
|
|
zip -qryX build-common-prebuilts.zip *
|
|
)
|
|
fi
|
|
|
|
# Go
|
|
if [ -n ${build_go} ]; then
|
|
GO_OUT=${OUT_DIR}/obj/go
|
|
rm -rf ${GO_OUT}
|
|
mkdir -p ${GO_OUT}
|
|
cp -a ${TOP}/toolchain/go/* ${GO_OUT}/
|
|
(
|
|
cd ${GO_OUT}/src
|
|
export GOROOT_BOOTSTRAP=${TOP}/prebuilts/go/${OS}-x86
|
|
export GOROOT_FINAL=./prebuilts/go/${OS}-x86
|
|
export GO_TEST_TIMEOUT_SCALE=100
|
|
./make.bash
|
|
rm -rf ../pkg/bootstrap
|
|
rm -rf ../pkg/obj
|
|
GOROOT=$(pwd)/.. ../bin/go install -race std
|
|
)
|
|
(
|
|
cd ${GO_OUT}
|
|
zip -qryX go.zip * --exclude update_prebuilts.sh
|
|
)
|
|
fi
|
|
|
|
if [ -n "${DIST_DIR}" ]; then
|
|
mkdir -p ${DIST_DIR} || true
|
|
|
|
if [ -n ${build_soong} ]; then
|
|
cp ${SOONG_OUT}/dist/build-prebuilts.zip ${DIST_DIR}/
|
|
cp ${SOONG_OUT}/dist-common/build-common-prebuilts.zip ${DIST_DIR}/
|
|
cp ${SOONG_OUT}/docs/*.html ${DIST_DIR}/
|
|
fi
|
|
if [ -n ${build_go} ]; then
|
|
cp ${GO_OUT}/go.zip ${DIST_DIR}/
|
|
fi
|
|
fi
|