Files
openGauss-third_party/dependency/llvm/build_component.sh
2024-04-15 21:40:22 +08:00

229 lines
8.5 KiB
Bash

#!/bin/bash
# Perform PL/Java lib installation.
# Copyright (c) Huawei Technologies Co., Ltd. 2010-2018. All rights reserved.
# description: the script that make install pljava libs
# date: 2019-5-16
# modified:
# version: 1.0
# history:
WORK_PATH="$(dirname ${0})"
source "${WORK_PATH}/build_global.sh"
#######################################################################
# build and install component
#######################################################################
function build_llvm()
{
cd ${LOCAL_DIR}
if [ -d ${SOURCE_CODE_PATH} ]; then
rm -rf ${SOURCE_CODE_PATH}
fi
mkdir ${SOURCE_CODE_PATH}
tar -zxf $TAR_FILE_NAME -C $SOURCE_CODE_PATH --strip-components 1
cd ${LOCAL_DIR}/${SOURCE_CODE_PATH}
patch -p1 < ../CVE-2024-31852.patch
# patch -p1 < ../0001-llvm.patch
# patch -p1 < ../0002-llvm.patch
# patch -p1 < ../0003-llvm.patch
# patch -p1 < ../0004-llvm.patch
# patch -p1 < ../0005-llvm.patch
# patch -p1 < ../0006-llvm.patch
# if [ $? -ne 0 ]; then
# die "[Error] change dir to $SRC_DIR failed."
# fi
test -d build || mkdir build
rm -fr ./build/*
cd ./build
log "[Notice] llvm start configure"
echo ${COMPILE_TYPE_LIST}
for COMPILE_TYPE in ${COMPILE_TYPE_LIST}
do
case "${COMPILE_TYPE}" in
comm|llt|tool)
# when build with 'tool' option, LLVM libraries are required too.
mkdir -p ${LOCAL_DIR}/install_comm
log "[Notice] running cmake ..."
# sort the defined flags in alphabetic order
cmake -G "Unix Makefiles" \
-DCMAKE_BUILD_TYPE=Release \
-DCLANG_INCLUDE_TESTS=OFF \
-DCLANG_TOOL_C_INDEX_TEST_BUILD=OFF \
-DCLANG_TOOL_CLANG_CHECK_BUILD=OFF \
-DCLANG_TOOL_CLANG_EXTDEF_MAPPING_BUILD=OFF\
-DCLANG_TOOL_CLANG_FORMAT_BUILD=OFF \
-DCLANG_TOOL_CLANG_IMPORT_TEST_BUILD=OFF \
-DCLANG_TOOL_CLANG_OFFLOAD_BUNDLER_BUILD=OFF \
-DCLANG_TOOL_CLANG_RENAME_BUILD=OFF \
-DCLANG_TOOL_CLANG_REFACTOR_BUILD=OFF \
-DCMAKE_C_FLAGS='-fno-aggressive-loop-optimizations -fexceptions' \
-DCMAKE_C_FLAGS_RELEASE='-O2 -DNDEBUG' \
-DCMAKE_CXX_FLAGS='-fno-aggressive-loop-optimizations -D_GLIBCXX_USE_CXX11_ABI=0 -fexceptions' \
-DCMAKE_CXX_FLAGS_RELEASE='-O2 -DNDEBUG' \
-DCMAKE_INSTALL_PREFIX=${LOCAL_DIR}/install_comm \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_TARGETS_TO_BUILD=${BUILD_TARGET} \
-DLLVM_USE_PERF=ON \
../llvm
;;
sanitizer)
mkdir -p ${LOCAL_DIR}/install_comm
log "[Notice] running cmake ..."
# sort the defined flags in alphabetic order
cmake -G "Unix Makefiles" \
-DCMAKE_BUILD_TYPE=Debug \
-DCLANG_INCLUDE_TESTS=OFF \
-DCLANG_TOOL_C_INDEX_TEST_BUILD=OFF \
-DCLANG_TOOL_CLANG_CHECK_BUILD=OFF \
-DCLANG_TOOL_CLANG_EXTDEF_MAPPING_BUILD=OFF\
-DCLANG_TOOL_CLANG_FORMAT_BUILD=OFF \
-DCLANG_TOOL_CLANG_IMPORT_TEST_BUILD=OFF \
-DCLANG_TOOL_CLANG_OFFLOAD_BUNDLER_BUILD=OFF \
-DCLANG_TOOL_CLANG_RENAME_BUILD=OFF \
-DCLANG_TOOL_CLANG_REFACTOR_BUILD=OFF \
-DCMAKE_C_FLAGS='-fno-aggressive-loop-optimizations -fexceptions -static-libasan' \
-DCMAKE_C_FLAGS_RELEASE='-O0 -DDEBUG' \
-DCMAKE_CXX_FLAGS='-fno-aggressive-loop-optimizations -D_GLIBCXX_USE_CXX11_ABI=0 -fexceptions -static-libasan' \
-DCMAKE_CXX_FLAGS_RELEASE='-O0 -DDEBUG' \
-DCMAKE_INSTALL_PREFIX=${LOCAL_DIR}/install_comm \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_TARGETS_TO_BUILD=${BUILD_TARGET} \
-DLLVM_USE_PERF=ON \
-DLLVM_USE_SANITIZER=Address \
../llvm
;;
*)
log "Internal Error: option processing error: $1"
log "please write right paramenter in ${CONFIG_FILE_NAME}"
die "[Error] llvm not supported build type."
exit 1
esac
if [ $? -ne 0 ]; then
die "[Error] llvm configure failed."
fi
log "[Notice] llvm End configure"
log "[Notice] llvm using \"${COMPILE_TYPE_LIST}\" Begin make"
make -s -j16
if [ $? -ne 0 ]; then
die "llvm make failed."
fi
log "[Notice] llvm End make"
log "[Notice] llvm using \"${COMPILE_TYPE_LIST}\" Begin make install"
make install
if [ $? -ne 0 ]; then
die "llvm make install failed."
fi
log "[Notice] llvm End make install"
# llvm has no distclean, using clean here.
make clean
done
}
function build_clang()
{
cd ${LOCAL_DIR}/${SOURCE_CODE_PATH}/
test -d build || mkdir build
rm -fr ./build/*
cd ./build
log "[Notice] clang start configure"
echo ${COMPILE_TYPE_LIST}
for COMPILE_TYPE in ${COMPILE_TYPE_LIST}
do
case "${COMPILE_TYPE}" in
comm|llt|sanitizer)
log "[Notice] null build action for clang ..."
return
;;
tool)
# No santizer on clang, too many issues with it
mkdir -p ${LOCAL_DIR}/install_comm
log "[Notice] running cmake ..."
# sort the defined flags in alphabetic order
cmake -G "Unix Makefiles" \
-DCMAKE_BUILD_TYPE=Release \
-DCLANG_INCLUDE_TESTS=OFF \
-DCLANG_TOOL_C_INDEX_TEST_BUILD=OFF \
-DCLANG_TOOL_CLANG_CHECK_BUILD=OFF \
-DCLANG_TOOL_CLANG_EXTDEF_MAPPING_BUILD=OFF \
-DCLANG_TOOL_CLANG_FORMAT_BUILD=OFF \
-DCLANG_TOOL_CLANG_IMPORT_TEST_BUILD=OFF \
-DCLANG_TOOL_CLANG_OFFLOAD_BUNDLER_BUILD=OFF \
-DCLANG_TOOL_CLANG_RENAME_BUILD=OFF \
-DCLANG_TOOL_CLANG_REFACTOR_BUILD=OFF \
-DCLANG_PLUGIN_SUPPORT=OFF \
-DCMAKE_C_FLAGS='-fno-aggressive-loop-optimizations -fexceptions' \
-DCMAKE_C_FLAGS_RELEASE='-O2 -DNDEBUG' \
-DCMAKE_CXX_FLAGS='-fno-aggressive-loop-optimizations -D_GLIBCXX_USE_CXX11_ABI=0 -fexceptions' \
-DCMAKE_CXX_FLAGS_RELEASE='-O2 -DNDEBUG' \
-DCMAKE_INSTALL_PREFIX=${LOCAL_DIR}/install_tool \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_TARGETS_TO_BUILD=${BUILD_TARGET} \
-DLLVM_USE_PERF=ON \
../clang
;;
*)
log "Internal Error: option processing error: $1"
log "please write right paramenter in ${CONFIG_FILE_NAME}"
die "[Error] clang not supported build type."
exit 1
esac
if [ $? -ne 0 ]; then
die "[Error] clang configure failed."
fi
log "[Notice] clang End configure"
log "[Notice] clang using \"${COMPILE_TYPE_LIST}\" Begin make"
make -s -j16
if [ $? -ne 0 ]; then
die "clang make failed."
fi
log "[Notice] clang End make"
log "[Notice] clang using \"${COMPILE_TYPE_LIST}\" Begin make install"
make install
if [ $? -ne 0 ]; then
die "clang make install failed."
fi
log "[Notice] clang End make install"
make clean
done
}
function build_component()
{
build_llvm
export PATH=${LOCAL_DIR}/install_comm/bin:${PATH}
export LD_LIBRARY_PATH=${LOCAL_DIR}/install_comm/lib:${LD_LIBRARY_PATH}
build_clang
}
#######################################################################
# clean component
#######################################################################
function clean_component()
{
cd ${LOCAL_DIR}/${SOURCE_CODE_PATH}
if [ $? -ne 0 ]; then
die "[Error] cd ${LOCAL_DIR}/${SOURCE_CODE_PATH} failed."
fi
cd ${LOCAL_DIR}
if [ $? -ne 0 ]; then
die "[Error] cd ${LOCAL_DIR} failed."
fi
test -d "${SOURCE_CODE_PATH}/build" && rm -rf ${SOURCE_CODE_PATH}/build
rm -rf install_*
log "[Notice] llvm clean has been finished!"
}