diff --git a/recipes/icub-main/985.patch b/recipes/icub-main/985.patch new file mode 100644 index 0000000000000..6dd3bed8c034f --- /dev/null +++ b/recipes/icub-main/985.patch @@ -0,0 +1,138 @@ +From c1b007ac630b687bc6e52b8f1abd252c427a5fed Mon Sep 17 00:00:00 2001 +From: Silvio Traversaro +Date: Mon, 23 Sep 2024 12:49:54 +0200 +Subject: [PATCH 1/3] Fix use double leading underscore in python swig bindings + library name + +Fix https://github.com/robotology/icub-main/issues/984 +--- + bindings/CMakeLists.txt | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/bindings/CMakeLists.txt b/bindings/CMakeLists.txt +index ea477e8f54..38d836de1c 100644 +--- a/bindings/CMakeLists.txt ++++ b/bindings/CMakeLists.txt +@@ -58,7 +58,6 @@ if(CREATE_PYTHON) + LANGUAGE python + SOURCES icub.i) + target_link_libraries(${SWIG_MODULE_icub_python_REAL_NAME} Python::Python ${ICUB_SWIG_LIBRARIES}) +- set_target_properties(${SWIG_MODULE_icub_python_REAL_NAME} PROPERTIES OUTPUT_NAME "_icub") + + # installation path is determined reliably on most platforms using distutils + execute_process(COMMAND ${Python_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix=''))" + +From 1f02858bb678f7fc9de45e0ce4c890b3398caf69 Mon Sep 17 00:00:00 2001 +From: Silvio Traversaro +Date: Fri, 20 Sep 2024 08:59:43 +0200 +Subject: [PATCH 2/3] Support compiling bindings as standalone project using an + external ICUB CMake package + +--- + bindings/CMakeLists.txt | 37 +++++++++++++++++++++---------------- + 1 file changed, 21 insertions(+), 16 deletions(-) + +diff --git a/bindings/CMakeLists.txt b/bindings/CMakeLists.txt +index 38d836de1c..f187f2ca90 100644 +--- a/bindings/CMakeLists.txt ++++ b/bindings/CMakeLists.txt +@@ -2,7 +2,17 @@ + # Authors: Paul Fitzpatrick + # CopyPolicy: Released under the terms of the GNU GPL v2.0. + +-list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) ++# Detect if we are doing a standalone build of the bindings, using an external icub-main ++if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) ++ set(ICUB_BINDINGS_BUILD_STANDALONE TRUE) ++else() ++ set(ICUB_BINDINGS_BUILD_STANDALONE FALSE) ++endif() ++ ++if(ICUB_BINDINGS_BUILD_STANDALONE) ++ cmake_minimum_required(VERSION 3.16) ++ project(ICUBBindings) ++endif() + + # Find YARP for bindings-only builds + find_package(YARP COMPONENTS conf os sig dev math gsl REQUIRED) +@@ -11,10 +21,9 @@ foreach(_component conf os sig dev math gsl) + include_directories(${YARP_${_component}_INCLUDE_DIRS}) + endforeach() + +-# Work-around for missing paths to OpenCV libraries +-find_package(OpenCV) +-if(OpenCV_FOUND) +- link_directories(${OpenCV_LINK_DIRECTORIES} ${OPENCV_LINK_DIRECTORIES}) ++# Find ICUB for bindings-only builds ++if(ICUB_BINDINGS_BUILD_STANDALONE) ++ find_package(ICUB REQUIRED) + endif() + + set(ICUB_SWIG_LIBRARIES ctrlLib + +@@ -58,6 +59,7 @@ if(CREATE_PYTHON) + LANGUAGE python + SOURCES icub.i) + target_link_libraries(${SWIG_MODULE_icub_python_REAL_NAME} Python::Python ${ICUB_SWIG_LIBRARIES}) ++ set_target_properties(${SWIG_MODULE_icub_python_REAL_NAME} PROPERTIES SWIG_USE_TARGET_INCLUDE_DIRECTORIES TRUE) + + # installation path is determined reliably on most platforms using distutils + execute_process(COMMAND ${Python_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix=''))" +@@ -101,7 +103,9 @@ if(CREATE_RUBY) + target_link_libraries(${SWIG_MODULE_icub_ruby_REAL_NAME} ${RUBY_LIBRARY} ${ICUB_SWIG_LIBRARIES}) + target_include_directories(${SWIG_MODULE_icub_ruby_REAL_NAME} SYSTEM PRIVATE ${RUBY_INCLUDE_PATH}) + set_target_properties(${SWIG_MODULE_icub_ruby_REAL_NAME} PROPERTIES OUTPUT_NAME "icub" +- LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/ruby") ++ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/ruby" ++ SWIG_USE_TARGET_INCLUDE_DIRECTORIES TRUE) ++ + endif() + + if(CREATE_JAVA) +@@ -119,6 +123,7 @@ if(CREATE_JAVA) + if(APPLE) + set_target_properties(${SWIG_MODULE_icub_java_REAL_NAME} PROPERTIES SUFFIX ".jnilib") + endif(APPLE) ++ set_target_properties(${SWIG_MODULE_icub_python_REAL_NAME} PROPERTIES SWIG_USE_TARGET_INCLUDE_DIRECTORIES TRUE) + endif() + + if(CREATE_CSHARP) +@@ -128,7 +133,7 @@ if(CREATE_CSHARP) + SOURCES icub.i) + + target_link_libraries(${SWIG_MODULE_icub_csharp_REAL_NAME} ${SWIG_ICUB_LIBRARIES}) +- set_target_properties(${SWIG_MODULE_icub_csharp_REAL_NAME} PROPERTIES OUTPUT_NAME "icub" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/csharp") ++ set_target_properties(${SWIG_MODULE_icub_csharp_REAL_NAME} PROPERTIES OUTPUT_NAME "icub" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/csharp" SWIG_USE_TARGET_INCLUDE_DIRECTORIES TRUE) + endif() + + if(CREATE_LUA) +@@ -139,5 +144,5 @@ if(CREATE_LUA) + LANGUAGE lua + SOURCES icub.i) + target_link_libraries(${SWIG_MODULE_icub_lua_REAL_NAME} ${LUA_LIBRARY} ${ICUB_SWIG_LIBRARIES}) +- set_target_properties(${SWIG_MODULE_icub_lua_REAL_NAME} PROPERTIES OUTPUT_NAME "icub" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/lua") ++ set_target_properties(${SWIG_MODULE_icub_lua_REAL_NAME} PROPERTIES OUTPUT_NAME "icub" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/lua" SWIG_USE_TARGET_INCLUDE_DIRECTORIES TRUE) + endif() + +From 8eac01933c0df534a5c0eff51c409f7fc99808cb Mon Sep 17 00:00:00 2001 +From: Silvio Traversaro +Date: Mon, 23 Sep 2024 12:51:02 +0200 +Subject: [PATCH 3/3] Remove references to iDyn in bindings + +--- + bindings/CMakeLists.txt | 1 - + bindings/icub.i | 16 ---------------- + 2 files changed, 17 deletions(-) + +diff --git a/bindings/CMakeLists.txt b/bindings/CMakeLists.txt +index f187f2ca90..9d47b06b79 100644 +--- a/bindings/CMakeLists.txt ++++ b/bindings/CMakeLists.txt +@@ -27,7 +27,6 @@ if(ICUB_BINDINGS_BUILD_STANDALONE) + endif() + + set(ICUB_SWIG_LIBRARIES ctrlLib +- iDyn + iKin + skinDynLib + optimization) diff --git a/recipes/icub-main/activate.msh b/recipes/icub-main/activate.msh new file mode 100644 index 0000000000000..5219a7ea3e7d6 --- /dev/null +++ b/recipes/icub-main/activate.msh @@ -0,0 +1,5 @@ +if_(is_set("COMSPEC")).then_([ + sys.list_append("YARP_DATA_DIRS", path.join(env("CONDA_PREFIX"), "Library\\share\\iCub")) +]).else_([ + sys.list_append("YARP_DATA_DIRS", path.join(env("CONDA_PREFIX"), "share/iCub")) +]) diff --git a/recipes/icub-main/bld_cxx.bat b/recipes/icub-main/bld_cxx.bat new file mode 100644 index 0000000000000..89530d0b9c2cd --- /dev/null +++ b/recipes/icub-main/bld_cxx.bat @@ -0,0 +1,74 @@ +mkdir build +cd build + +cmake %CMAKE_ARGS% ^ + -G "Ninja" ^ + -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^ + -DCMAKE_PREFIX_PATH=%LIBRARY_PREFIX% ^ + -DCMAKE_BUILD_TYPE=Release ^ + -DBUILD_SHARED_LIBS=ON ^ + -DENABLE_icubmod_cartesiancontrollerserver:BOOL=ON ^ + -DENABLE_icubmod_cartesiancontrollerclient:BOOL=ON ^ + -DENABLE_icubmod_gazecontrollerclient:BOOL=ON ^ + -DENABLE_icubmod_skinWrapper:BOOL=ON ^ + -DENABLE_icubmod_dragonfly2:BOOL=OFF ^ + -DENABLE_icubmod_sharedcan:BOOL=ON ^ + -DENABLE_icubmod_bcbBattery:BOOL=ON ^ + -DENABLE_icubmod_canmotioncontrol:BOOL=ON ^ + -DENABLE_icubmod_canBusAnalogSensor:BOOL=ON ^ + -DENABLE_icubmod_canBusInertialMTB:BOOL=ON ^ + -DENABLE_icubmod_canBusSkin:BOOL=ON ^ + -DENABLE_icubmod_canBusFtSensor:BOOL=ON ^ + -DENABLE_icubmod_canBusVirtualAnalogSensor:BOOL=ON ^ + -DENABLE_icubmod_cfw2can:BOOL=OFF ^ + -DENABLE_icubmod_ecan:BOOL=OFF ^ + -DENABLE_icubmod_embObjBattery:BOOL=ON ^ + -DENABLE_icubmod_embObjFTsensor:BOOL=ON ^ + -DENABLE_icubmod_embObjMultipleFTsensors:BOOL=ON ^ + -DENABLE_icubmod_embObjIMU:BOOL=ON ^ + -DENABLE_icubmod_embObjMais:BOOL=ON ^ + -DENABLE_icubmod_embObjMotionControl:BOOL=ON ^ + -DENABLE_icubmod_embObjSkin:BOOL=ON ^ + -DENABLE_icubmod_parametricCalibrator:BOOL=ON ^ + -DENABLE_icubmod_parametricCalibratorEth:BOOL=ON ^ + -DENABLE_icubmod_embObjPOS:BOOL=ON ^ + -DENABLE_icubmod_xsensmtx:BOOL=OFF ^ + -DENABLE_icubmod_socketcan:BOOL=OFF ^ + -DICUB_USE_icub_firmware_shared:BOOL=ON ^ + -DICUB_COMPILE_BINDINGS:BOOL=OFF ^ + %SRC_DIR% +if errorlevel 1 exit 1 + +:: Build. +cmake --build . --config Release +if errorlevel 1 exit 1 + +:: Install. +cmake --build . --config Release --target install +if errorlevel 1 exit 1 + +setlocal EnableDelayedExpansion +:: Generate and copy the [de]activate scripts to %PREFIX%\etc\conda\[de]activate.d. +:: This will allow them to be run on environment activation. +for %%F in (activate deactivate) DO ( + multisheller %RECIPE_DIR%\%%F.msh --output .\%%F + + if not exist %PREFIX%\etc\conda\%%F.d mkdir %PREFIX%\etc\conda\%%F.d + copy %%F.bat %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.bat + if %errorlevel% neq 0 exit /b %errorlevel% + + copy %%F.sh %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.sh + if %errorlevel% neq 0 exit /b %errorlevel% + + copy %%F.bash %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.bash + if %errorlevel% neq 0 exit /b %errorlevel% + + copy %%F.ps1 %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.ps1 + if %errorlevel% neq 0 exit /b %errorlevel% + + copy %%F.xsh %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.xsh + if %errorlevel% neq 0 exit /b %errorlevel% + + copy %%F.zsh %PREFIX%\etc\conda\%%F.d\%PKG_NAME%_%%F.zsh + if %errorlevel% neq 0 exit /b %errorlevel% +) diff --git a/recipes/icub-main/bld_py.bat b/recipes/icub-main/bld_py.bat new file mode 100644 index 0000000000000..f5b33841befff --- /dev/null +++ b/recipes/icub-main/bld_py.bat @@ -0,0 +1,25 @@ +cd bindings +rmdir /s /q build +mkdir build +cd build + +cmake %CMAKE_ARGS% -G "Ninja" ^ + -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^ + -DCMAKE_BUILD_TYPE=Release ^ + -DBUILD_SHARED_LIBS:BOOL=ON ^ + -DPython_EXECUTABLE:PATH=%PYTHON% ^ + -DCREATE_PYTHON:BOOL=ON ^ + -DCREATE_RUBY:BOOL=OFF ^ + -DCREATE_JAVA:BOOL=OFF ^ + -DCREATE_CSHARP:BOOL=OFF ^ + -DCMAKE_INSTALL_PYTHONDIR:PATH=%SP_DIR% ^ + .. +if errorlevel 1 exit 1 + +:: Build. +cmake --build . --config Release +if errorlevel 1 exit 1 + +:: Install. +cmake --build . --config Release --target install +if errorlevel 1 exit 1 diff --git a/recipes/icub-main/build_cxx.sh b/recipes/icub-main/build_cxx.sh new file mode 100644 index 0000000000000..dcbb3b3351a09 --- /dev/null +++ b/recipes/icub-main/build_cxx.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +rm -rf build +mkdir build +cd build + +if [[ "${target_platform}" == linux-* ]]; then + export ICUB_MAIN_ON_LINUX=ON +else + export ICUB_MAIN_ON_LINUX=OFF +fi + +cmake ${CMAKE_ARGS} -GNinja .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS:BOOL=ON \ + -DBUILD_TESTING:BOOL=ON \ + -DENABLE_icubmod_cartesiancontrollerserver:BOOL=ON \ + -DENABLE_icubmod_cartesiancontrollerclient:BOOL=ON \ + -DENABLE_icubmod_gazecontrollerclient:BOOL=ON \ + -DENABLE_icubmod_skinWrapper:BOOL=ON \ + -DENABLE_icubmod_dragonfly2:BOOL=${ICUB_MAIN_ON_LINUX} \ + -DENABLE_icubmod_sharedcan:BOOL=ON \ + -DENABLE_icubmod_bcbBattery:BOOL=ON \ + -DENABLE_icubmod_canmotioncontrol:BOOL=ON \ + -DENABLE_icubmod_canBusAnalogSensor:BOOL=ON \ + -DENABLE_icubmod_canBusInertialMTB:BOOL=ON \ + -DENABLE_icubmod_canBusSkin:BOOL=ON \ + -DENABLE_icubmod_canBusFtSensor:BOOL=ON \ + -DENABLE_icubmod_canBusVirtualAnalogSensor:BOOL=ON \ + -DENABLE_icubmod_cfw2can:BOOL=OFF \ + -DENABLE_icubmod_ecan:BOOL=OFF \ + -DENABLE_icubmod_embObjBattery:BOOL=ON \ + -DENABLE_icubmod_embObjFTsensor:BOOL=ON \ + -DENABLE_icubmod_embObjMultipleFTsensors:BOOL=ON \ + -DENABLE_icubmod_embObjIMU:BOOL=ON \ + -DENABLE_icubmod_embObjMais:BOOL=ON \ + -DENABLE_icubmod_embObjMotionControl:BOOL=ON \ + -DENABLE_icubmod_embObjSkin:BOOL=ON \ + -DENABLE_icubmod_parametricCalibrator:BOOL=ON \ + -DENABLE_icubmod_parametricCalibratorEth:BOOL=ON \ + -DENABLE_icubmod_embObjPOS:BOOL=ON \ + -DENABLE_icubmod_xsensmtx:BOOL=ON \ + -DENABLE_icubmod_socketcan:BOOL=${ICUB_MAIN_ON_LINUX} \ + -DICUB_USE_icub_firmware_shared:BOOL=ON \ + -DICUB_COMPILE_BINDINGS:BOOL=OFF \ + .. + +cmake --build . --config Release + +if [[ ("${CONDA_BUILD_CROSS_COMPILATION:-}" != "1" || "${CROSSCOMPILING_EMULATOR}" != "") ]]; then + ctest --output-on-failure -C Release +fi + +cmake --build . --config Release --target install + +# Generate and copy the [de]activate scripts to $PREFIX/etc/conda/[de]activate.d. +# This will allow them to be run on environment activation. +for CHANGE in "activate" "deactivate" +do + multisheller ${RECIPE_DIR}/${CHANGE}.msh --output ./${CHANGE} + mkdir -p "${PREFIX}/etc/conda/${CHANGE}.d" + cp "${CHANGE}.sh" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.sh" + cp "${CHANGE}.bash" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.bash" + cp "${CHANGE}.xsh" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.xsh" + cp "${CHANGE}.zsh" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.zsh" + cp "${CHANGE}.ps1" "${PREFIX}/etc/conda/${CHANGE}.d/${PKG_NAME}_${CHANGE}.ps1" +done diff --git a/recipes/icub-main/build_py.sh b/recipes/icub-main/build_py.sh new file mode 100644 index 0000000000000..b0a871ffad8a0 --- /dev/null +++ b/recipes/icub-main/build_py.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +cd ${SRC_DIR}/bindings + +rm -rf build +mkdir build +cd build + +cmake ${CMAKE_ARGS} -GNinja .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS:BOOL=ON \ + -DPython_EXECUTABLE:PATH=$PYTHON \ + -DCREATE_PYTHON:BOOL=ON \ + -DCREATE_RUBY:BOOL=OFF \ + -DCREATE_JAVA:BOOL=OFF \ + -DCREATE_CSHARP:BOOL=OFF \ + -DCMAKE_INSTALL_PYTHONDIR:PATH=${SP_DIR} + +ninja -v +cmake --build . --config Release --target install diff --git a/recipes/icub-main/deactivate.msh b/recipes/icub-main/deactivate.msh new file mode 100644 index 0000000000000..8a9f3eac18423 --- /dev/null +++ b/recipes/icub-main/deactivate.msh @@ -0,0 +1,5 @@ +if_(is_set("COMSPEC")).then_([ + sys.list_remove("YARP_DATA_DIRS", path.join(env("CONDA_PREFIX"), "Library\\share\\iCub")) +]).else_([ + sys.list_remove("YARP_DATA_DIRS", path.join(env("CONDA_PREFIX"), "share/iCub")) +]) diff --git a/recipes/icub-main/meta.yaml b/recipes/icub-main/meta.yaml new file mode 100644 index 0000000000000..f80f9b47c2958 --- /dev/null +++ b/recipes/icub-main/meta.yaml @@ -0,0 +1,128 @@ +{% set version = "2.6.3" %} + +package: + name: icub-main-split + version: {{ version }} + +source: + - url: https://github.com/robotology/icub-main/archive/refs/tags/v{{ version }}.tar.gz + sha256: fe2a197372e06ff8596188a749c273ab13325826144a7d462867155fc10c5aad + patches: + - 985.patch + +build: + number: 0 + +outputs: + - name: libicub-main + script: build_cxx.sh # [unix] + script: bld_cxx.bat # [win] + build: + run_exports: + - {{ pin_subpackage("libicub-main", max_pin='x.x.x') }} + requirements: + build: + - {{ compiler('c') }} + - {{ stdlib("c") }} + - {{ compiler('cxx') }} + - cmake + - pkg-config + - ninja + - multisheller + host: + - ycm-cmake-modules + - ace + - libopencv + # icub-main links to gslcblas library that is symbolic link to cblas + # we need to explicit list the cblas dependency so that the generic + # netlib cblas that has cblas.so as SONAME actually gets installed, + # otherwise the openblas or mkl cblas with specific soname gets installed, + # resulting in an error reported in https://github.com/conda-forge/staged-recipes/pull/27692#issuecomment-2374227755 + - libcblas + - gsl + - ipopt + - qt-main + - sdl + - libdc1394 # [not win] + - freeglut # [not osx] + - libglu # [linux] + - libyarp + - libicub-firmware-shared + - libgl-devel # [linux] + run: + # Workaround for https://github.com/conda-forge/libglu-feedstock/issues/25 + - libglu # [linux] + test: + commands: + - test -f ${PREFIX}/lib/libiKin${SHLIB_EXT} # [unix] + - if not exist %LIBRARY_LIB%\\iKin.lib exit 1 # [win] + - if not exist %LIBRARY_BIN%\\iKin.dll exit 1 # [win] + - cmake-package-check ICUB --targets iKin ctrlLib + requires: + - cmake-package-check + - {{ compiler('c') }} + - {{ compiler('cxx') }} + - cmake + + - name: icub-main-python + script: build_py.sh # [unix] + script: bld_py.bat # [win] + build: + # workaround for https://github.com/conda-forge/staged-recipes/pull/27692#issuecomment-2375285069 + skip: true # [osx] + requirements: + build: + - {{ compiler('c') }} + - {{ stdlib("c") }} + - {{ compiler('cxx') }} + - swig + - cmake + - pkg-config + - ninja + host: + - {{ pin_subpackage('libicub-main', exact=True) }} + - python + - libyarp + run: + - {{ pin_subpackage('libicub-main', exact=True) }} + - python + - yarp-python + test: + imports: + - icub + + - name: icub-main + build: + run_exports: + - {{ pin_subpackage("libicub-main", max_pin='x.x.x') }} + # workaround for https://github.com/conda-forge/staged-recipes/pull/27692#issuecomment-2375285069 + skip: true # [osx] + requirements: + run: + - {{ pin_subpackage("libicub-main", exact=True) }} + - {{ pin_subpackage("icub-main-python", max_pin='x.x.x') }} + test: + commands: + - test -f ${PREFIX}/lib/libiKin${SHLIB_EXT} # [unix] + - if not exist %LIBRARY_LIB%\\iKin.lib exit 1 # [win] + - if not exist %LIBRARY_BIN%\\iKin.dll exit 1 # [win] + - cmake-package-check ICUB --targets iKin ctrlLib + requires: + - cmake-package-check + - {{ compiler('c') }} + - {{ compiler('cxx') }} + - cmake + imports: + - icub + + +about: + home: https://github.com/robotology/icub-main + license: BSD-3-Clause AND GPL-2.0-or-later + license_file: LICENSE + summary: 'The iCub Main Software Repository' + +extra: + feedstock-name: icub-main + recipe-maintainers: + - traversaro