From e2ee17c4293a05e1d204156756ad6ade2c10e34e Mon Sep 17 00:00:00 2001 From: haochengxia Date: Sun, 3 Aug 2025 02:43:12 +0000 Subject: [PATCH 1/2] User space --- CMakeLists.txt | 125 +++++++-- scripts/install_deps_user.sh | 498 +++++++++++++++++++++++++++++++++++ 2 files changed, 606 insertions(+), 17 deletions(-) create mode 100644 scripts/install_deps_user.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index b80a6b3..3f66b65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,6 +155,27 @@ configure_logging() # Dependency Management # ============================================================================= +# Add user-installed dependencies to search paths +if(DEFINED ENV{CMAKE_PREFIX_PATH}) + list(PREPEND CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH}) +endif() + +# Add common user installation paths +set(USER_PREFIX_PATHS + "$ENV{HOME}/local" + "$ENV{HOME}/.local" + "/usr/local" +) + +foreach(PREFIX ${USER_PREFIX_PATHS}) + if(EXISTS "${PREFIX}") + list(PREPEND CMAKE_PREFIX_PATH "${PREFIX}") + list(PREPEND CMAKE_LIBRARY_PATH "${PREFIX}/lib") + list(PREPEND CMAKE_LIBRARY_PATH "${PREFIX}/lib64") + list(PREPEND CMAKE_INCLUDE_PATH "${PREFIX}/include") + endif() +endforeach() + # Find required packages find_package(Python REQUIRED COMPONENTS Interpreter Development.Module) find_package(pybind11 CONFIG REQUIRED) @@ -170,23 +191,85 @@ include_directories(${GLib_INCLUDE_DIRS}) link_directories(${GLib_LIBRARY_DIRS}) list(APPEND required_libs ${GLib_LIBRARIES}) -# ZSTD dependency -find_package(ZSTD REQUIRED) -message(STATUS "ZSTD_INCLUDE_DIR: ${ZSTD_INCLUDE_DIR}, ZSTD_LIBRARIES: ${ZSTD_LIBRARIES}") -if("${ZSTD_LIBRARIES}" STREQUAL "") - message(FATAL_ERROR "zstd not found") +# ZSTD dependency - try multiple find methods +find_package(ZSTD QUIET) +if(NOT ZSTD_FOUND) + # Try pkg-config + pkg_check_modules(ZSTD_PC QUIET libzstd) + if(ZSTD_PC_FOUND) + set(ZSTD_FOUND TRUE) + set(ZSTD_INCLUDE_DIR ${ZSTD_PC_INCLUDE_DIRS}) + set(ZSTD_LIBRARIES ${ZSTD_PC_LIBRARIES}) + set(ZSTD_LIBRARY_DIRS ${ZSTD_PC_LIBRARY_DIRS}) + else() + # Try manual find + find_path(ZSTD_INCLUDE_DIR zstd.h + PATHS ${CMAKE_INCLUDE_PATH} + PATH_SUFFIXES zstd + ) + find_library(ZSTD_LIBRARIES zstd + PATHS ${CMAKE_LIBRARY_PATH} + ) + if(ZSTD_INCLUDE_DIR AND ZSTD_LIBRARIES) + set(ZSTD_FOUND TRUE) + endif() + endif() +endif() + +if(NOT ZSTD_FOUND) + message(FATAL_ERROR "ZSTD not found. Please install zstd or set CMAKE_PREFIX_PATH to point to user installation.") endif() + +message(STATUS "ZSTD_INCLUDE_DIR: ${ZSTD_INCLUDE_DIR}, ZSTD_LIBRARIES: ${ZSTD_LIBRARIES}") include_directories(${ZSTD_INCLUDE_DIR}) -link_directories(${ZSTD_LIBRARY_DIRS}) +if(ZSTD_LIBRARY_DIRS) + link_directories(${ZSTD_LIBRARY_DIRS}) +endif() list(APPEND required_libs ${ZSTD_LIBRARIES}) +# TCMalloc dependency (optional) +find_library(TCMALLOC_LIBRARY tcmalloc + PATHS ${CMAKE_LIBRARY_PATH} +) +if(TCMALLOC_LIBRARY) + list(APPEND optional_libs ${TCMALLOC_LIBRARY}) + message(STATUS "TCMalloc found: ${TCMALLOC_LIBRARY}") + add_compile_definitions(USE_TCMALLOC=1) +else() + message(STATUS "TCMalloc not found, using system malloc") +endif() + # Optional dependencies based on features if(ENABLE_GLCACHE) - find_package(xgboost REQUIRED) - include_directories(${XGBOOST_INCLUDE_DIR}) - list(APPEND optional_libs xgboost::xgboost) - add_compile_definitions(ENABLE_GLCACHE=1) - message(STATUS "XGBOOST_INCLUDE_DIR: ${XGBOOST_INCLUDE_DIR}") + # Try to find XGBoost + find_package(xgboost QUIET) + if(NOT xgboost_FOUND) + # Try manual find for user installation + find_path(XGBOOST_INCLUDE_DIR xgboost + PATHS ${CMAKE_INCLUDE_PATH} + ) + find_library(XGBOOST_LIBRARIES xgboost + PATHS ${CMAKE_LIBRARY_PATH} + ) + if(XGBOOST_INCLUDE_DIR AND XGBOOST_LIBRARIES) + set(xgboost_FOUND TRUE) + add_library(xgboost::xgboost UNKNOWN IMPORTED) + set_target_properties(xgboost::xgboost PROPERTIES + IMPORTED_LOCATION ${XGBOOST_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${XGBOOST_INCLUDE_DIR} + ) + endif() + endif() + + if(xgboost_FOUND) + include_directories(${XGBOOST_INCLUDE_DIR}) + list(APPEND optional_libs xgboost::xgboost) + add_compile_definitions(ENABLE_GLCACHE=1) + message(STATUS "XGBOOST_INCLUDE_DIR: ${XGBOOST_INCLUDE_DIR}") + else() + message(WARNING "XGBoost not found, disabling GLCACHE feature") + set(ENABLE_GLCACHE OFF) + endif() endif() # LightGBM for LRB and 3L_CACHE @@ -201,22 +284,30 @@ foreach(FEATURE ${LIGHTGBM_FEATURES}) endforeach() if(LIGHTGBM_NEEDED) + # Try to find LightGBM if(NOT DEFINED LIGHTGBM_PATH) - find_path(LIGHTGBM_PATH LightGBM) - endif() - if(NOT LIGHTGBM_PATH) - message(FATAL_ERROR "LIGHTGBM_PATH not found") + find_path(LIGHTGBM_PATH LightGBM + PATHS ${CMAKE_INCLUDE_PATH} + ) endif() if(NOT DEFINED LIGHTGBM_LIB) - find_library(LIGHTGBM_LIB _lightgbm) + find_library(LIGHTGBM_LIB _lightgbm + PATHS ${CMAKE_LIBRARY_PATH} + ) endif() + + if(NOT LIGHTGBM_PATH) + message(FATAL_ERROR "LIGHTGBM_PATH not found. Please install LightGBM or set CMAKE_PREFIX_PATH.") + endif() + if(NOT LIGHTGBM_LIB) - message(FATAL_ERROR "LIGHTGBM_LIB not found") + message(FATAL_ERROR "LIGHTGBM_LIB not found. Please install LightGBM or set CMAKE_PREFIX_PATH.") endif() include_directories(${LIGHTGBM_PATH}) list(APPEND optional_libs ${LIGHTGBM_LIB}) + message(STATUS "LightGBM found: ${LIGHTGBM_PATH}, ${LIGHTGBM_LIB}") endif() # ============================================================================= diff --git a/scripts/install_deps_user.sh b/scripts/install_deps_user.sh new file mode 100644 index 0000000..2e8de4f --- /dev/null +++ b/scripts/install_deps_user.sh @@ -0,0 +1,498 @@ +#!/bin/bash + +set -euo pipefail + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +# Configuration +USER_PREFIX="${HOME}/local" +USER_BIN="${USER_PREFIX}/bin" +USER_LIB="${USER_PREFIX}/lib" +USER_INCLUDE="${USER_PREFIX}/include" + +# Detect system package manager +detect_package_manager() { + if command -v apt-get >/dev/null 2>&1; then + echo "apt" + elif command -v yum >/dev/null 2>&1; then + echo "yum" + elif command -v dnf >/dev/null 2>&1; then + echo "dnf" + elif command -v pacman >/dev/null 2>&1; then + echo "pacman" + else + echo "unknown" + fi +} + +# Logging functions +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" >&2 +} + +log_step() { + echo -e "${BLUE}[STEP]${NC} $1" +} + +# Setup user directories +setup_directories() { + log_step "Setting up user directories..." + mkdir -p "${USER_PREFIX}"/{bin,lib,include,share} + mkdir -p "${HOME}/src" + + # Update environment variables + export PATH="${USER_BIN}:${PATH}" + export LD_LIBRARY_PATH="${USER_LIB}:${USER_PREFIX}/lib64:${LD_LIBRARY_PATH:-}" + export PKG_CONFIG_PATH="${USER_LIB}/pkgconfig:${PKG_CONFIG_PATH:-}" + export CPPFLAGS="-I${USER_INCLUDE} ${CPPFLAGS:-}" + export LDFLAGS="-L${USER_LIB} -L${USER_PREFIX}/lib64 ${LDFLAGS:-}" + export CMAKE_PREFIX_PATH="${USER_LIB}/cmake:${CMAKE_PREFIX_PATH:-}" + + log_info "User prefix: ${USER_PREFIX}" +} + +# Add environment setup to shell config +setup_environment() { + log_step "Setting up environment variables..." + + local env_setup=" +# User-installed dependencies +export PATH=\"${USER_BIN}:\$PATH\" +export LD_LIBRARY_PATH=\"${USER_LIB}:${USER_PREFIX}/lib64:\${LD_LIBRARY_PATH:-}\" +export PKG_CONFIG_PATH=\"${USER_LIB}/pkgconfig:\${PKG_CONFIG_PATH:-}\" +export CPPFLAGS=\"-I${USER_INCLUDE} \${CPPFLAGS:-}\" +export LDFLAGS=\"-L${USER_LIB} -L${USER_PREFIX}/lib64 \${LDFLAGS:-}\" +export CMAKE_PREFIX_PATH=\"${USER_LIB}/cmake:\${CMAKE_PREFIX_PATH:-}\" +" + + for shell_rc in "${HOME}/.bashrc" "${HOME}/.zshrc" "${HOME}/.profile"; do + if [[ -f "${shell_rc}" ]] && ! grep -q "User-installed dependencies" "${shell_rc}"; then + echo "${env_setup}" >> "${shell_rc}" + log_info "Added environment setup to ${shell_rc}" + fi + done +} + +# Download and extract function +download_and_extract() { + local url="$1" + local filename="$2" + + log_info "Downloading ${filename}..." + if [[ ! -f "${filename}" ]]; then + wget -O "${filename}" "${url}" || curl -L -o "${filename}" "${url}" + fi + + log_info "Extracting ${filename}..." + if [[ "${filename}" == *.tar.gz ]] || [[ "${filename}" == *.tgz ]]; then + tar -xzf "${filename}" + elif [[ "${filename}" == *.tar.bz2 ]]; then + tar -xjf "${filename}" + elif [[ "${filename}" == *.tar.xz ]]; then + tar -xJf "${filename}" + elif [[ "${filename}" == *.zip ]]; then + unzip -q "${filename}" + fi +} + +# Install CMake +install_cmake() { + log_step "Installing CMake..." + local cmake_version="3.31.0" + local cmake_dir="${HOME}/src/cmake" + + pushd "${HOME}/src" >/dev/null + + if [[ ! -d "${cmake_dir}" ]]; then + download_and_extract \ + "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/cmake-${cmake_version}-linux-x86_64.tar.gz" \ + "cmake-${cmake_version}-linux-x86_64.tar.gz" + + mv "cmake-${cmake_version}-linux-x86_64" "${cmake_dir}" + fi + + # Create symlinks + ln -sf "${cmake_dir}/bin/cmake" "${USER_BIN}/cmake" + ln -sf "${cmake_dir}/bin/ctest" "${USER_BIN}/ctest" + ln -sf "${cmake_dir}/bin/cpack" "${USER_BIN}/cpack" + + popd >/dev/null + log_info "CMake installed: $(cmake --version | head -n1)" +} + +# Install Ninja build system +install_ninja() { + log_step "Installing Ninja..." + local ninja_version="1.11.1" + + pushd "${HOME}/src" >/dev/null + + if [[ ! -f "${USER_BIN}/ninja" ]]; then + download_and_extract \ + "https://github.com/ninja-build/ninja/releases/download/v${ninja_version}/ninja-linux.zip" \ + "ninja-linux.zip" + + chmod +x ninja + mv ninja "${USER_BIN}/" + fi + + popd >/dev/null + log_info "Ninja installed: $(ninja --version)" +} + +# Install Zstd +install_zstd() { + log_step "Installing Zstd..." + local zstd_version="1.5.5" + + pushd "${HOME}/src" >/dev/null + + if [[ ! -f "${USER_LIB}/libzstd.so" ]]; then + download_and_extract \ + "https://github.com/facebook/zstd/releases/download/v${zstd_version}/zstd-${zstd_version}.tar.gz" \ + "zstd-${zstd_version}.tar.gz" + + pushd "zstd-${zstd_version}" >/dev/null + make -j$(nproc) + make install PREFIX="${USER_PREFIX}" + + # Create pkg-config file for Zstd + mkdir -p "${USER_LIB}/pkgconfig" + cat > "${USER_LIB}/pkgconfig/libzstd.pc" << EOF +prefix=${USER_PREFIX} +exec_prefix=\${prefix} +libdir=\${exec_prefix}/lib +includedir=\${prefix}/include + +Name: libzstd +Description: fast compression library +URL: https://facebook.github.io/zstd/ +Version: ${zstd_version} +Libs: -L\${libdir} -lzstd +Cflags: -I\${includedir} +EOF + + popd >/dev/null + fi + + popd >/dev/null + log_info "Zstd installed successfully" +} + +# Install Google Perftools (tcmalloc) +install_perftools() { + log_step "Installing Google Perftools..." + local perftools_version="2.13" + + pushd "${HOME}/src" >/dev/null + + if [[ ! -f "${USER_LIB}/libtcmalloc.so" ]]; then + download_and_extract \ + "https://github.com/gperftools/gperftools/releases/download/gperftools-${perftools_version}/gperftools-${perftools_version}.tar.gz" \ + "gperftools-${perftools_version}.tar.gz" + + pushd "gperftools-${perftools_version}" >/dev/null + ./configure --prefix="${USER_PREFIX}" + make -j$(nproc) + make install + + # Create pkg-config file for tcmalloc + mkdir -p "${USER_LIB}/pkgconfig" + cat > "${USER_LIB}/pkgconfig/libtcmalloc.pc" << EOF +prefix=${USER_PREFIX} +exec_prefix=\${prefix} +libdir=\${exec_prefix}/lib +includedir=\${prefix}/include + +Name: libtcmalloc +Description: Google's fast malloc library +URL: https://github.com/gperftools/gperftools +Version: ${perftools_version} +Libs: -L\${libdir} -ltcmalloc +Cflags: -I\${includedir} +EOF + + popd >/dev/null + fi + + popd >/dev/null + log_info "Google Perftools installed successfully" +} + +# Install XGBoost +install_xgboost() { + log_step "Installing XGBoost..." + + pushd "${HOME}/src" >/dev/null + + if [[ ! -d "xgboost" ]]; then + git clone --recursive https://github.com/dmlc/xgboost.git + fi + + pushd xgboost >/dev/null + git pull origin master + git submodule update --init --recursive + + mkdir -p build + pushd build >/dev/null + cmake -G Ninja -DCMAKE_INSTALL_PREFIX="${USER_PREFIX}" .. + ninja + ninja install + popd >/dev/null + popd >/dev/null + + popd >/dev/null + log_info "XGBoost installed successfully" +} + +# Install LightGBM +install_lightgbm() { + log_step "Installing LightGBM..." + + pushd "${HOME}/src" >/dev/null + + if [[ ! -d "LightGBM" ]]; then + git clone --recursive https://github.com/microsoft/LightGBM.git + fi + + pushd LightGBM >/dev/null + git pull origin master + git submodule update --init --recursive + + mkdir -p build + pushd build >/dev/null + cmake -G Ninja -DCMAKE_INSTALL_PREFIX="${USER_PREFIX}" .. + ninja + ninja install + popd >/dev/null + popd >/dev/null + + popd >/dev/null + log_info "LightGBM installed successfully" +} + +# Create CMake configuration files +create_cmake_configs() { + log_step "Creating CMake configuration files..." + + # Create CMake config for Zstd + mkdir -p "${USER_LIB}/cmake/zstd" + cat > "${USER_LIB}/cmake/zstd/zstdConfig.cmake" << EOF +set(ZSTD_FOUND TRUE) +set(ZSTD_INCLUDE_DIRS "${USER_INCLUDE}") +set(ZSTD_LIBRARIES "${USER_LIB}/libzstd.so") +set(ZSTD_LIBRARY "${USER_LIB}/libzstd.so") +EOF + + # Create CMake config for tcmalloc + mkdir -p "${USER_LIB}/cmake/tcmalloc" + cat > "${USER_LIB}/cmake/tcmalloc/tcmallocConfig.cmake" << EOF +set(TCMALLOC_FOUND TRUE) +set(TCMALLOC_INCLUDE_DIRS "${USER_INCLUDE}") +set(TCMALLOC_LIBRARIES "${USER_LIB}/libtcmalloc.so") +set(TCMALLOC_LIBRARY "${USER_LIB}/libtcmalloc.so") +EOF + + # Create CMake config for XGBoost + mkdir -p "${USER_LIB}/cmake/xgboost" + cat > "${USER_LIB}/cmake/xgboost/xgboostConfig.cmake" << EOF +set(XGBOOST_FOUND TRUE) +set(XGBOOST_INCLUDE_DIRS "${USER_INCLUDE}") +if(EXISTS "${USER_PREFIX}/lib64/libxgboost.so") + set(XGBOOST_LIBRARIES "${USER_PREFIX}/lib64/libxgboost.so") + set(XGBOOST_LIBRARY "${USER_PREFIX}/lib64/libxgboost.so") +else() + set(XGBOOST_LIBRARIES "${USER_LIB}/libxgboost.so") + set(XGBOOST_LIBRARY "${USER_LIB}/libxgboost.so") +endif() +EOF + + # Create CMake config for LightGBM + mkdir -p "${USER_LIB}/cmake/lightgbm" + cat > "${USER_LIB}/cmake/lightgbm/lightgbmConfig.cmake" << EOF +set(LIGHTGBM_FOUND TRUE) +set(LIGHTGBM_INCLUDE_DIRS "${USER_INCLUDE}") +if(EXISTS "${USER_PREFIX}/lib64/lib_lightgbm.so") + set(LIGHTGBM_LIBRARIES "${USER_PREFIX}/lib64/lib_lightgbm.so") + set(LIGHTGBM_LIBRARY "${USER_PREFIX}/lib64/lib_lightgbm.so") +else() + set(LIGHTGBM_LIBRARIES "${USER_LIB}/lib_lightgbm.so") + set(LIGHTGBM_LIBRARY "${USER_LIB}/lib_lightgbm.so") +endif() +EOF + + log_info "CMake configuration files created" +} + +# Verify installations +verify_installations() { + log_step "Verifying installations..." + + local errors=0 + + # Check Zstd + if [[ ! -f "${USER_LIB}/libzstd.so" ]]; then + log_error "Zstd library not found: ${USER_LIB}/libzstd.so" + ((errors++)) + else + log_info "✓ Zstd library found" + fi + + # Check tcmalloc + if [[ ! -f "${USER_LIB}/libtcmalloc.so" ]]; then + log_error "tcmalloc library not found: ${USER_LIB}/libtcmalloc.so" + ((errors++)) + else + log_info "✓ tcmalloc library found" + fi + + # Check XGBoost + if [[ ! -f "${USER_LIB}/libxgboost.so" ]] && [[ ! -f "${USER_PREFIX}/lib64/libxgboost.so" ]]; then + log_warn "XGBoost library not found: ${USER_LIB}/libxgboost.so or ${USER_PREFIX}/lib64/libxgboost.so" + else + log_info "✓ XGBoost library found" + fi + + # Check LightGBM + if [[ ! -f "${USER_LIB}/lib_lightgbm.so" ]]; then + log_warn "LightGBM library not found: ${USER_LIB}/lib_lightgbm.so" + else + log_info "✓ LightGBM library found" + fi + + if [[ $errors -gt 0 ]]; then + log_error "Installation verification failed with $errors error(s)" + return 1 + else + log_info "All core libraries verified successfully" + fi +} + +# Check system dependencies +check_system_dependencies() { + log_step "Checking system dependencies..." + + local pkg_manager=$(detect_package_manager) + log_info "Detected package manager: ${pkg_manager}" + + # Check for essential build tools + local missing_tools=() + + if ! command -v gcc >/dev/null 2>&1; then + missing_tools+=("gcc") + fi + + if ! command -v make >/dev/null 2>&1; then + missing_tools+=("make") + fi + + if ! command -v wget >/dev/null 2>&1 && ! command -v curl >/dev/null 2>&1; then + missing_tools+=("wget or curl") + fi + + if ! command -v git >/dev/null 2>&1; then + missing_tools+=("git") + fi + + if [[ ${#missing_tools[@]} -gt 0 ]]; then + log_warn "Missing system dependencies: ${missing_tools[*]}" + log_info "Please install them using your system package manager:" + + case "${pkg_manager}" in + "apt") + log_info " sudo apt update && sudo apt install build-essential wget git" + ;; + "yum") + log_info " sudo yum groupinstall 'Development Tools' && sudo yum install wget git" + ;; + "dnf") + log_info " sudo dnf groupinstall 'Development Tools' && sudo dnf install wget git" + ;; + "pacman") + log_info " sudo pacman -S base-devel wget git" + ;; + *) + log_warn "Unknown package manager. Please install: ${missing_tools[*]}" + ;; + esac + + log_warn "Continuing with installation, but some tools may fail..." + else + log_info "All essential build tools are available" + fi +} + +# Main installation function +main() { + log_info "Starting user-level dependency installation..." + log_warn "This script will install dependencies to ${USER_PREFIX}" + log_warn "Make sure to source your shell config after installation!" + + # Check system dependencies first + check_system_dependencies + + setup_directories + setup_environment + + # Install build tools + install_cmake + install_ninja + + # Install libraries + install_zstd + install_perftools + + # Install ML libraries (optional, comment out if not needed) + if command -v git >/dev/null 2>&1; then + install_xgboost + install_lightgbm + else + log_warn "Git not available, skipping XGBoost and LightGBM" + fi + + # Create CMake configuration files + create_cmake_configs + + # Verify installations + verify_installations + + log_info "Installation completed!" + log_info "Please run: source ~/.bashrc (or your shell config file)" + log_info "Or start a new terminal session to use the installed dependencies." + + echo + log_info "Installed tools:" + echo " - CMake: ${USER_BIN}/cmake" + echo " - Ninja: ${USER_BIN}/ninja" + echo " - XGBoost: ${USER_LIB}/libxgboost.so" + echo " - LightGBM: ${USER_LIB}/lib_lightgbm.so" + echo " - Libraries in: ${USER_LIB}" + echo " - Headers in: ${USER_INCLUDE}" + + echo + log_info "To build libCacheSim with these dependencies, use:" + echo " mkdir build && cd build" + echo " cmake -DCMAKE_PREFIX_PATH=\"${USER_LIB}/cmake\" .." + echo " make -j$(nproc)" + echo + log_info "Or set these environment variables before building:" + echo " export CMAKE_PREFIX_PATH=\"${USER_LIB}/cmake:\$CMAKE_PREFIX_PATH\"" + echo " export PKG_CONFIG_PATH=\"${USER_LIB}/pkgconfig:\$PKG_CONFIG_PATH\"" + echo " export LD_LIBRARY_PATH=\"${USER_LIB}:${USER_PREFIX}/lib64:\$LD_LIBRARY_PATH\"" +} + +# Run main function +main "$@" \ No newline at end of file From fad615178521b8fe4a1916fe2443840a08d7d56a Mon Sep 17 00:00:00 2001 From: haochengxia Date: Sun, 3 Aug 2025 00:21:43 -0400 Subject: [PATCH 2/2] Fix install on cluster --- CMakeLists.txt | 27 ++++++++++++++------------- scripts/install_deps_user.sh | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f66b65..05bdbc2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,16 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) +# ============================================================================ +set(USER_PREFIX "$ENV{HOME}/local") + +list(APPEND CMAKE_PREFIX_PATH "${USER_PREFIX}") +list(APPEND CMAKE_LIBRARY_PATH "${USER_PREFIX}/lib") +list(APPEND CMAKE_INCLUDE_PATH "${USER_PREFIX}/include") + +include_directories("${USER_PREFIX}/include") +link_directories("${USER_PREFIX}/lib") + # ============================================================================= # Compiler Flags Configuration # ============================================================================= @@ -31,7 +41,7 @@ set(BASE_CXX_FLAGS "-fPIC -fno-strict-overflow -fno-strict-aliasing") # Compiler-specific flags if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(COMPILER_SPECIFIC_FLAGS "-Wno-cast-user-defined -Wno-array-bounds") + set(COMPILER_SPECIFIC_FLAGS "-Wno-cast-user-defined -Wno-array-bounds -Wno-type-limits") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(COMPILER_SPECIFIC_FLAGS "-Wno-array-bounds") else() @@ -167,17 +177,8 @@ set(USER_PREFIX_PATHS "/usr/local" ) -foreach(PREFIX ${USER_PREFIX_PATHS}) - if(EXISTS "${PREFIX}") - list(PREPEND CMAKE_PREFIX_PATH "${PREFIX}") - list(PREPEND CMAKE_LIBRARY_PATH "${PREFIX}/lib") - list(PREPEND CMAKE_LIBRARY_PATH "${PREFIX}/lib64") - list(PREPEND CMAKE_INCLUDE_PATH "${PREFIX}/include") - endif() -endforeach() - # Find required packages -find_package(Python REQUIRED COMPONENTS Interpreter Development.Module) +find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module) find_package(pybind11 CONFIG REQUIRED) find_package(PkgConfig REQUIRED) @@ -354,7 +355,7 @@ set(PYTHON_MODULE_SOURCES ) # Create Python module -python_add_library(libcachesim_python MODULE ${PYTHON_MODULE_SOURCES} WITH_SOABI) +pybind11_add_module(libcachesim_python ${PYTHON_MODULE_SOURCES} WITH_SOABI) # Configure target properties set_target_properties(libcachesim_python PROPERTIES @@ -410,4 +411,4 @@ configure_platform_specific_linking(libcachesim_python) # Installation # ============================================================================= -install(TARGETS libcachesim_python LIBRARY DESTINATION libcachesim) \ No newline at end of file +install(TARGETS libcachesim_python LIBRARY DESTINATION libcachesim) diff --git a/scripts/install_deps_user.sh b/scripts/install_deps_user.sh index 2e8de4f..91a7c0e 100644 --- a/scripts/install_deps_user.sh +++ b/scripts/install_deps_user.sh @@ -495,4 +495,4 @@ main() { } # Run main function -main "$@" \ No newline at end of file +main "$@"