diff options
-rwxr-xr-x | setup-android.sh | 95 | ||||
-rwxr-xr-x | test-art-host-test.sh | 7 | ||||
-rwxr-xr-x | test-art-target-test.sh | 17 |
3 files changed, 85 insertions, 34 deletions
diff --git a/setup-android.sh b/setup-android.sh index 29f81c2..9f6775a 100755 --- a/setup-android.sh +++ b/setup-android.sh @@ -4,24 +4,54 @@ set -xe export LANG=C export PATH=$PWD/tests:$PATH +# If PAGER is set, repo manifest will display its message using the pager, +# pausing the script until the pager is closed +unset PAGER -git config --global user.email "android-build-bot@fake-email.invalid" -git config --global user.name "android-build-bot" - -mkdir -p $HOME/bin -curl https://storage.googleapis.com/git-repo-downloads/repo > $HOME/bin/repo -wget https://git.linaro.org/ci/publishing-api.git/blob_plain/HEAD:/linaro-cp.py -O $HOME/bin/linaro-cp.py -chmod a+x $HOME/bin/* -export PATH=$HOME/bin:$PATH - -base_dir=$HOME/srv/$JOB_NAME cpu_count=$(getconf _NPROCESSORS_ONLN) jcpu_count=$(($cpu_count * 2)) +build_config_dir=android-build-configs + +if [[ ${JENKINS_HOME+y} ]]; then + # This script has been invoked by Jenkins, this is an automated run + JENKINS_MODE=y + echo -e "\e[32mJenkins run" + + git config --global user.email "android-build-bot@fake-email.invalid" + git config --global user.name "android-build-bot" + + mkdir -p $HOME/bin + curl https://storage.googleapis.com/git-repo-downloads/repo > $HOME/bin/repo + wget https://git.linaro.org/ci/publishing-api.git/blob_plain/HEAD:/linaro-cp.py -O $HOME/bin/linaro-cp.py + chmod a+x $HOME/bin/* + export PATH=$HOME/bin:$PATH + base_dir=$HOME/srv/$JOB_NAME +else + # Local run + unset JENKINS_MODE + echo -e "\e[32mLocal run" + + : ${base_dir:=$PWD/test_base_dir} + + # We need to define variables that are normally defined by Jenkins + : ${WORKSPACE:=$PWD/workspace} + mkdir -p "$WORKSPACE" + : ${BUILD_CONFIG_REPO:=git://android.git.linaro.org/android-build-configs.git} + : ${BUILD_CONFIG_BRANCH:=master} + + # Choose a default config filename depending on the script that sourced this file + case $(basename ${BASH_SOURCE[1]}) in + test-art-target-test.sh) + : ${BUILD_CONFIG_FILENAME:=linaro-art-tip-aosp_flounder} ;; + test-art-host-test.sh) + : ${BUILD_CONFIG_FILENAME:=linaro-art-tip-aosp_arm64} ;; + esac +fi # Move to persistent drive if [[ ! -d $base_dir ]]; then mkdir -p "$base_dir" - chmod 777 "$base_dir" + [[ $JENKINS_MODE ]] && chmod 755 "$base_dir" fi cd "$base_dir" @@ -29,11 +59,21 @@ if [[ ! ($BUILD_CONFIG_REPO && $BUILD_CONFIG_BRANCH && $BUILD_CONFIG_FILENAME) ] echo "ERROR: Please provide the config repository, branch and filename" exit 1 else - rm -rf android-build-configs - git clone $BUILD_CONFIG_REPO -b $BUILD_CONFIG_BRANCH + if [[ -d $build_config_dir/.git && ! $JENKINS_MODE ]]; then + # Only update the repo to preserve local modifications + cd $build_config_dir + git pull + cd - + else + rm -rf $build_config_dir + git clone $BUILD_CONFIG_REPO -b $BUILD_CONFIG_BRANCH + fi fi -. android-build-configs/$BUILD_CONFIG_FILENAME +# Should contain at least: {LOCAL_,}MANIFEST_{URL,BRANCH} +# Optionally: REPO_SEED_DIR, PATCHSETS +# And other configuration variables used in the scripts +. $build_config_dir/$BUILD_CONFIG_FILENAME : ${MANIFEST_URL:=https://android.googlesource.com/platform/manifest} @@ -54,11 +94,6 @@ fi mkdir -p android cd android/ -# setup tmpfs since we have enough free memory -# The default is half of the memory (size=50%) -mkdir -p out/target/product -sudo mount -t tmpfs tmpfs out/target/product - : ${MAKE_TARGETS:=droidcore} echo "SYNCING CODE" @@ -117,11 +152,14 @@ fi repo manifest -r -o "$WORKSPACE/pinned-manifest.xml" # Configure ccache -USE_CCACHE=1 -CCACHE_DIR=$base_dir/.ccache -CCACHE_SLOPPINESS=file_macro,include_file_mtime,time_macros -export USE_CCACHE CCACHE_DIR CCACHE_SLOPPINESS -ccache -M 50G +export USE_CCACHE=1 +export CCACHE_SLOPPINESS=file_macro,include_file_mtime,time_macros +# In local mode, if a configuration already exists, do not override the ccache +# path or its configuration +if [[ $JENKINS_MODE || ! $CCACHE_DIR || ! -f $CCACHE_DIR/ccache.conf ]]; then + export CCACHE_DIR=$base_dir/.ccache + ccache -M 50G +fi if [[ $PATCHSETS ]]; then for i in $PATCHSETS; do @@ -150,3 +188,12 @@ echo "BUILDING CODE" #Clean previous build artifacts rm -rf out/host/ + +if [[ $NO_TMPFS_TARGET_PRODUCT ]]; then + rm -rf out/target +else + # setup tmpfs since we have enough free memory + # The default is half of the memory (size=50%) + mkdir -p out/target/product + sudo mount -t tmpfs tmpfs out/target/product +fi diff --git a/test-art-host-test.sh b/test-art-host-test.sh index bfaf69e..e94fc68 100755 --- a/test-art-host-test.sh +++ b/test-art-host-test.sh @@ -1,8 +1,9 @@ #!/bin/bash -. $PWD/setup-android.sh -sudo chmod -R 777 /tmp/ -sudo umount -f out/target/product +# We do not use a tmpfs out/target/product in this test +NO_TMPFS_TARGET_PRODUCT=y +. $PWD/setup-android.sh +[[ $JENKINS_MODE ]] && sudo chmod 1777 /tmp : ${TEST_ART_COMMAND:=test-art-target} TEST_ART_OUTPUT_DIR=$WORKSPACE/$TEST_ART_COMMAND/ diff --git a/test-art-target-test.sh b/test-art-target-test.sh index 9b3d69c..049716b 100755 --- a/test-art-target-test.sh +++ b/test-art-target-test.sh @@ -1,8 +1,9 @@ #!/bin/bash -. $PWD/setup-android.sh -sudo chmod -R 777 /tmp/ -sudo umount -f out/target/product +# We do not use a tmpfs out/target/product in this test +NO_TMPFS_TARGET_PRODUCT=y +. $PWD/setup-android.sh +[[ $JENKINS_MODE ]] && sudo chmod 1777 /tmp TEST_ART_COMMAND="test-art-target" TEST_ART_OUTPUT_DIR=$WORKSPACE/$TEST_ART_COMMAND/ @@ -11,9 +12,9 @@ MAKE_TARGETS=$TEST_ART_COMMAND mkdir -p $WORKSPACE/$TEST_ART_COMMAND/ if [[ ! -e ./art/tools/buildbot-build.sh ]]; then -wget https://android-git.linaro.org/gitweb/platform/art.git/blob_plain/refs/heads/master:/tools/buildbot-build.sh -O ./art/tools/buildbot-build.sh -sed -i "s/build-art-target-tests/build-art-target/g" ./art/tools/buildbot-build.sh -chmod a+x ./art/tools/buildbot-build.sh + wget https://android-git.linaro.org/gitweb/platform/art.git/blob_plain/refs/heads/master:/tools/buildbot-build.sh -O ./art/tools/buildbot-build.sh + sed -i "s/build-art-target-tests/build-art-target/g" ./art/tools/buildbot-build.sh + chmod a+x ./art/tools/buildbot-build.sh fi MAKE_START=$(date +%s.%N) @@ -24,7 +25,9 @@ export CUSTOM_TARGET_LINKER=/data/local/tmp/system/bin/linker64 export ANDROID_PRODUCT_OUT=$PWD/out/target/product/armv8/ export TARGET_PRODUCT=armv8 time ./art/tools/buildbot-build.sh -j12 --target -sudo out/host/linux-x86/bin/adb start-server +# Build servers do not necessarily have up to date udev rules, start adb-server +# as root to avoid the issue +[[ $JENKINS_MODE ]] && sudo out/host/linux-x86/bin/adb start-server adb shell rm -rf /data/local/tmp /data/art-test /data/nativetest ./art/tools/setup-buildbot-device.sh |