This is an automated email from the ASF dual-hosted git repository.

mousius pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git


The following commit(s) were added to refs/heads/main by this push:
     new ca48cafae3 [Docker] Add script to build llvm from source (#13823)
ca48cafae3 is described below

commit ca48cafae3d7a4855164a137615a22c501e5c78d
Author: neildhickey <[email protected]>
AuthorDate: Tue Mar 7 19:03:05 2023 +0000

    [Docker] Add script to build llvm from source (#13823)
    
    * [Docker] Add script to build llvm from source
    
    This allows us to use the latest llvm and make sure it builds with the same 
configuration as the rest of tvm
---
 docker/Dockerfile.ci_arm                           |   4 +-
 docker/install/ubuntu_install_llvm_from_source.sh  | 100 +++++++++++++++++++++
 tests/scripts/task_config_build_arm.sh             |   2 +-
 .../scripts/task_config_build_minimal_cross_isa.sh |   2 +-
 4 files changed, 104 insertions(+), 4 deletions(-)

diff --git a/docker/Dockerfile.ci_arm b/docker/Dockerfile.ci_arm
index bd2b2d8fb1..26f8ef9196 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.7 
8b5fcb24b4128cf04df1b0b9410ce8b1a729cb3c544e6da885d234280dedeac6
 
 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 0000000000..854e74a4d8
--- /dev/null
+++ b/docker/install/ubuntu_install_llvm_from_source.sh
@@ -0,0 +1,100 @@
+#!/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=$1
+LLVM_FILE_SHA=$2
+
+echo ${LLVM_VERSION}
+
+tmpdir=$(mktemp -d)
+
+cleanup()
+{
+    rm -rf "$tmpdir"
+}
+
+trap cleanup 0
+
+pushd "$tmpdir"
+
+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
+echo "$LLVM_FILE_SHA llvm-project-${LLVM_VERSION}.src.tar.xz" | sha256sum 
--check
+tar xf llvm-project-${LLVM_VERSION}.src.tar.xz
+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
+
+# 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
+popd
diff --git a/tests/scripts/task_config_build_arm.sh 
b/tests/scripts/task_config_build_arm.sh
index 516e6ac867..bd14a91f25 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 -e 'find_program(LLVM_CONFIG "llvm-config")\nif (LLVM_CONFIG) 
\n\tset(USE_LLVM llvm-config) \nelse() \n\tset(USE_LLVM 
llvm-config-8)\nendif()' >> 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
diff --git a/tests/scripts/task_config_build_minimal_cross_isa.sh 
b/tests/scripts/task_config_build_minimal_cross_isa.sh
index 1c08cb285d..1b25163218 100755
--- a/tests/scripts/task_config_build_minimal_cross_isa.sh
+++ b/tests/scripts/task_config_build_minimal_cross_isa.sh
@@ -46,5 +46,5 @@ if [ "$architecture_type" != "aarch64" ]; then
   echo set\(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY\) >> config.cmake
 else
   # This usually runs in the ci_arm docker image.
-  echo set\(USE_LLVM llvm-config-8\) >> config.cmake
+  echo -e 'find_program(LLVM_CONFIG "llvm-config")\nif (LLVM_CONFIG) 
\n\tset(USE_LLVM llvm-config) \nelse() \n\tset(USE_LLVM 
llvm-config-8)\nendif()' >> config.cmake
 fi

Reply via email to