2022-09-06 16:08:26 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
GENERATOR="Unix Makefiles"
|
|
|
|
NUM_VALID_TARGETS=0
|
|
|
|
BUILD_TYPE=RELEASE
|
|
|
|
INSTALL_DIR="dist"
|
|
|
|
MAKE_TARGETS="all"
|
|
|
|
DOC_DIR=docs
|
|
|
|
LINKS_DIR="$DOC_DIR/source"
|
|
|
|
|
|
|
|
add_valid_target() {
|
|
|
|
VALID_TARGETS[$NUM_VALID_TARGETS]=$1
|
|
|
|
HW_SIGS[$NUM_VALID_TARGETS]=$2
|
|
|
|
((NUM_VALID_TARGETS++))
|
|
|
|
}
|
|
|
|
|
|
|
|
add_valid_target test
|
|
|
|
add_valid_target atmega328p
|
2022-12-30 08:31:02 +00:00
|
|
|
add_valid_target atmega168p
|
|
|
|
add_valid_target atmega88p
|
2022-09-06 16:08:26 +00:00
|
|
|
add_valid_target atmega2560
|
2022-12-30 08:31:02 +00:00
|
|
|
add_valid_target atmega1280
|
|
|
|
add_valid_target atmega640
|
2022-09-06 16:08:26 +00:00
|
|
|
|
|
|
|
|
|
|
|
check_valid_target() {
|
|
|
|
result="false"
|
|
|
|
|
|
|
|
for (( i = 0; i < NUM_VALID_TARGETS; i++ ))
|
|
|
|
do
|
|
|
|
if [[ ${VALID_TARGETS[$i]} == $1 ]]
|
|
|
|
then
|
|
|
|
result=$i
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
echo $result
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
do_pipenv_clean() {
|
|
|
|
echo removing old python virtual environment...
|
|
|
|
pipenv --rm
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
do_pipenv_install() {
|
|
|
|
echo installing python virtual environment...
|
|
|
|
pipenv install
|
|
|
|
}
|
|
|
|
|
|
|
|
clean_arch() {
|
|
|
|
target_arch="$1"
|
|
|
|
echo "Removing pre-existing build directory: $target_arch..."
|
|
|
|
rm -rf "build-$target_arch"
|
|
|
|
echo "Removing any build artifacts"
|
|
|
|
rm -f $INSTALL_DIR/*"$1"*
|
|
|
|
echo "Removing any download links"
|
|
|
|
rm -f $LINKS_DIR/*$1*
|
|
|
|
}
|
|
|
|
|
|
|
|
build_arch() {
|
|
|
|
local target_arch="$1"
|
|
|
|
local hardware_sig="$2"
|
|
|
|
|
2022-12-30 19:06:44 +00:00
|
|
|
cmake -S . -B "build-$target_arch" -G "$GENERATOR" \
|
2023-01-02 09:30:03 +00:00
|
|
|
-DCMAKE_INSTALL_PREFIX="." -DARCH="$target_arch" \
|
2022-12-30 08:31:02 +00:00
|
|
|
-DCMAKE_BUILD_TYPE="$BUILD_TYPE"
|
2022-09-06 16:08:26 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
deploy_arch() {
|
|
|
|
local target_arch="$1"
|
|
|
|
|
|
|
|
if [[ -d "build-$target_arch" ]]
|
|
|
|
then
|
|
|
|
(cd "build-$target_arch" \
|
|
|
|
&& make install)
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
clean_all() {
|
|
|
|
echo "- Removing install dir \"$INSTALL_DIR\"..."
|
|
|
|
rm -rvf "$INSTALL_DIR"
|
2023-01-02 09:30:03 +00:00
|
|
|
echo "- Removing download links from doc dir..."
|
2022-09-06 16:08:26 +00:00
|
|
|
rm -vf $DOC_DIR/source/toc_*
|
2023-01-02 09:30:03 +00:00
|
|
|
echo "- Removing hex files from doc dir..."
|
|
|
|
rm -vf $DOC_DIR/source/*.hex
|
|
|
|
echo "- Removing versioned index file from doc dir"
|
2022-09-06 16:08:26 +00:00
|
|
|
rm -vf "$DOC_DIR/source/index.rst"
|
|
|
|
}
|
|
|
|
|
|
|
|
syntax() {
|
|
|
|
echo "Usage:"
|
|
|
|
echo " $0 -t target [-t target] ..."
|
|
|
|
echo " $0 -a"
|
|
|
|
echo " $0 -h"
|
|
|
|
echo ""
|
|
|
|
echo "Options:"
|
|
|
|
echo " -h. Display this help message"
|
|
|
|
echo " -x Before creating a build directgory or virtual env, remove"
|
|
|
|
echo " any pre-existing version"
|
|
|
|
echo " -t add an architecture directory"
|
|
|
|
echo " -a Add all valid architecture directories"
|
|
|
|
echo " -i Build each specified target and install to dist directory"
|
|
|
|
echo " -p Install pipenv virtual environment for python scripts"
|
|
|
|
echo " -c Clean all artifacts"
|
|
|
|
echo " -s Copy dist files to sphinx directory"
|
|
|
|
echo "Valid targets: ${VALID_TARGETS[*]}"
|
|
|
|
}
|
|
|
|
|
|
|
|
parse() {
|
|
|
|
local SYNTAX=""
|
|
|
|
local ALL=""
|
|
|
|
local i
|
|
|
|
local valid_index
|
|
|
|
|
|
|
|
NUM_CMAKE_TARGETS=0
|
|
|
|
CLEAN_BEFORE_BUILD=""
|
|
|
|
DO_PIPENV_INSTALL=""
|
|
|
|
DEPLOY=""
|
|
|
|
CLEAN_ALL=""
|
|
|
|
COPY_DIST_TO_DOCS=""
|
|
|
|
|
|
|
|
while getopts "t:ahipxcs" optname
|
|
|
|
do
|
|
|
|
case "$optname" in
|
|
|
|
h)
|
|
|
|
SYNTAX="yes"
|
|
|
|
;;
|
|
|
|
a)
|
|
|
|
ALL="yes"
|
|
|
|
;;
|
|
|
|
t)
|
|
|
|
# Test that target is valid
|
|
|
|
valid_index=$(check_valid_target $OPTARG)
|
|
|
|
if [[ $valid_index != "false" ]]
|
|
|
|
then
|
|
|
|
CMAKE_TARGETS[$NUM_CMAKE_TARGETS]=$valid_index
|
|
|
|
((NUM_CMAKE_TARGETS++))
|
|
|
|
else
|
|
|
|
echo Unknown target \"$OPTARG\"
|
|
|
|
SYNTAX="yes"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
p)
|
|
|
|
DO_PIPENV_INSTALL="yes"
|
|
|
|
;;
|
|
|
|
x)
|
|
|
|
CLEAN_BEFORE_BUILD="yes"
|
|
|
|
;;
|
|
|
|
i) DEPLOY="yes"
|
|
|
|
;;
|
|
|
|
s) COPY_DIST_TO_DOCS="yes"
|
|
|
|
;;
|
|
|
|
c) CLEAN_ALL="yes"
|
|
|
|
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if [[ "$SYNTAX" == "yes" ]]; then
|
|
|
|
syntax && die
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "$ALL" == "yes" ]]
|
|
|
|
then
|
|
|
|
for (( i=0; i<NUM_VALID_TARGETS; i++ ))
|
|
|
|
do
|
|
|
|
CMAKE_TARGETS[i]=$i
|
|
|
|
done
|
|
|
|
NUM_CMAKE_TARGETS=$NUM_VALID_TARGETS
|
|
|
|
fi
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
die() {
|
|
|
|
builtin echo $@
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
main() {
|
|
|
|
local TARGET
|
|
|
|
local i
|
|
|
|
parse $@
|
|
|
|
|
|
|
|
if [[ "$DO_PIPENV_INSTALL" == "yes" ]]
|
|
|
|
then
|
|
|
|
if [[ "$CLEAN_BEFORE_BUILD" == "yes" ]]
|
|
|
|
then
|
|
|
|
do_pipenv_clean
|
|
|
|
fi
|
|
|
|
|
|
|
|
do_pipenv_install
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ "$CLEAN_ALL" == "yes" ]]
|
|
|
|
then
|
|
|
|
clean_all
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo Valid Targets: "${VALID_TARGETS[*]}"
|
2022-09-07 20:38:28 +00:00
|
|
|
|
2022-09-06 16:08:26 +00:00
|
|
|
for (( i=0; $i<$NUM_CMAKE_TARGETS; i++ ))
|
|
|
|
do
|
|
|
|
TARGET=${CMAKE_TARGETS[$i]}
|
|
|
|
if [[ "$CLEAN_BEFORE_BUILD" == "yes" ]]
|
|
|
|
then
|
|
|
|
clean_arch ${VALID_TARGETS[$TARGET]}
|
|
|
|
fi
|
|
|
|
build_arch ${VALID_TARGETS[$TARGET]} ${HW_SIGS[$TARGET]}
|
|
|
|
if [[ "$DEPLOY" == "yes" ]]
|
|
|
|
then
|
|
|
|
deploy_arch ${VALID_TARGETS[$TARGET]}
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [[ $COPY_DIST_TO_DOCS == "yes" && -d "$INSTALL_DIR" ]]
|
|
|
|
then
|
|
|
|
cp -av "$INSTALL_DIR"/* docs/source
|
|
|
|
fi
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
main $@
|
|
|
|
|
|
|
|
exit 0
|
|
|
|
|
|
|
|
|