| # 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. |
| # |
| # Usage of this module as follows: |
| # |
| # find_package(LLVM) |
| # |
| |
| set(LLVM_HINTS ${LLVM_ROOT} ${LLVM_DIR} /usr/lib /usr/share) |
| if(LLVM_BREW_PREFIX) |
| list(APPEND LLVM_HINTS ${LLVM_BREW_PREFIX}) |
| endif() |
| if(DEFINED ARROW_LLVM_VERSION_FALLBACK) |
| find_package(LLVM |
| ${ARROW_LLVM_VERSION} |
| CONFIG |
| HINTS |
| ${LLVM_HINTS}) |
| if(NOT ${LLVM_FOUND}) |
| find_package(LLVM |
| ${ARROW_LLVM_VERSION_FALLBACK} |
| REQUIRED |
| CONFIG |
| HINTS |
| ${LLVM_HINTS}) |
| endif() |
| else() |
| find_package(LLVM |
| ${ARROW_LLVM_VERSION} |
| REQUIRED |
| CONFIG |
| HINTS |
| ${LLVM_HINTS}) |
| endif() |
| message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") |
| message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") |
| |
| # Find the libraries that correspond to the LLVM components |
| llvm_map_components_to_libnames(LLVM_LIBS |
| core |
| mcjit |
| native |
| ipo |
| bitreader |
| target |
| linker |
| analysis |
| debuginfodwarf) |
| |
| find_program(LLVM_LINK_EXECUTABLE llvm-link HINTS ${LLVM_TOOLS_BINARY_DIR}) |
| if(LLVM_LINK_EXECUTABLE) |
| message(STATUS "Found llvm-link ${LLVM_LINK_EXECUTABLE}") |
| else() |
| message(FATAL_ERROR "Couldn't find llvm-link") |
| endif() |
| |
| find_program(CLANG_EXECUTABLE |
| NAMES clang-${ARROW_LLVM_VERSION} clang-${ARROW_LLVM_MAJOR_VERSION} |
| HINTS ${LLVM_TOOLS_BINARY_DIR}) |
| if(CLANG_EXECUTABLE) |
| message(STATUS "Found clang ${LLVM_PACKAGE_VERSION} ${CLANG_EXECUTABLE}") |
| else() |
| # If clang-7 not available, switch to normal clang. |
| find_program(CLANG_EXECUTABLE NAMES clang HINTS ${LLVM_TOOLS_BINARY_DIR}) |
| if(CLANG_EXECUTABLE) |
| message(STATUS "Found clang ${CLANG_EXECUTABLE}") |
| else() |
| message(FATAL_ERROR "Couldn't find clang") |
| endif() |
| endif() |
| |
| add_library(LLVM::LLVM_INTERFACE INTERFACE IMPORTED) |
| |
| set_target_properties(LLVM::LLVM_INTERFACE |
| PROPERTIES INTERFACE_INCLUDE_DIRECTORIES |
| "${LLVM_INCLUDE_DIRS}" |
| INTERFACE_COMPILE_FLAGS |
| "${LLVM_DEFINITIONS}" |
| INTERFACE_LINK_LIBRARIES |
| "${LLVM_LIBS}") |
| |
| mark_as_advanced(CLANG_EXECUTABLE LLVM_LINK_EXECUTABLE) |