#!/bin/bash -ex
|
|
if [ -z "${OUT_DIR}" ]; then
|
echo Must set OUT_DIR
|
exit 1
|
fi
|
|
TOP=$(pwd)
|
|
UNAME="$(uname)"
|
case "$UNAME" in
|
Linux)
|
OS='linux'
|
;;
|
Darwin)
|
OS='darwin'
|
;;
|
*)
|
exit 1
|
;;
|
esac
|
|
build_soong=1
|
if [ -d ${TOP}/toolchain/go ]; then
|
build_go=1
|
fi
|
|
if [ -n ${build_soong} ]; then
|
# ckati and makeparallel (Soong)
|
SOONG_OUT=${OUT_DIR}/soong
|
SOONG_HOST_OUT=${OUT_DIR}/soong/host/${OS}-x86
|
rm -rf ${SOONG_OUT}
|
mkdir -p ${SOONG_OUT}
|
cat > ${SOONG_OUT}/soong.variables << EOF
|
{
|
"Allow_missing_dependencies": true,
|
"HostArch":"x86_64"
|
}
|
EOF
|
SOONG_BINARIES=(
|
acp
|
aidl
|
bison
|
bpfmt
|
bzip2
|
ckati
|
ckati_stamp_dump
|
flex
|
make
|
makeparallel
|
ninja
|
one-true-awk
|
py2-cmd
|
soong_zip
|
xz
|
zip2zip
|
zipalign
|
ziptime
|
)
|
SOONG_ASAN_BINARIES=(
|
acp
|
aidl
|
ckati
|
makeparallel
|
ninja
|
zipalign
|
ziptime
|
)
|
SOONG_JAVA_LIBRARIES=(
|
desugar
|
dx
|
turbine
|
)
|
SOONG_JAVA_WRAPPERS=(
|
dx
|
)
|
if [[ $OS == "linux" ]]; then
|
SOONG_BINARIES+=(
|
nsjail
|
toybox
|
)
|
SOONG_ASAN_BINARIES+=(
|
toybox
|
)
|
fi
|
|
binaries=$(for i in "${SOONG_BINARIES[@]}"; do echo ${SOONG_HOST_OUT}/bin/${i}; done)
|
asan_binaries=$(for i in "${SOONG_ASAN_BINARIES[@]}"; do echo ${SOONG_HOST_OUT}/bin/${i}; done)
|
jars=$(for i in "${SOONG_JAVA_LIBRARIES[@]}"; do echo ${SOONG_HOST_OUT}/framework/${i}.jar; done)
|
wrappers=$(for i in "${SOONG_JAVA_WRAPPERS[@]}"; do echo ${SOONG_HOST_OUT}/bin/${i}; done)
|
|
# Build everything
|
build/soong/soong_ui.bash --make-mode --skip-make \
|
${binaries} \
|
${wrappers} \
|
${jars} \
|
${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 ${SOONG_OUT}/dist-common/framework
|
cp ${wrappers} ${SOONG_OUT}/dist-common/bin
|
cp ${jars} ${SOONG_OUT}/dist-common/framework
|
|
cp -r external/bison/data ${SOONG_OUT}/dist-common/bison
|
|
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
|
|
# 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 *
|
)
|
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
|