Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Buildbot] Add scripts for build steps #47

Merged
merged 1 commit into from
Mar 22, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions buildbot/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Scripts for build steps on Buildbot

## Purpose

The purpose of the script is for developer to customize build command for the builder on Buildbot.

## How it works

The scripts will be run by Buildbot at corresponding build step, for example, the "compile" step will run "compile.sh". Developer can change the build command, then the builder (e.g. pull request builder) will use the changed command to do the build.

## Arguments for the scripts

Common

* -b BRANCH: the branch name to build
* -n BUILD\_NUMBER: the Buildbot build number (the build count of one builder, which will be in the url of one specific build)
* -r PR\_NUMBER: if it's a pull request build, this will be the pull request number

LIT Test (check.sh)

* -t TESTCASE: the LIT testing target, e.g. check-sycl

## Assumptions

The Buildbot worker directory structure is:

/path/to/WORKER_ROOT/BUILDER/
llvm.src --> source code
llvm.obj --> build directory

Initial working directory of the scripts:

* dependency.sh : llvm.obj
* configure.sh : llvm.obj
* compile.sh : llvm.obj
* clang-tidy.sh : llvm.src
* check.sh : llvm.obj
36 changes: 36 additions & 0 deletions buildbot/check.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash

BRANCH=
BUILD_NUMBER=
PR_NUMBER=
TESTCASE=

# $1 exit code
# $2 error message
exit_if_err()
{
if [ $1 -ne 0 ]; then
echo "Error: $2"
exit $1
fi
}

unset OPTIND
while getopts ":b:r:n:t:" option; do
case $option in
b) BRANCH=$OPTARG ;;
n) BUILD_NUMBER=$OPTARG ;;
r) PR_NUMBER=$OPTARG ;;
t) TESTCASE=$OPTARG ;;
esac
done && shift $(($OPTIND - 1))

# we're in llvm.obj dir
BUILD_DIR=${PWD}

if [ -z "${TESTCASE}" ]; then
echo "No target provided"
exit 1
fi

make ${TESTCASE} VERBOSE=1 LIT_ARGS="-v -j `nproc`"
50 changes: 50 additions & 0 deletions buildbot/clang-tidy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

BRANCH=
BUILD_NUMBER=
PR_NUMBER=

# $1 exit code
# $2 error message
exit_if_err()
{
if [ $1 -ne 0 ]; then
echo "Error: $2"
exit $1
fi
}

unset OPTIND
while getopts ":b:r:n:" option; do
case $option in
b) BRANCH=$OPTARG ;;
n) BUILD_NUMBER=$OPTARG ;;
r) PR_NUMBER=$OPTARG ;;
esac
done && shift $(($OPTIND - 1))

if [ -z "${PR_NUMBER}" ]; then
echo "No PR number provided"
exit 1
fi

# we're in llvm.src dir
SRC_DIR=${PWD}
BUILDER_DIR=$(cd ..; pwd)

# Get changed files
base_commit=`git merge-base origin/sycl refs/pull/${PR_NUMBER}/merge`
exit_if_err $? "fail to get base commit"

path_list_file=${BUILDER_DIR}/changed_files.txt
git --no-pager diff ${base_commit} refs/pull/${PR_NUMBER}/merge --name-only > ${path_list_file}
cat ${path_list_file}

# Run clang-tidy
while IFS='' read -r line ; do
file_name=$(basename ${line})
file_ext=${file_name##*.}
if [[ "${file_ext}" == "h" || "${file_ext}" == "hpp" || "${file_ext}" == "c" || "${file_ext}" == "cc" || "${file_ext}" == "cpp" ]]; then
${BUILDER_DIR}/llvm.obj/bin/clang-tidy ${line}
fi
done < "${path_list_file}"
29 changes: 29 additions & 0 deletions buildbot/compile.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/bash

BRANCH=
BUILD_NUMBER=
PR_NUMBER=

# $1 exit code
# $2 error message
exit_if_err()
{
if [ $1 -ne 0 ]; then
echo "Error: $2"
exit $1
fi
}

unset OPTIND
while getopts ":b:r:n:" option; do
case $option in
b) BRANCH=$OPTARG ;;
n) BUILD_NUMBER=$OPTARG ;;
r) PR_NUMBER=$OPTARG ;;
esac
done && shift $(($OPTIND - 1))

# we're in llvm.obj dir
BUILD_DIR=${PWD}

make -j`nproc`
32 changes: 32 additions & 0 deletions buildbot/configure.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/bin/bash

BRANCH=
BUILD_NUMBER=
PR_NUMBER=

# $1 exit code
# $2 error message
exit_if_err()
{
if [ $1 -ne 0 ]; then
echo "Error: $2"
exit $1
fi
}

unset OPTIND
while getopts ":b:r:n:" option; do
case $option in
b) BRANCH=$OPTARG ;;
n) BUILD_NUMBER=$OPTARG ;;
r) PR_NUMBER=$OPTARG ;;
esac
done && shift $(($OPTIND - 1))

# we're in llvm.obj dir
BUILD_DIR=${PWD}

cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS=clang -DLLVM_EXTERNAL_PROJECTS="sycl;llvm-spirv" \
-DLLVM_EXTERNAL_SYCL_SOURCE_DIR=../llvm.src/sycl -DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR=../llvm.src/llvm-spirv \
-DLLVM_TOOL_SYCL_BUILD=ON -DLLVM_TOOL_LLVM_SPIRV_BUILD=ON -DOpenCL_INCLUDE_DIR="OpenCL-Headers" \
-DOpenCL_LIBRARY="OpenCL-ICD-Loader/build/lib/libOpenCL.so" ../llvm.src/llvm
53 changes: 53 additions & 0 deletions buildbot/dependency.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/bin/bash

BRANCH=
BUILD_NUMBER=
PR_NUMBER=

# $1 exit code
# $2 error message
exit_if_err()
{
if [ $1 -ne 0 ]; then
echo "Error: $2"
exit $1
fi
}

unset OPTIND
while getopts ":b:r:n:" option; do
case $option in
b) BRANCH=$OPTARG ;;
n) BUILD_NUMBER=$OPTARG ;;
r) PR_NUMBER=$OPTARG ;;
esac
done && shift $(($OPTIND - 1))

# we're in llvm.obj dir
BUILD_DIR=${PWD}

## GET dependencies
if [ ! -d "OpenCL-Headers" ]; then
git clone https://github.com/KhronosGroup/OpenCL-Headers OpenCL-Headers
exit_if_err $? "failed to clone OpenCL-Headers"
else
cd OpenCL-Headers
git pull --ff --ff-only origin
exit_if_err $? "failed to update OpenCL-Headers"
fi

OPENCL_HEADERS=${BUILD_DIR}/OpenCL-Headers

cd ${BUILD_DIR}
if [ ! -d "OpenCL-ICD-Loader" ]; then
git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader OpenCL-ICD-Loader
exit_if_err $? "failed to clone OpenCL-ICD-Loader"
else
cd OpenCL-ICD-Loader
git pull --ff --ff-only origin
exit_if_err $? "failed to update OpenCL-ICD-Loader"
fi

cd ${BUILD_DIR}/OpenCL-ICD-Loader
make C_INCLUDE_PATH=${OPENCL_HEADERS}
exit_if_err $? "failed to build OpenCL-ICD-Loader"