|
| 1 | +#!/bin/bash |
| 2 | +set -e |
| 3 | + |
| 4 | +# ----------------------------- GLOBAL VARIABLES ----------------------------- |
| 5 | +STONEFISH_DIR="$HOME/opt/stonefish" |
| 6 | +ROS_WORKSPACE="$HOME/ros2_ws" |
| 7 | +LOG_PREFIX="[$(date +%T)]" |
| 8 | + |
| 9 | +# ----------------------------- HELPER FUNCTIONS ----------------------------- |
| 10 | +log_info() { |
| 11 | + echo -e "$LOG_PREFIX [INFO] $1" |
| 12 | +} |
| 13 | + |
| 14 | +log_error() { |
| 15 | + echo -e "$LOG_PREFIX [ERROR] $1" >&2 |
| 16 | +} |
| 17 | + |
| 18 | +# ----------------------------- PYTHON DEPENDENCIES ----------------------------- |
| 19 | +install_python_dependencies() { |
| 20 | + log_info "Installing/upgrading Python dependencies..." |
| 21 | + pip3 install --upgrade pip |
| 22 | + pip3 install --upgrade 'numpy<1.25' 'scipy<1.12' |
| 23 | + log_info "Python dependencies installed." |
| 24 | +} |
| 25 | + |
| 26 | +# ----------------------------- C++ DEPENDENCIES ----------------------------- |
| 27 | +install_cpp_dependencies() { |
| 28 | + log_info "Installing required C++ dependencies..." |
| 29 | + sudo apt-get update -qq |
| 30 | + sudo apt-get install -y \ |
| 31 | + build-essential \ |
| 32 | + cmake \ |
| 33 | + git \ |
| 34 | + libglm-dev \ |
| 35 | + libsdl2-dev \ |
| 36 | + libfreetype6-dev |
| 37 | + log_info "C++ dependencies installed." |
| 38 | +} |
| 39 | + |
| 40 | +# ----------------------------- STONEFISH INSTALLATION ----------------------------- |
| 41 | +install_stonefish() { |
| 42 | + if [ -d "$STONEFISH_DIR" ]; then |
| 43 | + log_info "Stonefish is already installed at $STONEFISH_DIR. Skipping clone." |
| 44 | + else |
| 45 | + log_info "Cloning Stonefish repository..." |
| 46 | + mkdir -p "$STONEFISH_DIR" |
| 47 | + git clone https://github.com/patrykcieslak/stonefish.git "$STONEFISH_DIR" |
| 48 | + fi |
| 49 | + |
| 50 | + log_info "Building Stonefish..." |
| 51 | + mkdir -p "$STONEFISH_DIR/build" |
| 52 | + cd "$STONEFISH_DIR/build" |
| 53 | + |
| 54 | + cmake .. |
| 55 | + make -j"$(nproc)" |
| 56 | + sudo make install |
| 57 | + |
| 58 | + log_info "Stonefish installation complete." |
| 59 | +} |
| 60 | + |
| 61 | +# ----------------------------- BUILD ROS 2 PACKAGES ----------------------------- |
| 62 | +build_ros_workspace() { |
| 63 | + log_info "Setting up ROS 2 workspace..." |
| 64 | + cd "$ROS_WORKSPACE" |
| 65 | + |
| 66 | + log_info "Sourcing ROS 2 setup..." |
| 67 | + . /opt/ros/humble/setup.sh |
| 68 | + |
| 69 | + log_info "Building stonefish_ros2 first (dependency for other packages)..." |
| 70 | + colcon build --packages-select stonefish_ros2 --symlink-install |
| 71 | + |
| 72 | + log_info "Sourcing workspace..." |
| 73 | + . install/setup.bash |
| 74 | + |
| 75 | + log_info "Building remaining ROS 2 packages..." |
| 76 | + colcon build --packages-ignore stonefish_ros2 --symlink-install |
| 77 | + |
| 78 | + log_info "ROS 2 workspace build complete." |
| 79 | +} |
| 80 | + |
| 81 | +# ----------------------------- EXECUTE INSTALLATION ----------------------------- |
| 82 | +log_info "Starting manual installation of extra dependencies..." |
| 83 | +install_python_dependencies |
| 84 | +install_cpp_dependencies |
| 85 | +install_stonefish |
| 86 | +build_ros_workspace |
| 87 | + |
| 88 | +log_info "All dependencies installed successfully." |
0 commit comments