54 lines
1.3 KiB
Bash
Executable File
54 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Get the absolute path of the project root (where this script lives)
|
|
# This ensures the script works even if called from elsewhere
|
|
ROOT_DIR=$(cd "$(dirname "$0")" && pwd)
|
|
BUILD_DIR="$ROOT_DIR/build"
|
|
|
|
usage() {
|
|
echo "Usage: $0 {debug|release|test}"
|
|
exit 1
|
|
}
|
|
|
|
# Check if an argument was provided
|
|
if [ -z "$1" ]; then
|
|
usage
|
|
fi
|
|
|
|
TYPE="$1"
|
|
|
|
case "$TYPE" in
|
|
debug|release|test)
|
|
TARGET_DIR="$BUILD_DIR/$TYPE"
|
|
|
|
# Create directory structure if it doesn't exist
|
|
mkdir -p "$TARGET_DIR"
|
|
|
|
echo "--- Entering $TYPE build mode ---"
|
|
cd "$TARGET_DIR" || exit 1
|
|
|
|
# Set CMake build type based on argument
|
|
# We capitalize the first letter to match CMake conventions
|
|
if [ "$TYPE" = "debug" ]; then
|
|
CMAKE_TYPE="Debug"
|
|
elif [ "$TYPE" = "release" ]; then
|
|
CMAKE_TYPE="Release"
|
|
else
|
|
CMAKE_TYPE="Debug" # Tests usually run in debug mode
|
|
fi
|
|
|
|
# Run CMake and Make
|
|
cmake -DCMAKE_BUILD_TYPE="$CMAKE_TYPE" ../..
|
|
|
|
# If it's the test build, we target 'test_suite', otherwise 'all'
|
|
if [ "$TYPE" = "test" ]; then
|
|
make test_suite
|
|
else
|
|
make
|
|
fi
|
|
;;
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|