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