From 65d8a293dceaf150ab412a18ab4fcf602c5ba00b Mon Sep 17 00:00:00 2001 From: cancel Date: Thu, 29 Nov 2018 19:42:14 +0900 Subject: [PATCH] Add timing stats option to build tool --- tool | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tool b/tool index 22ceba2..9d6aa51 100755 --- a/tool +++ b/tool @@ -21,6 +21,7 @@ Options: -d Enable compiler safeguards like -fstack-protector. You should probably do this if you plan to give the compiled binary to other people. + -s Print statistics about compile time and binary size. -h or --help Print this message and exit. EOF } @@ -38,8 +39,9 @@ compiler_exe="${CC:-cc}" verbose=0 protections_enabled=0 +stats_enabled=0 -while getopts c:dhv-: opt_val; do +while getopts c:dhsv-: opt_val; do case "$opt_val" in -) case "$OPTARG" in @@ -54,6 +56,7 @@ while getopts c:dhv-: opt_val; do c) compiler_exe="$OPTARG";; h) print_usage; exit 0;; d) protections_enabled=1;; + s) stats_enabled=1;; v) verbose=1;; \?) print_usage >&2; exit 1;; *) break;; @@ -79,6 +82,18 @@ verbose_echo() { "$@" } +TIMEFORMAT='%3R' + +last_time= + +timed_stats() { + if [[ $stats_enabled = 1 ]]; then + { last_time=$( { time "$@" 1>&3- 2>&4-; } 2>&1 ); } 3>&1 4>&2 + else + "$@" + fi +} + if [[ ($os == bsd) || ($os == unknown) ]]; then warn "Build script not tested on this platform" fi @@ -175,9 +190,14 @@ build_target() { add source_files cli_main.c try_make_dir "$build_dir" try_make_dir "$build_dir/$build_subdir" + local out_path=$build_dir/$build_subdir/$out_exe # bash versions quirk: empty arrays might give error on expansion, use + # trick to avoid expanding second operand - verbose_echo "$compiler_exe" "${compiler_flags[@]}" -o "$build_dir/$build_subdir/$out_exe" "${source_files[@]}" ${libraries[@]+"${libraries[@]}"} + verbose_echo timed_stats "$compiler_exe" "${compiler_flags[@]}" -o "$out_path" "${source_files[@]}" ${libraries[@]+"${libraries[@]}"} + if [[ $stats_enabled = 1 ]]; then + echo "time: $last_time" + stat -c "size: %s" -- "$out_path" + fi } print_info() {