# 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. # LLVM rules # Due to LLVM debug symbols you can sometimes face linking issues on # certain compiler, platform combinations if you don't set NDEBUG. # # See https://github.com/imageworks/OpenShadingLanguage/issues/1069 # for more discussion. add_definitions(-DNDEBUG=1) # TODO(@jroesch, @tkonolige): if we actually use targets we can do this. # target_compile_definitions(tvm_compiler PRIVATE NDEBUG=1) # Test if ${USE_LLVM} is not an explicit boolean false # It may be a boolean or a string if(NOT ${USE_LLVM} MATCHES ${IS_FALSE_PATTERN}) find_llvm(${USE_LLVM}) if (${TVM_LLVM_VERSION} LESS 150) message(FATAL_ERROR "LLVM version 15.0 or greater is required.") endif() include_directories(SYSTEM ${LLVM_INCLUDE_DIRS}) add_definitions(${LLVM_DEFINITIONS}) add_library(tvm_llvm_header INTERFACE) if(MSVC) # MSVC treats GCC-style -isystem operands as source files. target_include_directories(tvm_llvm_header SYSTEM INTERFACE ${LLVM_INCLUDE_DIRS}) target_compile_options(tvm_llvm_header INTERFACE ${LLVM_DEFINITIONS}) else() set(TVM_LLVM_INCLUDE_FLAGS "") foreach(__llvm_include_dir IN LISTS LLVM_INCLUDE_DIRS) string(STRIP "${__llvm_include_dir}" __llvm_include_dir) list(APPEND TVM_LLVM_INCLUDE_FLAGS "-isystem" "${__llvm_include_dir}") endforeach() target_compile_options(tvm_llvm_header INTERFACE ${TVM_LLVM_INCLUDE_FLAGS} ${LLVM_DEFINITIONS}) endif() message(STATUS "Build with LLVM " ${LLVM_PACKAGE_VERSION}) message(STATUS "Set TVM_LLVM_VERSION=" ${TVM_LLVM_VERSION}) # Set flags that are only needed for LLVM target add_definitions(-DTVM_LLVM_VERSION=${TVM_LLVM_VERSION}) if (${TVM_MLIR_VERSION}) add_definitions(-DTVM_MLIR_VERSION=${TVM_MLIR_VERSION}) endif() add_definitions(-DTVM_LLVM_HAS_AARCH64_TARGET=${TVM_LLVM_HAS_AARCH64_TARGET}) tvm_file_glob(GLOB COMPILER_LLVM_SRCS src/target/llvm/*.cc src/backend/cuda/codegen/llvm/*.cc src/backend/rocm/codegen/llvm/*.cc src/backend/hexagon/codegen/llvm/*.cc ) list(APPEND TVM_LINKER_LIBS ${LLVM_LIBS}) list(APPEND COMPILER_SRCS ${COMPILER_LLVM_SRCS}) if(NOT MSVC) set_source_files_properties(${COMPILER_LLVM_SRCS} PROPERTIES COMPILE_FLAGS "-fno-rtti") endif() endif()