Skip to content

Instantly share code, notes, and snippets.

@yun-cloud
Last active January 27, 2018 07:58
Show Gist options
  • Save yun-cloud/b6d0ed4d8f2ef56a2d2b8c469d917f6e to your computer and use it in GitHub Desktop.
Save yun-cloud/b6d0ed4d8f2ef56a2d2b8c469d917f6e to your computer and use it in GitHub Desktop.
help you rebuild nachos and test your HW. Remember to change the variable, _base, to your project directory using 'pwd' command.
#!/bin/bash
_script="$(readlink -f ${BASH_SOURCE[0]})"
_base="$(dirname $_script)"
log_dir="${_base}/log"
mkdir -p ${log_dir}
BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BOLD=$(tput bold)
RESET=$(tput sgr0)
UNDERLINE=$(tput smul)
END_UNDERLINE=$(tput rmul)
info() {
for msg do
echo "${BLUE}>>>${WHITE} $msg ${RESET}"
done
}
success() {
for msg do
echo "${GREEN}>>>${WHITE} $msg ${RESET}"
done
}
maxlen() {
max=0
for arg do
len=${#arg}
if [[ $len -gt $max ]]; then
max=$len
fi
done
echo "$max"
}
bbox() {
max=$( maxlen $@ )
n=$(( $max + 8 ))
for i in `seq 1 $n`; do printf "="; done
echo
for arg do
difference=$(( $max - ${#arg} ))
half=$(( $difference / 2 ))
odd=$(( $difference % 2 ))
printf "=== "
for i in `seq 1 $half`; do printf " "; done
printf "${WHITE}$arg${RESET}"
for i in `seq 1 $half`; do printf " "; done
[[ $odd -eq 1 ]] && printf " "
printf " ==="
echo
done
for i in `seq 1 $n`; do printf "="; done
echo
}
rebuild () {
log="${log_dir}/rebuild.log"
echo "${CYAN}rebuilding nachos...${RESET}"
cd "${_base}/code/build.linux/"
make clean &> /dev/null
make &> ${log}
vim -R ${log}
cd - &> /dev/null
}
part2_a () {
log="${log_dir}/part2_a.log"
bbox "FS_partII_a"
cd "${_base}/code/test" &> /dev/null
cat FS_partII_a.sh > ${log}
echo "===========================" >> ${log}
./FS_partII_a.sh &>> ${log}
cd - &> /dev/null
success "Done!"
vim -R ${log}
}
part2_b () {
log="${log_dir}/part2_b.log"
bbox "FS_partII_b"
cd "${_base}/code/test" &> /dev/null
cat FS_partII_b.sh > ${log}
echo "===========================" >> ${log}
./FS_partII_b.sh &>> ${log}
cd - &> /dev/null
success "Done!"
vim -R ${log}
}
part3 () {
log="${log_dir}/part3.log"
bbox "FS_partIII"
cd "${_base}/code/test" &> /dev/null
cat FS_partIII.sh > ${log}
echo "===========================" >> ${log}
./FS_partIII.sh &>> ${log}
cd - &> /dev/null
success "Done!"
vim -R ${log}
}
bonus1 () {
log="${log_dir}/bonus1.log"
bbox "bonusI"
cd "${_base}/code/test" &> /dev/null
cat FS_bonusI.sh > ${log}
echo "===========================" >> ${log}
./FS_bonusI.sh &>> ${log}
cd - &> /dev/null
success "Done!"
vim -R ${log}
}
bonus2 () {
log="${log_dir}/bonus2.log"
bbox "bonusII"
cd "${_base}/code/test" &> /dev/null
cat FS_bonusII.sh > ${log}
echo "===========================" >> ${log}
./FS_bonusII.sh &>> ${log}
cd - &> /dev/null
success "Done!"
vim -R ${log}
}
# mp3_test1 () {
# targets=("mp3_p1" "mp3_p2")
# _compile_tests ${targets[@]}
# echo 'compile test done'
# cd "${_base}/code/test" &> /dev/null
# echo 'execute nachos'
# log="${log_dir}/mp3_test1.log"
# echo "" > ${log}
# ../build.linux/nachos -ep mp3_p1 100 -ep mp3_p2 99 &>> ${log}
# less ${log}
# # ./code/build.linux/nachos -ep ./code/test/mp3_p1 100 -ep ./code/test/mp3_p2 99
# echo 'Done'
# cd - &> /dev/null
# return 0
# }
# mp3_test2 () {
# targets=("mp3_p2" "mp3_p3")
# _compile_tests ${targets[@]}
# echo 'compile test done'
# cd "${_base}/code/test" &> /dev/null
# echo 'execute nachos'
# log="${log_dir}/mp3_test2.log"
# echo "" > ${log}
# ../build.linux/nachos -ep mp3_p2 99 -ep mp3_p3 98 &>> ${log}
# less ${log}
# echo 'Done'
# cd - &> /dev/null
# return 0
# }
# mp3_test3 () {
# targets=("mp3_p2" "mp3_p3")
# _compile_tests ${targets[@]}
# echo 'compile test done'
# cd "${_base}/code/test" &> /dev/null
# echo 'execute nachos'
# log="${log_dir}/mp3_test3.log"
# echo "" > ${log}
# ../build.linux/nachos -ep mp3_p2 40 -ep mp3_p3 25 &>> ${log}
# less ${log}
# echo 'Done'
# cd - &> /dev/null
# return 0
# }
# consoleIO_test1 () {
# target="consoleIO_test1"
# cd "${_base}/code/test/"
# {
# make clean
# } &> /dev/null
# make ${target} &> /dev/null
# log="${log_dir}/${target}.log"
# echo "<<<<<<< Result" > ${log}
# echo "" >> ${log}
# ../build.linux/nachos -e ${target} &>> ${log}
# echo "" >> ${log}
# echo "=======" >> ${log}
# echo "" >> ${log}
# cat "${target}.c" >> ${log}
# echo "" >> ${log}
# echo ">>>>>>> Code" >> ${log}
# less ${log}
# cd - &> /dev/null
# }
# consoleIO_test2 () {
# target="consoleIO_test2"
# cd "${_base}/code/test/"
# {
# make clean
# } &> /dev/null
# make ${target} &> /dev/null
# log="${log_dir}/${target}.log"
# echo "<<<<<<< Result" > ${log}
# echo "" >> ${log}
# ../build.linux/nachos -e ${target} &>> ${log}
# echo "" >> ${log}
# echo "=======" >> ${log}
# echo "" >> ${log}
# cat "${target}.c" >> ${log}
# echo "" >> ${log}
# echo ">>>>>>> Code" >> ${log}
# less ${log}
# cd - &> /dev/null
# }
# fileIO_test1 () {
# target="fileIO_test1"
# cd "${_base}/code/test/"
# {
# make clean
# } &> /dev/null
# make ${target} &> /dev/null
# log="${log_dir}/${target}.log"
# echo "<<<<<<< Result" > ${log}
# echo "" >> ${log}
# ../build.linux/nachos -e ${target} &>> ${log}
# echo "" >> ${log}
# echo "=======" >> ${log}
# echo "" >> ${log}
# cat "${target}.c" >> ${log}
# echo "" >> ${log}
# echo ">>>>>>> Code" >> ${log}
# less ${log}
# cd - &> /dev/null
# }
# fileIO_test2 () {
# target="fileIO_test2"
# cd "${_base}/code/test/"
# {
# make clean
# } &> /dev/null
# make ${target} &> /dev/null
# log="${log_dir}/${target}.log"
# echo "<<<<<<< Result" > ${log}
# echo "" >> ${log}
# ../build.linux/nachos -e ${target} &>> ${log}
# echo "" >> ${log}
# echo "=======" >> ${log}
# echo "" >> ${log}
# cat "${target}.c" >> ${log}
# echo "" >> ${log}
# echo ">>>>>>> Code" >> ${log}
# less ${log}
# cd - &> /dev/null
# }
# test_mp2 () {
# targets=("consoleIO_test1" "consoleIO_test2")
# cd "${_base}/code/test/"
# {
# make clean
# } &> /dev/null
# for target in "${targets[@]}"; do
# make ${target} &> /dev/null
# done
# cd - &> /dev/null
# # log="${log_dir}/mp2.log"
# ./code/build.linux/nachos -e ./code/test/consoleIO_test1 -e ./code/test/consoleIO_test2
# # less ${log}
# return 0
# }
# test_mp1 () {
# targets=("consoleIO_test1" "consoleIO_test2" "fileIO_test1" "fileIO_test2")
# ask " >> ${WHITE}Rebuild nachos?(${GREEN}y${WHITE}/${RED}n${WHITE})${RESET}"
# if [[ $? == 0 ]]
# then
# rebuild
# ! ask " >> ${WHITE}build nachos success?(${GREEN}y${WHITE}/${RED}n${WHITE})${RESET}" && return 0
# fi
# cd "${_base}/code/test/"
# {
# make clean
# } &> /dev/null
# for target in "${targets[@]}"; do
# ask " >> ${WHITE}Start next test(${BLUE}${UNDERLINE}${target}${END_UNDERLINE}${WHITE})?(${GREEN}y${WHITE}/${RED}n${WHITE})${RESET}"
# if [[ $? == 0 ]]
# then
# make ${target} &> /dev/null
# log="${log_dir}/${target}.log"
# echo "<<<<<<< Result" > ${log}
# echo "" >> ${log}
# ../build.linux/nachos -e ${target} &>> ${log}
# echo "" >> ${log}
# echo "=======" >> ${log}
# echo "" >> ${log}
# cat "${target}.c" >> ${log}
# echo "" >> ${log}
# echo ">>>>>>> Code" >> ${log}
# less ${log}
# fi
# done
# cd - &> /dev/null
# return 0
# }
_compile_tests () {
echo 'compile tests:'
cd "$_base/code/test/"
make clean &> /dev/null
for target in "${@}"; do
echo -e "\t$target"
make $target &> /dev/null
done
cd - &> /dev/null
}
# arg1: msg
ask () {
read -p "$1" -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
[[ "$0" = "$BASH_RESOURCE" ]] && exit 1 || return 1
fi
}
echo " >>> ${BLUE}Now you can call ${YELLOW}${BOLD}rebuild${RESET}${BLUE} to update your modification.${RESET} <<<"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment