upgrade llvm from 11 to 17

This commit is contained in:
LINxiansheng 2024-12-05 03:15:16 +00:00 committed by ob-robot
parent b7d76f0bf7
commit 3d03d6f4df
41 changed files with 276 additions and 66 deletions

View File

@ -19,6 +19,8 @@ LLD_OPTION=ON
ASAN_OPTION=ON
STATIC_LINK_LGPL_DEPS_OPTION=ON
ENABLE_BOLT_OPTION=OFF
CPP_STANDARD_OPTION=11
CPP_STANDARD_20_OPTION=OFF
echo "$0 ${ALL_ARGS[@]}"
@ -63,6 +65,10 @@ function parse_args
elif [[ "$i" == "--make" ]]
then
NEED_MAKE=make
elif [[ "$i" == "-DCPP_STANDARD_20=ON" ]]
then
CPP_STANDARD_OPTION=20
CPP_STANDARD_20_OPTION=ON
elif [[ $NEED_MAKE == false ]]
then
BUILD_ARGS+=("$i")
@ -105,6 +111,7 @@ function prepare_build_dir
# dep_create
function do_init
{
export CPP_STANDARD=${CPP_STANDARD_OPTION}
time1_ms=$(echo $[$(date +%s%N)/1000000])
(cd $TOPDIR/deps/init && bash dep_create.sh)
if [ $? -ne 0 ]; then
@ -130,7 +137,7 @@ function do_build
TYPE=$1; shift
prepare_build_dir $TYPE || return
${CMAKE_COMMAND} ${TOPDIR} "$@"
${CMAKE_COMMAND} ${TOPDIR} "$@" -DCPP_STANDARD_20=$CPP_STANDARD_20_OPTION
if [ $? -ne 0 ]; then
echo_err "Failed to generate Makefile"
exit 1

View File

@ -95,6 +95,17 @@ if((ENABLE_BOLT OR (NOT DEFINED ENABLE_BOLT AND ENABLE_BOLT_AUTO)) AND NOT OB_BU
endif()
endif()
ob_define(CPP_STANDARD_20 OFF)
if(CPP_STANDARD_20)
message(STATUS "Using C++20 standard")
set(CMAKE_CXX_FLAGS "-std=gnu++20")
ob_define(CPP_STANDARD_20 ON)
add_definitions(-DCPP_STANDARD_20)
else()
message(STATUS "Using C++11 standard")
set(CMAKE_CXX_FLAGS "-std=gnu++11")
endif()
if(OB_DISABLE_PIE)
message(STATUS "build without pie")
set(PIE_OPT "")
@ -229,6 +240,14 @@ if (OB_USE_CLANG)
NO_DEFAULT_PATH)
endif()
if(CPP_STANDARD_20)
execute_process(COMMAND ${OB_CC} --version OUTPUT_VARIABLE CLANG_VERSION_STRING)
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" CLANG_VERSION ${CLANG_VERSION_STRING})
if(CLANG_VERSION VERSION_LESS "17.0.0")
message(FATAL_ERROR "Clang version must be at least 17.0.0 if CPP_STANDARD_20 is ON, Please run the cmake process with '-DCPP_STANDARD_20=ON --init'")
endif()
endif()
if (OB_CXX)
message(STATUS "Using OB_CXX compiler: ${OB_CXX}")
else()
@ -253,7 +272,7 @@ if (OB_USE_CLANG)
set(REORDER_LINK_OPT "-Wl,--no-rosegment,--build-id=sha1 ${HOTFUNC_OPT}")
set(OB_LD_BIN "${DEVTOOLS_DIR}/bin/ld.lld")
endif()
set(CMAKE_CXX_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${FILE_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG} -std=gnu++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${FILE_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG}")
set(CMAKE_C_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${FILE_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG}")
set(CMAKE_CXX_LINK_FLAGS "${LD_OPT} --gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${FILE_PREFIX} ${AUTO_FDO_OPT}")
set(CMAKE_SHARED_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${THIN_LTO_CONCURRENCY_LINK} ${REORDER_LINK_OPT}")

View File

@ -130,6 +130,7 @@ endfunction()
function(ob_lib_add_target target)
message(STATUS "ob_lib_add_target ${target}")
ob_add_object_target(${target})
target_compile_options(${target} INTERFACE -D_GLIBCXX_USE_CXX11_ABI=0)
target_link_libraries(${target} PUBLIC oblib_base)
list(APPEND oblib_object_libraries ${target})
set(oblib_object_libraries "${oblib_object_libraries}" CACHE INTERNAL "observer library list")

View File

@ -38,6 +38,9 @@ endif()
if (OB_USE_CLANG)
set(EASY_CC_WNO -fno-strict-aliasing -Wno-unused-variable -Wno-unused-function -fmax-type-align=8
-Wno-tautological-constant-out-of-range-compare -fno-omit-frame-pointer)
if(CPP_STANDARD_20)
set(EASY_CC_WNO ${EASY_CC_WNO} -Wno-unused-but-set-variable)
endif()
else()
set(EASY_CC_WNO -fno-strict-aliasing -Wno-unused-variable -Wno-implicit-function-declaration
-Wno-unused-but-set-variable -Wno-unused-function -fno-omit-frame-pointer)

View File

@ -178,14 +178,15 @@ WORKSACPE_DEPS_DIR="$(cd $(dirname $0); cd ..; pwd)"
WORKSPACE_DEPS_3RD=${WORKSACPE_DEPS_DIR}/3rd
WORKSAPCE_DEPS_3RD_DONE=${WORKSPACE_DEPS_3RD}/DONE
WORKSAPCE_DEPS_3RD_MD5=${WORKSPACE_DEPS_3RD}/${MD5}
WORKSAPCE_DEPS_3RD_CPP_STANDARD=${WORKSPACE_DEPS_3RD}/CPP_${CPP_STANDARD}
# 开始判断本地目录依赖目录是否存在
if [ -f ${WORKSAPCE_DEPS_3RD_MD5} ]; then
if [ -f ${WORKSAPCE_DEPS_3RD_DONE} ]; then
echo_log "${DEP_FILE} has been initialized due to ${WORKSAPCE_DEPS_3RD_MD5} and ${WORKSAPCE_DEPS_3RD_DONE} exists"
if [ -f "${WORKSAPCE_DEPS_3RD_DONE}" ] && [ -f "${WORKSAPCE_DEPS_3RD_CPP_STANDARD}" ]; then
echo_log "${DEP_FILE} has been initialized due to ${WORKSAPCE_DEPS_3RD_MD5}, ${WORKSAPCE_DEPS_3RD_DONE} and ${WORKSAPCE_DEPS_3RD_CPP_STANDARD} exists"
exit 0
else
echo_log "${DEP_FILE} has been not initialized, due to ${WORKSAPCE_DEPS_3RD_DONE} not exists"
echo_log "${DEP_FILE} has been not initialized, due to ${WORKSAPCE_DEPS_3RD_DONE} or ${WORKSAPCE_DEPS_3RD_CPP_STANDARD} not exists"
fi
else
echo_log "${DEP_FILE} has been not initialized, due to ${WORKSAPCE_DEPS_3RD_MD5} not exists"
@ -294,6 +295,15 @@ do
temp=$(echo "$line" | grep -Eo "target=(\S*)")
[[ "$temp" != "" ]] && target_name=${temp#*=}
if [[ "$pkg" == *"obdevtools-llvm"* ]]; then
if [[ "$line" =~ cpp_standard=([0-9]+) ]]; then
cpp_standard="${BASH_REMATCH[1]}"
if [ "$cpp_standard" -ne "$CPP_STANDARD" ]; then
continue
fi
fi
fi
if [[ -f "${TARGET_DIR_3RD}/pkg/${pkg}" ]]; then
echo_log "find package <${pkg}> in cache"
else
@ -332,6 +342,7 @@ done
if [ ${NEED_SHARE_CACHE} == "OFF" ]; then
touch ${WORKSAPCE_DEPS_3RD_MD5}
touch ${WORKSAPCE_DEPS_3RD_DONE}
touch ${WORKSAPCE_DEPS_3RD_CPP_STANDARD}
exit $?
fi
@ -388,6 +399,7 @@ if [ ${LINK_TARGET_DIRECT} == "ON" ]; then
fi
touch ${WORKSAPCE_DEPS_3RD_MD5}
touch ${WORKSAPCE_DEPS_3RD_DONE}
touch ${WORKSAPCE_DEPS_3RD_CPP_STANDARD}
exit $?
fi
@ -415,3 +427,4 @@ echo_log "link deps ${WORKSPACE_DEPS_3RD} -> ${CACHE_DEPS_DIR_3RD}"
# 标记md5和done文件
touch ${WORKSAPCE_DEPS_3RD_MD5}
touch ${WORKSAPCE_DEPS_3RD_DONE}
touch ${WORKSAPCE_DEPS_3RD_CPP_STANDARD}

View File

@ -44,7 +44,8 @@ obdevtools-ccache-3.7.12-52024092621.al8.aarch64.rpm
obdevtools-cmake-3.22.1-122024092710.al8.aarch64.rpm
obdevtools-flex-2.5.35-42024092621.al8.aarch64.rpm
obdevtools-gcc9-9.3.0-152024092711.al8.aarch64.rpm
obdevtools-llvm-11.0.1-662024092811.al8.aarch64.rpm
obdevtools-llvm-11.0.1-662024092811.al8.aarch64.rpm cpp_standard=11
obdevtools-llvm-17.0.3-232024111415.al8.aarch64.rpm cpp_standard=20
[tools-deps]
devdeps-oblogmsg-1.1-122024093010.al8.aarch64.rpm

View File

@ -47,7 +47,8 @@ obdevtools-ccache-3.7.12-52024092621.al8.x86_64.rpm
obdevtools-cmake-3.22.1-122024092710.al8.x86_64.rpm
obdevtools-flex-2.5.35-42024092621.al8.x86_64.rpm
obdevtools-gcc9-9.3.0-152024092711.al8.x86_64.rpm
obdevtools-llvm-11.0.1-662024092811.al8.x86_64.rpm
obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm cpp_standard=11
obdevtools-llvm-17.0.3-232024111415.el8.x86_64.rpm cpp_standard=20
[tools-deps]
devdeps-oblogmsg-1.1-122024093010.al8.x86_64.rpm

View File

@ -41,10 +41,11 @@ devdeps-fast-float-6.1.3-42024112122.el7.aarch64.rpm
obdevtools-binutils-2.30-12022100413.el7.aarch64.rpm
obdevtools-bison-2.4.1-12022100413.el7.aarch64.rpm
obdevtools-ccache-3.7.12-12022100417.el7.aarch64.rpm
obdevtools-cmake-3.22.1-22022100417.el7.aarch64.rpm
obdevtools-cmake-3.30.3-52024111819.el7.aarch64.rpm
obdevtools-flex-2.5.35-12022100417.el7.aarch64.rpm
obdevtools-gcc9-9.3.0-52022092914.el7.aarch64.rpm
obdevtools-llvm-11.0.1-312022092921.el7.aarch64.rpm
obdevtools-llvm-11.0.1-312022092921.el7.aarch64.rpm cpp_standard=11
obdevtools-llvm-17.0.3-232024111415.el7.aarch64.rpm cpp_standard=20
[tools-deps]
devdeps-oblogmsg-1.1-52024052811.el7.aarch64.rpm

View File

@ -45,10 +45,11 @@ devdeps-fast-float-6.1.3-42024112122.el7.x86_64.rpm
obdevtools-binutils-2.30-12022100413.el7.x86_64.rpm
obdevtools-bison-2.4.1-12022100413.el7.x86_64.rpm
obdevtools-ccache-3.7.12-12022100417.el7.x86_64.rpm
obdevtools-cmake-3.22.1-22022100417.el7.x86_64.rpm
obdevtools-cmake-3.30.3-52024111819.el7.x86_64.rpm
obdevtools-flex-2.5.35-12022100417.el7.x86_64.rpm
obdevtools-gcc9-9.3.0-52022092914.el7.x86_64.rpm
obdevtools-llvm-11.0.1-312022092921.el7.x86_64.rpm
obdevtools-llvm-11.0.1-312022092921.el7.x86_64.rpm cpp_standard=11
obdevtools-llvm-17.0.3-232024111415.el7.x86_64.rpm cpp_standard=20
[tools-deps]
devdeps-oblogmsg-1.1-52024052811.el7.x86_64.rpm

View File

@ -41,10 +41,11 @@ devdeps-fast-float-6.1.3-42024112122.el8.aarch64.rpm
obdevtools-binutils-2.30-12022100413.el8.aarch64.rpm
obdevtools-bison-2.4.1-12022100413.el8.aarch64.rpm
obdevtools-ccache-3.7.12-12022100417.el8.aarch64.rpm
obdevtools-cmake-3.22.1-22022100417.el8.aarch64.rpm
obdevtools-cmake-3.30.3-52024111819.el8.aarch64.rpm
obdevtools-flex-2.5.35-12022100417.el8.aarch64.rpm
obdevtools-gcc9-9.3.0-52022092914.el8.aarch64.rpm
obdevtools-llvm-11.0.1-312022092921.el8.aarch64.rpm
obdevtools-llvm-11.0.1-312022092921.el8.aarch64.rpm cpp_standard=11
obdevtools-llvm-17.0.3-232024111415.el8.aarch64.rpm cpp_standard=20
[tools-deps]
devdeps-oblogmsg-1.1-52024052811.el8.aarch64.rpm

View File

@ -44,10 +44,11 @@ devdeps-fast-float-6.1.3-42024112122.el8.x86_64.rpm
obdevtools-binutils-2.30-12022100413.el8.x86_64.rpm
obdevtools-bison-2.4.1-12022100413.el8.x86_64.rpm
obdevtools-ccache-3.7.12-12022100417.el8.x86_64.rpm
obdevtools-cmake-3.22.1-22022100417.el8.x86_64.rpm
obdevtools-cmake-3.30.3-52024111819.el8.x86_64.rpm
obdevtools-flex-2.5.35-12022100417.el8.x86_64.rpm
obdevtools-gcc9-9.3.0-52022092914.el8.x86_64.rpm
obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm
obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm cpp_standard=11
obdevtools-llvm-17.0.3-232024111415.el8.x86_64.rpm cpp_standard=20
[tools-deps]
devdeps-oblogmsg-1.1-52024052811.el8.x86_64.rpm

View File

@ -47,10 +47,11 @@ devdeps-apr-1.6.5-232023090616.el9.aarch64.rpm target=el9
obdevtools-binutils-2.30-12022100413.el8.aarch64.rpm
obdevtools-bison-2.4.1-12022100413.el8.aarch64.rpm
obdevtools-ccache-3.7.12-12022100417.el8.aarch64.rpm
obdevtools-cmake-3.22.1-22022100417.el8.aarch64.rpm
obdevtools-cmake-3.30.3-52024111819.el8.aarch64.rpm
obdevtools-flex-2.5.35-12022100417.el8.aarch64.rpm
obdevtools-gcc9-9.3.0-52022092914.el8.aarch64.rpm
obdevtools-llvm-11.0.1-312022092921.el8.aarch64.rpm
obdevtools-llvm-11.0.1-312022092921.el8.aarch64.rpm cpp_standard=11
obdevtools-llvm-17.0.3-232024111415.el8.aarch64.rpm cpp_standard=20
[tools-deps]
devdeps-oblogmsg-1.1-52024052811.el8.aarch64.rpm

View File

@ -50,10 +50,11 @@ devdeps-apr-1.6.5-232023090616.el9.x86_64.rpm target=el9
obdevtools-binutils-2.30-12022100413.el8.x86_64.rpm
obdevtools-bison-2.4.1-12022100413.el8.x86_64.rpm
obdevtools-ccache-3.7.12-12022100417.el8.x86_64.rpm
obdevtools-cmake-3.22.1-22022100417.el8.x86_64.rpm
obdevtools-cmake-3.30.3-52024111819.el8.x86_64.rpm
obdevtools-flex-2.5.35-12022100417.el8.x86_64.rpm
obdevtools-gcc9-9.3.0-52022092914.el8.x86_64.rpm
obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm
obdevtools-llvm-11.0.1-312022092921.el8.x86_64.rpm cpp_standard=11
obdevtools-llvm-17.0.3-232024111415.el8.x86_64.rpm cpp_standard=20
[tools-deps]
devdeps-oblogmsg-1.1-52024052811.el8.x86_64.rpm

View File

@ -110,9 +110,7 @@ endif()
if (OB_USE_CLANG)
# The following clang warnings should be fixed later: -Wno-unused-variable -Wno-invalid-offsetof
target_compile_options(oblib_base_base_base
INTERFACE
-fno-strict-aliasing -fno-omit-frame-pointer ${MARCH_CFLAGS} ${MTUNE_CFLAGS}
set(OBLIB_COMPILE_DEFINITIONS -fno-strict-aliasing -fno-omit-frame-pointer ${MARCH_CFLAGS} ${MTUNE_CFLAGS}
-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D_NO_EXCEPTION -DTSI_STATIC_SUM
-DOCI_LINK_RUNTIME
-Wall -Wextra -Wformat -Werror
@ -126,6 +124,18 @@ if (OB_USE_CLANG)
-Wno-self-assign -Wno-inconsistent-missing-override -Wno-mismatched-tags -Wno-unused-variable
-Wno-invalid-offsetof -Wno-unevaluated-expression -Wno-constant-logical-operand>
$<$<COMPILE_LANGUAGE:C>:-Wno-unused-parameter>)
if (CPP_STANDARD_20)
set(OBLIB_COMPILE_DEFINITIONS ${OBLIB_COMPILE_DEFINITIONS}
-Wno-unused-but-set-variable -Wno-null-pointer-subtraction -Wno-compound-token-split-by-macro
-Wno-packed-non-pod -Wno-format -Wno-shorten-64-to-32 -Wno-unused-but-set-parameter -Wno-single-bit-bitfield-constant-conversion
-Wno-enum-constexpr-conversion -Wno-covered-switch-default
-Wno-bitwise-instead-of-logical -Wno-suggest-override -Wno-non-virtual-dtor -Wno-cast-qual
-Wno-unused-value -Wno-macro-redefined -Wno-reinterpret-base-class -Wno-register
-Wno-implicit-fallthrough -Wno-deprecated-non-prototype
-Wno-ambiguous-reversed-operator -Wno-invalid-partial-specialization
-Wno-string-concatenation)
endif()
target_compile_options(oblib_base_base_base INTERFACE ${OBLIB_COMPILE_DEFINITIONS})
if (ENABLE_SANITY)
target_compile_options(oblib_base_base
INTERFACE
@ -272,7 +282,9 @@ endif()
target_link_libraries(oblib_base_base INTERFACE oblib_base_base_base)
add_library(oblib_base INTERFACE)
target_compile_options(oblib_base INTERFACE -D_GLIBCXX_USE_CXX11_ABI=0)
if(NOT CPP_STANDARD_20)
target_compile_options(oblib_base INTERFACE -D_GLIBCXX_USE_CXX11_ABI=0)
endif()
target_link_libraries(oblib_base INTERFACE oblib_base_base)
function(oblib_add_library target)

View File

@ -27,13 +27,6 @@ namespace meta
template <typename T>
class MetaSerializer
{
template <typename T2 = T,
typename std::enable_if<!OB_TRAIT_SERIALIZEABLE(T2) &&
!OB_TRAIT_DEEP_SERIALIZEABLE(T2), bool>::type = true>
void requires() {
static_assert(!(!OB_TRAIT_SERIALIZEABLE(T2) && !OB_TRAIT_DEEP_SERIALIZEABLE(T2)),
"your type is not serializable");
}
public:
MetaSerializer(ObIAllocator &alloc, const T &data)
: alloc_(alloc),

View File

@ -436,6 +436,9 @@ if(OB_BUILD_CLOSE_MODULES)
)
endif()
if(CPP_STANDARD_20)
target_compile_options(oblib_lib PUBLIC -D_GLIBCXX_USE_CXX11_ABI=0)
endif()
target_link_libraries(oblib_lib
PUBLIC ob_malloc compress restore
${DEP_DIR}/lib/libxml2.a
@ -482,7 +485,6 @@ endif()
endif()
# ATTENTION: add this cpp file as library only if compiled target doesn't need diagnose. like unittest or cdc.
add_library(mock_di stat/mock_diagnostic_info.cpp)
target_include_directories(mock_di PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/deps/oblib/src)

View File

@ -162,7 +162,7 @@ public:
#endif
public:
bool force_explict_500_malloc_ = false;
bool pl_leaked_times_ = 0;
int pl_leaked_times_ = 0;
bool force_malloc_for_absent_tenant_ = false;
private:
DISALLOW_COPY_AND_ASSIGN(ObMallocAllocator);

View File

@ -23,6 +23,13 @@ oblib_add_library(compress
zlib_lite/ob_zlib_lite_compressor.cpp
zlib_lite/ob_zlib_lite_compressor.h)
if (CPP_STANDARD_20)
target_compile_options(compress
PRIVATE
-Wno-deprecated-non-prototype
)
endif()
add_subdirectory(zstd)
add_subdirectory(zstd_1_3_8)
add_subdirectory(lz4)

View File

@ -22,7 +22,11 @@ add_library(zlib_lite_objs OBJECT
add_library(zlib_lite_qpl
codec_deflate_qpl.cpp)
target_compile_options(zlib_lite_objs PRIVATE -fvisibility=hidden)
set(ZLIB_LITE_COMPILE_DEFINITIONS -fvisibility=hidden)
if (CPP_STANDARD_20)
set(ZLIB_LITE_COMPILE_DEFINITIONS ${ZLIB_LITE_COMPILE_DEFINITIONS} -Wno-deprecated-non-prototype)
endif()
target_compile_options(zlib_lite_objs PRIVATE ${ZLIB_LITE_COMPILE_DEFINITIONS})
if(${ARCHITECTURE} STREQUAL "x86_64")
target_include_directories(zlib_lite_objs PUBLIC "${DEP_DIR}/include/")

View File

@ -1,3 +1,4 @@
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
oblib_add_library(restore OBJECT
ob_i_storage.h
ob_i_storage.cpp

View File

@ -418,7 +418,7 @@ enum PurgeThrottlingType
inline const char *purge_throttling_type_2_str(const PurgeThrottlingType type)
{
#define EXTRACT_PURGE_TYPE(type_var) ({ case(type_var): return #type_var; })
#define EXTRACT_PURGE_TYPE(type_var) case(type_var): return #type_var
switch(type)
{
EXTRACT_PURGE_TYPE(INVALID_PURGE_TYPE);

View File

@ -90,7 +90,7 @@ enum MetaType {
inline const char *meta_type_2_str(const MetaType type)
{
#define EXTRACT_META_TYPE(type_var) ({ case(type_var): return #type_var; })
#define EXTRACT_META_TYPE(type_var) case(type_var): return #type_var
switch(type)
{
EXTRACT_META_TYPE(PREPARE_META);

View File

@ -37,7 +37,7 @@ enum PushLogType
inline const char *push_log_type_2_str(const PushLogType type)
{
#define EXTRACT_PUSH_LOG_TYPE(type_var) ({ case(type_var): return #type_var; })
#define EXTRACT_PUSH_LOG_TYPE(type_var) case(type_var): return #type_var
switch(type)
{
EXTRACT_PUSH_LOG_TYPE(PUSH_LOG);
@ -133,7 +133,7 @@ enum FetchLogType
inline const char *fetch_type_2_str(const FetchLogType type)
{
#define EXTRACT_FETCH_TYPE(type_var) ({ case(type_var): return #type_var; })
#define EXTRACT_FETCH_TYPE(type_var) case(type_var): return #type_var
switch(type)
{
EXTRACT_FETCH_TYPE(FETCH_LOG_FOLLOWER);

View File

@ -30,7 +30,7 @@ enum class LogSharedTaskType
inline const char *shared_type_2_str(const LogSharedTaskType type)
{
#define EXTRACT_SHARED_TYPE(type_var) ({ case(LogSharedTaskType::type_var): return #type_var; })
#define EXTRACT_SHARED_TYPE(type_var) case(LogSharedTaskType::type_var): return #type_var
switch(type)
{
EXTRACT_SHARED_TYPE(LogHandleSubmitType);

View File

@ -69,7 +69,7 @@ enum FetchTriggerType
inline const char *fetch_trigger_type_2_str(const FetchTriggerType type)
{
#define EXTRACT_TRIGGER_TYPE(type_var) ({ case(type_var): return #type_var; })
#define EXTRACT_TRIGGER_TYPE(type_var) case(type_var): return #type_var
switch(type)
{
EXTRACT_TRIGGER_TYPE(LOG_LOOP_TH);
@ -97,7 +97,7 @@ enum TruncateType
inline const char *truncate_type_2_str(const TruncateType type)
{
#define EXTRACT_TRUNCATE_TYPE(type_var) ({ case(type_var): return #type_var; })
#define EXTRACT_TRUNCATE_TYPE(type_var) case(type_var): return #type_var
switch(type)
{
EXTRACT_TRUNCATE_TYPE(INVALID_TRUNCATE_TYPE);
@ -118,7 +118,7 @@ enum FreezeMode
inline const char *freeze_mode_2_str(const FreezeMode mode)
{
#define EXTRACT_FREEZE_MODE(type_var) ({ case(type_var): return #type_var; })
#define EXTRACT_FREEZE_MODE(type_var) case(type_var): return #type_var
switch(mode)
{
EXTRACT_FREEZE_MODE(PERIOD_FREEZE_MODE);

View File

@ -20,7 +20,10 @@ message(STATUS "This is SOURCE dir " ${PROJECT_SOURCE_DIR})
include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0 -g -O2 -frtti)
if(NOT CPP_STANDARD_20)
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
endif()
add_definitions(-g -O2 -frtti)
# Find the libraries that correspond to the LLVM components
# that we wish to use

View File

@ -450,6 +450,12 @@ public:
int get_int_value(const ObLLVMType &value, int64_t i, ObLLVMValue &i_value);
int get_insert_block(ObLLVMBasicBlock &block);
#ifdef CPP_STANDARD_20
static int64 get_integer_type_id();
static int64 get_pointer_type_id();
static int64 get_struct_type_id();
#endif
public:
core::JitContext *get_jc() { return jc_; }

View File

@ -7,7 +7,9 @@ target_include_directories(objit_base INTERFACE
# GLOB all source files according to its suffix.
file(GLOB_RECURSE objit_SRC "*.h" "*.cpp" "${CMAKE_CURRENT_SROUCE_DIR}/../include/*.h")
add_definitions(-std=gnu++14)
if(NOT CPP_STANDARD_20)
add_definitions(-std=gnu++14)
endif()
add_library(objit_objects OBJECT ${objit_SRC})
target_link_libraries(objit_objects PRIVATE oblib_base_base ob_share objit_base)

View File

@ -31,7 +31,6 @@
#include "llvm/ExecutionEngine/RuntimeDyld.h"
#include "llvm/ExecutionEngine/Orc/CompileUtils.h"
#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"
#include "llvm/ExecutionEngine/Orc/LambdaResolver.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Mangler.h"
#include "llvm/IR/Verifier.h"
@ -43,6 +42,12 @@
#include "llvm/Object/ELFObjectFile.h"
#include "llvm/ExecutionEngine/SectionMemoryManager.h"
#ifdef CPP_STANDARD_20
#include "llvm/ExecutionEngine/JITSymbol.h"
#else
#include "llvm/ExecutionEngine/Orc/LambdaResolver.h"
#endif
using namespace llvm;
using namespace llvm::orc;
using namespace llvm::object;
@ -152,7 +157,11 @@ int ObOrcJit::lookup(const std::string &name, ObJITSymbol &symbol)
"name", name.c_str(),
"msg", msg.c_str());
} else {
#ifdef CPP_STANDARD_20
symbol = JITEvaluatedSymbol(value->getValue(), JITSymbolFlags::Exported);
#else
symbol = *value;
#endif
}
}
@ -188,7 +197,11 @@ int ObOrcJit::get_function_address(const std::string &name, uint64_t &addr)
}
void ObNotifyLoaded::notifyObjectLoaded(
#ifdef CPP_STANDARD_20
ObJitEventListener::ObjectKey Key,
#else
ObVModuleKey Key,
#endif
const object::ObjectFile &Obj,
const RuntimeDyld::LoadedObjectInfo &Info)
{
@ -249,7 +262,11 @@ int ObOrcJit::set_optimize_level(ObPLOptLevel level)
if (OB_SUCC(ret) && level == ObPLOptLevel::O0) {
auto &tm_builder = ObEngineBuilder.getJITTargetMachineBuilder();
#ifdef CPP_STANDARD_20
if (!tm_builder.has_value()) {
#else
if (!tm_builder.hasValue()) {
#endif
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected NULL JITTargetMachineBuilder", K(ret), K(lbt()));
} else {

View File

@ -24,6 +24,10 @@
#include "llvm/ExecutionEngine/Orc/ExecutionUtils.h"
#include "llvm/ExecutionEngine/JITEventListener.h"
#include "llvm/IR/Mangler.h"
#ifdef CPP_STANDARD_20
#include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
#include "llvm/ExecutionEngine/Orc/Shared/ExecutorSymbolDef.h"
#endif
#include <string>
@ -70,16 +74,21 @@ static inline int ob_jit_make_unique(std::unique_ptr<T> &ptr, Args&&... args) {
namespace core {
using namespace llvm;
using namespace llvm::orc;
typedef ::llvm::LLVMContext ObLLVMContext;
typedef ::llvm::orc::ExecutionSession ObExecutionSession;
typedef ::llvm::orc::SymbolResolver ObSymbolResolver;
typedef ::llvm::TargetMachine ObTargetMachine;
typedef ::llvm::DataLayout ObDataLayout;
typedef ::llvm::orc::VModuleKey ObVModuleKey;
typedef ::llvm::JITSymbol ObJITSymbol;
typedef ::llvm::orc::JITDylib::DefinitionGenerator ObJitDefinitionGenerator;
typedef ::llvm::JITEventListener ObJitEventListener;
#ifdef CPP_STANDARD_20
typedef ::llvm::orc::DefinitionGenerator ObJitDefinitionGenerator;
#else
typedef ::llvm::orc::SymbolResolver ObSymbolResolver;
typedef ::llvm::orc::VModuleKey ObVModuleKey;
typedef ::llvm::orc::JITDylib::DefinitionGenerator ObJitDefinitionGenerator;
#endif
class ObNotifyLoaded: public ObJitEventListener
{
@ -89,9 +98,16 @@ public:
: Allocator(Allocator), DebugBuf(DebugBuf), DebugLen(DebugLen), SoObject(SoObject) {}
virtual ~ObNotifyLoaded() {}
#ifdef CPP_STANDARD_20
void notifyObjectLoaded(ObJitEventListener::ObjectKey Key,
const object::ObjectFile &Obj,
const RuntimeDyld::LoadedObjectInfo &Info) override;
#else
void notifyObjectLoaded(ObVModuleKey Key,
const object::ObjectFile &Obj,
const RuntimeDyld::LoadedObjectInfo &Info) override;
const object::ObjectFile &Obj,
const RuntimeDyld::LoadedObjectInfo &Info) override;
#endif
private:
common::ObIAllocator &Allocator;
char* &DebugBuf;
@ -101,7 +117,12 @@ private:
class ObJitGlobalSymbolGenerator: public ObJitDefinitionGenerator {
public:
#ifdef CPP_STANDARD_20
Error tryToGenerate(orc::LookupState &LS,
orc::LookupKind K,
#else
Error tryToGenerate(orc::LookupKind K,
#endif
orc::JITDylib &JD,
orc::JITDylibLookupFlags JDLookupFlags,
const orc::SymbolLookupSet &LookupSet) override
@ -111,7 +132,11 @@ public:
if (res != symbol_table.end()) {
Error err = JD.define(orc::absoluteSymbols(
#ifdef CPP_STANDARD_20
{{sym.first, ExecutorSymbolDef(ExecutorAddr(res->second), {})}}));
#else
{{sym.first, JITEvaluatedSymbol(res->second, {})}}));
#endif
if (err) {
StringRef name = *sym.first;

View File

@ -86,8 +86,13 @@ int ObIRObj::set_obj(core::JitContext &jc, const ObIRValuePtr obj, ObObjType typ
case ObVarcharType: {
ObIRValuePtr len_indices[] = {get_const(jc.get_context(), 32, 0),
get_const(jc.get_context(), 32, OBJ_IDX_VAL_LEN)};
#ifdef CPP_STANDARD_20
ObIRValuePtr str_len_p = jc.get_builder().CreateGEP(ObIRType::getInt64Ty(jc.get_context()), obj, makeArrayRef(len_indices));
val_len_ = jc.get_builder().CreateLoad(ObIRType::getInt64Ty(jc.get_context()),str_len_p);
#else
ObIRValuePtr str_len_p = jc.get_builder().CreateGEP(obj, makeArrayRef(len_indices));
val_len_ = jc.get_builder().CreateLoad(str_len_p);
#endif
//ptr
} break;
default: {
@ -118,11 +123,17 @@ ObIRValuePtr ObIRObj::get_ir_value_element(core::JitContext &jc,
ObIRValuePtr ret = NULL;
ObIRValuePtr indices[] = {get_const(jc.get_context(), 32, 0),
get_const(jc.get_context(), 32, idx)};
#ifdef CPP_STANDARD_20
ObIRValuePtr value_p = jc.get_builder().CreateGEP(ObIRType::getInt64Ty(jc.get_context()), obj,
makeArrayRef(indices),
"obj_elem_p");
ret = jc.get_builder().CreateLoad(ObIRType::getInt64Ty(jc.get_context()), value_p, "value_elem");
#else
ObIRValuePtr value_p = jc.get_builder().CreateGEP(obj,
makeArrayRef(indices),
"obj_elem_p");
ret = jc.get_builder().CreateLoad(value_p, "value_elem");
#endif
return ret;
}

View File

@ -57,6 +57,7 @@ typedef ::llvm::DIExpression ObDIExpression;
typedef ::llvm::DebugLoc ObDebugLoc;
typedef ::llvm::DIType ObDIType;
typedef ::llvm::DISubroutineType ObDISubroutineType;
typedef ::llvm::DILocation ObDILocation;
/*static ObIRType *get_ir_type(ObLLVMContext &ctx,*/
//const ::oceanbase::common::ObObjType &type)

View File

@ -10,9 +10,9 @@
* See the Mulan PubL v2 for more details.
*/
#define USING_LOG_PREFIX PL
//#include "objit/ob_llvm_helper.h"
#define USING_LOG_PREFIX PL
//#include "objit/ob_llvm_helper.h"
#include "core/jit_context.h"
#include "core/jit_di_context.h"
#include "lib/oblog/ob_log_module.h"
@ -185,15 +185,21 @@ int ObLLVMDIHelper::insert_declare(ObLLVMValue &storage, ObLLVMDILocalVariable &
|| OB_ISNULL(variable.get_v()) || OB_ISNULL(block.get_v())) {
ret = OB_NOT_INIT;
LOG_WARN("jc or sp or storage or variable or block is NULL", K(ret));
} else if (OB_ISNULL(expr = jc_->dbuilder_.createExpression())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("failed to create expression", K(ret));
} else if (OB_ISNULL(jc_->dbuilder_.insertDeclare(storage.get_v(), variable.get_v(),
expr, ObDebugLoc::get(line, 0, sp),
block.get_v()))) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("failed to insert declare", K(ret));
}
} else if (OB_ISNULL(expr = jc_->dbuilder_.createExpression())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("failed to create expression", K(ret));
#ifdef CPP_STANDARD_20
} else if (OB_ISNULL(jc_->dbuilder_.insertDeclare(storage.get_v(), variable.get_v(),
expr, ObDILocation::get(sp->getContext(), line, 0, sp),
block.get_v()))) {
#else
} else if (OB_ISNULL(jc_->dbuilder_.insertDeclare(storage.get_v(), variable.get_v(),
expr, ObDebugLoc::get(line, 0, sp),
block.get_v()))) {
#endif
ret = OB_ERR_UNEXPECTED;
LOG_WARN("failed to insert declare", K(ret));
}
return ret;
}

View File

@ -1018,7 +1018,11 @@ int ObLLVMHelper::create_load(const ObString &name, ObLLVMValue &ptr, ObLLVMValu
ret = OB_INVALID_ARGUMENT;
LOG_WARN("value is NULL", K(name), K(ptr), K(ret));
} else {
#ifdef CPP_STANDARD_20
llvm::Value *value = jc_->get_builder().CreateLoad(ObIRType::getInt64Ty(jc_->get_context()), ptr.get_v(), make_string_ref(name));
#else
llvm::Value *value = jc_->get_builder().CreateLoad(ptr.get_v(), make_string_ref(name));
#endif
if (OB_ISNULL(value)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("failed to create load", K(ret));
@ -1055,6 +1059,18 @@ int ObLLVMHelper::create_istore(int64_t i, ObLLVMValue &dest)
} else if (OB_ISNULL(dest.get_v())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("value is NULL", K(i), K(dest), K(ret));
#ifdef CPP_STANDARD_20
} else if (llvm::Type::PointerTyID != dest.get_type_id()
|| 0 == dest.get_type().get_num_child()
|| 1 != dest.get_type().get_num_child()
|| llvm::Type::IntegerTyID != dest.get_type().get_child(0).get_id()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("dest type is not integer pointer ",
K(i),
K(dest.get_type_id()),
K(dest.get_type().get_num_child()),
K(ret));
#else
} else if (llvm::Type::PointerTyID != dest.get_type_id()
|| 1 != dest.get_type().get_num_child()
|| llvm::Type::IntegerTyID != dest.get_type().get_child(0).get_id()) {
@ -1065,6 +1081,7 @@ int ObLLVMHelper::create_istore(int64_t i, ObLLVMValue &dest)
K(dest.get_type().get_num_child()),
K(dest.get_type().get_child(0).get_id()),
K(ret));
#endif
} else {
ObLLVMValue value;
if (OB_FAIL(get_int_value(dest.get_type().get_child(0), i, value))) {
@ -1402,7 +1419,11 @@ int ObLLVMHelper::create_gep(const ObString &name, ObLLVMValue &value, ObIArray<
} else { /*do nothing*/ }
}
if (OB_SUCC(ret)) {
#ifdef CPP_STANDARD_20
llvm::Value *elem = jc_->get_builder().CreateGEP(ObIRType::getInt64Ty(jc_->get_context()), value.get_v(), make_array_ref(array), make_string_ref(name));
#else
llvm::Value *elem = jc_->get_builder().CreateGEP(value.get_v(), make_array_ref(array), make_string_ref(name));
#endif
if (OB_ISNULL(elem)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("failed to create gep", K(ret));
@ -1445,7 +1466,11 @@ int ObLLVMHelper::create_gep(const ObString &name, ObLLVMValue &value, ObLLVMVal
} else if (OB_FAIL(array.push_back(idx.get_v()))) {
LOG_WARN("push_back error", K(ret));
} else {
#ifdef CPP_STANDARD_20
llvm::Value *elem = jc_->get_builder().CreateGEP(ObIRType::getInt64Ty(jc_->get_context()), value.get_v(), make_array_ref(array), make_string_ref(name));
#else
llvm::Value *elem = jc_->get_builder().CreateGEP(value.get_v(), make_array_ref(array), make_string_ref(name));
#endif
if (OB_ISNULL(elem)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("failed to create gep", K(ret));
@ -1467,7 +1492,11 @@ int ObLLVMHelper::create_const_gep1_64(const ObString &name, ObLLVMValue &value,
ret = OB_INVALID_ARGUMENT;
LOG_WARN("value is NULL", K(name), K(value), K(idx), K(ret));
} else {
#ifdef CPP_STANDARD_20
llvm::Value *elem = jc_->get_builder().CreateConstGEP1_64(ObIRType::getInt64Ty(jc_->get_context()), value.get_v(), idx, make_string_ref(name));
#else
llvm::Value *elem = jc_->get_builder().CreateConstGEP1_64(value.get_v(), idx, make_string_ref(name));
#endif
if (OB_ISNULL(elem)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("failed to create const gep164", K(ret));
@ -1680,7 +1709,11 @@ int ObLLVMHelper::set_debug_location(uint32_t line, uint32_t col, ObLLVMDIScope
ret = OB_ERR_UNEXPECTED;
LOG_WARN("scope is NULL", K(ret));
} else {
#ifdef CPP_STANDARD_20
jc_->get_builder().SetCurrentDebugLocation(ObDILocation::get(scope->get_v()->getContext(), line, col, scope->get_v()));
#else
jc_->get_builder().SetCurrentDebugLocation(ObDebugLoc::get(line, col, scope->get_v()));
#endif
}
return ret;
}
@ -2277,5 +2310,22 @@ const ObString& ObLLVMHelper::get_compiled_object()
return jit_->get_compiled_object();
}
#ifdef CPP_STANDARD_20
int64 ObLLVMHelper::get_integer_type_id()
{
return ::llvm::Type::IntegerTyID;
}
int64 ObLLVMHelper::get_pointer_type_id()
{
return ::llvm::Type::PointerTyID;
}
int64 ObLLVMHelper::get_struct_type_id()
{
return ::llvm::Type::StructTyID;
}
#endif
} // namespace jit
} // namespace oceanbase

View File

@ -32,7 +32,7 @@ typename std::enable_if<std::is_pointer<T>::value, int>::type mtl_new_default(T
}
template<class T>
typename std::enable_if<!std::is_pointer<T>::value, int>::type mtl_new_default(T)
typename std::enable_if<!std::is_pointer<T>::value, int>::type mtl_new_default(T &m)
{
return oceanbase::common::OB_SUCCESS;
}

View File

@ -6175,7 +6175,11 @@ int ObPLCodeGenerator::generate_debug(const ObString &name, ObLLVMValue &value)
OZ (args.push_back(str));
OZ (args.push_back(len));
OZ (args.push_back(value));
#ifdef CPP_STANDARD_20
if (helper_.get_integer_type_id() == value.get_type_id()) {
#else
if (12 == value.get_type_id()) { //12 is IntegerTyID
#endif
switch (value.get_type().get_width()) {
case 8: {
OZ (helper_.create_call(ObString("debug"), get_eh_service().eh_debug_int8_, args));
@ -6195,7 +6199,11 @@ int ObPLCodeGenerator::generate_debug(const ObString &name, ObLLVMValue &value)
}
break;
}
#ifdef CPP_STANDARD_20
} else if (helper_.get_pointer_type_id() == value.get_type_id() && helper_.get_integer_type_id() == value.get_type().get_child(0).get_id()) {
#else
} else if (14 == value.get_type_id() && 12 == value.get_type().get_child(0).get_id()) { //14 is PointerTyID
#endif
switch (value.get_type().get_child(0).get_width()) {
case 8: {
OZ (helper_.create_call(ObString("debug"), get_eh_service().eh_debug_int8ptr_, args));
@ -6215,7 +6223,11 @@ int ObPLCodeGenerator::generate_debug(const ObString &name, ObLLVMValue &value)
}
break;
}
#ifdef CPP_STANDARD_20
} else if (helper_.get_pointer_type_id() == value.get_type_id() && helper_.get_struct_type_id() == value.get_type().get_child(0).get_id()) {
#else
} else if (14 == value.get_type_id() && 15 == value.get_type().get_child(0).get_id()) { //14 is PointerTyID, 15 is StructTyID
#endif
ObLLVMType obj_type;
ObLLVMType objparam_type;
OZ (adt_service_.get_obj(obj_type));

View File

@ -613,7 +613,7 @@ _Unwind_Reason_Code ObPLEH::eh_personality(int version, _Unwind_Action actions,
ObUnwindException *exceptionObject,
struct _Unwind_Context *context)
{
const uint8_t *lsda = static_cast<const uint8_t *>(_Unwind_GetLanguageSpecificData(context));
const uint8_t *lsda = reinterpret_cast<const uint8_t *>(_Unwind_GetLanguageSpecificData(context));
LOG_DEBUG(">>>>>>>>>>0", K(version), K(actions), K(exceptionClass), K(lsda));
return handleLsda(version, lsda, actions, exceptionClass, exceptionObject, context);
}

View File

@ -15,7 +15,11 @@
#include "ob_pl_stmt.h"
#ifdef CPP_STANDARD_20
#include "lib/clang/17/include/unwind.h"
#else
#include "lib/clang/11.0.1/include/unwind.h"
#endif
namespace oceanbase
{

View File

@ -18993,7 +18993,7 @@ int ObDDLService::truncate_table_in_trans(const obrpc::ObTruncateTableArg &arg,
}
bool is_truncate_table = false;
bool recycle_cnt = 0;
int recycle_cnt = 0;
for (int64_t i = 0; i < table_schemas.count() && OB_SUCC(ret); i++) {
if (0 == i) {
is_truncate_table = true; //record create table with opertion type TRUNCATE_TABLE_CREATE

View File

@ -135,7 +135,7 @@ struct ObDatumTCCmp<ObFloatTC, ObFloatTC> : public ObDefined<>
template <ObScale SCALE>
struct ObFixedDoubleCmp: public ObDefined<>
{
constexpr static double LOG_10[] =
constexpr static double LOG_10[32] =
{
1e000, 1e001, 1e002, 1e003, 1e004, 1e005, 1e006, 1e007,
1e008, 1e009, 1e010, 1e011, 1e012, 1e013, 1e014, 1e015,

View File

@ -1490,6 +1490,9 @@ ob_set_subtarget(ob_sql udr
udr/ob_udr_utils.cpp
)
if(CPP_STANDARD_20)
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
endif()
ob_add_new_object_target(ob_sql ob_sql)
ob_set_subtarget(ob_sql_simd common