diff --git a/zorg/buildbot/builders/annotated/ve-linux-steps.make b/zorg/buildbot/builders/annotated/ve-linux-steps.make --- a/zorg/buildbot/builders/annotated/ve-linux-steps.make +++ b/zorg/buildbot/builders/annotated/ve-linux-steps.make @@ -7,16 +7,13 @@ @echo "prepare" @echo "build-llvm" @echo "check-llvm" + @echo "install-llvm" @echo "build-crt-ve" - @echo "install-crt-ve" @echo "check-crt-ve" - @echo "build-libunwind-ve" - @echo "install-libunwind-ve" -# @echo "build-libcxx-ve" -# @echo "install-libcxx-ve" -# @echo "build-libcxxabi-ve" -# @echo "install-libcxxabi-ve" - + @echo "install-crt-ve" + @echo "build-runtimes-ve" + @echo "install-runtimes-ve" +# @echo "check-runtimes-ve" ##### Tools ##### CMAKE?=cmake @@ -30,25 +27,18 @@ MONOREPO=${BUILDROOT}/../llvm-project # Build foders -LLVM_BUILD="${BUILDROOT}/build_llvm" -CRT_BUILD_VE="${BUILDROOT}/build_crt_ve" -LIBUNWIND_BUILD_VE="${BUILDROOT}/build_libunwind_ve" -LIBCXXABI_BUILD_VE="${BUILDROOT}/build_libcxxabi_ve" -LIBCXX_BUILD_VE="${BUILDROOT}/build_libcxx_ve" +LLVM_BUILD=${BUILDROOT}/build_llvm +CRT_BUILD_VE=${BUILDROOT}/build_crt_ve +RUNTIMES_BUILD_VE=${BUILDROOT}/build_runtimes_ve # 'Install' into the LLVM build tree. -INTREE_PREFIX="${LLVM_BUILD}" -LLVM_PREFIX="${BUILDROOT}/install" +LLVM_PREFIX=${BUILDROOT}/install # Install prefix structure -BUILT_CLANG="${INTREE_PREFIX}/bin/clang" -BUILT_CLANGXX="${INTREE_PREFIX}/bin/clang++" -VE_TARGET="ve-unknown-linux-gnu" -LINUX_VE_LIBSUFFIX=/linux/ve - -# Resource dir -RES_VERSION=$(shell grep 'set.*LLVM_VERSION_MAJOR *' ${MONOREPO}/llvm/CMakeLists.txt | sed -e 's/.*LLVM_VERSION_MAJOR //' -e 's/[^0-9][^0-9]*//') -CLANG_RESDIR="${INTREE_PREFIX}/lib/clang/${RES_VERSION}" +BUILT_CLANG=${LLVM_PREFIX}/bin/clang +BUILT_CLANGXX=${LLVM_PREFIX}/bin/clang++ +X86_TARGET=x86_64-unknown-linux-gnu +VE_TARGET=ve-unknown-linux-gnu ### LLVM LLVM_BUILD_TYPE=RelWithDebInfo @@ -58,186 +48,147 @@ CRT_OPTFLAGS=-O2 CRT_TEST_OPTFLAGS=-O2 -## libunwind -LIBUNWIND_BUILD_TYPE=Release -LIBUNWIND_OPTFLAGS=-O2 - -## libcxxabi -LIBCXXABI_BUILD_TYPE=Release -LIBCXXABI_OPTFLAGS=-O2 - -## libcxxabi -LIBCXX_BUILD_TYPE=Release -LIBCXX_OPTFLAGS=-O2 - - - +## Runtimes +RUNTIMES_BUILD_TYPE=Release +RUNTIMES_OPTFLAGS=-O2 ##### Build Steps ##### +# Standalone build has been prohibited. However, runtime build is not +# possible for VE because crt-ve is needed to be compiled by just compiled +# llvm. Such bootstrap build CMakefile is not merged yet. Check +# https://reviews.llvm.org/D89492 for details. +# +# As a result, we compile llvm for ve using following three steps. +# 1. Build llvm for X86 and VE with only X86 runtimes. +# 1.1 check-llvm +# 2. Build llvm for X86 and VE with x86 and VE compiler-rt runtimes. +# 2.1 check-compiler-rt for VE +# 3. Build x86 and VE all possible runtimes using 2. + ### Vanilla LLVM stage ### build-llvm: - touch ${TOOL_CONFIG_CACHE} - mkdir -p ${LLVM_BUILD} - cd ${LLVM_BUILD} && ${CMAKE} ${MONOREPO}/llvm -G Ninja \ - -C ${TOOL_CONFIG_CACHE} \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + touch "${TOOL_CONFIG_CACHE}" + mkdir -p "${LLVM_BUILD}" + cd "${LLVM_BUILD}" && ${CMAKE} "${MONOREPO}/llvm" -G Ninja \ + -C "${TOOL_CONFIG_CACHE}" \ + -DCMAKE_BUILD_TYPE="${LLVM_BUILD_TYPE}" \ + -DCMAKE_INSTALL_PREFIX="${LLVM_PREFIX}" \ + -DCLANG_LINK_CLANG_DYLIB=Off \ -DLLVM_BUILD_LLVM_DYLIB=Off \ -DLLVM_LINK_LLVM_DYLIB=Off \ - -DCLANG_LINK_CLANG_DYLIB=Off \ -DLLVM_TARGETS_TO_BUILD="X86;VE" \ -DLLVM_ENABLE_PROJECTS="clang" \ - -DCMAKE_INSTALL_PREFIX="${LLVM_PREFIX}" \ - -DLLVM_INSTALL_UTILS=On - cd ${LLVM_BUILD} && ${NINJA} - -# install-llvm: -# # build-llvm -# cd ${LLVM_BUILD} && ${NINJA} install + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=On + cd "${LLVM_BUILD}" && ${NINJA} check-llvm: - # build-llvm - cd ${LLVM_BUILD} && ${NINJA} check-all + cd "${LLVM_BUILD}" && ${NINJA} check-all +install-llvm: + cd "${LLVM_BUILD}" && ${NINJA} install -### Compiler-RT standalone ### +### Compiler-RT ### build-crt-ve: - mkdir -p ${CRT_BUILD_VE} - cd ${CRT_BUILD_VE} && ${CMAKE} ${MONOREPO}/runtimes -G Ninja \ - -DLLVM_ENABLE_RUNTIMES="compiler-rt" \ - -DCOMPILER_RT_BUILD_BUILTINS=ON \ - -DCOMPILER_RT_BUILD_SANITIZERS=OFF \ - -DCOMPILER_RT_BUILD_XRAY=OFF \ - -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \ - -DCOMPILER_RT_BUILD_PROFILE=ON \ - -DBUILD_SHARED_LIBS=ON \ - -DCMAKE_C_COMPILER=${BUILT_CLANG} \ - -DCMAKE_C_COMPILER_TARGET="${VE_TARGET}" \ - -DCMAKE_CXX_COMPILER=${BUILT_CLANGXX} \ - -DCMAKE_CXX_COMPILER_TARGET="${VE_TARGET}" \ - -DCMAKE_ASM_COMPILER_TARGET="${VE_TARGET}" \ - -DCMAKE_AR=${INTREE_PREFIX}/bin/llvm-ar \ - -DCMAKE_RANLIB=${INTREE_PREFIX}/bin/llvm-ranlib \ - -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \ - -DLLVM_CMAKE_DIR=${INTREE_PREFIX} \ - -DCMAKE_BUILD_TYPE="${CRT_BUILD_TYPE}" \ - -DCMAKE_INSTALL_PREFIX="${CLANG_RESDIR}" \ - -DCMAKE_CXX_FLAGS="-nostdlib" \ - -DCMAKE_CXX_FLAGS_RELEASE="${CRT_OPTFLAGS}" \ - -DCMAKE_C_FLAGS="-nostdlib" \ - -DCMAKE_C_FLAGS_RELEASE="${CRT_OPTFLAGS}" \ - -DCOMPILER_RT_INCLUDE_TESTS=ON \ - -DCOMPILER_RT_TEST_COMPILER=${BUILT_CLANG} \ - -DCOMPILER_RT_TEST_COMPILER_CFLAGS="-target ${VE_TARGET} ${CRT_TEST_OPTFLAGS}" - cd ${CRT_BUILD_VE} && ${NINJA} - -check-crt-ve: build-crt-ve - cd ${CRT_BUILD_VE} && env PATH=${INTREE_PREFIX}/bin:${PATH} ${NINJA} check-compiler-rt - -install-crt-ve: build-crt-ve - cd ${CRT_BUILD_VE} && ${NINJA} install - - -### libunwind standalone ### -build-libunwind-ve: - mkdir -p ${LIBUNWIND_BUILD_VE} - cd ${LIBUNWIND_BUILD_VE} && ${CMAKE} ${MONOREPO}/runtimes -G Ninja \ - -DLLVM_ENABLE_RUNTIMES="libunwind" \ - -DCMAKE_C_COMPILER=${BUILT_CLANG} \ - -DCMAKE_CXX_COMPILER=${BUILT_CLANGXX} \ - -DCMAKE_AR=${INTREE_PREFIX}/bin/llvm-ar \ - -DCMAKE_RANLIB=${INTREE_PREFIX}/bin/llvm-ranlib \ - -DCMAKE_ASM_COMPILER_TARGET="${VE_TARGET}" \ - -DCMAKE_C_COMPILER_TARGET="${VE_TARGET}" \ - -DCMAKE_CXX_COMPILER_TARGET="${VE_TARGET}" \ - -DCMAKE_BUILD_TYPE="${LIBUNWIND_BUILD_TYPE}" \ - -DCMAKE_INSTALL_PREFIX="${CLANG_RESDIR}" \ - -DLIBUNWIND_LIBDIR_SUFFIX="${LINUX_VE_LIBSUFFIX}" \ - -DCMAKE_CXX_FLAGS="-nostdlib" \ - -DCMAKE_CXX_FLAGS_RELEASE="${LIBUNWIND_OPTFLAGS}" \ - -DCMAKE_C_FLAGS="-nostdlib" \ - -DCMAKE_C_FLAGS_RELEASE="${LIBUNWIND_OPTFLAGS}" \ - -DLIBUNWIND_LIBCXX_PATH=${MONOREPO}/libcxx \ - -DLLVM_PATH=${MONOREPO}/llvm - cd ${LIBUNWIND_BUILD_VE} && ${NINJA} - -install-libunwind-ve: - cd ${LIBUNWIND_BUILD_VE} && ${NINJA} install - - -### libcxx standalone ### - -build-libcxx-ve: - mkdir -p ${LIBCXX_BUILD_VE} - cd ${LIBCXX_BUILD_VE} && ${CMAKE} ${MONOREPO}/runtimes -G Ninja \ - -DLLVM_ENABLE_RUNTIMES="libcxx" \ - -DLIBCXX_USE_COMPILER_RT=True \ - -DCMAKE_C_COMPILER=${BUILT_CLANG} \ - -DCMAKE_CXX_COMPILER=${BUILT_CLANGXX} \ - -DCMAKE_AR=${INTREE_PREFIX}/bin/llvm-ar \ - -DCMAKE_RANLIB=${INTREE_PREFIX}/bin/llvm-ranlib \ - -DCMAKE_C_COMPILER_TARGET="${VE_TARGET}" \ - -DCMAKE_CXX_COMPILER_TARGET="${VE_TARGET}" \ - -DCMAKE_BUILD_TYPE="${LIBCXX_BUILD_TYPE}" \ - -DCMAKE_INSTALL_PREFIX="${CLANG_RESDIR}" \ - -DLIBCXX_LIBDIR_SUFFIX="${LINUX_VE_LIBSUFFIX}" \ - -DLIBCXXABI_USE_LLVM_UNWINDER=True \ - -DLIBCXX_CXX_ABI=libcxxabi \ - -DLIBCXX_CXX_ABI_INCLUDE_PATHS=${MONOREPO}/libcxxabi/include \ - -DCMAKE_C_FLAGS_RELEASE="${LIBCXX_OPTFLAGS}" \ - -DCMAKE_CXX_FLAGS="-nostdlib++" \ - -DCMAKE_CXX_FLAGS_RELEASE="${LIBCXX_OPTFLAGS}" \ - -DLIBCXX_USE_COMPILER_RT=True - cd ${LIBCXX_BUILD_VE} && ${NINJA} - -check-libcxx-ve: - cd ${LIBCXX_BUILD_VE} && ${NINJA} check-cxx - -install-libcxx-ve: - cd ${LIBCXX_BUILD_VE} && ${NINJA} install - - - - -### libcxxabi standalone ### - -build-libcxxabi-ve: - mkdir -p ${LIBCXXABI_BUILD_VE} - cd ${LIBCXXABI_BUILD_VE} && ${CMAKE} ${MONOREPO}/runtimes -G Ninja \ - -DLLVM_ENABLE_RUNTIMES="libcxxabi" \ - -DCMAKE_C_COMPILER=${BUILT_CLANG} \ - -DCMAKE_CXX_COMPILER=${BUILT_CLANGXX} \ - -DCMAKE_AR=${INTREE_PREFIX}/bin/llvm-ar \ - -DCMAKE_RANLIB=${INTREE_PREFIX}/bin/llvm-ranlib \ - -DCMAKE_C_COMPILER_TARGET="${VE_TARGET}" \ - -DCMAKE_CXX_COMPILER_TARGET="${VE_TARGET}" \ - -DCMAKE_BUILD_TYPE="${LIBCXXABI_BUILD_TYPE}" \ - -DCMAKE_INSTALL_PREFIX="${CLANG_RESDIR}" \ - -DLIBCXXABI_LIBDIR_SUFFIX="${LINUX_VE_LIBSUFFIX}" \ - -DLIBCXXABI_USE_LLVM_UNWINDER=YES \ - -DCMAKE_CXX_FLAGS="-nostdlib++" \ - -DCMAKE_CXX_FLAGS_RELEASE="${LIBCXX_OPTFLAGS}" \ - -DCMAKE_C_FLAGS_RELEASE="${LIBCXX_OPTFLAGS}" \ - -DLLVM_PATH=${MONOREPO}/llvm \ - -DLLVM_MAIN_SRC_DIR=${MONOREPO}/llvm \ - -DLIBCXXABI_USE_COMPILER_RT=True \ - -DLIBCXXABI_HAS_NOSTDINCXX_FLAG=True \ - -DLIBCXXABI_LIBCXX_INCLUDES="${CLANG_RESDIR}/include/c++/v1/" - cd ${LIBCXXABI_BUILD_VE} && ${NINJA} - -check-libcxxabi-ve: - cd ${LIBCXXABI_BUILD_VE} && ${NINJA} check-cxxabi - -install-libcxxabi-ve: - cd ${LIBCXXABI_BUILD_VE} && ${NINJA} install - + mkdir -p "${CRT_BUILD_VE}" + cd "${CRT_BUILD_VE}" && ${CMAKE} "${MONOREPO}/llvm" -G Ninja \ + -C "${TOOL_CONFIG_CACHE}" \ + -DCMAKE_BUILD_TYPE="${CRT_BUILD_TYPE}" \ + -DCMAKE_INSTALL_PREFIX="${LLVM_PREFIX}" \ + -DCMAKE_C_COMPILER="${BUILT_CLANG}" \ + -DCMAKE_CXX_COMPILER="${BUILT_CLANGXX}" \ + -DCMAKE_CXX_FLAGS_RELEASE="${CRT_OPTFLAGS}" \ + -DCMAKE_C_FLAGS_RELEASE="${CRT_OPTFLAGS}" \ + -DCLANG_LINK_CLANG_DYLIB=Off \ + -DLLVM_BUILD_LLVM_DYLIB=Off \ + -DLLVM_LINK_LLVM_DYLIB=Off \ + -DLLVM_TARGETS_TO_BUILD="X86;VE" \ + -DLLVM_ENABLE_PROJECTS="clang" \ + -DLLVM_ENABLE_RUNTIMES="compiler-rt" \ + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=On \ + -DLLVM_INSTALL_UTILS=On \ + -DLLVM_RUNTIME_TARGETS="${X86_TARGET};${VE_TARGET}" \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_BUILTINS=On \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_CRT=On \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_SANITIZERS=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_XRAY=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_LIBFUZZER=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_PROFILE=On \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_MEMPROF=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_ORC=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_GWP_ASAN=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_USE_BUILTINS_LIBRARY=On \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_TEST_COMPILER_CFLAGS="-target ${VE_TARGET} ${CRT_TEST_OPTFLAGS}" + cd "${CRT_BUILD_VE}" && ${NINJA} + +check-crt-ve: + cd "${CRT_BUILD_VE}" && ${NINJA} check-compiler-rt-ve-unknown-linux-gnu + +install-crt-ve: + cd "${CRT_BUILD_VE}" && ${NINJA} install + +### Runtimes ### + +# It is not possible to compile clang nor compiler-rt with other runtimes +# at once for VE. Because the crtbegin bootstrap mechanism is merged yet. +# See https://reviews.llvm.org/D89492 for details. Without this patch, +# running regression tests for runtimes is also not possible for VE. +# +# Once this patch is merged, it will be possible to compile runtimes +# with following defines using single build step. +# -DLLVM_ENABLE_PROJECTS="clang" \ +# -DLLVM_ENABLE_RUNTIMES="compiler-rt;libunwind" \ +# -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BOOTSTRAP=On \ + +build-runtimes-ve: + mkdir -p "${RUNTIMES_BUILD_VE}" + cd "${RUNTIMES_BUILD_VE}" && ${CMAKE} "${MONOREPO}/llvm" -G Ninja \ + -C "${TOOL_CONFIG_CACHE}" \ + -DCMAKE_BUILD_TYPE="${RUNTIMES_BUILD_TYPE}" \ + -DCMAKE_INSTALL_PREFIX="${LLVM_PREFIX}" \ + -DCMAKE_C_COMPILER="${BUILT_CLANG}" \ + -DCMAKE_CXX_COMPILER="${BUILT_CLANGXX}" \ + -DCMAKE_CXX_FLAGS_RELEASE="${RUNTIMES_OPTFLAGS}" \ + -DCMAKE_C_FLAGS_RELEASE="${RUNTIMES_OPTFLAGS}" \ + -DCLANG_LINK_CLANG_DYLIB=Off \ + -DLLVM_BUILD_LLVM_DYLIB=Off \ + -DLLVM_LINK_LLVM_DYLIB=Off \ + -DLLVM_TARGETS_TO_BUILD="X86;VE" \ + -DLLVM_ENABLE_PROJECTS="" \ + -DLLVM_ENABLE_RUNTIMES="libunwind" \ + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=On \ + -DLLVM_RUNTIME_TARGETS="${X86_TARGET};${VE_TARGET}" \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_BUILTINS=On \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_CRT=On \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_SANITIZERS=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_XRAY=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_LIBFUZZER=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_PROFILE=On \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_MEMPROF=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_ORC=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_BUILD_GWP_ASAN=Off \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_USE_BUILTINS_LIBRARY=On \ + -DRUNTIMES_${VE_TARGET}_LIBCXXABI_USE_LLVM_UNWINDER=On \ + -DRUNTIMES_${VE_TARGET}_LIBCXXABI_USE_COMPILER_RT=On \ + -DRUNTIMES_${VE_TARGET}_LIBCXX_USE_COMPILER_RT=On \ + -DRUNTIMES_${VE_TARGET}_CMAKE_C_COMPILER="${BUILT_CLANG}" \ + -DRUNTIMES_${VE_TARGET}_COMPILER_RT_TEST_COMPILER_CFLAGS="-target ${VE_TARGET} ${RUNTIMES_TEST_OPTFLAGS}" \ + -DRUNTIMES_${VE_TARGET}_LIBCXXABI_TEST_COMPILER_CFLAGS="-target ${VE_TARGET} ${RUNTIMES_TEST_OPTFLAGS}" \ + -DRUNTIMES_${VE_TARGET}_LIBCXX_TEST_COMPILER_CFLAGS="-target ${VE_TARGET} ${RUNTIMES_TEST_OPTFLAGS}" \ + -DRUNTIMES_${VE_TARGET}_LIBUNWIND_TEST_COMPILER_CFLAGS="-target ${VE_TARGET} ${RUNTIMES_TEST_OPTFLAGS}" + cd "${RUNTIMES_BUILD_VE}" && ${NINJA} + +check-runtimes-ve: + cd "${RUNTIMES_BUILD_VE}" && ${NINJA} check-runtimes-ve-unknown-linux-gnu + +install-runtimes-ve: + cd "${RUNTIMES_BUILD_VE}" && ${NINJA} install + # Clearout the temporary install prefix. prepare: # Build everything from scratch - TODO: incrementalize later. - rm -rf ${LLVM_PREFIX} - rm -rf ${LLVM_BUILD} - rm -rf ${CRT_BUILD_VE} - rm -rf ${LIBUNWIND_BUILD_VE} - rm -rf ${LIBCXXABI_BUILD_VE} - rm -rf ${LIBCXX_BUILD_VE} + rm -rf "${LLVM_PREFIX}" + rm -rf "${LLVM_BUILD}" + rm -rf "${CRT_BUILD_VE}" + rm -rf "${RUNTIMES_BUILD_VE}"