#!/bin/bash
set -e
SCRIPT_DIR_3RD=$(cd "$(dirname "$0")"; pwd)
A_ROOT_DIR=$(cd "${SCRIPT_DIR_3RD}/.."; pwd)
B_REPO_NAME="acc_data"
B_REPO_DIR="${A_ROOT_DIR}/3rdparty/${B_REPO_NAME}"
B_BUILD_SCRIPT="${B_REPO_DIR}/build.sh"
B_BUILD_TYPE="release"
B_CLEAN_TYPE="clean"
print_build_start() {
echo "==============BUILDing ACCDATA REPO=============="
}
print_build_success() {
echo "==============BUILD ACCDATA REPO SUCCESS=============="
}
print_build_failure() {
echo "==============BUILD ACCDATA REPO FAILED=============="
}
echo "[INFO] Starting build script for ACCDATA repo: ${B_REPO_DIR}"
print_build_start
if [ ! -d "${B_REPO_DIR}" ]; then
echo "[ERROR] ACCDATA repo directory does not exist: ${B_REPO_DIR}" >&2
print_build_failure
exit 1
fi
if [ ! -f "${B_BUILD_SCRIPT}" ]; then
echo "[ERROR] Build script not found in ACCDATA repo: ${B_BUILD_SCRIPT}" >&2
print_build_failure
exit 1
fi
echo "[INFO] Modifying B repo CMakeLists.txt to set _accdata as STATIC library..."
B_CMAKE_FILE="${B_REPO_DIR}/src/cpp/CMakeLists.txt"
if [ ! -f "$B_CMAKE_FILE" ]; then
echo "[ERROR] CMakeLists.txt not found in B repo: $B_CMAKE_FILE" >&2
print_build_failure
exit 1
fi
cp "$B_CMAKE_FILE" "${B_CMAKE_FILE}.bak"
sed -i -E 's/add_library\(\s*_accdata\s+SHARED\s*\)/add_library(_accdata STATIC)/g' "$B_CMAKE_FILE"
sed -i -E '/install\s*\(\s*TARGETS\s+_accdata/,/\)/ s/LIBRARY DESTINATION/ARCHIVE DESTINATION/' "$B_CMAKE_FILE"
sed -i '/add_link_options($<$<COMPILE_LANGUAGE:C,CXX>:-O3>)/a add_link_options($<$<COMPILE_LANGUAGE:C,CXX>:-flto=8>)' "${B_REPO_DIR}/CMakeLists.txt"
echo "[INFO] Modification done."
cd - >/dev/null
echo "[INFO] Running clean step for ACCDATA repo..."
if ! bash "${B_BUILD_SCRIPT}" -t "${B_CLEAN_TYPE}"; then
echo "[ERROR] Clean step failed." >&2
print_build_failure
exit 1
fi
echo "[INFO] Running build step for ACCDATA repo with type: ${B_BUILD_TYPE}..."
if bash "${B_BUILD_SCRIPT}" "${B_BUILD_TYPE}"; then
echo "[INFO] Build succeeded."
print_build_success
return 0
else
echo "[ERROR] Build failed." >&2
print_build_failure
exit 1
fi