2024-03-07 05:06:20 +00:00
|
|
|
#!/bin/sh
|
|
|
|
# Author: Jake Goodwin
|
|
|
|
# Date: 2024
|
|
|
|
# Filename: otto.sh
|
|
|
|
|
2024-06-14 22:08:29 +00:00
|
|
|
AVR_TC="$(pwd)/avr-gcc-toolchain.cmake"
|
2024-03-07 05:06:20 +00:00
|
|
|
CMAKE_VERBOSE="ON"
|
|
|
|
CROSS_COMPILE=1
|
|
|
|
TEMPLATE_FILES=".template_files"
|
|
|
|
MODULE_DIR="${TEMPLATE_FILES}/modules"
|
|
|
|
|
|
|
|
|
2024-03-20 19:47:48 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2024-03-07 05:06:20 +00:00
|
|
|
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
|
2024-03-20 19:35:13 +00:00
|
|
|
|
|
|
|
# Tests cmake file needs to be edited in place.
|
2024-03-20 20:40:52 +00:00
|
|
|
sed -i'' "s/# TEST_DIRS.*$/# TEST_DIRS\r\nadd_subdirectory(${basename})/g" ./tests/CMakeLists.txt
|
2024-03-20 20:43:03 +00:00
|
|
|
sed -i'' "s/# TEST_LINKS.*$/# TEST_LINKS\r\n\t${basename}/g" ./tests/CMakeLists.txt
|
2024-03-07 05:06:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
remove_module_from_cmakes () {
|
|
|
|
local basename="$1"
|
|
|
|
|
2024-03-20 20:40:52 +00:00
|
|
|
sed -i'' "s/^.*add_subdirectory(${basename}).*$//g" ./src/CMakeLists.txt
|
|
|
|
sed -i'' "s/^.*add_subdirectory(${basename}).*$//g" ./tests/CMakeLists.txt
|
|
|
|
sed -i'' "s/^.*${basename}.*$//g" ./tests/CMakeLists.txt
|
2024-03-07 05:06:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
git_add_module () {
|
|
|
|
|
|
|
|
local basename="$1"
|
|
|
|
|
|
|
|
read -p "Auto add to git?(y/n):" CHOICE
|
2024-03-20 20:40:52 +00:00
|
|
|
if [ "${CHOICE}" = "n" ]; then
|
2024-03-07 05:06:20 +00:00
|
|
|
echo "not being added!"
|
|
|
|
return 0
|
|
|
|
fi
|
2024-03-20 20:40:52 +00:00
|
|
|
|
2024-03-07 05:06:20 +00:00
|
|
|
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
|
2024-03-20 21:10:05 +00:00
|
|
|
sed -i'' "3s/todays_date/$(date +%Y)/" $modsrc_dir/${modname}.c
|
2024-03-07 05:06:20 +00:00
|
|
|
|
|
|
|
sed "s/module_name/${modname_cap}/" $MODULE_DIR/module_name.h > $modsrc_dir/${modname}.h
|
2024-03-20 21:10:05 +00:00
|
|
|
sed -i'' "3s/todays_date/$(date +%Y)/" $modsrc_dir/${modname}.h
|
2024-03-07 05:06:20 +00:00
|
|
|
|
|
|
|
sed "s/module_name/${modname}/" $MODULE_DIR/CMakeLists.txt > $modsrc_dir/CMakeLists.txt
|
|
|
|
|
2024-03-16 20:47:37 +00:00
|
|
|
sed "s/module_name/${modname}/" $MODULE_DIR/test_module_name.cpp > $modtest_dir/test_${modname}.cpp
|
2024-03-07 05:06:20 +00:00
|
|
|
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} ../
|
2024-03-07 06:01:25 +00:00
|
|
|
make
|
2024-03-07 05:06:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
build_main () {
|
|
|
|
clear_cmake_cache
|
|
|
|
cmake -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../
|
|
|
|
make main
|
|
|
|
}
|
|
|
|
|
2024-06-14 22:08:29 +00:00
|
|
|
build_hex () {
|
|
|
|
clear_cmake_cache
|
|
|
|
|
|
|
|
CMAKE_ARGS="-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE}"
|
|
|
|
CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${AVR_TC}"
|
|
|
|
|
|
|
|
cmake ${CMAKE_ARGS} ../
|
2024-06-14 23:07:35 +00:00
|
|
|
make all
|
2024-06-14 22:08:29 +00:00
|
|
|
make hex
|
|
|
|
}
|
|
|
|
|
2024-06-14 22:08:41 +00:00
|
|
|
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} ../
|
2024-06-14 23:07:35 +00:00
|
|
|
make all
|
2024-06-14 22:08:41 +00:00
|
|
|
make hex-release
|
|
|
|
}
|
|
|
|
|
2024-06-14 23:07:35 +00:00
|
|
|
flash_avr () {
|
|
|
|
build_hex_optimized
|
|
|
|
make upload
|
|
|
|
}
|
|
|
|
|
2024-03-07 05:06:20 +00:00
|
|
|
run_c_tests () {
|
|
|
|
clear_cmake_cache
|
|
|
|
cmake -DUNIT_TESTING=ON -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../
|
2024-03-20 19:43:02 +00:00
|
|
|
make AllTests && ./tests/AllTests
|
2024-03-07 05:06:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
print_menu () {
|
|
|
|
echo "BUILD MENU:"
|
|
|
|
echo "1. Run Tests"
|
2024-06-14 22:08:29 +00:00
|
|
|
echo "2. Build Project(hex)"
|
|
|
|
echo "3. Build for release(hex)"
|
|
|
|
echo "4. Flash to AVR"
|
2024-03-07 05:06:20 +00:00
|
|
|
echo "5. Add new module to project"
|
|
|
|
echo "6. Delete module from project"
|
|
|
|
echo "7. Exit"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
main() {
|
2024-03-20 19:47:48 +00:00
|
|
|
add_compile_commands
|
2024-03-07 05:06:20 +00:00
|
|
|
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
|
2024-06-14 22:08:29 +00:00
|
|
|
build_hex
|
2024-03-07 05:06:20 +00:00
|
|
|
;;
|
|
|
|
3)
|
|
|
|
echo "You selected Option 3"
|
|
|
|
valid_choice=true
|
2024-06-14 22:08:41 +00:00
|
|
|
build_hex_optimized
|
2024-03-07 05:06:20 +00:00
|
|
|
;;
|
|
|
|
4)
|
|
|
|
echo "You selected Option 4"
|
|
|
|
valid_choice=true
|
2024-06-14 23:07:35 +00:00
|
|
|
flash_avr
|
2024-03-07 05:06:20 +00:00
|
|
|
;;
|
|
|
|
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
|