SummerCart64/build.sh

177 lines
4.4 KiB
Bash
Raw Normal View History

#!/bin/bash
set -e
2022-05-15 15:47:12 +02:00
PACKAGE_FILE_NAME="SC64"
FILES=(
2022-08-19 20:56:29 +02:00
"./fw/ftdi/ft232h_config.xml"
"./fw/project/lcmxo2/impl1/sc64_impl1.mrp"
2022-08-19 21:14:12 +02:00
"./fw/project/lcmxo2/impl1/sc64_impl1.twr"
2022-08-22 01:00:14 +02:00
"./sw/pc/dd64.py"
2022-05-15 15:47:12 +02:00
"./sw/pc/sc64.py"
2022-08-18 23:12:04 +02:00
"./sw/update/sc64.upd"
"./LICENSE"
2022-05-15 15:47:12 +02:00
"./README.md"
)
2022-05-15 15:47:12 +02:00
BUILT_BOOTLOADER=false
BUILT_CONTROLLER=false
BUILT_FPGA=false
BUILT_UPDATE=false
BUILT_RELEASE=false
FORCE_CLEAN=false
2022-05-15 15:47:12 +02:00
build_bootloader () {
if [ "$BUILT_BOOTLOADER" = true ]; then return; fi
2022-05-15 15:47:12 +02:00
pushd sw/bootloader > /dev/null
if [ "$FORCE_CLEAN" = true ]; then
make clean
fi
2022-05-15 15:47:12 +02:00
FLAGS="$USER_FLAGS"
if [ ! -z "${GIT_BRANCH+x}" ]; then FLAGS+=" -DGIT_BRANCH='\"$GIT_BRANCH\"'"; fi
if [ ! -z "${GIT_TAG+x}" ]; then FLAGS+=" -DGIT_TAG='\"$GIT_TAG\"'"; fi
if [ ! -z "${GIT_SHA+x}" ]; then FLAGS+=" -DGIT_SHA='\"$GIT_SHA\"'"; fi
if [ ! -z "${GIT_MESSAGE+x}" ]; then FLAGS+=" -DGIT_MESSAGE='\"$GIT_MESSAGE\"'"; fi
2022-05-15 15:47:12 +02:00
make all -j USER_FLAGS="$FLAGS"
popd > /dev/null
2022-05-15 15:47:12 +02:00
BUILT_BOOTLOADER=true
}
2022-05-15 15:47:12 +02:00
build_controller () {
if [ "$BUILT_CONTROLLER" = true ]; then return; fi
2022-05-15 15:47:12 +02:00
pushd sw/controller > /dev/null
if [ "$FORCE_CLEAN" = true ]; then
2022-08-03 08:53:30 +02:00
./build.sh clean
fi
2022-08-03 08:53:30 +02:00
USER_FLAGS="$USER_FLAGS" ./build.sh all
popd > /dev/null
2022-05-15 15:47:12 +02:00
BUILT_CONTROLLER=true
2022-01-18 19:21:49 +01:00
}
build_fpga () {
if [ "$BUILT_FPGA" = true ]; then return; fi
2022-05-15 15:47:12 +02:00
pushd fw/project/lcmxo2 > /dev/null
if [ "$FORCE_CLEAN" = true ]; then
rm -rf ./impl1/
fi
2022-05-15 15:47:12 +02:00
./build.sh
popd > /dev/null
BUILT_FPGA=true
}
build_update () {
if [ "$BUILT_UPDATE" = true ]; then return; fi
2022-05-15 15:47:12 +02:00
build_bootloader
build_controller
build_fpga
2022-08-18 23:12:04 +02:00
pushd sw/update > /dev/null
2022-08-19 11:35:58 +02:00
if [ "$FORCE_CLEAN" = true ]; then
rm -f ./sc64.upd
fi
2022-08-20 13:03:28 +02:00
GIT_INFO=""
if [ ! -z "${GIT_BRANCH}" ]; then GIT_INFO+="branch: [$GIT_BRANCH] "; fi
if [ ! -z "${GIT_TAG}" ]; then GIT_INFO+="tag: [$GIT_TAG] "; fi
if [ ! -z "${GIT_SHA}" ]; then GIT_INFO+="sha: [$GIT_SHA] "; fi
if [ ! -z "${GIT_MESSAGE}" ]; then GIT_INFO+="message: [$GIT_MESSAGE] "; fi
2022-08-20 13:03:28 +02:00
GIT_INFO=$(echo "$GIT_INFO" | xargs)
2022-08-18 23:12:04 +02:00
python3 update.py \
2022-08-20 13:03:28 +02:00
--git "$GIT_INFO" \
2022-08-18 23:12:04 +02:00
--mcu ../controller/build/app/app.bin \
--fpga ../../fw/project/lcmxo2/impl1/sc64_impl1.jed \
--boot ../bootloader/build/bootloader.bin \
sc64.upd
popd > /dev/null
BUILT_UPDATE=true
}
build_release () {
if [ "$BUILT_RELEASE" = true ]; then return; fi
build_update
if [ -e "./${PACKAGE_FILE_NAME}.zip" ]; then
rm -f "./${PACKAGE_FILE_NAME}.zip"
fi
zip -j -r "./${PACKAGE_FILE_NAME}.zip" ${FILES[@]}
BUILT_RELEASE=true
}
print_usage () {
2022-08-20 21:30:55 +02:00
echo "builder script for SC64"
2022-05-15 15:47:12 +02:00
echo "usage: ./build.sh [bootloader] [controller] [fpga] [update] [release] [-c] [--help]"
echo "parameters:"
2022-05-15 15:47:12 +02:00
echo " bootloader - compile N64 bootloader software"
echo " controller - compile ARM controller software"
echo " fpga - compile FPGA design"
echo " update - compile all software and designs"
echo " release - collect and zip files for release (triggers 'update' build)"
echo " -c | --force-clean"
2022-05-15 15:47:12 +02:00
echo " - clean compilation result directories before build"
echo " --help - print this guide"
}
if test $# -eq 0; then
echo "error: no parameters provided"
echo " "
print_usage
exit 1
fi
2022-05-15 15:47:12 +02:00
TRIGGER_BOOTLOADER=false
TRIGGER_CONTROLLER=false
TRIGGER_FPGA=false
TRIGGER_UPDATE=false
TRIGGER_RELEASE=false
while test $# -gt 0; do
case "$1" in
2022-05-15 15:47:12 +02:00
bootloader)
TRIGGER_BOOTLOADER=true
;;
2022-05-15 15:47:12 +02:00
controller)
TRIGGER_CONTROLLER=true
2022-01-18 19:21:49 +01:00
;;
fpga)
TRIGGER_FPGA=true
;;
update)
TRIGGER_UPDATE=true
;;
release)
TRIGGER_RELEASE=true
;;
-c|--force-clean)
FORCE_CLEAN=true
;;
--help)
print_usage
exit 0
;;
*)
echo "error: unknown parameter \"$1\""
echo " "
print_usage
exit 1
;;
esac
shift
done
2022-05-15 15:47:12 +02:00
if [ "$TRIGGER_BOOTLOADER" = true ]; then build_bootloader; fi
if [ "$TRIGGER_CONTROLLER" = true ]; then build_controller; fi
if [ "$TRIGGER_FPGA" = true ]; then build_fpga; fi
if [ "$TRIGGER_UPDATE" = true ]; then build_update; fi
if [ "$TRIGGER_RELEASE" = true ]; then build_release; fi