Spaces:
Running
Running
# 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() | |