/
library_generation.sh
executable file
·101 lines (82 loc) · 3.52 KB
/
library_generation.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
set -e
export BASE_PATH=/project/$MICROROS_LIBRARY_FOLDER
######## Init ########
apt update
apt install -y gcc-arm-none-eabi
cd /uros_ws
source /opt/ros/$ROS_DISTRO/setup.bash
source install/local_setup.bash
ros2 run micro_ros_setup create_firmware_ws.sh generate_lib
######## Adding extra packages ########
pushd firmware/mcu_ws > /dev/null
# Workaround: Copy just tf2_msgs
git clone -b humble https://github.com/ros2/geometry2
cp -R geometry2/tf2_msgs ros2/tf2_msgs
rm -rf geometry2
# Import user defined packages
mkdir extra_packages
pushd extra_packages > /dev/null
USER_CUSTOM_PACKAGES_DIR=$BASE_PATH/../../microros_component/extra_packages
if [ -d "$USER_CUSTOM_PACKAGES_DIR" ]; then
cp -R $USER_CUSTOM_PACKAGES_DIR/* .
fi
if [ -f $USER_CUSTOM_PACKAGES_DIR/extra_packages.repos ]; then
vcs import --input $USER_CUSTOM_PACKAGES_DIR/extra_packages.repos
fi
cp -R $BASE_PATH/library_generation/extra_packages/* .
vcs import --input extra_packages.repos
popd > /dev/null
popd > /dev/null
######## Trying to retrieve CFLAGS ########
pushd /project > /dev/null
#export RET_CFLAGS=$(make print_cflags)
export RET_CFLAGS="-mcpu=cortex-m7 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -specs=nosys.specs -fdata-sections -ffunction-sections"
RET_CODE=$?
if [ $RET_CODE = "0" ]; then
echo "Found CFLAGS:"
echo "-------------"
echo $RET_CFLAGS
echo "-------------"
read -p "Do you want to continue with them? (y/n)" -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
echo "Continuing..."
else
echo "Aborting"
exit 0;
fi
else
echo "Please read README.md to update your Makefile"
exit 1;
fi
popd > /dev/null
######## Build ########
export TOOLCHAIN_PREFIX=/usr/bin/arm-none-eabi-
ros2 run micro_ros_setup build_firmware.sh $BASE_PATH/library_generation/toolchain.cmake $BASE_PATH/library_generation/colcon.meta
find firmware/build/include/ -name "*.c" -delete
rm -rf $BASE_PATH/libmicroros
mkdir -p $BASE_PATH/libmicroros/microros_include
cp -R firmware/build/include/* $BASE_PATH/libmicroros/microros_include/
cp -R firmware/build/libmicroros.a $BASE_PATH/libmicroros/libmicroros.a
######## Fix include paths ########
pushd firmware/mcu_ws > /dev/null
INCLUDE_ROS2_PACKAGES=$(colcon list | awk '{print $1}' | awk -v d=" " '{s=(NR==1?s:s d)$0}END{print s}')
popd > /dev/null
for var in ${INCLUDE_ROS2_PACKAGES}; do
if [ -d "$BASE_PATH/libmicroros/microros_include/${var}/${var}" ]; then
rsync -r $BASE_PATH/libmicroros/microros_include/${var}/${var}/* $BASE_PATH/libmicroros/microros_include/${var}
rm -rf $BASE_PATH/libmicroros/microros_include/${var}/${var}
fi
done
######## Generate extra files ########
find firmware/mcu_ws/ros2 \( -name "*.srv" -o -name "*.msg" -o -name "*.action" \) | awk -F"/" '{print $(NF-2)"/"$NF}' > $BASE_PATH/libmicroros/available_ros2_types
find firmware/mcu_ws/extra_packages \( -name "*.srv" -o -name "*.msg" -o -name "*.action" \) | awk -F"/" '{print $(NF-2)"/"$NF}' >> $BASE_PATH/libmicroros/available_ros2_types
cd firmware
echo "" > $BASE_PATH/libmicroros/built_packages
for f in $(find $(pwd) -name .git -type d); do pushd $f > /dev/null; echo $(git config --get remote.origin.url) $(git rev-parse HEAD) >> $BASE_PATH/libmicroros/built_packages; popd > /dev/null; done;
######## Fix permissions ########
sudo chmod -R 777 $BASE_PATH/libmicroros/
sudo chmod -R 777 $BASE_PATH/libmicroros/microros_include/
sudo chmod -R 777 $BASE_PATH/libmicroros/libmicroros.a