mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-30 03:22:14 +00:00
130 lines
4.8 KiB
CMake
130 lines
4.8 KiB
CMake
if (APPLE OR NOT ARCH_AMD64 OR SANITIZE STREQUAL "undefined")
|
|
set (ENABLE_EMBEDDED_COMPILER_DEFAULT OFF)
|
|
else()
|
|
set (ENABLE_EMBEDDED_COMPILER_DEFAULT ON)
|
|
endif()
|
|
|
|
option (ENABLE_EMBEDDED_COMPILER "Enable support for 'compile_expressions' option for query execution" ${ENABLE_EMBEDDED_COMPILER_DEFAULT})
|
|
|
|
if (NOT ENABLE_EMBEDDED_COMPILER)
|
|
message(STATUS "Not using LLVM")
|
|
return()
|
|
endif()
|
|
|
|
# TODO: Enable compilation on AArch64
|
|
|
|
set (LLVM_VERSION "15.0.0bundled")
|
|
set (LLVM_INCLUDE_DIRS
|
|
"${ClickHouse_SOURCE_DIR}/contrib/llvm-project/llvm/include"
|
|
"${ClickHouse_BINARY_DIR}/contrib/llvm-project/llvm/include"
|
|
)
|
|
set (LLVM_LIBRARY_DIRS "${ClickHouse_BINARY_DIR}/contrib/llvm-project/llvm")
|
|
# NOTE: You should not remove this line since otherwise it will use default 20,
|
|
# and llvm cannot be compiled with bundled libcxx and 20 standard.
|
|
set (CMAKE_CXX_STANDARD 14)
|
|
|
|
# This list was generated by listing all LLVM libraries, compiling the binary and removing all libraries while it still compiles.
|
|
set (REQUIRED_LLVM_LIBRARIES
|
|
LLVMExecutionEngine
|
|
LLVMRuntimeDyld
|
|
LLVMAsmPrinter
|
|
LLVMDebugInfoDWARF
|
|
LLVMGlobalISel
|
|
LLVMSelectionDAG
|
|
LLVMMCDisassembler
|
|
LLVMPasses
|
|
LLVMCodeGen
|
|
LLVMipo
|
|
LLVMBitWriter
|
|
LLVMInstrumentation
|
|
LLVMScalarOpts
|
|
LLVMAggressiveInstCombine
|
|
LLVMInstCombine
|
|
LLVMVectorize
|
|
LLVMTransformUtils
|
|
LLVMTarget
|
|
LLVMAnalysis
|
|
LLVMProfileData
|
|
LLVMObject
|
|
LLVMBitReader
|
|
LLVMCore
|
|
LLVMRemarks
|
|
LLVMBitstreamReader
|
|
LLVMMCParser
|
|
LLVMMC
|
|
LLVMBinaryFormat
|
|
LLVMDebugInfoCodeView
|
|
LLVMSupport
|
|
LLVMDemangle
|
|
)
|
|
|
|
# if (ARCH_AMD64)
|
|
list(APPEND REQUIRED_LLVM_LIBRARIES LLVMX86Info LLVMX86Desc LLVMX86CodeGen)
|
|
# elseif (ARCH_AARCH64)
|
|
# list(APPEND REQUIRED_LLVM_LIBRARIES LLVMAArch64Info LLVMAArch64Desc LLVMAArch64CodeGen)
|
|
# endif ()
|
|
|
|
set (CMAKE_INSTALL_RPATH "ON") # Do not adjust RPATH in llvm, since then it will not be able to find libcxx/libcxxabi/libunwind
|
|
set (LLVM_COMPILER_CHECKED 1 CACHE INTERNAL "") # Skip internal compiler selection
|
|
set (LLVM_ENABLE_EH 1 CACHE INTERNAL "") # With exception handling
|
|
set (LLVM_ENABLE_RTTI 1 CACHE INTERNAL "")
|
|
set (LLVM_ENABLE_PIC 0 CACHE INTERNAL "")
|
|
set (LLVM_TARGETS_TO_BUILD "X86" CACHE STRING "") # for x86 + ARM: "X86;AArch64"
|
|
|
|
# Omit unnecessary stuff (just the options which are ON by default)
|
|
set(LLVM_ENABLE_BACKTRACES 0 CACHE INTERNAL "")
|
|
set(LLVM_ENABLE_CRASH_OVERRIDES 0 CACHE INTERNAL "")
|
|
set(LLVM_ENABLE_TERMINFO 0 CACHE INTERNAL "")
|
|
set(LLVM_ENABLE_LIBXML2 0 CACHE INTERNAL "")
|
|
set(LLVM_ENABLE_LIBEDIT 0 CACHE INTERNAL "")
|
|
set(LLVM_ENABLE_LIBPFM 0 CACHE INTERNAL "")
|
|
set(LLVM_ENABLE_ZLIB 0 CACHE INTERNAL "")
|
|
set(LLVM_ENABLE_ZSTD 0 CACHE INTERNAL "")
|
|
set(LLVM_ENABLE_Z3_SOLVER 0 CACHE INTERNAL "")
|
|
set(LLVM_INCLUDE_TOOLS 0 CACHE INTERNAL "")
|
|
set(LLVM_BUILD_TOOLS 0 CACHE INTERNAL "")
|
|
set(LLVM_INCLUDE_UTILS 0 CACHE INTERNAL "")
|
|
set(LLVM_BUILD_UTILS 0 CACHE INTERNAL "")
|
|
set(LLVM_INCLUDE_RUNTIMES 0 CACHE INTERNAL "")
|
|
set(LLVM_BUILD_RUNTIMES 0 CACHE INTERNAL "")
|
|
set(LLVM_BUILD_RUNTIME 0 CACHE INTERNAL "")
|
|
set(LLVM_INCLUDE_EXAMPLES 0 CACHE INTERNAL "")
|
|
set(LLVM_INCLUDE_TESTS 0 CACHE INTERNAL "")
|
|
set(LLVM_INCLUDE_GO_TESTS 0 CACHE INTERNAL "")
|
|
set(LLVM_INCLUDE_BENCHMARKS 0 CACHE INTERNAL "")
|
|
set(LLVM_INCLUDE_DOCS 0 CACHE INTERNAL "")
|
|
set(LLVM_ENABLE_OCAMLDOC 0 CACHE INTERNAL "")
|
|
set(LLVM_ENABLE_BINDINGS 0 CACHE INTERNAL "")
|
|
|
|
set (LLVM_SOURCE_DIR "${ClickHouse_SOURCE_DIR}/contrib/llvm-project/llvm")
|
|
set (LLVM_BINARY_DIR "${ClickHouse_BINARY_DIR}/contrib/llvm-project/llvm")
|
|
|
|
# Since we always use toolchain files to generate hermatic builds, cmake will
|
|
# think it's a cross compilation, and LLVM will try to configure NATIVE LLVM
|
|
# targets with all tests enabled, which will slow down cmake configuration and
|
|
# compilation (You'll see Building native llvm-tblgen...). Let's disable the
|
|
# cross compiling indicator for now.
|
|
#
|
|
# TODO We should let cmake know whether it's indeed a cross compilation in the
|
|
# first place.
|
|
set (CMAKE_CROSSCOMPILING 0)
|
|
add_subdirectory ("${LLVM_SOURCE_DIR}" "${LLVM_BINARY_DIR}")
|
|
|
|
set_directory_properties (PROPERTIES
|
|
# due to llvm crosscompile cmake does not know how to clean it, and on clean
|
|
# will lead to the following error:
|
|
#
|
|
# ninja: error: remove(contrib/llvm/llvm/NATIVE): Directory not empty
|
|
#
|
|
ADDITIONAL_CLEAN_FILES "${LLVM_BINARY_DIR}"
|
|
# llvm's cmake configuring this file only when cmake runs,
|
|
# and after clean cmake will not know that it should re-run,
|
|
# add explicitly depends from llvm-config.h
|
|
CMAKE_CONFIGURE_DEPENDS "${LLVM_BINARY_DIR}/include/llvm/Config/llvm-config.h"
|
|
)
|
|
|
|
add_library (_llvm INTERFACE)
|
|
target_link_libraries (_llvm INTERFACE ${REQUIRED_LLVM_LIBRARIES})
|
|
target_include_directories (_llvm SYSTEM BEFORE INTERFACE ${LLVM_INCLUDE_DIRS})
|
|
add_library(ch_contrib::llvm ALIAS _llvm)
|