106 lines
2.6 KiB
Bash
Executable file
106 lines
2.6 KiB
Bash
Executable file
#!/usr/bin/env zsh
|
|
|
|
###########################################################
|
|
## edit thease variables to match your project structure ##
|
|
###########################################################
|
|
BUILD_FOLDER="build"
|
|
DEFAULT_BUILD_TYPE="debug" # "debug" or "release"
|
|
TARGETS=["{{project-name}}"]
|
|
|
|
##########################################################################################
|
|
## this is where the script starts you should not need to edit anything below this line ##
|
|
##########################################################################################
|
|
#
|
|
NC="\033[0m"
|
|
COLOR="\033[1;33m"
|
|
|
|
zparseopts -D -E -F -- d:=debug r:=release t+=target h:=help || exit 1
|
|
|
|
if (( $#help > 0 )); then
|
|
echo "Usage:"
|
|
echo " ./ch actions [options]"
|
|
echo ""
|
|
echo "Actions:"
|
|
echo " c - clean project"
|
|
echo " g - generate cmake files"
|
|
echo " b - build project"
|
|
echo " r - run project"
|
|
echo " s - strip executable"
|
|
echo " d - debug with gdb"
|
|
echo ""
|
|
echo "actions can be chained so gbr will first run generate then build and then run"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -d, --debug Builds cmake in debug mode"
|
|
echo " -r, --release Builds cmake in release mode"
|
|
echo " -t CMAKE_TARGET, --target CMAKE_TARGET"
|
|
echo " Builds specific target. Builds all targets specified in order that they are specified in. Clean action is not recomended when using multiple targets."
|
|
exit 0
|
|
fi
|
|
|
|
if [[ -z "$1" ]]; then
|
|
echo "no actions provided"
|
|
exit 1
|
|
fi
|
|
|
|
if (( $#debug > 0 )); then
|
|
BUILD_TYPE="debug"
|
|
elif (( $#release > 0 )); then
|
|
BUILD_TYPE="release"
|
|
else
|
|
BUILD_TYPE=$DEFAULT_BUILD_TYPE
|
|
fi
|
|
|
|
if (( $#target != 0 )); then
|
|
TARGETS=$#target
|
|
fi
|
|
|
|
|
|
echo() {
|
|
command echo -e "${COLOR}$@${NC}"
|
|
}
|
|
|
|
ARG=$1
|
|
|
|
BF="$BUILD_FOLDER/$BUILD_TYPE"
|
|
|
|
for TARGET in $TARGETS; do
|
|
for (( i=0; i<${#ARG}; i++ )); do
|
|
case ${ARG:$i:1} in
|
|
"c")
|
|
echo "cleaning project"
|
|
rm -rf $BUILD_FOLDER
|
|
;;
|
|
"g")
|
|
echo "generating cmake files"
|
|
CMAKE_BUILD_TYPE="$(tr '[:lower:]' '[:upper:]' <<< ${BUILD_TYPE:0:1})${BUILD_TYPE:1}"
|
|
cmake -S . -B $BF -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE
|
|
;;
|
|
"b")
|
|
echo "building project"
|
|
cmake --build $BF
|
|
;;
|
|
"r")
|
|
echo "running project"
|
|
if [[ -f "$BF/$TARGET" ]]; then
|
|
./$BF/$TARGET
|
|
fi
|
|
;;
|
|
"s")
|
|
echo "stripping executable"
|
|
strip -s $BF/$TARGET -o "$BF/$TARGET-stripped"
|
|
;;
|
|
"d")
|
|
echo "debug project"
|
|
if [[ $BUILD_TYPE == "release" ]]; then
|
|
echo "WARNING: debugging release build"
|
|
fi
|
|
gdb $BF/$TARGET
|
|
;;
|
|
*)
|
|
echo "unknown action ${1:$i:1}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
done
|