diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2024-01-12 20:35:23 +0100 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2024-01-12 20:35:23 +0100 |
commit | 86fec778cdb9a4c1085f637f0b083ee506804f67 (patch) | |
tree | d30019f38d6554e506f204aad4a47b1342ab7111 | |
parent | 8d42eab2045c11cb79657a187c779cb5708b2bde (diff) | |
download | saw-86fec778cdb9a4c1085f637f0b083ee506804f67.zip |
New build script
-rw-r--r-- | build_and_test.sh | 104 |
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 |