#!/bin/sh # Author: Jake Goodwin # Date: 2024 # Filename: tdd.sh CROSS_TC_WIN="$(pwd)/i686-w64-mingw32_toolchain.cmake" CMAKE_VERBOSE="ON" CROSS_COMPILE=1 TEMPLATE_FILES=".template_files" MODULE_DIR="${TEMPLATE_FILES}/modules" clear_cmake_cache () { cd ./build rm -rf CMakeCache.txt CMakeFiles/ } does_moule_exist () { local basename="$1" if [ -d "tests/$basename"] || [ -d "src/$basename" ]; then return 1 else return 0 fi } add_new_module () { read -p "Enter the name of the module:" modname if does_module_exist $modname; then echo "Module already exists!" echo "Exiting without changing anything" exit fi modname_cap=$(echo $modname | sed 's/[a-z]/\U&/g') modsrc_dir="./src/${modname}" modtest_dir="./tests/${modname}" echo "creating: ${modsrc_dir}, ${modtest_dir}" mkdir $modsrc_dir mkdir $modtest_dir #copy the template files. echo "copying & customizing template files..." sed "s/module_name/${modname}/" $MODULE_DIR/module_name.c > $modsrc_dir/${modname}.c sed "s/module_name/${modname_cap}/" $MODULE_DIR/module_name.h > $modsrc_dir/${modname}.h sed "s/module_name/${modname}/" $MODULE_DIR/CMakeLists.txt > $modsrc_dir/CMakeLists.txt sed "s/module_name/${modname}/" $MODULE_DIR/test_module_name.c > $modsrc_dir/test_${modname}.c sed "s/module_name/${modname}/" $MODULE_DIR/TestCMakeLists.txt > $modsrc_dir/CMakeLists.txt echo "Resulting files/dirs:" tree -L 2 $modsrc_dir tree -L 2 $modtest_dir # Now we add the new files to the git tracked files del_module } del_module () { read -p "Enter the name of the module:" modname rm -r ./tests/${modname} rm -r ./src/${modname} } cross_compile () { echo "ERROR: Currently no toolchain / target!" } build_release() { clear_cmake_cache cmake -DCAM_HANDLER_LIB=ON -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../ make camera_handler } build_main () { clear_cmake_cache cmake -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../ make main } run_c_tests () { cp ./src/camera_handler/testdata.bin /tmp/ clear_cmake_cache cmake -DUNIT_TESTING=ON -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../ make all && ctest } print_menu () { echo "BUILD MENU:" echo "1. Run Tests" echo "2. Build Project" echo "3. Build for release" echo "4. cross compile for XXXXXX" echo "5. Add new module to project" echo "6. Exit" } main() { valid_choice=false while [ "$valid_choice" != true ]; do print_menu read -p "Enter your choice: " choice case $choice in 1) echo "You selected Option 1" valid_choice=true run_c_tests ;; 2) echo "You selected Option 2" valid_choice=true build_main ;; 3) echo "You selected Option 3" valid_choice=true build_release ;; 4) echo "You selected Option 4" valid_choice=true cross_compile ;; 5) echo "You selected Option 5" valid_choice=true add_new_module ;; 6) echo "Exiting..." exit 0 ;; *) echo "Invalid choice. Please select a valid option." ;; esac done } main