Spaces:
Running
Running
File size: 4,634 Bytes
1380717 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# 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(LLVMAlt)
if(LLVMAlt_FOUND)
return()
endif()
if(DEFINED LLVM_ROOT)
# if llvm source is set to conda then prefer conda llvm over system llvm even
# if the system one is newer
foreach(ARROW_LLVM_VERSION ${ARROW_LLVM_VERSIONS})
find_package(LLVM
${ARROW_LLVM_VERSION}
CONFIG
NO_DEFAULT_PATH
HINTS
${LLVM_ROOT})
if(LLVM_FOUND)
break()
endif()
endforeach()
endif()
if(NOT LLVM_FOUND)
foreach(ARROW_LLVM_VERSION ${ARROW_LLVM_VERSIONS})
set(LLVM_HINTS ${LLVM_ROOT} ${LLVM_DIR} /usr/lib /usr/share)
if(APPLE)
find_program(BREW brew)
if(BREW)
string(REGEX REPLACE "^([0-9]+)(\\..+)?" "\\1" ARROW_LLVM_VERSION_MAJOR
"${ARROW_LLVM_VERSION}")
execute_process(COMMAND ${BREW} --prefix "llvm@${ARROW_LLVM_VERSION_MAJOR}"
OUTPUT_VARIABLE LLVM_BREW_PREFIX
OUTPUT_STRIP_TRAILING_WHITESPACE)
list(APPEND LLVM_HINTS ${LLVM_BREW_PREFIX})
endif()
endif()
find_package(LLVM
${ARROW_LLVM_VERSION}
CONFIG
HINTS
${LLVM_HINTS})
if(LLVM_FOUND)
break()
endif()
endforeach()
endif()
if(LLVM_FOUND)
find_program(LLVM_LINK_EXECUTABLE llvm-link HINTS ${LLVM_TOOLS_BINARY_DIR})
find_program(CLANG_EXECUTABLE
NAMES clang-${LLVM_PACKAGE_VERSION}
clang-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}
clang-${LLVM_VERSION_MAJOR} clang
HINTS ${LLVM_TOOLS_BINARY_DIR})
add_library(LLVM::LLVM_HEADERS INTERFACE IMPORTED)
set_target_properties(LLVM::LLVM_HEADERS
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LLVM_INCLUDE_DIRS}"
INTERFACE_COMPILE_FLAGS "${LLVM_DEFINITIONS}")
add_library(LLVM::LLVM_LIBS INTERFACE IMPORTED)
if(ARROW_LLVM_USE_SHARED)
target_link_libraries(LLVM::LLVM_LIBS INTERFACE LLVM)
else()
# Find the libraries that correspond to the LLVM components
set(LLVM_TARGET_COMPONENTS
analysis
bitreader
core
debuginfodwarf
ipo
linker
native
orcjit
target)
if(LLVM_VERSION_MAJOR GREATER_EQUAL 14)
list(APPEND LLVM_TARGET_COMPONENTS passes)
endif()
llvm_map_components_to_libnames(LLVM_LIBS ${LLVM_TARGET_COMPONENTS})
target_link_libraries(LLVM::LLVM_LIBS INTERFACE ${LLVM_LIBS})
if(TARGET LLVMSupport AND NOT ARROW_ZSTD_USE_SHARED)
get_target_property(LLVM_SUPPORT_INTERFACE_LINK_LIBRARIES LLVMSupport
INTERFACE_LINK_LIBRARIES)
list(FIND LLVM_SUPPORT_INTERFACE_LINK_LIBRARIES zstd::libzstd_shared
LLVM_SUPPORT_LIBZSTD_INDEX)
if(NOT LLVM_SUPPORT_LIBZSTD_INDEX EQUAL -1)
list(REMOVE_AT LLVM_SUPPORT_INTERFACE_LINK_LIBRARIES
${LLVM_SUPPORT_LIBZSTD_INDEX})
list(INSERT LLVM_SUPPORT_INTERFACE_LINK_LIBRARIES ${LLVM_SUPPORT_LIBZSTD_INDEX}
zstd::libzstd_static)
endif()
set_target_properties(LLVMSupport
PROPERTIES INTERFACE_LINK_LIBRARIES
"${LLVM_SUPPORT_INTERFACE_LINK_LIBRARIES}")
endif()
endif()
endif()
mark_as_advanced(CLANG_EXECUTABLE LLVM_LINK_EXECUTABLE)
find_package_handle_standard_args(
LLVMAlt
REQUIRED_VARS # The first variable is used for display.
LLVM_PACKAGE_VERSION CLANG_EXECUTABLE LLVM_FOUND LLVM_LINK_EXECUTABLE)
if(LLVMAlt_FOUND)
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
message(STATUS "Found llvm-link ${LLVM_LINK_EXECUTABLE}")
message(STATUS "Found clang ${CLANG_EXECUTABLE}")
endif()
|