From e11816bd9bdb7283e70ed57be360972e50fcd18f Mon Sep 17 00:00:00 2001 From: jakeg00dwin Date: Wed, 18 Sep 2024 12:48:41 -0700 Subject: [PATCH] commit of formattting --- otto.sh | 335 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ setup.sh | 86 ++++++++++++++ 2 files changed, 421 insertions(+) create mode 100755 otto.sh create mode 100755 setup.sh diff --git a/otto.sh b/otto.sh new file mode 100755 index 0000000..d96e779 --- /dev/null +++ b/otto.sh @@ -0,0 +1,335 @@ +#!/bin/sh +# Author: Jake Goodwin +# Date: 2024 +# Filename: otto.sh + +AVR_TC="$(pwd)/avr-gcc-toolchain.cmake" +CMAKE_VERBOSE="ON" +CROSS_COMPILE=1 +TEMPLATE_FILES=".template_files" +MODULE_DIR="${TEMPLATE_FILES}/modules" + + +add_compile_commands () { + if [ -f ./compile_commands.json ]; then + echo "compile_commands.json already exists!\n" + else + echo "Creating new symlink for compile commands!\n" + ln -s ./build/compile_commands.json ./compile_commands.json + fi +} + +clear_cmake_cache () { + cd ./build + rm -rf CMakeCache.txt CMakeFiles/ +} + + +does_module_exist () { + local basename="$1" + + if [ -d "src/${basename}" ]; then + echo "1" + else + echo "0" + fi +} + +does_mock_exist () { + local basename="$1" + + if [ -d "mocks/${basename}" ]; then + echo "1" + else + echo "0" + fi +} + + + + +add_module_to_cmakes () { + local basename="$1" + + echo "add_subdirectory(${basename})" >> ./src/CMakeLists.txt + + # Tests cmake file needs to be edited in place. + sed -i'' "s/# TEST_DIRS.*$/# TEST_DIRS\r\nadd_subdirectory(${basename})/g" ./tests/CMakeLists.txt + sed -i'' "s/# TEST_LINKS.*$/# TEST_LINKS\r\n\ttest_${basename}/g" ./tests/CMakeLists.txt +} + +remove_module_from_cmakes () { + local basename="$1" + + sed -i'' "s/^.*add_subdirectory(${basename}).*$//g" ./src/CMakeLists.txt + sed -i'' "s/^.*add_subdirectory(${basename}).*$//g" ./tests/CMakeLists.txt + sed -i'' "s/^.*test_${basename}.*$//g" ./tests/CMakeLists.txt +} + +git_add_module () { + + local basename="$1" + + read -p "Auto add to git?(y/n):" CHOICE + if [ "${CHOICE}" = "n" ]; then + echo "not being added!" + return 0 + fi + + modsrc_dir="./src/${basename}" + modtest_dir="./tests/${basename}" + + # Now we add the new files to the git tracked files + git add ${modsrc_dir}/* + git add ${modsrc_dir} + git add ${modtest_dir}/* + git add ${modtest_dir} + git add ./src/CMakeLists.txt + git add ./tests/CMakeLists.txt +} + + +git_remove_module () { + local basename="$1" + + read -p "Auto del from git?(y/n):" CHOICE + if [ "${CHOICE}" -eq "n" ]; then + echo "not being removed!" + return 0 + fi + + modsrc_dir="./src/${basename}" + modtest_dir="./tests/${basename}" + + # Now we add the new files to the git tracked files + git rm -r ${modsrc_dir}/* + git rm -r ${modsrc_dir} + git rm -r ${modtest_dir}/* + git rm -r ${modtest_dir} + git rm -r ./src/CMakeLists.txt + git rm -r ./tests/CMakeLists.txt +} + +add_mock_module () { + read -p "Enter the name of the module:" modname + result=$(does_mock_exist "$modname") + + if [ "${result}" -eq "1" ]; then + echo "Module already exists!" + echo "Exiting without changing anything" + exit + fi + + modname_cap=$(echo $modname | sed 's/[a-z]/\U&/g') + modsrc_dir="./mocks/${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 -i'' "3s/todays_date/$(date +%Y)/" $modsrc_dir/${modname}.c + + sed "s/module_name/${modname_cap}/" $MODULE_DIR/module_name.h > $modsrc_dir/${modname}.h + sed -i'' "3s/todays_date/$(date +%Y)/" $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.cpp > $modtest_dir/test_${modname}.cpp + sed "s/module_name/${modname}/" $MODULE_DIR/TestCMakeLists.txt > $modtest_dir/CMakeLists.txt + + # Add the module to the cmake lists files. + add_module_to_cmakes "${modname}" + + 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 + git_add_module "${modname}" + +} + +add_new_module () { + read -p "Enter the name of the module:" modname + + result=$(does_module_exist "$modname") + + if [ "${result}" -eq "1" ]; 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 -i'' "3s/todays_date/$(date +%Y)/" $modsrc_dir/${modname}.c + + sed "s/module_name/${modname_cap}/" $MODULE_DIR/module_name.h > $modsrc_dir/${modname}.h + sed -i'' "3s/todays_date/$(date +%Y)/" $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.cpp > $modtest_dir/test_${modname}.cpp + sed "s/module_name/${modname}/" $MODULE_DIR/TestCMakeLists.txt > $modtest_dir/CMakeLists.txt + + # Add the module to the cmake lists files. + add_module_to_cmakes "${modname}" + + 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 + git_add_module "${modname}" + + +} + + +del_module () { + read -p "Enter the name of the module:" modname + + rm -r ./tests/${modname} + rm -r ./src/${modname} + remove_module_from_cmakes "${modname}" +} + +cross_compile () { + echo "ERROR: Currently no toolchain / target!" +} + +build_release() { + clear_cmake_cache + cmake -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../ + make +} + +build_main () { + clear_cmake_cache + cmake -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../ + make main +} + +build_hex () { + clear_cmake_cache + + CMAKE_ARGS="-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE}" + CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${AVR_TC}" + + cmake ${CMAKE_ARGS} ../ + make all + make hex +} + +build_hex_optimized () { + clear_cmake_cache + + CMAKE_ARGS="-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE}" + CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${AVR_TC}" + + cmake ${CMAKE_ARGS} ../ + make all + make hex-release +} + +flash_avr () { + build_hex_optimized + make upload +} + +run_c_tests () { + clear_cmake_cache + cmake -DUNIT_TESTING=ON -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../ + make AllTests + make Mock_Tests + make EnTests + ./tests/AllTests -v -c + ./tests/Mock_Tests -v -c + ./tests/EnTests -v -c +} + +print_menu () { + echo "BUILD MENU:" + echo "0. Add Mock Module" + echo "1. Run Tests" + echo "2. Build Project(hex)" + echo "3. Build for release(hex)" + echo "4. Flash to AVR" + echo "5. Add new module to project" + echo "6. Delete module from project" + echo "7. Exit" +} + + +main() { + add_compile_commands + valid_choice=false + + while [ "$valid_choice" != true ]; do + print_menu + read -p "Enter your choice: " choice + + case $choice in + 0) + echo "You selected Option 0" + valid_choice=true + add_mock_module + ;; + + 1) + echo "You selected Option 1" + valid_choice=true + run_c_tests + ;; + 2) + echo "You selected Option 2" + valid_choice=true + build_hex + ;; + 3) + echo "You selected Option 3" + valid_choice=true + build_hex_optimized + ;; + 4) + echo "You selected Option 4" + valid_choice=true + flash_avr + ;; + 5) + echo "You selected Option 5" + valid_choice=true + add_new_module + ;; + 6) + echo "You selected Option 6" + valid_choice=true + del_module + ;; + 7) + echo "Exiting..." + exit 0 + ;; + *) + echo "Invalid choice. Please select a valid option." + ;; + esac + done +} + +main diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..f988a73 --- /dev/null +++ b/setup.sh @@ -0,0 +1,86 @@ +#!/bin/sh +#Author: Jake G +#Date: 2024 +#Filename: setup.sh + +PKG_MNGR="" +DEBIAN=0 +FBSD=0 +SYSINSTALL=0 +DEV_UTILS="vim tmux fzf" + + +install_dev_utils () { + ICMD="" + if [ $DEBIAN -eq 1 ]; then + ICMD="sudo apt install" + elif [ $FBSD -eq 1 ]; then + ICMD="sudo pkg install" + fi + + for util in $DEV_UTILS + do + ${ICMD} ${util} + done +} + + +check_os () { + if [ -f /etc/debian_version ]; then + DEBIAN=1 + elif [ -f /etc/freebsd-update.conf ]; then + FBSD=1 + fi +} + + +remove_template_examples () { + echo "does nothing right now" +} + + +install_needed_dependencies () { + # Check the OS + echo "checking the OS..." + # If it's debian based then apt install + + # If it's freeBSD then pkg + + # If it's windows....you're SOL +} + + +create_project_symlinks () { + # Allows the clangd LSP to find it. + ln -s ./build/compile_commands.json ./compile_commands.json +} + + +build_cpputest () { + git submodule add https://github.com/cpputest/cpputest.git + git sumodule status + cd ./cpputest/build + cmake ../ + + if [ SYSINSTALL -eq 1]; then + make install + else + make + fi +} + + +# The default setup stuff. +default () { + remove_template_examples + install_needed_dependencies + create_project_symlinks +} + +setup() { + echo "Setting up env" + check_os + install_dev_utils +} + +setup