summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2024-01-12 20:35:23 +0100
committerMitya Selivanov <automainint@guattari.tech>2024-01-12 20:35:23 +0100
commit86fec778cdb9a4c1085f637f0b083ee506804f67 (patch)
treed30019f38d6554e506f204aad4a47b1342ab7111
parent8d42eab2045c11cb79657a187c779cb5708b2bde (diff)
downloadsaw-86fec778cdb9a4c1085f637f0b083ee506804f67.zip
New build script
-rw-r--r--build_and_test.sh104
1 files changed, 84 insertions, 20 deletions
diff --git a/build_and_test.sh b/build_and_test.sh
index 9083738..b2a72d0 100644
--- a/build_and_test.sh
+++ b/build_and_test.sh
@@ -1,3 +1,59 @@
+#!/bin/sh
+
+BUILD_TYPE=
+USE_COMPILER=
+DESTINATION=
+EXTRA_OPTIONS=
+EXTRA_LINK_OPTIONS=
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -H|--help)
+ echo "Build script for C projects"
+ echo ""
+ echo "Usage: ./build_and_test.sh [OPTIONS]"
+ echo ""
+ echo " -H --help - Print this info"
+ echo " -t --type - Set build type: debug, release"
+ echo " -c --compiler - Set compiler to use: gcc, clang, msvc, emcc"
+ echo " -d --destination - Set destination path"
+ echo " -o --options - Set additional options for the compiler"
+ echo " -l --link - Set additional options for the linker"
+ echo ""
+ exit 0
+ ;;
+ -t|--type)
+ BUILD_TYPE=$2
+ shift
+ shift
+ ;;
+ -c|--compiler)
+ USE_COMPILER="$2"
+ shift
+ shift
+ ;;
+ -d|--destination)
+ DESTINATION="$2"
+ shift
+ shift
+ ;;
+ -o|--options)
+ EXTRA_OPTIONS="$2"
+ shift
+ shift
+ ;;
+ -l|--link)
+ EXTRA_LINK_OPTIONS="$2"
+ shift
+ shift
+ ;;
+ *)
+ echo "Unknown option $1"
+ shift
+ ;;
+ esac
+done
+
FOLDER=out_gcc
OS=Linux
COMPILE=gcc
@@ -8,33 +64,33 @@ FLAG_OBJ="-c -o "
FLAG_EXE="-o "
LINK_FLAGS="-lm -lX11 -lXi -lXcursor -lGL"
-if [ "$2" = "gcc" ]; then
+if [ "$USE_COMPILER" = "gcc" ]; then
FOLDER=out_gcc
COMPILE=gcc
-elif [ "$2" = "clang" ]; then
+elif [ "$USE_COMPILER" = "clang" ]; then
FOLDER=out_clang
COMPILE=clang
-elif [ "$2" = "msvc" ]; then
+elif [ "$USE_COMPILER" = "msvc" ]; then
FOLDER=out_msvc
COMPILE=cl.exe
OBJ_POSTFIX=.obj
FLAG_OBJ="-c -Fo"
FLAG_EXE="-Fe"
-elif [ "$2" = "emcc" ]; then
+elif [ "$USE_COMPILER" = "emcc" ]; then
FOLDER=out_emcc
COMPILE=emcc
EXE_POSTFIX=.js
LINK_FLAGS="-sFULL_ES3=1"
-elif [ "$2" != "" ]; then
+elif [ "$USE_COMPILER" != "" ]; then
echo "Unknown C compiler"
exit 1
fi
-if [ "$3" != "" ]; then
- FOLDER="$3"
+if [ "$DESTINATION" != "" ]; then
+ FOLDER="$DESTINATION"
fi
-if [ "$2" != "" ]; then
+if [ "$USE_COMPILER" != "" ]; then
if command -v $COMPILE >/dev/null 2>&1; then
echo "C compiler found"
else
@@ -47,7 +103,7 @@ if [ "$COMPILE" != "emcc" ]; then
case $(uname | tr '[:upper:]' '[:lower:]') in
*darwin*)
OS=macOS
- if [ "$2" = "" ]; then
+ if [ "$USE_COMPILER" = "" ]; then
if command -v clang >/dev/null 2>&1; then
echo "C compiler found - Clang"
COMPILE=clang
@@ -62,7 +118,7 @@ if [ "$COMPILE" != "emcc" ]; then
*msys*|*cygwin*|*mingw*|*nt*|*win*)
OS=Windows
EXE_POSTFIX=.exe
- if [ "$2" = "" ]; then
+ if [ "$USE_COMPILER" = "" ]; then
if command -v cl.exe >/dev/null 2>&1; then
echo "C compiler found - MSVC"
COMPILE=cl.exe
@@ -86,7 +142,7 @@ if [ "$COMPILE" != "emcc" ]; then
fi
;;
*)
- if [ "$2" = "" ]; then
+ if [ "$USE_COMPILER" = "" ]; then
if command -v gcc >/dev/null 2>&1; then
echo "C compiler found - GCC"
elif command -v clang >/dev/null 2>&1; then
@@ -102,7 +158,7 @@ if [ "$COMPILE" != "emcc" ]; then
fi
if [ "$COMPILE" = "gcc" ] || [ "$COMPILE" = "emcc" ]; then
- if [ "$1" = "release" ]; then
+ if [ "$BUILD_TYPE" = "release" ]; then
FLAGS="-O3 -DNDEBUG"
elif [ "$COMPILE" = "gcc" ] && [ "$OS" != "Windows" ]; then
FLAGS="-O0 -fsanitize=undefined,address,leak"
@@ -112,26 +168,34 @@ if [ "$COMPILE" = "gcc" ] || [ "$COMPILE" = "emcc" ]; then
FLAGS="-O0"
fi
elif [ "$COMPILE" = "clang" ]; then
- if [ "$1" = "release" ]; then
+ if [ "$BUILD_TYPE" = "release" ]; then
FLAGS="-O3 -DNDEBUG"
else
FLAGS="-O0"
fi
else
- if [ "$1" = "release" ]; then
+ if [ "$BUILD_TYPE" = "release" ]; then
FLAGS="-O2 -DNDEBUG"
else
FLAGS="-Od"
fi
fi
+if [ "$EXTRA_OPTIONS" != "" ]; then
+ FLAGS="$EXTRA_OPTIONS $FLAGS"
+fi
+
+if [ "$EXTRA_LINK_OPTIONS" != "" ]; then
+ LINK_FLAGS="$EXTRA_LINK_OPTIONS $LINK_FLAGS"
+fi
+
if [ ! -d "$FOLDER" ]; then
mkdir "$FOLDER"
fi
echo ""
-echo "Compiler options: ${FLAGS}"
-echo "Link options: ${LINK_FLAGS}"
+echo "Compiler options: $FLAGS"
+echo "Link options: $LINK_FLAGS"
echo ""
if [ ! -f "$FOLDER/_dep${OBJ_POSTFIX}" ] || \
@@ -160,10 +224,10 @@ if [ "$COMPILE" = "emcc" ]; then
fi
echo "Build test suite"
-$COMPILE ${FLAGS} \
- ${FLAG_EXE}"$FOLDER/test_suite${EXE_POSTFIX}" \
+$COMPILE $FLAGS \
+ $FLAG_EXE"$FOLDER/test_suite$EXE_POSTFIX" \
"source/tests/_exe.c" \
- ${LINK_FLAGS}
+ $LINK_FLAGS
if [ $? -ne 0 ]; then
exit 1
fi
@@ -173,7 +237,7 @@ echo ""
STATUS=0
-"$FOLDER/test_suite"
+$FOLDER/test_suite
if [ $? -ne 0 ]; then
STATUS=1
fi