diff --git a/buildbot/osuosl/master/config/builders.py b/buildbot/osuosl/master/config/builders.py --- a/buildbot/osuosl/master/config/builders.py +++ b/buildbot/osuosl/master/config/builders.py @@ -2428,20 +2428,9 @@ 'collapseRequests': False, 'workernames':["standalone-build-x86_64"], 'builddir':"standalone-build-x86_64", - 'factory' : UnifiedTreeBuilder.getCmakeWithNinjaBuildFactory( - llvm_srcdir="llvm.src", - obj_dir="llvm.obj", - clean=True, - depends_on_projects=['llvm','clang'], - extra_configure_args=[ - "-DCOMPILER_RT_BUILD_BUILTINS:BOOL=OFF", - "-DCOMPILER_RT_BUILD_ORC:BOOL=OFF", - "-DCOMPILER_RT_BUILD_SANITIZERS:BOOL=OFF", - "-DCOMPILER_RT_BUILD_XRAY:BOOL=OFF", - "-DCOMPILER_RT_INCLUDE_TESTS:BOOL=OFF", - "-DCMAKE_C_FLAGS=-Wdocumentation -Wno-documentation-deprecated-sync", - "-DCMAKE_CXX_FLAGS=-std=c++11 -Wdocumentation -Wno-documentation-deprecated-sync", - ], - )}, + 'factory' : AnnotatedBuilder.getAnnotatedBuildFactory( + script="standalone-build.sh", + checkout_llvm_sources=False, + script_interpreter=None)}, ] diff --git a/zorg/buildbot/builders/annotated/standalone-build.patch b/zorg/buildbot/builders/annotated/standalone-build.patch new file mode 100644 --- /dev/null +++ b/zorg/buildbot/builders/annotated/standalone-build.patch @@ -0,0 +1,80 @@ +From 6ef3bbdc10086760ff02e9bc63427de9120aaa4f Mon Sep 17 00:00:00 2001 +From: Konrad Kleine +Date: Thu, 5 May 2022 11:44:15 +0000 +Subject: D120301 rebased on main to support standalone builds + +--- + clang-tools-extra/test/CMakeLists.txt | 10 +++++++++- + clang-tools-extra/test/clang-tidy/CTTestTidyModule.cpp | 2 +- + clang-tools-extra/test/lit.cfg.py | 3 +++ + clang-tools-extra/test/lit.site.cfg.py.in | 1 + + 4 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/clang-tools-extra/test/CMakeLists.txt b/clang-tools-extra/test/CMakeLists.txt +index 2cdf186081ef..b03d99c8abb3 100644 +--- a/clang-tools-extra/test/CMakeLists.txt ++++ b/clang-tools-extra/test/CMakeLists.txt +@@ -7,10 +7,15 @@ + set(CLANG_TOOLS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..") + set(CLANG_TOOLS_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/..") + ++if (TARGET LLVMHello) ++ set (LLVM_HAS_LLVM_HELLO 1) ++endif() ++ + llvm_canonicalize_cmake_booleans( + CLANG_TIDY_ENABLE_STATIC_ANALYZER + CLANG_PLUGIN_SUPPORT + LLVM_INSTALL_TOOLCHAIN_ONLY ++ LLVM_HAS_LLVM_HELLO + ) + + configure_lit_site_cfg( +@@ -91,7 +96,10 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + endif() + + if(TARGET CTTestTidyModule) +- list(APPEND CLANG_TOOLS_TEST_DEPS CTTestTidyModule LLVMHello) ++ list(APPEND CLANG_TOOLS_TEST_DEPS CTTestTidyModule) ++ if (TARGET LLVMHello) ++ list(APPEND CLANG_TOOLS_TEST_DEPS CTTestTidyModule) ++ endif() + target_include_directories(CTTestTidyModule PUBLIC BEFORE "${CLANG_TOOLS_SOURCE_DIR}") + if(CLANG_PLUGIN_SUPPORT AND (WIN32 OR CYGWIN)) + set(LLVM_LINK_COMPONENTS +diff --git a/clang-tools-extra/test/clang-tidy/CTTestTidyModule.cpp b/clang-tools-extra/test/clang-tidy/CTTestTidyModule.cpp +index c66a94f458cf..b4e7a5d691e5 100644 +--- a/clang-tools-extra/test/clang-tidy/CTTestTidyModule.cpp ++++ b/clang-tools-extra/test/clang-tidy/CTTestTidyModule.cpp +@@ -1,4 +1,4 @@ +-// REQUIRES: plugins ++// REQUIRES: plugins, llvm-hello + // RUN: clang-tidy -checks='-*,mytest*' --list-checks -load %llvmshlibdir/CTTestTidyModule%pluginext -load %llvmshlibdir/LLVMHello%pluginext | FileCheck --check-prefix=CHECK-LIST %s + // CHECK-LIST: Enabled checks: + // CHECK-LIST-NEXT: mytest1 +diff --git a/clang-tools-extra/test/lit.cfg.py b/clang-tools-extra/test/lit.cfg.py +index f8fdfbd0a920..947220134555 100644 +--- a/clang-tools-extra/test/lit.cfg.py ++++ b/clang-tools-extra/test/lit.cfg.py +@@ -55,3 +55,6 @@ config.substitutions.append( + # Plugins (loadable modules) + if config.has_plugins and config.llvm_plugin_ext: + config.available_features.add('plugins') ++ ++if config.has_llvm_hello: ++ config.available_features.add("llvm-hello") +diff --git a/clang-tools-extra/test/lit.site.cfg.py.in b/clang-tools-extra/test/lit.site.cfg.py.in +index 4eb830a1baf1..4f5228226292 100644 +--- a/clang-tools-extra/test/lit.site.cfg.py.in ++++ b/clang-tools-extra/test/lit.site.cfg.py.in +@@ -16,6 +16,7 @@ config.has_plugins = @CLANG_PLUGIN_SUPPORT@ & ~@LLVM_INSTALL_TOOLCHAIN_ONLY@ + config.llvm_tools_dir = lit_config.substitute("@LLVM_TOOLS_DIR@") + config.llvm_libs_dir = lit_config.substitute("@LLVM_LIBS_DIR@") + config.clang_tools_dir = lit_config.substitute("@CURRENT_TOOLS_DIR@") ++config.has_llvm_hello = @LLVM_HAS_LLVM_HELLO@ + + import lit.llvm + lit.llvm.initialize(lit_config, config) +-- +2.31.1 + diff --git a/zorg/buildbot/builders/annotated/standalone-build.sh b/zorg/buildbot/builders/annotated/standalone-build.sh new file mode 100755 --- /dev/null +++ b/zorg/buildbot/builders/annotated/standalone-build.sh @@ -0,0 +1,103 @@ +#!/bin/bash + +# This script builds LLVM and Clang in standalone mode that means it first +# builds LLVM and installs it into a specific directory. That directory is then +# used when building Clang which depends on it. + +# Enable Error tracing +set -o errtrace + +# Print trace for all commands ran before execution +set -x + +# Include the Buildbot helper functions +HERE="$(realpath $(dirname $0))" +. ${HERE}/buildbot-helper.sh + +# Ensure all commands pass, and not dereferencing unset variables. +set -eu +halt_on_failure + +BUILDBOT_ROOT=${BUILDBOT_ROOT:-${HERE}} +REVISION=${BUILDBOT_REVISION:-origin/main} +LLVM_ROOT="${BUILDBOT_ROOT}/llvm-project" + +LLVM_INSTALL_DIR=${BUILDBOT_ROOT}/llvm-install/ +LLVM_BUILD_DIR=${BUILDBOT_ROOT}/llvm-build/ +CLANG_INSTALL_DIR=${BUILDBOT_ROOT}/clang-install/ +CLANG_BUILD_DIR=${BUILDBOT_ROOT}/clang-build/ +BUILD_TYPE=Release + +# Set-up llvm-project +if [ ! -d "${LLVM_ROOT}" ]; then + build_step "Cloning llvm-project repo" + git clone --progress https://github.com/llvm/llvm-project.git ${LLVM_ROOT} +fi + +build_step "Updating llvm-project repo" +git -C "${LLVM_ROOT}" fetch origin +git -C "${LLVM_ROOT}" reset --hard ${REVISION} + +# Clang standalone builds are currently not posible unless this patch is applied +build_step "Patch clang and clang-extra-tools for standalone builds (https://reviews.llvm.org/D120301)" +git -C ${LLVM_ROOT} reset --hard origin/main +git -C ${LLVM_ROOT} am ${HERE}/standalone-build.patch + +build_step "Pre-build cleanup" +rm -rf ${LLVM_BUILD_DIR} +rm -rf ${LLVM_INSTALL_DIR} +rm -rf ${CLANG_BUILD_DIR} +rm -rf ${CLANG_INSTALL_DIR} + +build_step "Configuring llvm" + +cmake \ + -S ${LLVM_ROOT}/llvm \ + -B ${LLVM_BUILD_DIR} \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DLLVM_BUILD_LLVM_DYLIB=ON \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_INCLUDE_BENCHMARKS=OFF \ + -DLLVM_INSTALL_UTILS=ON \ + -DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL_DIR} + +build_step "Building llvm" +cmake --build ${LLVM_BUILD_DIR} + +build_step "Installing llvm" +rm -rf "${LLVM_INSTALL_DIR}" +cmake --install ${LLVM_BUILD_DIR} + +# This is meant to extinguish any dependency on files being taken +# from the llvm build dir when building clang. +build_step "Removing llvm build directory" +rm -rf "${LLVM_BUILD_DIR}" + +build_step "Configuring clang" + +# TODO: Is this really needed? +export LLVM_DIR=${LLVM_INSTALL_DIR}/lib64/cmake/llvm + +# help find llvm-config that we just build with build-llvm.sh +# PATH="${LLVM_INSTALL_DIR}/bin;$PATH" + +cmake \ + -S ${LLVM_ROOT}/clang \ + -B ${CLANG_BUILD_DIR} \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DCLANG_LINK_CLANG_DYLIB=ON \ + -DCLANG_INCLUDE_TESTS=ON \ + -DLLVM_EXTERNAL_LIT=/usr/bin/lit \ + -DCMAKE_INSTALL_PREFIX=${CLANG_INSTALL_DIR} \ + -DLLVM_ROOT=${LLVM_INSTALL_DIR} + +build_step "Building clang" +LD_LIBRARY_PATH="${LLVM_INSTALL_DIR}/lib64" cmake --build ${CLANG_BUILD_DIR} + +build_step "Installing clang" +rm -rf ${CLANG_INSTALL_DIR} +cmake --install ${CLANG_BUILD_DIR} + +exit 0