Files
impala/cmake_modules/FindCallOnceHack.cmake
Joe McDonnell 7b490eed5b IMPALA-10951 (preparation): Update Kudu to a more recent version
As part of moving to a newer protobuf, this updates the Kudu version
to get the fix for KUDU-3334. With this newer Kudu version, Clang
builds hit an error while linking:
lib/libLLVMCodeGen.a(TargetPassConfig.cpp.o):TargetPassConfig.cpp:
  function llvm::TargetPassConfig::createRegAllocPass(bool):
    error: relocation refers to global symbol "std::call_once<void (&)()>(std::once_flag&, void (&)())::{lambda()#2}::_FUN()",
    which is defined in a discarded section
  section group signature: "_ZZSt9call_onceIRFvvEJEEvRSt9once_flagOT_DpOT0_ENKUlvE0_clEv"
  prevailing definition is from ../../build/debug/security/libsecurity.a(openssl_util.cc.o)
(This is from a newer binutils that will be pursued separately.)

As a hack to get around this error, this adds the calloncehack
shared library. The shared library publicly defines the symbol that
was coming from kudu_client. By linking it ahead of kudu_client, the
linker uses that rather than the one from kudu_client. This fixes
the Clang builds.

The new Kudu also requires a minor change to the flags for tserver
startup.

Testing:
 - Ran debug tests and verified calloncehack is not used
 - Ran ASAN tests

Change-Id: Ieccbe284f11445e1de792352ebc7c9e1fa2ca0c3
Reviewed-on: http://gerrit.cloudera.org:8080/18129
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2022-01-07 01:44:58 +00:00

49 lines
1.8 KiB
CMake

##############################################################################
# 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.
##############################################################################
# CALLONCEHACK_ROOT hints the location
# Provides
# - CALLONCEHACK_SHARED_LIB,
# - CALLONCEHACK_INCLUDE_DIR,
# - CALLONCEHACK_FOUND
set(_CALLONCEHACK_SEARCH_DIR)
if (CALLONCEHACK_ROOT)
set(_CALLONCEHACK_SEARCH_DIR PATHS ${CALLONCEHACK_ROOT} NO_DEFAULT_PATH)
endif()
find_path(CALLONCEHACK_INCLUDE_DIR calloncehack.h
${_CALLONCEHACK_SEARCH_DIR} PATH_SUFFIXES include)
# Calloncehack is always a shared library
find_library(CALLONCEHACK_SHARED_LIB libcalloncehack.so ${_CALLONCEHACK_SEARCH_DIR} PATH_SUFFIXES lib)
if (CALLONCEHACK_INCLUDE_DIR AND CALLONCEHACK_SHARED_LIB)
set(CALLONCEHACK_FOUND TRUE)
message(STATUS "Found the calloncehack library: ${CALLONCEHACK_SHARED_LIB}")
else()
set(CALLONCEHACK_FOUND FALSE)
message(FATAL_ERROR "calloncehack not found in ${CALLONCEHACK_ROOT}")
endif()
mark_as_advanced(
CALLONCEHACK_INCLUDE_DIR
CALLONCEHACK_SHARED_LIB
)