diff --git a/meta-ros-common/classes/ros_cmake.bbclass b/meta-ros-common/classes/ros_cmake.bbclass index 6861788c123..75e53c5304c 100644 --- a/meta-ros-common/classes/ros_cmake.bbclass +++ b/meta-ros-common/classes/ros_cmake.bbclass @@ -1,3 +1,15 @@ # Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved inherit cmake + +EXTRA_OECMAKE:prepend = "\ + -DCMAKE_PREFIX_PATH='${STAGING_DIR_HOST}${ros_prefix};${STAGING_DIR_HOST}${prefix}' \ + -DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \ + -DCMAKE_MODULE_PATH='${STAGING_DIR_HOST}${ros_datadir}/cmake/Modules/' \ +" + +EXTRA_OECMAKE:prepend:class-native = "\ + -DCMAKE_PREFIX_PATH='${STAGING_DIR_NATIVE}${ros_prefix};${STAGING_DIR_NATIVE}${prefix}' \ + -DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \ +" diff --git a/meta-ros-common/classes/ros_opt_prefix.bbclass b/meta-ros-common/classes/ros_opt_prefix.bbclass index 9dd68f3a622..58c05e58d2b 100644 --- a/meta-ros-common/classes/ros_opt_prefix.bbclass +++ b/meta-ros-common/classes/ros_opt_prefix.bbclass @@ -1,17 +1,20 @@ # # Copyright (c) 2013 Stefan Herbrechtsmeier, Bielefeld University # Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved # ros_prefix ?= "${base_prefix}/opt/ros/${ROS_DISTRO}" ros_bindir = "${ros_prefix}/bin" +ros_sbindir = "${ros_prefix}/sbin" ros_libdir = "${ros_prefix}/${baselib}" ros_libexecdir = "${ros_libdir}/${ROS_BPN}" ros_includedir = "${ros_prefix}/include" ros_datadir = "${ros_prefix}/share" ros_sysconfdir = "${ros_prefix}/etc" ros_stacksdir = "${ros_prefix}/stacks" +ros_toolsdir = "${ros_prefix}/tools" # Used by chrpath.bbclass PREPROCESS_RELOCATE_DIRS += " \ @@ -35,6 +38,8 @@ FILES:${PN} += "\ ${ros_datadir} \ ${ros_sysconfdir} \ ${ros_stacksdir} \ + ${ros_toolsdir}/ \ + ${ros_prefix} \ " FILES:${PN}-dev += "\ @@ -65,6 +70,8 @@ SYSROOT_DIRS:append = " \ ${ros_datadir} \ ${ros_stacksdir} \ ${ros_sysconfdir} \ + ${ros_bindir} \ + ${ros_sbindir} \ " SYSROOT_DIRS_NATIVE:append = " \ diff --git a/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace/0001-Don-t-use-CMAKE_INSTALL_PREFIX-as-sysroot-for-cross-.patch b/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace/0001-PATCH-Set-cross-compile-prefix-to-CMAKE_INSTALL_PREF.patch similarity index 61% rename from meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace/0001-Don-t-use-CMAKE_INSTALL_PREFIX-as-sysroot-for-cross-.patch rename to meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace/0001-PATCH-Set-cross-compile-prefix-to-CMAKE_INSTALL_PREF.patch index f7493976f7a..a6d0088f68f 100644 --- a/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace/0001-Don-t-use-CMAKE_INSTALL_PREFIX-as-sysroot-for-cross-.patch +++ b/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace/0001-PATCH-Set-cross-compile-prefix-to-CMAKE_INSTALL_PREF.patch @@ -1,16 +1,14 @@ -From a1e3a61864ad7e81653c4adcc0360231b7a6238f Mon Sep 17 00:00:00 2001 -From: JeongBong Seo -Date: Fri, 5 Apr 2019 14:54:08 +0900 -Subject: [PATCH] Don't use CMAKE_INSTALL_PREFIX as sysroot for cross-compile - -Upstream-Status: Pending +From 107260818dc02e51a0e47ea1a2007d7531fb55b1 Mon Sep 17 00:00:00 2001 +From: Jiaxing Shi +Date: Wed, 15 May 2024 14:45:56 +0800 +Subject: [PATCH] [PATCH] Set cross-compile prefix to CMAKE_INSTALL_PREFIX --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt -index 880d8ea..544785c 100644 +index 99c9e2d..f56a56c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ else() @@ -18,7 +16,10 @@ index 880d8ea..544785c 100644 set(SHELL_EXT "sh") endif() -set(AMENT_PACKAGE_DIR "${CMAKE_INSTALL_PREFIX}/${PYTHON_INSTALL_DIR}/ament_package") -+set(AMENT_PACKAGE_DIR "$ENV{STAGING_DIR_NATIVE}/usr/${PYTHON_INSTALL_DIR}/ament_package") ++set(AMENT_PACKAGE_DIR "$ENV{STAGING_DIR_NATIVE}/${CMAKE_INSTALL_PREFIX}/${PYTHON_INSTALL_DIR}/ament_package") if(NOT EXISTS "${AMENT_PACKAGE_DIR}") # Check for an .egg-link file and use the listed directory if it exists get_filename_component(AMENT_PACKAGE_EGG_LINK "${AMENT_PACKAGE_DIR}" DIRECTORY) +-- +2.17.1 + diff --git a/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace_%.bbappend b/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace_%.bbappend deleted file mode 100644 index 2d82f957cda..00000000000 --- a/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace_%.bbappend +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright (c) 2019 LG Electronics, Inc. - -# ASSERT( == /usr) -# ros-workspace installs its setup scripts under , which is an unnatural location when is /usr. Move them to be -# under /profile.d/ros and create "ros_" prefixed symlinks to them under . -# -# Create a ros.sh that sources ros/setup.sh, thereby setting up the ROS workspace for every login. Place it in a separate package -# which will be added to images when IMAGE_FEATURES contains "ros-implicit-workspace" -do_install:append() { - profile_dir=${sysconfdir}/profile.d/ros - mkdir -p ${D}$profile_dir - cd ${D}$profile_dir - - mv ${D}${prefix}/*setup.bash . - mv ${D}${prefix}/*setup.zsh . - mv ${D}${prefix}/*setup.sh . - mv ${D}${prefix}/_local_setup_util.py . - - for f in *setup.bash *setup.zsh; do - # Hardcode AMENT_CURRENT_PREFIX and the directory where these files reside. - sed -i -e '/AMENT_CURRENT_PREFIX=/ s@=.*@=${prefix}@' \ - -e '/\$AMENT_CURRENT_PREFIX/ s@\$AMENT_CURRENT_PREFIX@'$profile_dir'@' $f - done - - # Add special case handling for AMENT_CURRENT_PREFIX == /usr - sed -i -e '/for _path.*_UNIQUE_PREFIX_PATH.*do/ s@do.*@do [ $_path = ${prefix} ] \&\& _path='$profile_dir'@' \ - -e '/AMENT_CURRENT_PREFIX=.*_path/ s@_path.*@_path; [ $_path = '$profile_dir' ] \&\& AMENT_CURRENT_PREFIX=${prefix}@' \ - setup.sh - - # Don't attempt to use the build-time Python executable on the target and hardcode the directory where _order_packages.py - # resides. - sed -i -e '/^_ament_python_executable=/ s@=.*@=${bindir}/${PYTHON_PN}@' \ - -e '/_local_setup_util\.py/ s@\$_ament_prefix_sh_AMENT_CURRENT_PREFIX/@'$profile_dir'/@' \ - local_setup.sh - - # This script assumes, that it's installed in root of ROS distro instalation (e.g. /opt/ros/eloquent/_local_setup_util.py - # in our setup it's installed in /etc/profile.d/ros/_local_setup_util.py) and uses it's path to search for ament packages: - # https://github.com/ament/ament_package/commit/0a41c282b36902cee6b64f7c80138b93c729fb7b#diff-f837dfb214b29ba2075cb54047ffa159R54 - # and then also passes it's path in get_commands() call as a prefix: - # https://github.com/ament/ament_package/commit/0a41c282b36902cee6b64f7c80138b93c729fb7b#diff-f837dfb214b29ba2075cb54047ffa159R62 - # so it wasn't finding anything in our setup, change it to ${prefix} and drop all this when we switch ROS2 to use ros_opt_prefix.bbclass - sed -i -e "s#__file__#'${libdir}'#g" _local_setup_util.py - - mkdir -p ${D}${bindir} - for f in *setup.bash *setup.zsh *setup.sh; do - ln -s $profile_dir/$f ${D}${bindir}/ros_$f - done - - echo ". $profile_dir/setup.sh" > ../ros.sh - - cd - > /dev/null -} - -PACKAGES =+ "${PN}-implicitworkspace" - -FILES:${PN}-implicitworkspace = " \ - ${sysconfdir}/profile.d/ros.sh \ -" diff --git a/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace_1.0.2-2.bbappend b/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace_1.0.2-2.bbappend index ff96a40ae9a..d3eb809b37c 100644 --- a/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace_1.0.2-2.bbappend +++ b/meta-ros2-humble/recipes-bbappends/ros-workspace/ros-workspace_1.0.2-2.bbappend @@ -11,4 +11,4 @@ ROS_BUILDTOOL_DEPENDS += " \ # Need to pass the native sysroot folder path. export STAGING_DIR_NATIVE FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI:append = " file://0001-Don-t-use-CMAKE_INSTALL_PREFIX-as-sysroot-for-cross-.patch" +SRC_URI:append = " file://0001-PATCH-Set-cross-compile-prefix-to-CMAKE_INSTALL_PREF.patch" diff --git a/meta-ros2/classes/ros2_distro.bbclass b/meta-ros2/classes/ros2_distro.bbclass index 59949e5b54b..b1dff6272b1 100644 --- a/meta-ros2/classes/ros2_distro.bbclass +++ b/meta-ros2/classes/ros2_distro.bbclass @@ -1,6 +1,7 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. inherit ros_distro +inherit ros_opt_prefix # Place metadata unique to ROS 2 distros here. diff --git a/meta-ros2/classes/ros_ament_cmake.bbclass b/meta-ros2/classes/ros_ament_cmake.bbclass index dd4d4d3bdb2..49249dea79b 100644 --- a/meta-ros2/classes/ros_ament_cmake.bbclass +++ b/meta-ros2/classes/ros_ament_cmake.bbclass @@ -1,3 +1,5 @@ +# Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved + # The SOABI setting changed in newer python3 with: # http://git.openembedded.org/openembedded-core/commit/?h=warrior&id=f3326309c7c22a6034917f6eee21908c61f44a2f # https://github.com/python/cpython/pull/13196/commits/752b61141da76e81e53700bdbea81cd95af617b6 @@ -19,10 +21,20 @@ EXTRA_OECMAKE:append:class-target = " -DPYTHON_SOABI=${PYTHON_SOABI}" # # "Could not find ROS middleware implementation 'NOTFOUND'" # -export AMENT_PREFIX_PATH="${STAGING_DIR_HOST}${prefix};${STAGING_DIR_NATIVE}${prefix}" +export AMENT_PREFIX_PATH="${STAGING_DIR_HOST}${prefix};${STAGING_DIR_NATIVE}${prefix};${STAGING_DIR_HOST}${ros_prefix};${STAGING_DIR_NATIVE}${ros_prefix}" inherit cmake python3native FILES:${PN}:prepend = " \ ${datadir}/ament_index \ " + +EXTRA_OECMAKE:prepend = "\ + -DCMAKE_PREFIX_PATH='${STAGING_DIR_HOST}${ros_prefix};${STAGING_DIR_HOST}${prefix}' \ + -DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \ +" + +EXTRA_OECMAKE:prepend:class-native = "\ + -DCMAKE_PREFIX_PATH='${ros_prefix}' \ + -DCMAKE_INSTALL_PREFIX:PATH='${ros_prefix}' \ +" diff --git a/meta-ros2/classes/ros_ament_python.bbclass b/meta-ros2/classes/ros_ament_python.bbclass index 0d0f72c7fcd..b6251b18600 100644 --- a/meta-ros2/classes/ros_ament_python.bbclass +++ b/meta-ros2/classes/ros_ament_python.bbclass @@ -1,18 +1,34 @@ # Copyright (c) 2018-2019 LG Electronics, Inc. +# Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved inherit setuptools3_legacy do_install:append() { - mkdir -p ${D}${datadir}/ament_index/resource_index/packages - touch ${D}${datadir}/ament_index/resource_index/packages/${ROS_BPN} - if test -e ${D}${libdir}/${ROS_BPN}; then - for i in ${D}${libdir}/${ROS_BPN}/* ${D}${libdir}/${ROS_BPN}/*/*; do + mkdir -p ${D}${ros_datadir}/ament_index/resource_index/packages + touch ${D}${ros_datadir}/ament_index/resource_index/packages/${ROS_BPN} + if test -e ${D}${ros_libdir}/${ROS_BPN}; then + for i in ${D}${ros_libdir}/${ROS_BPN}/* ${D}${ros_libdir}/${ROS_BPN}/*/*; do [ -f $i ] && sed -i '1c#!/usr/bin/python3' $i done true fi + + # similar to what setuptools3_legacy.bbclass does here: + for i in ${D}${ros_bindir}/* ${D}${ros_sbindir}/*; do + if [ -f "$i" ]; then + sed -i -e s:${PYTHON}:${USRBINPATH}/env\ ${SETUPTOOLS_PYTHON}:g $i + sed -i -e s:${STAGING_BINDIR_NATIVE}:${bindir}:g $i + fi + done } FILES:${PN}:prepend = " \ - ${datadir}/ament_index \ + ${ros_datadir}/ament_index \ " + +PYTHON_SITEPACKAGES_DIR = "${ros_libdir}/${PYTHON_DIR}/site-packages" + +SETUPTOOLS_INSTALL_ARGS = "--root=${D} \ + --prefix=${ros_prefix} \ + --install-lib=${PYTHON_SITEPACKAGES_DIR} \ + --install-data=${ros_datadir}"