#!/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