From 8ad9fca0a131c8eb68b1a656009e01925cecf1de Mon Sep 17 00:00:00 2001 From: Renato Golin Date: Wed, 12 Oct 2016 12:24:29 +0100 Subject: [Cron] Add a new crontab builder for debug purposes To investigate buildbot failures we rely on the ARM boards we have in the rack. But those boards take ~1h to build LLVM+Clang which does limit a lot on how fast we can test and act. To make that task easier, we decided to have a nightly build on the boards, for ARM and Thumb in debug mode, so we can start from a built tree, or at least a partially built tree if we need a more recent ToT. This script was made to work around crontab deficiencies and has been tested on my chromebook at home. It also makes sure it doesn't build if the script is already running or if the machine is busy or recuperating from a long build, as this may mean there's a bisection going on. Change-Id: I74f38c2ba874a4343bfcc9c24bcd8a157980c210 --- helpers/llvm-cron-build | 81 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 helpers/llvm-cron-build diff --git a/helpers/llvm-cron-build b/helpers/llvm-cron-build new file mode 100755 index 0000000..5ec4a4c --- /dev/null +++ b/helpers/llvm-cron-build @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +# +# This script builds LLVM overnight in debug mode, so that daily investigations +# of buildbot breakage can be done quickly without requiring a full build. +# +# The script is meant to be set on a cronjab for early morning build. It'll +# default to debug build, as this is the most useful build for investigations. +# +# Syntax: env llvm-cron-build +# +# If the environment's name is "arm", it'll add -marm flags, if the name is +# "thumb", it'll add -mthumb. Otherwise, it'll be a simple call to llvm-build. +# Both ARM and Thumb builds will have "-mcpu=cortex-a15" added to match bots. +# +# Since these environments are just for debugging, we'll also force Clang+RT +# projects, instead of leaving it free to choose. +# +# The environment variables tracked are CC/CXX and CFLAGS/CXXFLAGS. +# +# To install in the crontab every midnight, use: +# 0 0 * * * bash -i /llvm-cron-build + +# Pre-run checks, make sure we only run when we can +ROOT=$(dirname "$0") +BIN=$(basename "$0") +log="$HOME/$1.llvm-cron.log" +err="$HOME/$1.llvm-cron.err" + +if [ "$1" = "" ]; then + echo "Syntax: $BIN " > "$err" + exit 1 +fi + +# Make sure we're not already running +if [ "$(ps awwux | grep -v grep | grep "$BIN")" != "" ]; then + echo "Already running, won't flog" > "$err" + exit 1 +fi + +# Make sure machine is idle for long enough (load avg in cents) +loadavg=$(awk '{print $1}' /proc/loadavg | sed -e 's/0*\.0*//') +if [[ $loadavg -gt 100 ]]; then + echo "Machine too busy or still recuperating" > "$err" + exit 1 +fi + +# Crontab-specific, make sure the helpers directory is in the path +if [ $(echo "$PATH" | grep "$ROOT") == "" ]; then + PATH="$PATH":"$ROOT" +fi + +# Start the actual script +. llvm-common + +# Update compiler flags +case $1 in + arm) + CFLAGS="$CFLAGS -mcpu=cortex-a15 -marm" + CXXFLAGS="$CXXFLAGS -mcpu=cortex-a15 -marm" + ;; + thumb) + CFLAGS="$CFLAGS -mcpu=cortex-a15 -mthumb" + CXXFLAGS="$CXXFLAGS -mcpu=cortex-a15 -mthumb" + ;; + *) + ;; +esac + +echo "Start date: $(date)" > "$log" + +PS1=" " # hack to trick llvm-env +# Checkout the environment (create if doesn't exist) in debug mode +safe_run . llvm-env "$1" -d >> "$log" 2>&1 +# Update the projects to Clang+RT +safe_run llvm-projs rt >> "$log" 2>&1 +# Pull recent changes +safe_run llvm-sync >> "$log" 2>&1 +# Call llvm-build (no tests wanted) +env CC="$CC" CXX="$CXX" CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" llvm-build >> "$log" 2>&1 + +echo "Finish date: $(date)" > "$log" -- cgit v1.2.3