diff --git a/docker/Dockerfile.ci_arm b/docker/Dockerfile.ci_arm index bd2b2d8fb145f..238a8c2c1b28b 100644 --- a/docker/Dockerfile.ci_arm +++ b/docker/Dockerfile.ci_arm @@ -50,8 +50,8 @@ COPY install/ubuntu_install_sccache.sh /install/ubuntu_install_sccache.sh RUN bash /install/ubuntu_install_sccache.sh ENV PATH /opt/sccache:$PATH -COPY install/ubuntu_install_llvm.sh /install/ubuntu_install_llvm.sh -RUN bash /install/ubuntu_install_llvm.sh +COPY install/ubuntu_install_llvm_from_source.sh /install/ubuntu_install_llvm_from_source.sh +RUN bash /install/ubuntu_install_llvm_from_source.sh 15.0 ENV TVM_VENV /venv/apache-tvm-py3.7 COPY python/bootstrap/lockfiles /install/python/bootstrap/lockfiles diff --git a/docker/install/ubuntu_install_llvm_from_source.sh b/docker/install/ubuntu_install_llvm_from_source.sh new file mode 100644 index 0000000000000..e03a2a426ab35 --- /dev/null +++ b/docker/install/ubuntu_install_llvm_from_source.sh @@ -0,0 +1,99 @@ +#!/bin/bash + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# This script builds LLVM and clang from the llvm-project tarball +# using CMake. It is tested with LLVM from version 15. + +set -e + +LLVM_VERSION_MAJOR=$1 + +detect_llvm_version() { + curl -sL "https://api.github.com/repos/llvm/llvm-project/releases?per_page=100" | \ + grep tag_name | \ + grep -o "llvmorg-${LLVM_VERSION_MAJOR}[^\"]*" | \ + grep -v rc | \ + sed -e "s/^llvmorg-//g" | \ + head -n 1 +} + +LLVM_VERSION=$(detect_llvm_version) +echo ${LLVM_VERSION} + +curl -sL \ + https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz \ + -o llvm-project-${LLVM_VERSION}.src.tar.xz +unxz llvm-project-${LLVM_VERSION}.src.tar.xz +tar xf llvm-project-${LLVM_VERSION}.src.tar +pushd llvm-project-${LLVM_VERSION}.src + +pushd llvm +mkdir build +pushd build +cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_MODULE_PATH="/llvm-project-${LLVM_VERSION}.src/cmake/Modules" \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86" \ + -DLLVM_INCLUDE_DOCS=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_INCLUDE_TESTS=OFF \ + -DLLVM_INCLUDE_UTILS=OFF \ + -DLLVM_ENABLE_TERMINFO=OFF \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_ENABLE_OCAMLDOC=OFF \ + -DLLVM_USE_INTEL_JITEVENTS=ON \ + -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \ + -DPYTHON_EXECUTABLE="$(cpython_path 3.7)/bin/python" \ + -GNinja \ + .. +ninja install +popd +popd +rm -rf llvm-${LLVM_VERSION}.src.tar.xz llvm-${LLVM_VERSION}.src.tar llvm-${LLVM_VERSION}.src + +# clang is only used to precompile Gandiva bitcode +if [ ${LLVM_VERSION_MAJOR} -lt 9 ]; then + clang_package_name=cfe +else + clang_package_name=clang +fi + +pushd ${clang_package_name} +mkdir build +pushd build +cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_MODULE_PATH="/llvm-project-${LLVM_VERSION}.src/cmake/Modules" \ + -DCLANG_INCLUDE_TESTS=OFF \ + -DCLANG_INCLUDE_DOCS=OFF \ + -DLLVM_INCLUDE_TESTS=OFF \ + -DLLVM_INCLUDE_DOCS=OFF \ + -Wno-dev \ + -GNinja \ + .. + +ninja -w dupbuild=warn install # both clang and llvm builds generate llvm-config file +popd +popd + +# out of llvm-project-${LLVM_VERSION}.src +popd +rm -rf ${clang_package_name}-${LLVM_VERSION}.src.tar.xz ${clang_package_name}-${LLVM_VERSION}.src.tar ${clang_package_name}-${LLVM_VERSION}.src diff --git a/tests/scripts/task_config_build_arm.sh b/tests/scripts/task_config_build_arm.sh index 516e6ac867919..50b1a9553f270 100755 --- a/tests/scripts/task_config_build_arm.sh +++ b/tests/scripts/task_config_build_arm.sh @@ -28,7 +28,7 @@ echo set\(USE_RPC ON\) >> config.cmake echo set\(USE_MICRO ON\) >> config.cmake echo set\(USE_MICRO_STANDALONE_RUNTIME ON\) >> config.cmake echo set\(USE_PROFILER ON\) >> config.cmake -echo set\(USE_LLVM llvm-config-8\) >> config.cmake +echo set\(USE_LLVM llvm-config\) >> config.cmake echo set\(CMAKE_CXX_FLAGS -Werror\) >> config.cmake echo set\(USE_VTA_FSIM ON\) >> config.cmake echo set\(USE_ARM_COMPUTE_LIB ON\) >> config.cmake