From 574ce6eab3b65e05888adad95a0211f532dd1125 Mon Sep 17 00:00:00 2001 From: Timerix22 Date: Thu, 22 Feb 2024 00:59:54 +0600 Subject: [PATCH] fixes to dependency resolution --- default.Makefile | 186 +++++++++++++++++++++-------------------- default_tasks/clean.sh | 6 +- functions.sh | 5 +- rebuild_dep.sh | 2 +- 4 files changed, 103 insertions(+), 96 deletions(-) diff --git a/default.Makefile b/default.Makefile index f4b0332..ce0b08f 100644 --- a/default.Makefile +++ b/default.Makefile @@ -1,91 +1,95 @@ -###################################### -###### Build tasks ####### -###################################### - -all: build_exec_dbg - -# creates executable using profiling 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 -build_exec_dbg: - @cbuild/call_task.sh build_exec_dbg 2>&1 | tee make_raw.log - -# creates shared library -build_shared_lib: - @cbuild/call_task.sh build_shared_lib 2>&1 | tee make_raw.log - -# creates shared library with debug symbols and no optimizations -build_shared_lib_dbg: - @cbuild/call_task.sh build_shared_lib_dbg 2>&1 | tee make_raw.log - -# creates static library -build_static_lib: - @cbuild/call_task.sh build_static_lib 2>&1 | tee make_raw.log - -# creates static library with debug symbols and no optimizations -build_static_lib_dbg: - @cbuild/call_task.sh build_static_lib_dbg 2>&1 | tee make_raw.log - -# recompile libsome_dep.a in the next build task -#rebuild_some_dep: -# @cbuild/rebuild_dep.sh libsome_dep.a 2>&1 | tee make_raw.log - -#rebuild_all: rebuild_some_dep - -###################################### -###### Launch tasks ####### -###################################### - -# executes $EXEC_FILE -exec: build_exec - @cbuild/call_task.sh exec 2>&1 | tee -a make_raw.log - -# executes $EXEC_FILE -exec_dbg: build_exec_dbg - @cbuild/call_task.sh exec 2>&1 | tee -a make_raw.log - -# executes $EXEC_FILE with valgrind memory checker -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 (pip install gprof2dot) -# requires graphviz (https://www.graphviz.org/download/source/) -gprof: - @cbuild/call_task.sh gprof 2>&1 | tee make_raw.log - -# compiles program and runs it with callgrind (part of valgrind) -# uses gprof2dot python script to generate function call tree (pip install gprof2dot) -# requires graphviz (https://www.graphviz.org/download/source/) -# P.S. detailed results can be viewed in KCacheGrind -callgrind: - @cbuild/call_task.sh callgrind 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 ####### -###################################### - -# deletes generated files -clean: - @cbuild/call_task.sh clean 2>&1 | tee make_raw.log - -# removes all unreadable characters copied from stdio -fix_log: - sed 's/[^[:blank:][:print:]]//g' make_raw.log \ - | sed 's/\[0;[0-9][0-9]m//g' \ - | sed 's/\[0;[0-9]m//g' \ - | sed 's/\[[0-9][0-9]m//g' \ - | sed 's/\[[0-9]m//g' \ - | sed 's/ H //g' \ - | sed 's/\[3gH //g' \ - > make_fixed.log +###################################### +###### Build tasks ####### +###################################### + +all: build_exec_dbg + +# creates executable using profiling 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 +build_exec_dbg: + @cbuild/call_task.sh build_exec_dbg 2>&1 | tee make_raw.log + +# creates shared library +build_shared_lib: + @cbuild/call_task.sh build_shared_lib 2>&1 | tee make_raw.log + +# creates shared library with debug symbols and no optimizations +build_shared_lib_dbg: + @cbuild/call_task.sh build_shared_lib_dbg 2>&1 | tee make_raw.log + +# creates static library +build_static_lib: + @cbuild/call_task.sh build_static_lib 2>&1 | tee make_raw.log + +# creates static library with debug symbols and no optimizations +build_static_lib_dbg: + @cbuild/call_task.sh build_static_lib_dbg 2>&1 | tee make_raw.log + +###################################### +###### Rebuild dependencies ####### +###################################### + +# recompile libsome.a in the next build task +#rebuild_some_dep: +# @cbuild/rebuild_dep.sh libsome.a 2>&1 | tee make_raw.log + +#rebuild_all: rebuild_some_dep + +###################################### +###### Launch tasks ####### +###################################### + +# executes $EXEC_FILE +exec: build_exec + @cbuild/call_task.sh exec 2>&1 | tee -a make_raw.log + +# executes $EXEC_FILE +exec_dbg: build_exec_dbg + @cbuild/call_task.sh exec 2>&1 | tee -a make_raw.log + +# executes $EXEC_FILE with valgrind memory checker +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 (pip install gprof2dot) +# requires graphviz (https://www.graphviz.org/download/source/) +gprof: + @cbuild/call_task.sh gprof 2>&1 | tee make_raw.log + +# compiles program and runs it with callgrind (part of valgrind) +# uses gprof2dot python script to generate function call tree (pip install gprof2dot) +# requires graphviz (https://www.graphviz.org/download/source/) +# P.S. detailed results can be viewed in KCacheGrind +callgrind: + @cbuild/call_task.sh callgrind 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 ####### +###################################### + +# deletes generated files +clean: + @cbuild/call_task.sh clean 2>&1 | tee make_raw.log + +# removes all unreadable characters copied from stdio +fix_log: + sed 's/[^[:blank:][:print:]]//g' make_raw.log \ + | sed 's/\[0;[0-9][0-9]m//g' \ + | sed 's/\[0;[0-9]m//g' \ + | sed 's/\[[0-9][0-9]m//g' \ + | sed 's/\[[0-9]m//g' \ + | sed 's/ H //g' \ + | sed 's/\[3gH //g' \ + > make_fixed.log diff --git a/default_tasks/clean.sh b/default_tasks/clean.sh index 60f8d1f..4f4a2fb 100644 --- a/default_tasks/clean.sh +++ b/default_tasks/clean.sh @@ -12,12 +12,14 @@ done set +e OLDIFS="$IFS" IFS=$'\n' +cd "$DEPS_BASEDIR" for dep in $DEPS; do dep_dir=$(echo ${dep/=*/} | tr -d '[:blank:]') myprint "${CYAN}--------------[$dep_dir]--------------" - cd "$DEPS_BASEDIR/$dep_dir" + cd "$dep_dir" make clean cd .. done IFS="$OLDIFS" -set -e +cd .. +set -e \ No newline at end of file diff --git a/functions.sh b/functions.sh index ebdadd7..14d6dea 100755 --- a/functions.sh +++ b/functions.sh @@ -97,11 +97,12 @@ function handle_static_dependency { [[ -z "$lib_build_task" ]] && error "lib_build_task is empty" myprint "${BLUE}making $lib_file by task $lib_build_task" + local proj_root_dir="$(pwd)" cd "$deps_basedir/$lib_project_dir" if ! make "$lib_build_task"; then exit 1 fi - cd .. + cd "$proj_root_dir" cp "$deps_basedir/$lib_project_dir/$lib_build_dir/$lib_file" "$OBJDIR/libs/" myprint "${GREEN}copied ${CYAN}$lib_file to $OBJDIR/libs/" @@ -112,7 +113,7 @@ function handle_static_dependency { function resolve_dependencies { deps_basedir=$1 deps=$2 - [[ -z "$deps_basedir" ]] && deps_basedir=. + [[ -z "$deps_basedir" ]] && deps_basedir="." OLDIFS="$IFS" IFS=$'\n' # Evalueting dependency expressions. diff --git a/rebuild_dep.sh b/rebuild_dep.sh index 5af8ee3..d0303cb 100644 --- a/rebuild_dep.sh +++ b/rebuild_dep.sh @@ -3,5 +3,5 @@ source "cbuild/init.sh" target_file="$1" touch ".rebuild_$target_file.tmp" -rm -fv "$OBJDIR/libs/$target_file.a" +rm -fv "$OBJDIR/libs/$target_file" myprint "${YELLOW}dependency ${WHITE}$target_file ${YELLOW}will be rebuilt with the next build task"