83 lines
2.1 KiB
Bash
Executable File
83 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#######################################################################
|
|
#
|
|
# Generate a new project from templates.
|
|
# It scaffold a project, ready to use, in the current directory with:
|
|
# * CMakeLists.txt
|
|
# * main.c
|
|
#
|
|
# ./install_sdk.bash <project_name> <sdk_version>
|
|
# ex: ./install_sdk.bash <project_name> <sdk_version>
|
|
#
|
|
# The SDK must be installed before using the script.
|
|
# If the SDK is located in a different directory than the project
|
|
# set the `INSTALL_PATH` env var to point to the SDK directory.
|
|
#
|
|
#######################################################################
|
|
|
|
PROJECT_NAME=$1
|
|
PICO_SDK_VERSION=$2
|
|
REGEX_VERSION="^[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}$"
|
|
|
|
if [[ -z ${INSTALL_PATH} ]]
|
|
then
|
|
INSTALL_PATH=${PWD}
|
|
fi
|
|
|
|
usage() {
|
|
echo "usage:"
|
|
echo "./scaffold_project.bash <project_name> <sdk_version> (ex: ./scaffold_project.bash test 2.1.0)"
|
|
}
|
|
|
|
if [[ -z ${PROJECT_NAME} ]]
|
|
then
|
|
echo "error: project name must not be empty"
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
PROJECT_DIR="${PROJECT_NAME}"
|
|
if [[ -d ${PROJECT_DIR} ]]
|
|
then
|
|
echo "error: a project with same name: ${PROJECT_NAME} already exists"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! "${PICO_SDK_VERSION}" =~ ${REGEX_VERSION} ]]
|
|
then
|
|
echo "error: unable to parse the SDK version: '${PICO_SDK_VERSION}' (ex: ./install_sdk 2.1.0)"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -d ${INSTALL_PATH}/sdk/${PICO_SDK_VERSION} ]]
|
|
then
|
|
echo "error: no SDK v${PICO_SDK_VERSION} exists, please make an install first"
|
|
exit 1
|
|
fi
|
|
|
|
PICO_SDK_PATH=${INSTALL_PATH}/sdk/${PICO_SDK_VERSION}
|
|
|
|
mkdir -p ${PROJECT_DIR}
|
|
|
|
echo "generating templates..."
|
|
|
|
# build from the cmake list template
|
|
cp templates/CMakeLists.txt.tpl templates/CMakeLists.txt.tmp
|
|
sed -i "s/<project_name>/${PROJECT_NAME}/g" templates/CMakeLists.txt.tmp
|
|
mv templates/CMakeLists.txt.tmp ${PROJECT_DIR}/CMakeLists.txt
|
|
|
|
# move the c src file into the project folder
|
|
cp templates/main.c.tpl templates/main.c.tmp
|
|
sed -i "s/<prog_name>/${PROJECT_NAME}/g" templates/main.c.tmp
|
|
mv templates/main.c.tmp ${PROJECT_DIR}/main.c
|
|
|
|
echo "building the project: ${PROJECT_NAME}..."
|
|
cd ${PROJECT_DIR}
|
|
mkdir -p build
|
|
cd build
|
|
cmake ..
|
|
make -j$(nproc)
|
|
|
|
echo "project ${PROJECT_NAME} successfully generated"
|