diff --git a/Makefile b/Makefile index 03b6418..13af7c1 100644 --- a/Makefile +++ b/Makefile @@ -4,12 +4,8 @@ all: build_exec_dbg -# generates different profile info -build_profile: - @cbuild/call_task.sh build_profile 2>&1 | tee make_raw.log - -# creates executable using profile info generated by build_profile -build_exec: build_profile +# creates executable using profile info generated by profile +build_exec: profile @cbuild/call_task.sh build_exec 2>&1 | tee -a make_raw.log # creates executable with debug info and no optimizations @@ -32,6 +28,19 @@ exec_dbg: build_exec_dbg valgrind: build_exec_dbg @cbuild/call_task.sh valgrind 2>&1 | tee -a make_raw.log +# generates profiling info +profile: + @cbuild/call_task.sh profile 2>&1 | tee make_raw.log + +# compiles program with -pg and runs it with gprof +# uses gprof2dot python script to generate function call tree +gprof: + @cbuild/call_task.sh gprof 2>&1 | tee make_raw.log + +# compiles executable with sanitizers and executes it to find errors and warnings +sanitize: + @cbuild/call_task.sh sanitize 2>&1 | tee make_raw.log + ###################################### ###### Other tasks ####### ###################################### diff --git a/cbuild b/cbuild index 112fcc0..d64b1f3 160000 --- a/cbuild +++ b/cbuild @@ -1 +1 @@ -Subproject commit 112fcc04652d6ce65fbde215cd3d1f8935db2a7c +Subproject commit d64b1f3e9b41f6843c501ed28df6adbfdb384217 diff --git a/default.config b/default.config index 5603f05..0b0cda8 100644 --- a/default.config +++ b/default.config @@ -1,14 +1,14 @@ #!/bin/bash -CBUILD_VERSION=5 -CONFIG_VERSION=2 +CBUILD_VERSION=6 +CONFIG_VERSION=3 -PROJECT=scolte -CMP_C=gcc -CMP_CPP=g++ -STD_C=c11 -STD_CPP=c++17 -WARN_C="-Wall -Wno-discarded-qualifiers" -WARN_CPP="-Wall" +PROJECT="scolte" +CMP_C="gcc" +CMP_CPP="g++" +STD_C="c11" +STD_CPP="c++11" +WARN_C="-Wall -Wno-discarded-qualifiers -Wextra -Wno-unused-parameter" +WARN_CPP="-Wall -Wextra -Wno-unused-parameter" SRC_C="$( find src -name '*.c')" SRC_CPP="$( find src -name '*.cpp')" #TESTS_C="$( find tests -name '*.c')" @@ -41,22 +41,6 @@ case "$TASK" in rebuild_kerep) TASK_SCRIPT=tasks/rebuild_kerep.sh ;; - # generates different profile info - build_profile) - OUTDIR="$OUTDIR/profile" - # -flto applies more optimizations across object files - # -flto=auto is needed to multithreaded copilation - # -fuse-linker-plugin is required to use static libs with lto, it strips away all - # -pg adds code to executable, that generates file containing function call info (gmon.out) - # -fprofile-generate - C_ARGS="-O2 -flto=auto -fuse-linker-plugin -pg -fprofile-generate -fprofile-prefix-path=$(realpath $OBJDIR)/objects" - CPP_ARGS="$C_ARGS" - LINKER_ARGS="$CPP_ARGS" - PRE_TASK_SCRIPT=tasks/pre_build.sh - TASK_SCRIPT=cbuild/default_tasks/build_exec.sh - POST_TASK_SCRIPT=cbuild/default_tasks/profile.sh - KEREP_BUILD_TASK=build_static_lib - ;; # creates executable using profile info generated by build_profile build_exec) # -flto applies more optimizations across object files @@ -82,14 +66,54 @@ case "$TASK" in exec) TASK_SCRIPT=cbuild/default_tasks/exec.sh ;; - # executes $EXEC_FILE with valgrind memory checker + # executes $EXEC_FILE with valgrind memory checker valgrind) VALGRIND_ARGS="-s --log-file=valgrind.log --read-var-info=yes --track-origins=yes --fullpath-after=$PROJECT/ --leak-check=full --show-leak-kinds=all" TASK_SCRIPT=cbuild/default_tasks/valgrind.sh ;; + # generates profiling info + profile) + OUTDIR="$OUTDIR/profile" + # -flto applies more optimizations across object files + # -flto=auto is needed to multithreaded copilation + # -fuse-linker-plugin is required to use static libs with lto + # -pg adds code to executable, that generates file containing function call info (gmon.out) + # -fprofile-generate generates executable with profiling code + # -fprofile-prefix-path sets path where profiling info about objects will be saved + C_ARGS="-O2 -flto=auto -fuse-linker-plugin -fprofile-generate -fprofile-prefix-path=$(realpath $OBJDIR)/objects" + CPP_ARGS="$C_ARGS" + LINKER_ARGS="$CPP_ARGS" + PRE_TASK_SCRIPT=tasks/pre_build.sh + TASK_SCRIPT=cbuild/default_tasks/build_exec.sh + POST_TASK_SCRIPT=cbuild/default_tasks/profile.sh + ;; + # compiles program with -pg and runs it with gprof + # uses gprof2dot python script to generate function call tree (pip install gprof2dot) + # requires graphviz (https://www.graphviz.org/download/source/) + gprof) + OUTDIR="$OUTDIR/gprof" + # -pg adds code to executable, that generates file containing function call info (gmon.out) + C_ARGS="-O2 -flto=auto -fuse-linker-plugin -pg" + CPP_ARGS="$C_ARGS" + LINKER_ARGS="$CPP_ARGS" + PRE_TASK_SCRIPT=tasks/pre_build.sh + TASK_SCRIPT=cbuild/default_tasks/build_exec.sh + POST_TASK_SCRIPT=cbuild/default_tasks/gprof.sh + ;; + # compiles executable with sanitizers and executes it to find errors and warnings + sanitize) + OUTDIR="$OUTDIR/sanitize" + C_ARGS="-O0 -g3 -fsanitize=undefined,address" + CPP_ARGS="$C_ARGS" + LINKER_ARGS="$CPP_ARGS" + PRE_TASK_SCRIPT=tasks/pre_build.sh + TASK_SCRIPT=cbuild/default_tasks/build_exec.sh + POST_TASK_SCRIPT=cbuild/default_tasks/exec.sh + ;; # deletes generated files clean) TASK_SCRIPT=cbuild/default_tasks/clean.sh + POST_TASK_SCRIPT=tasks/clean_additions.sh ;; # unknown task *) diff --git a/kerep b/kerep index 430b626..a2906e2 160000 --- a/kerep +++ b/kerep @@ -1 +1 @@ -Subproject commit 430b6267d19a04b725b19d01ec04d587d000405d +Subproject commit a2906e2c3aba5d3f94f9eea45bc3e6faed293a7b diff --git a/src/TUI/unicode.h b/src/TUI/unicode.h index 69c5778..1889d66 100644 --- a/src/TUI/unicode.h +++ b/src/TUI/unicode.h @@ -16,7 +16,7 @@ static inline size_t utfchar_write(utfchar ch, FILE* file){ char multibyteUtf8[8]={0}; mbstate_t mbs={0}; size_t length=c16rtomb(multibyteUtf8, ch, &mbs); - if(length!=-1) + if(length!=(size_t)-1) for(u8 i=0; i