Skip to content

[BuildBot] Add support for multiple CMake options #1434

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

Merged
merged 2 commits into from
Mar 31, 2020
Merged
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
41 changes: 25 additions & 16 deletions buildbot/configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,23 @@
import platform

# TODO:
# 1. Add support for relative paths (e.g. relative path to source directory)
# 1. Make all required options optional
# 2. Create obj_dir from the script if it doesn't exist

def do_configure(args):
ret = False

llvm_dir = os.path.join(args.src_dir, "llvm")
sycl_dir = os.path.join(args.src_dir, "sycl")
spirv_dir = os.path.join(args.src_dir, "llvm-spirv")
xpti_dir = os.path.join(args.src_dir, "xpti")
libdevice_dir = os.path.join(args.src_dir, "libdevice")
ocl_header_dir = os.path.join(args.obj_dir, "OpenCL-Headers")
icd_loader_lib = os.path.join(args.obj_dir, "OpenCL-ICD-Loader", "build")
# Get absolute paths
abs_src_dir = os.path.abspath(args.src_dir)
abs_obj_dir = os.path.abspath(args.obj_dir)

llvm_dir = os.path.join(abs_src_dir, "llvm")
sycl_dir = os.path.join(abs_src_dir, "sycl")
spirv_dir = os.path.join(abs_src_dir, "llvm-spirv")
xpti_dir = os.path.join(abs_src_dir, "xpti")
libdevice_dir = os.path.join(abs_src_dir, "libdevice")
ocl_header_dir = os.path.join(abs_obj_dir, "OpenCL-Headers")
icd_loader_lib = os.path.join(abs_obj_dir, "OpenCL-ICD-Loader", "build")
llvm_targets_to_build = 'X86'
llvm_enable_projects = 'clang;llvm-spirv;sycl;opencl-aot;xpti;libdevice'
libclc_targets_to_build = ''
Expand Down Expand Up @@ -48,7 +52,7 @@ def do_configure(args):
if args.shared_libs:
llvm_build_shared_libs = 'ON'

install_dir = os.path.join(args.obj_dir, "install")
install_dir = os.path.join(abs_obj_dir, "install")

cmake_cmd = [
"cmake",
Expand All @@ -71,25 +75,30 @@ def do_configure(args):
"-DLLVM_ENABLE_DOXYGEN={}".format(llvm_enable_doxygen),
"-DLLVM_ENABLE_SPHINX={}".format(llvm_enable_sphinx),
"-DBUILD_SHARED_LIBS={}".format(llvm_build_shared_libs),
"-DSYCL_ENABLE_XPTI_TRACING=ON", # Explicitly turn on XPTI tracing
"{}".format(args.cmake_opts),
llvm_dir
"-DSYCL_ENABLE_XPTI_TRACING=ON" # Explicitly turn on XPTI tracing
]

if not args.no_ocl:
cmake_cmd.extend([
"-DOpenCL_INCLUDE_DIR={}".format(ocl_header_dir),
"-DOpenCL_LIBRARY={}".format(icd_loader_lib)])

# Add additional CMake options if provided
if args.cmake_opt:
cmake_cmd += args.cmake_opt

# Add path to root CMakeLists.txt
cmake_cmd.append(llvm_dir)

print(cmake_cmd)

try:
subprocess.check_call(cmake_cmd, cwd=args.obj_dir)
subprocess.check_call(cmake_cmd, cwd=abs_obj_dir)
except subprocess.CalledProcessError:
cmake_cache = os.path.join(args.obj_dir, "CMakeCache.txt")
cmake_cache = os.path.join(abs_obj_dir, "CMakeCache.txt")
if os.path.isfile(cmake_cache):
os.remove(cmake_cache)
subprocess.check_call(cmake_cmd, cwd=args.obj_dir)
subprocess.check_call(cmake_cmd, cwd=abs_obj_dir)

ret = True
return ret
Expand All @@ -113,7 +122,7 @@ def main():
parser.add_argument("--docs", action='store_true', help="build Doxygen documentation")
parser.add_argument("--no-ocl", action='store_true', help="download OpenCL deps via CMake")
parser.add_argument("--shared-libs", action='store_true', help="Build shared libraries")
parser.add_argument("--cmake-opts", metavar="CMAKE_OPTS", help="Additional CMake options not configured via script parameters")
parser.add_argument("--cmake-opt", action='append', help="Additional CMake option not configured via script parameters")

args = parser.parse_args()

Expand Down