be/cmake/thirdparty.cmake (163 lines of code) (raw):
# 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.
# Set all libraries
# define COMMON_THIRDPARTY list variable
set(COMMON_THIRDPARTY)
# define add_thirdparty function, append thirdparty libraries to COMMON_THIRDPARTY variable, and pass arg too add_library
# if arg exist lib64, use lib64, else use lib
# if arg exist noadd, not append to COMMON_THIRDPARTY variable
# if arg exist libname, use libname to find library
# if arg exist wholelibpath, use wholelibpath to find library
function(add_thirdparty)
cmake_parse_arguments(DORIS_THIRDPARTY
"NOTADD;LIB64"
"LIBNAME;WHOLELIBPATH"
""
${ARGN})
set(DORIS_THIRDPARTY_NAME ${DORIS_THIRDPARTY_UNPARSED_ARGUMENTS})
add_library(${DORIS_THIRDPARTY_NAME} STATIC IMPORTED)
if (NOT DORIS_THIRDPARTY_NOTADD)
set(COMMON_THIRDPARTY ${COMMON_THIRDPARTY} ${DORIS_THIRDPARTY_NAME} PARENT_SCOPE)
endif()
if (DORIS_THIRDPARTY_LIB64)
set(DORIS_THIRDPARTY_LIBPATH ${THIRDPARTY_DIR}/lib64/lib${DORIS_THIRDPARTY_NAME}.a)
elseif (DORIS_THIRDPARTY_LIBNAME)
set(DORIS_THIRDPARTY_LIBPATH ${THIRDPARTY_DIR}/${DORIS_THIRDPARTY_LIBNAME})
elseif (DORIS_THIRDPARTY_WHOLELIBPATH)
set(DORIS_THIRDPARTY_LIBPATH ${DORIS_THIRDPARTY_WHOLELIBPATH})
else()
set(DORIS_THIRDPARTY_LIBPATH ${THIRDPARTY_DIR}/lib/lib${DORIS_THIRDPARTY_NAME}.a)
endif()
set_target_properties(${DORIS_THIRDPARTY_NAME} PROPERTIES IMPORTED_LOCATION ${DORIS_THIRDPARTY_LIBPATH})
endfunction()
add_thirdparty(gflags)
add_thirdparty(glog)
add_thirdparty(backtrace)
add_thirdparty(re2)
add_thirdparty(hyperscan LIBNAME "lib64/libhs.a")
add_thirdparty(odbc)
add_thirdparty(pprof WHOLELIBPATH ${GPERFTOOLS_HOME}/lib/libprofiler.a)
add_thirdparty(protobuf)
add_thirdparty(gtest)
add_thirdparty(gtest_main)
add_thirdparty(benchmark)
add_thirdparty(gmock)
add_thirdparty(snappy)
add_thirdparty(curl)
add_thirdparty(lz4)
add_thirdparty(thrift)
add_thirdparty(thriftnb)
add_thirdparty(libevent LIBNAME "lib/libevent.a")
add_thirdparty(libevent_pthreads LIBNAME "lib/libevent_pthreads.a")
add_thirdparty(libbz2 LIBNAME "lib/libbz2.a")
add_thirdparty(libz LIBNAME "lib/libz.a")
add_thirdparty(crypto)
add_thirdparty(openssl LIBNAME "lib/libssl.a")
add_thirdparty(leveldb)
if (USE_JEMALLOC)
add_thirdparty(jemalloc LIBNAME "lib/libjemalloc_doris.a")
else()
add_thirdparty(tcmalloc WHOLELIBPATH ${GPERFTOOLS_HOME}/lib/libtcmalloc.a NOTADD)
endif()
if (USE_UNWIND)
add_thirdparty(libunwind LIBNAME "lib64/libunwind.a")
endif()
add_thirdparty(grpc++_reflection LIB64)
add_thirdparty(grpc LIB64)
add_thirdparty(grpc++ LIB64)
add_thirdparty(grpc++_unsecure LIB64)
add_thirdparty(gpr LIB64)
add_thirdparty(upb LIB64)
add_thirdparty(cares LIB64)
add_thirdparty(address_sorting LIB64)
add_thirdparty(z LIB64)
add_thirdparty(brotlicommon LIB64)
add_thirdparty(brotlidec LIB64)
add_thirdparty(brotlienc LIB64)
add_thirdparty(zstd LIB64)
add_thirdparty(arrow LIB64)
add_thirdparty(arrow_flight LIB64)
add_thirdparty(arrow_flight_sql LIB64)
add_thirdparty(parquet LIB64)
add_thirdparty(brpc LIB64)
add_thirdparty(rocksdb)
add_thirdparty(cyrus-sasl LIBNAME "lib/libsasl2.a")
# put this after lz4 to avoid using lz4 lib in librdkafka
add_thirdparty(rdkafka_cpp LIBNAME "lib/librdkafka++.a")
add_thirdparty(rdkafka)
add_thirdparty(s2)
add_thirdparty(bitshuffle)
add_thirdparty(roaring)
add_thirdparty(fmt)
add_thirdparty(cctz)
add_thirdparty(base64)
add_thirdparty(aws-cpp-sdk-core LIB64)
add_thirdparty(aws-cpp-sdk-s3 LIB64)
add_thirdparty(aws-cpp-sdk-transfer LIB64)
add_thirdparty(aws-cpp-sdk-s3-crt LIB64)
add_thirdparty(aws-crt-cpp LIB64)
add_thirdparty(aws-c-cal LIB64)
add_thirdparty(aws-c-auth LIB64)
add_thirdparty(aws-c-compression LIB64)
add_thirdparty(aws-c-common LIB64)
add_thirdparty(aws-c-event-stream LIB64)
add_thirdparty(aws-c-io LIB64)
add_thirdparty(aws-c-http LIB64)
add_thirdparty(aws-c-mqtt LIB64)
add_thirdparty(aws-checksums LIB64)
add_thirdparty(aws-c-s3 LIB64)
add_thirdparty(aws-c-sdkutils LIB64)
add_thirdparty(aws-cpp-sdk-identity-management LIB64)
add_thirdparty(aws-cpp-sdk-sts LIB64)
if (NOT OS_MACOSX)
add_thirdparty(aws-s2n LIBNAME "lib/libs2n.a")
endif()
if(BUILD_AZURE STREQUAL "ON")
add_thirdparty(azure-core)
add_thirdparty(azure-identity)
add_thirdparty(azure-storage-blobs)
add_thirdparty(azure-storage-common)
endif()
add_thirdparty(minizip LIB64)
add_thirdparty(simdjson LIB64)
add_thirdparty(idn LIB64)
add_thirdparty(xml2 LIB64)
add_thirdparty(lzma LIB64)
add_thirdparty(gsasl)
add_thirdparty(krb5support)
add_thirdparty(krb5)
add_thirdparty(com_err)
add_thirdparty(k5crypto)
add_thirdparty(gssapi_krb5)
add_thirdparty(streamvbyte LIB64)
if (OS_MACOSX)
add_thirdparty(bfd)
add_thirdparty(iberty)
add_thirdparty(intl)
endif()
# Only used on x86 or x86_64
if ("${CMAKE_BUILD_TARGET_ARCH}" STREQUAL "x86" OR "${CMAKE_BUILD_TARGET_ARCH}" STREQUAL "x86_64")
add_thirdparty(deflate)
endif()
add_thirdparty(icuuc LIB64)
add_thirdparty(icui18n LIB64)
add_thirdparty(icudata LIB64)
add_thirdparty(pugixml LIB64)
if (BUILD_FAISS)
add_thirdparty(openblas LIB64)
add_thirdparty(faiss LIB64)
endif()