diff --git a/otto.sh b/otto.sh new file mode 100755 index 0000000..83d59c5 --- /dev/null +++ b/otto.sh @@ -0,0 +1,229 @@ +#!/bin/sh +# Author: Jake Goodwin +# Date: 2024 +# Filename: otto.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_module_exist () { + local basename="$1" + + if [ -d "src/${basename}" ]; then + echo "1" + else + echo "0" + fi +} + + +add_module_to_cmakes () { + local basename="$1" + + echo "add_subdirectory(${basename})" >> ./src/CMakeLists.txt + echo "add_subdirectory(${basename})" >> ./tests/CMakeLists.txt +} + +remove_module_from_cmakes () { + local basename="$1" + + sed "s/^.*add_subdirectory(${basename}).*$//g" ./src/CMakeLists.txt > ./src/CMakeLists.txt + sed "s/^.*add_subdirectory(${basename}).*$//g" ./tests/CMakeLists.txt > ./tests/CMakeLists.txt +} + +git_add_module () { + + local basename="$1" + + read -p "Auto add to git?(y/n):" CHOICE + if [ "${CHOICE}" -eq "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_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 "3s/todays_date/$(date +%Y)/" $modsrc_dir/${modname}.c > $modsrc_dir/${modname}.c + + sed "s/module_name/${modname_cap}/" $MODULE_DIR/module_name.h > $modsrc_dir/${modname}.h + sed "3s/todays_date/$(date +%Y)/" $modsrc_dir/${modname}.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 > $modtest_dir/test_${modname}.c + 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 -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. Delete module from project" + echo "7. 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 "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..841ed4c --- /dev/null +++ b/setup.sh @@ -0,0 +1,42 @@ +#!/bin/sh +#Author: Jake G +#Date: 2024 +#Filename: setup.sh + +PKG_MNGR="" + +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 () { + touch build + cd ./build + make + #TODO: finish this function +} + + +# The default setup stuff. +default () { + remove_template_examples + install_needed_dependencies + create_project_symlinks +} + +default