diff --git a/README.md b/README.md index c5217990e..811174263 100755 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ Community contributed boards are: | [Arduino UNO R4 WiFi](https://store.arduino.cc/products/uno-r4-wifi) | - | [@gbr1](https://github.com/gbr1) | | `colcon.meta` | | [Arduino UNO R4 Minima](https://store.arduino.cc/products/uno-r4-minima) | - | [@gbr1](https://github.com/gbr1) | | `colcon.meta` | | [Arduino Opta](https://store.arduino.cc/products/opta-wifi) | - | [@gbr1](https://github.com/gbr1) | | `colcon.meta` | +| [LEGO Mindstorms EV3](https://www.lego.com/en-us/themes/mindstorms/ev3) | - | [@racarla96](https://github.com/racarla96) | Debian Buster (ev3dev), [micro_ros_ev3]([https://github.com/racarla96/micro-ROS-for-LEGO-EV3](https://github.com/racarla96/micro_ros_ev3)) | `colcon.meta` | You can find the available precompiled ROS 2 types for messages and services in [available_ros2_types](available_ros2_types). diff --git a/extras/library_generation/ev3_toolchain.cmake b/extras/library_generation/ev3_toolchain.cmake new file mode 100644 index 000000000..fd5e49f62 --- /dev/null +++ b/extras/library_generation/ev3_toolchain.cmake @@ -0,0 +1,22 @@ +SET(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_CROSSCOMPILING 1) +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +set(CMAKE_C_COMPILER $ENV{TOOLCHAIN_PREFIX}gcc) +set(CMAKE_CXX_COMPILER $ENV{TOOLCHAIN_PREFIX}g++) + +SET(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "") +SET(CMAKE_CXX_COMPILER_WORKS 1 CACHE INTERNAL "") + +SET(CMAKE_CXX_STANDARD 14 CACHE INTERNAL "") + +set(FLAGS "-O2 -ffunction-sections -fdata-sections -fno-exceptions -march=armv5te -mtune=arm926ej-s -mfloat-abi=soft -D'RCUTILS_LOG_MIN_SEVERITY=RCUTILS_LOG_MIN_SEVERITY_NONE'" CACHE STRING "" FORCE) + +set(CMAKE_C_FLAGS_INIT "-std=c11 ${FLAGS}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS_INIT "-std=c++14 ${FLAGS} -fno-rtti" CACHE STRING "" FORCE) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +set(__BIG_ENDIAN__ 0) diff --git a/extras/library_generation/library_generation.sh b/extras/library_generation/library_generation.sh index e7447bf76..3c16f707b 100755 --- a/extras/library_generation/library_generation.sh +++ b/extras/library_generation/library_generation.sh @@ -22,6 +22,7 @@ if [ $OPTIND -eq 1 ]; then PLATFORMS+=("portenta-m7") PLATFORMS+=("kakutef7-m7") PLATFORMS+=("esp32") + PLATFORMS+=("ev3") fi shift $((OPTIND-1)) @@ -244,6 +245,20 @@ if [[ " ${PLATFORMS[@]} " =~ " esp32s3 " ]]; then cp -R firmware/build/libmicroros.a /project/src/esp32s3/libmicroros.a fi +######## Build for EV3 (ev3dev Linux, ARMv5TE) ######## +if [[ " ${PLATFORMS[@]} " =~ " ev3 " ]]; then + rm -rf firmware/build + + export TOOLCHAIN_PREFIX=/usr/bin/arm-linux-gnueabi- + ros2 run micro_ros_setup build_firmware.sh /project/extras/library_generation/ev3_toolchain.cmake /project/extras/library_generation/colcon.meta + + find firmware/build/include/ -name "*.c" -delete + cp -R firmware/build/include/* /project/src/ + + mkdir -p /project/src/ev3 + cp -R firmware/build/libmicroros.a /project/src/ev3/libmicroros.a +fi + ######## 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}')