build_scripts

This commit is contained in:
timerix 2022-08-01 01:41:52 +06:00
parent 3018020201
commit 914d4c4e10
11 changed files with 187 additions and 1 deletions

15
Makefile Normal file
View File

@ -0,0 +1,15 @@
###### Building tasks #######
build:
@build_scripts/build_configurations/build.sh
build_dbg:
@build_scripts/build_configurations/build_dbg.sh
###### Testing tasks #######
test: build
@build_scripts/build_configurations/test.sh
test_valgrind: build_dbg
@build_scripts/build_configurations/test_valgrind.sh
all: build

View File

@ -0,0 +1,10 @@
#!/bin/bash
source build_scripts/init.sh
print "${CYAN}===============[build]================\n"
clear_dir "$OUTDIR"
clear_dir "$OBJDIR"
compile_c "$BUILD_C_ARGS" "$SRC_C $TESTS_C"
compile_cpp "$BUILD_CPP_ARGS" "$SRC_CPP $TESTS_CPP"
link "$BUILD_CPP_ARGS $BUILD_LINKER_ARGS" $BUILD_FILE

View File

@ -0,0 +1,10 @@
#!/bin/bash
source build_scripts/init.sh
print "${CYAN}=============[build_dbg]==============\n"
clear_dir "$OUTDIR"
clear_dir "$OBJDIR"
compile_c "$BUILD_DBG_C_ARGS" "$SRC_C $TESTS_C"
compile_cpp "$BUILD_DBG_CPP_ARGS" "$SRC_CPP $TESTS_CPP"
link "$BUILD_DBG_CPP_ARGS $BUILD_DBG_LINKER_ARGS" $TEST_DBG_FILE

View File

@ -0,0 +1,8 @@
#!/bin/bash
source build_scripts/init.sh
print "${CYAN}================[test]================\n"
cd $OUTDIR
./$TEST_FILE
cd ..

View File

@ -0,0 +1,9 @@
#!/bin/bash
source build_scripts/init.sh
print "${CYAN}===========[test_valgrind]============\n"
cd $OUTDIR
valgrind $VALGRIND_ARGS ./$TEST_DBG_FILE
cat "valgrind.log"
cd ..

11
build_scripts/colors.sh Normal file
View File

@ -0,0 +1,11 @@
#!/bin/bash
BLACK='\033[0;30m'
GRAY='\033[0;37m'
WHITE='\033[0;97m'
RED='\033[0;91m'
GREEN='\033[0;92m'
YELLOW='\033[0;93m'
BLUE='\033[0;94m'
PURPLE='\033[0;95m'
CYAN='\033[0;96m'

View File

@ -0,0 +1,27 @@
#!/bin/bash
OUTDIR=bin
OBJDIR=obj
CMP_C=gcc
CMP_CPP=g++
STD_C=c11
STD_CPP=c++17
WARN_C="-Wall -Wno-discarded-qualifiers" #-Wextra
WARN_CPP="-Wall -Wno-unused-variable -Wno-return-type" #-Wextra
SRC_C="$( find src -name '*.c')"
SRC_CPP="$( find src -name '*.cpp')"
TESTS_C="$( find tests -name '*.c')"
TESTS_CPP="$(find tests -name '*.cpp')"
VALGRIND_ARGS="-s --log-file=valgrind.log --read-var-info=yes --track-origins=yes --fullpath-after=cobek/ --leak-check=full --show-leak-kinds=all"
# build
TEST_FILE=cb2c.com
BUILD_C_ARGS="-O2"
BUILD_CPP_ARGS="$BUILD_C_ARGS"
BUILD_LINKER_ARGS=""
# build_dbg
TEST_DBG_FILE=$TEST_FILE
BUILD_DBG_C_ARGS="-O0 -g"
BUILD_DBG_CPP_ARGS="$BUILD_DBG_C_ARGS"
BUILD_DBG_LINKER_ARGS=""

View File

@ -0,0 +1,72 @@
#!/bin/bash
function print {
printf "$1$GRAY"
}
function clear_dir {
print "${BLUE}clearing $1\n"
rm -rf $1
mkdir $1
}
function compile {
local cmp=$1
print "${BLUE}compiler: ${GRAY}$cmp\n"
local std=$2
print "${BLUE}standard: ${GRAY}$std\n"
local warn=$3
print "${BLUE}warnings: ${GRAY}$warn\n"
local args=$4
print "${BLUE}args: ${GRAY}$args\n"
local sources=$5
print "${BLUE}sources: ${GRAY}$sources\n"
local compilation_error=0
for srcfile in $sources
do (
local object="$OBJDIR/$(basename $srcfile).o"
if ! $($cmp -std=$std $warn $args -c -o $object $srcfile)
then
print "${RED}some error happened\n"
compilation_error=1
fi
) & done
wait
if [ $compilation_error != 0 ]
then
exit 1
fi
}
# (args, sources)
function compile_c {
print "${CYAN}-------------[compile_c]--------------\n"
compile $CMP_C $STD_C "$WARN_C" "$1" "$2"
}
# (args, sources)
function compile_cpp {
print "${CYAN}------------[compile_cpp]-------------\n"
compile $CMP_CPP $STD_CPP "$WARN_CPP" "$1" "$2"
}
# (args, outfile)
function link {
print "${CYAN}----------------[link]----------------\n"
local args=$1
print "${BLUE}args: ${GRAY}$args\n"
local outfile=$OUTDIR/$2
print "${BLUE}outfile: ${GRAY}$outfile\n"
local objects="$(find $OBJDIR -name *.o)"
print "${BLUE}objects: ${GRAY}$objects\n"
if $CMP_CPP $args -o $outfile $(echo $objects | tr '\n' ' ')
then
print "${GREEN}file $CYAN$outfile ${GREEN}created\n"
rm -rf $OBJDIR
else
print "${RED}some error happened\n"
exit 1
fi
}

23
build_scripts/init.sh Normal file
View File

@ -0,0 +1,23 @@
#!/bin/bash
reset
tabs 4
source build_scripts/colors.sh
source build_scripts/functions.sh
if [ ! -f ".config" ]; then
print "${YELLOW}./.config doesn't exists\n"
cp build_scripts/default.config.sh .config
print "${YELLOW}default config created\n"
while true; do
print "${WHITE}continue? (y/n) "
read answ
case $answ in
[Yy] ) break;;
[Nn] ) exit;;
* ) print "${RED}incorrect answer\n";;
esac
done
fi
source .config

View File

@ -25,7 +25,7 @@ Maybe _throw_wrongchar(SharedLexerData* sld){
char* errline=string_extract(line); char* errline=string_extract(line);
char* _context=string_extract(context); char* _context=string_extract(context);
printf("\n\e[91mwrong char <%c> at [%s:%u:%u %s]\n >>> %s\n", printf("\n\e[91mwrong char <%c> at [%s:%u:%u %s]\n >>> %s\n",
source[charnum], filename,linenum,charnum,context, errline); source[charnum], filename,linenum,charnum,_context, errline);
exit(96); exit(96);
} }
#define throw_wrongchar(freeMem) { freeMem; return _throw_wrongchar(sld); } #define throw_wrongchar(freeMem) { freeMem; return _throw_wrongchar(sld); }

View File

@ -2,6 +2,7 @@
#include "../../../kerep/src/base/base.h" #include "../../../kerep/src/base/base.h"
typedef enum lexer_type{ typedef enum lexer_type{
AutoarrTokenPtr=my_type_last+1 AutoarrTokenPtr=my_type_last+1
} lexer_type; } lexer_type;