-
Notifications
You must be signed in to change notification settings - Fork 7.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Arduino lib to arduino as IDF component (#8721)
* Iniital commit * Fixed naming of the CMakeLists.txt file in the doc text * Finished the docmentation * Updated, but not yet tested script * Finished script --------- Co-authored-by: Tomas Pilny <tomas.pilny@espressif.com>
- Loading branch information
1 parent
1a504a6
commit 64fa120
Showing
2 changed files
with
229 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
#!/bin/bash | ||
HELP="This script help to add library when using arduino-esp32 as an ESP-IDF component | ||
The script accepts up to three arguments: | ||
-n NEW: URL address to new library on GIThub (cannot be combined with -e) | ||
-l LOCAL: Path to the project where the library should be placed locally (must be paired with -e or -n) | ||
-e EXISTING: path to existing libary- this will simply skip the download (cannot be combined with -n) | ||
Examples: | ||
./add_lib.sh -n https://github.com/me-no-dev/ESPAsyncWebServer | ||
./add_lib.sh -l ~/esp/esp-idf/examples/your_project | ||
./add_lib.sh -e ~/Arduino/libraries/existing_library | ||
./add_lib.sh -n https://github.com/me-no-dev/ESPAsyncWebServer -l ~/esp/esp-idf/examples/your_project | ||
./add_lib.sh -e ~/Arduino/libraries/existing_library -l ~/esp/esp-idf/examples/your_project" | ||
|
||
# Get the directory name where this script is located | ||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" | ||
|
||
# Construct the absolute path to libraries folder | ||
ARDUINO_LIBS_PATH="$SCRIPT_DIR/../libraries" | ||
|
||
# Define the default values for the parameters | ||
e_param="" | ||
l_param="" | ||
n_param="" | ||
|
||
# Parse the command-line arguments using getopts | ||
while getopts "he:l:n:" opt; do | ||
case $opt in | ||
h) | ||
echo "$HELP" | ||
exit 0 | ||
;; | ||
e) | ||
#e_param="$OPTARG" | ||
e_param="${OPTARG/#~/$HOME}" | ||
;; | ||
l) | ||
#l_param="$OPTARG" | ||
l_param="${OPTARG/#~/$HOME}" | ||
;; | ||
n) | ||
n_param=$OPTARG | ||
;; | ||
\?) | ||
echo "Invalid option: -$OPTARG" >&2 | ||
echo $HELP | ||
exit 1 | ||
;; | ||
:) | ||
echo "Option -$OPTARG requires an argument." >&2 | ||
echo $HELP | ||
exit 1 | ||
;; | ||
esac | ||
done | ||
|
||
# No parameter check | ||
if [[ -z "$e_param" ]] && [[ -z "$l_param" ]] && [[ -z "$n_param" ]]; then | ||
echo "Error: No parameters" >&2 | ||
echo "$HELP" | ||
exit 1 | ||
fi | ||
|
||
# Only local path check (not permitted) | ||
if [[ -z "$e_param" ]] && [[ ! -z "$l_param" ]] && [[ -z "$n_param" ]]; then | ||
echo "Error: -l parameter must be paired with -e or -n" >&2 | ||
echo "$HELP" | ||
exit 1 | ||
fi | ||
|
||
# Invalid combination check | ||
if [[ ! -z $e_param ]] && [[ ! -z $n_param ]]; then | ||
echo "ERROR: Cannot combine -n with -e" >&2 | ||
echo "$HELP" | ||
exit 1 | ||
fi | ||
|
||
# Check existing lib | ||
if [[ ! -z "$e_param" ]]; then | ||
if [[ ! -d "${e_param/#~/$HOME}" ]]; then # this works! | ||
echo "Error: existing library parameter - path does not exist" >&2 | ||
exit 1 | ||
fi | ||
fi | ||
|
||
LIBRARY="" | ||
|
||
# Only existing library was supplied | ||
if [[ ! -z $e_param ]] && [[ -z $l_param ]] && [[ -z $n_param ]]; then | ||
LIBRARY=$e_param | ||
fi | ||
|
||
# Install new lib | ||
if [ ! -z $n_param ]; then | ||
INSTALL_TARGET="" | ||
if [ -z $l_param ]; then | ||
# If local path for project is not supplied - use as INSTALL_TARGET Arduino libraries path | ||
INSTALL_TARGET=$ARDUINO_LIBS_PATH/$(basename "$n_param") | ||
else | ||
INSTALL_TARGET=$l_param/components/$(basename "$n_param") | ||
if [ ! -d "$l_param/components" ]; then | ||
echo "Folder components does not exist yet: mkdir -p "$l_param/components"" | ||
mkdir -p "$l_param/components" | ||
fi | ||
fi | ||
# clone the new lib | ||
echo "Cloning: git clone --recursive $n_param $INSTALL_TARGET" | ||
git clone --recursive $n_param $INSTALL_TARGET | ||
LIBRARY=$INSTALL_TARGET | ||
fi | ||
|
||
# Copy existing lib to local project | ||
if [[ ! -z $e_param ]] && [[ ! -z $l_param ]]; then | ||
if [ ! -d "$l_param/components" ]; then | ||
echo "Folder components does not exist yet: mkdir -p "$l_param/components"" | ||
mkdir -p "$l_param/components" | ||
fi | ||
echo "Copy from $e_param to $l_param" | ||
echo "cp -r $e_param $l_param/components/$(basename "$e_param")" | ||
cp -r $e_param $l_param/components/$(basename "$e_param") | ||
LIBRARY=$l_param/components/$(basename "$e_param") | ||
fi | ||
|
||
|
||
if [ -z "$LIBRARY" ]; then | ||
echo "ERROR: No library path" >&2 | ||
exit 1 | ||
fi | ||
|
||
# 1. get the source list: | ||
FILES=$(find $LIBRARY -name '*.c' -o -name '*.cpp' | xargs -I{} basename {}) | ||
|
||
# Fresh start | ||
if [ -f $LIBRARY/CMakeLists.txt ]; then | ||
rm $LIBRARY/CMakeLists.txt | ||
touch $LIBRARY/CMakeLists.txt | ||
fi | ||
|
||
# Generate CMakeLists.txt | ||
echo "idf_component_register(SRCS $(echo $FILES | sed -e 's/ /" "/g' | sed -e 's/^/"/' -e 's/$/"/')" >> $LIBRARY/CMakeLists.txt | ||
echo " INCLUDE_DIRS \".\"" >> $LIBRARY/CMakeLists.txt | ||
echo " REQUIRES \"arduino-esp32\"" >> $LIBRARY/CMakeLists.txt | ||
echo " )" >> $LIBRARY/CMakeLists.txt |