|
@@ -1,190 +0,0 @@
|
|
|
-#!/bin/bash
|
|
|
-set -e
|
|
|
-clear
|
|
|
-cd $(dirname $0)
|
|
|
-
|
|
|
-compiler="gcc"
|
|
|
-if [ -e compiler ]; then
|
|
|
- compiler=$(cat compiler)
|
|
|
- echo "compiling with $compiler"
|
|
|
-fi
|
|
|
-
|
|
|
-printHelpExit() {
|
|
|
- echo "$0 clean | remove build results"
|
|
|
- echo "$0 build <type> | build everything"
|
|
|
- echo "$0 install | move build results into the install folder"
|
|
|
- echo "$0 test <type> | run the tests"
|
|
|
- echo "$0 valgrind <type> | run the tests with valgrind"
|
|
|
- echo "$0 coverage | generate code coverage"
|
|
|
- echo "$0 time | check build time"
|
|
|
- exit 0
|
|
|
-}
|
|
|
-
|
|
|
-task=$1
|
|
|
-if [ -z "$task" ]; then
|
|
|
- printHelpExit
|
|
|
-fi
|
|
|
-
|
|
|
-# task vars
|
|
|
-build_debug=false
|
|
|
-build_profile=false
|
|
|
-build_release=false
|
|
|
-
|
|
|
-test_debug=false
|
|
|
-test_release=false
|
|
|
-
|
|
|
-valgrind=""
|
|
|
-time=false
|
|
|
-install=false
|
|
|
-coverage=false
|
|
|
-testArgs="test"
|
|
|
-
|
|
|
-export CMAKE_EXPORT_COMPILE_COMMANDS=true
|
|
|
-
|
|
|
-# parsing
|
|
|
-if [ "$task" = "clean" ]; then
|
|
|
- rm -rf build_debug build_profile build_release install
|
|
|
-elif [ "$task" = "build" ]; then
|
|
|
- type=$2
|
|
|
- if [ "$type" = "debug" ]; then
|
|
|
- build_debug=true
|
|
|
- elif [ "$type" = "release" ]; then
|
|
|
- build_release=true
|
|
|
- elif [ "$type" = "all" ]; then
|
|
|
- build_debug=true
|
|
|
- build_release=true
|
|
|
- else
|
|
|
- echo "Valid build types are: debug, release, all"
|
|
|
- printHelpExit
|
|
|
- fi
|
|
|
-elif [ "$task" = "install" ]; then
|
|
|
- build_release=true
|
|
|
- install=true
|
|
|
-elif [ "$task" = "coverage" ]; then
|
|
|
- build_debug=true
|
|
|
- test_debug=true
|
|
|
- coverage=true
|
|
|
-elif [ "$task" = "test" ]; then
|
|
|
- type=$2
|
|
|
- if [ "$type" = "debug" ]; then
|
|
|
- build_debug=true
|
|
|
- test_debug=true
|
|
|
- elif [ "$type" = "release" ]; then
|
|
|
- build_release=true
|
|
|
- test_release=true
|
|
|
- elif [ "$type" = "window" ]; then
|
|
|
- build_debug=true
|
|
|
- test_debug=true
|
|
|
- testArgs="window"
|
|
|
- elif [ "$type" = "all" ]; then
|
|
|
- build_debug=true
|
|
|
- test_debug=true
|
|
|
- build_release=true
|
|
|
- test_release=true
|
|
|
- else
|
|
|
- echo "Valid test types are: debug, release, window, all"
|
|
|
- printHelpExit
|
|
|
- fi
|
|
|
-elif [ "$task" = "valgrind" ]; then
|
|
|
- type=$2
|
|
|
- if [ "$type" = "debug" ]; then
|
|
|
- build_debug=true
|
|
|
- test_debug=true
|
|
|
- elif [ "$type" = "release" ]; then
|
|
|
- build_release=true
|
|
|
- test_release=true
|
|
|
- elif [ "$type" = "window" ]; then
|
|
|
- build_debug=true
|
|
|
- test_debug=true
|
|
|
- testArgs="window"
|
|
|
- elif [ "$type" = "all" ]; then
|
|
|
- build_debug=true
|
|
|
- test_debug=true
|
|
|
- build_release=true
|
|
|
- test_release=true
|
|
|
- else
|
|
|
- echo "Valid valgrind types are: debug, release, window, all"
|
|
|
- printHelpExit
|
|
|
- fi
|
|
|
- valgrind="valgrind \
|
|
|
- --leak-check=full \
|
|
|
- --show-leak-kinds=all \
|
|
|
- --suppressions=../valgrind.supp
|
|
|
- "
|
|
|
-elif [ "$task" = "time" ]; then
|
|
|
- build_release=true
|
|
|
- time=true
|
|
|
-else
|
|
|
- echo "unknown task"
|
|
|
- printHelpExit
|
|
|
-fi
|
|
|
-
|
|
|
-# task execution
|
|
|
-buildProfile() {
|
|
|
- folder=$1
|
|
|
- shift 1
|
|
|
- if [ ! -e "$folder" ]; then
|
|
|
- cmake -B "$folder" -S . -G Ninja -DCMAKE_C_COMPILER=${compiler} -DCMAKE_INSTALL_PREFIX=../install $@
|
|
|
- fi
|
|
|
- ninja -C "$folder"
|
|
|
-}
|
|
|
-
|
|
|
-if $build_debug; then
|
|
|
- buildProfile build_debug -DCMAKE_BUILD_TYPE=Debug
|
|
|
-fi
|
|
|
-if $build_profile; then
|
|
|
- buildProfile build_profile -DCMAKE_BUILD_TYPE=RelWithDebInfo
|
|
|
-fi
|
|
|
-if $build_release; then
|
|
|
- buildProfile build_release -DCMAKE_BUILD_TYPE=Release
|
|
|
-fi
|
|
|
-if $install; then
|
|
|
- ninja -C build_release install
|
|
|
-fi
|
|
|
-
|
|
|
-function runTests() {
|
|
|
- LLVM_PROFILE_FILE="default.profraw" $valgrind ./test ../test/resources $testArgs || true
|
|
|
-}
|
|
|
-
|
|
|
-if $test_debug; then
|
|
|
- cd build_debug
|
|
|
- runTests
|
|
|
- cd ..
|
|
|
-fi
|
|
|
-if $test_release; then
|
|
|
- cd build_release
|
|
|
- runTests
|
|
|
- cd ..
|
|
|
-fi
|
|
|
-if $time; then
|
|
|
- lines=$(cat build_release/.ninja_log | grep "^[0-9]")
|
|
|
-
|
|
|
- startMillis=0
|
|
|
- endMillis=0
|
|
|
- name=""
|
|
|
- i=0
|
|
|
- output=""
|
|
|
- for arg in $lines; do
|
|
|
- if [ $i == 0 ]; then
|
|
|
- startMillis=$arg
|
|
|
- elif [ $i == 1 ]; then
|
|
|
- endMillis=$arg
|
|
|
- elif [ $i == 3 ]; then
|
|
|
- name=$arg
|
|
|
- diff=$(expr $endMillis - $startMillis)
|
|
|
- output="${output}\n$diff $name"
|
|
|
- fi
|
|
|
- i=$(expr $(expr $i + 1) % 5) && true
|
|
|
- done
|
|
|
- printf "$output" | sort -n
|
|
|
-fi
|
|
|
-if $coverage; then
|
|
|
- if [ $compiler = "gcc" ]; then
|
|
|
- gcovr -r . build_debug -e test -e performance \
|
|
|
- --exclude-lines-by-pattern ".*CoverageIgnore.*"
|
|
|
- else
|
|
|
- files=$(find build_debug -name *.profraw)
|
|
|
- llvm-profdata-17 merge -sparse $files -o build_debug/default.profdata
|
|
|
- llvm-cov-17 show ./build_debug/test -instr-profile=build_debug/default.profdata --ignore-filename-regex="(test/)|(WindowManager.c)" -line-coverage-lt=100
|
|
|
- fi
|
|
|
-fi
|