#!/bin/bash
export BUILD_MODE=${1:-RELEASE}
export BUILD_TESTS=${2:-OFF}
export BUILD_OPEN_ABI=${3:-OFF}
export BUILD_PYTHON=${4:-ON}
export ENABLE_PTRACER=${5:-ON}
readonly SCRIPT_FULL_PATH=$(dirname $(readlink -f "$0"))
readonly PROJECT_FULL_PATH=$(dirname "$SCRIPT_FULL_PATH")
readonly MMC_BUILD_JOBS="${MMC_BUILD_JOBS:-32}"
if [ "${BUILD_TESTS}" == "ON" ]; then
readonly MOCKCPP_PATH="$PROJECT_FULL_PATH/test/3rdparty/mockcpp"
readonly TEST_3RD_PATCH_PATH="$PROJECT_FULL_PATH/test/3rdparty/patch"
dos2unix "$MOCKCPP_PATH/include/mockcpp/JmpCode.h"
dos2unix "$MOCKCPP_PATH/include/mockcpp/mockcpp.h"
dos2unix "$MOCKCPP_PATH/src/JmpCode.cpp"
dos2unix "$MOCKCPP_PATH/src/JmpCodeArch.h"
dos2unix "$MOCKCPP_PATH/src/JmpCodeX64.h"
dos2unix "$MOCKCPP_PATH/src/JmpCodeX86.h"
dos2unix "$MOCKCPP_PATH/src/JmpOnlyApiHook.cpp"
dos2unix "$MOCKCPP_PATH/src/UnixCodeModifier.cpp"
dos2unix $TEST_3RD_PATCH_PATH/*.patch
fi
set -e
readonly ROOT_PATH=$(dirname $(readlink -f "$0"))
CURRENT_DIR=$(pwd)
cd ${ROOT_PATH}/..
PROJ_DIR=$(pwd)
rm -rf ./build ./output
mkdir -p "${PROJ_DIR}/output"
mkdir -p "${PROJ_DIR}/build"
if [ "${BUILD_PYTHON}" != "ON" ]; then
echo "========= [warning] cannot skip build python for meta HA ============"
BUILD_PYTHON=ON
fi
VERSION="$(cat VERSION | tr -d '[:space:]')"
export MEMCACHE_VERSION="${VERSION}"
echo "VERSION IS ${VERSION}"
GIT_COMMIT=`git rev-parse HEAD` || true
{
echo "memcache_hybrid version info:"
echo "memcache_hybrid version: ${MEMCACHE_VERSION}"
echo "git: ${GIT_COMMIT}"
} > "${PROJ_DIR}/output/VERSION"
cp -f "${PROJ_DIR}/output/VERSION" "${PROJ_DIR}/src/memcache/python/memcache_hybrid/"
rm -f "${PROJ_DIR}/output/VERSION"
readonly BACK_PATH_EVN=$PATH
if [ -z "$PYTHON_HOME" ]; then
CHECK_DIR="/usr/local/python3.11"
if [ -d "$CHECK_DIR" ]; then
export PYTHON_HOME="$CHECK_DIR"
else
export PYTHON_HOME="/usr/local"
fi
echo "Not set PYTHON_HOME, and use $PYTHON_HOME"
fi
export PYTHON_HOME="${PYTHON_HOME%/}"
export LD_LIBRARY_PATH=$PYTHON_HOME/lib:$LD_LIBRARY_PATH
export PATH=$PYTHON_HOME/bin:$BACK_PATH_EVN
export CMAKE_PREFIX_PATH=$PYTHON_HOME
if command -v ninja &> /dev/null; then
export GENERATOR="Ninja"
export MAKE_CMD=ninja
else
export GENERATOR="Unix Makefiles"
export MAKE_CMD=make
fi
cmake \
-G "$GENERATOR" \
-DCMAKE_BUILD_TYPE="${BUILD_MODE}" \
-DBUILD_TESTS="${BUILD_TESTS}" \
-DBUILD_OPEN_ABI="${BUILD_OPEN_ABI}" \
-DBUILD_PYTHON="${BUILD_PYTHON}" \
-DENABLE_PTRACER="${ENABLE_PTRACER}" \
-S . -B build/
${MAKE_CMD} install -j"${MMC_BUILD_JOBS}" -C build/
FABRIC_PROJ_DIR=${PROJ_DIR}/3rdparty/memfabric_hybrid
mkdir -p "${PROJ_DIR}/src/memcache/python/memcache_hybrid/lib"
\cp -v "${PROJ_DIR}/output/memcache/lib64/libmf_memcache.so" "${PROJ_DIR}/src/memcache/python/memcache_hybrid/lib"
mkdir -p "${PROJ_DIR}/src/memcache/python/memcache_hybrid/config"
\cp -v "${PROJ_DIR}"/config/* "${PROJ_DIR}/src/memcache/python/memcache_hybrid/config"
cd "${PROJ_DIR}"
rm -f "${PROJ_DIR}"/src/memcache/python/memcache_hybrid/_pymmc.cpython*.so
\cp -v "${PROJ_DIR}"/build/src/memcache/csrc/python_wrapper/_pymmc.cpython*.so "${PROJ_DIR}"/src/memcache/python/memcache_hybrid
cd "${PROJ_DIR}/src/memcache/python"
rm -rf build memcache_hybrid.egg-info
export LD_LIBRARY_PATH="${PROJ_DIR}/src/memcache/python/memcache_hybrid/lib":$LD_LIBRARY_PATH
export LD_LIBRARY_PATH="${FABRIC_PROJ_DIR}/output/smem/lib64":$LD_LIBRARY_PATH
export LD_LIBRARY_PATH="${FABRIC_PROJ_DIR}/output/hybm/lib64":$LD_LIBRARY_PATH
python3 setup.py bdist_wheel
mkdir -p "${PROJ_DIR}/output/memcache/wheel"
cp "${PROJ_DIR}"/src/memcache/python/dist/*.whl "${PROJ_DIR}/output/memcache/wheel"
rm -rf "${PROJ_DIR}"/src/memcache/python/dist
rm -rf "${PROJ_DIR}/src/memcache/python/memcache_hybrid/VERSION"
rm -rf "${PROJ_DIR}/src/memcache/python/memcache_hybrid/config"
cd ${CURRENT_DIR}