Files
lbmk/script/build/fw/serprog
T
Leah Rowe cc1642096e Use SPDX license headers on all scripts
This results in much cleaner copyright and license declarations.
SPDX headers are legally recognised and make auditing easier.

Also, remove descriptions of each script, from each script.
Libreboot documentation at docs/maintain/ describes them.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-09-25 02:19:48 +01:00

91 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env sh
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: 2023 Riku Viitanen <riku.viitanen@protonmail.com>
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
. "include/err.sh"
pico_src_dir=util-fw/rp2040/pico-serprog
pico_sdk_dir=util-fw/rp2040/pico-sdk
stm32_src_dir=util-fw/stm32-vserprog
usage="usage: ./build fw serprog <rp2040|stm32> [board]"
main()
{
[ -z "${1+x}" ] && err "${usage}"
if [ "${1}" = "rp2040" ]; then
platform="rp2040"
boards_dir=${pico_sdk_dir}/src/boards/include/boards
[ -d "${pico_src_dir}/" ] || fetch_repo rpi-pico-serprog
elif [ "${1}" = "stm32" ]; then
platform="stm32"
boards_dir=${stm32_src_dir}/boards
[ -d "${stm32_src_dir}/" ] || fetch_repo stm32-vserprog
else
err "${usage}"
fi
mkdir -p "bin/serprog_${platform}" || \
err "can't create dir: bin/serprog_${platform}"
if [ $# -gt 1 ] ; then
if [ "${2}" = "list" ] ; then
print_boards ${boards_dir}
else
build_${platform}_rom "${2}"
fi
else
printf "Building all serprog targets\n"
list_boards "${boards_dir}" | while read board; do
build_${platform}_rom "${board}"
done
fi
}
fetch_repo()
{
./update project repo "${1}" || err "fetch ${1} failed!\n"
}
build_rp2040_rom()
{
board=${1}
printf "Building pico-serprog for ${board}\n"
cmake -DPICO_BOARD="${board}" -DPICO_SDK_PATH="${pico_sdk_dir}" \
-B "${pico_src_dir}/build" "${pico_src_dir}" \
|| err "can't cmake ${pico_src_dir}"
cmake --build "${pico_src_dir}/build"
mv ${pico_src_dir}/build/pico_serprog.uf2 \
bin/serprog_rp2040/serprog_${board}.uf2 \
|| err "${board} serprog build failed!"
printf "output to bin/serprog_rp2040/serprog_${board}.uf2\n"
}
build_stm32_rom()
{
board=${1}
printf "Building stm32-vserprog for ${board}\n"
make -C ${stm32_src_dir} libopencm3-just-make BOARD=${board}
make -C ${stm32_src_dir} BOARD=${board}
mv ${stm32_src_dir}/stm32-vserprog.hex \
bin/serprog_stm32/serprog_${board}.hex \
|| err "${board} serprog build failed!"
printf "output to bin/serprog_stm32/serprog_${board}.hex\n"
}
print_boards()
{
printf "Available boards:\n"
list_boards "${1}"
}
list_boards()
{
basename -a -s .h ${1}/*.h
}
main $@