Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add mujoco recipe #19049

Merged
merged 5 commits into from
Jun 22, 2022
Merged

Add mujoco recipe #19049

merged 5 commits into from
Jun 22, 2022

Conversation

traversaro
Copy link
Contributor

@traversaro traversaro commented May 23, 2022

MuJoCo is a widely used multibody dynamics simulator used in robotics and reinforcement learning. It has been open-sourced on 2022/05/23 : https://github.com/deepmind/mujoco/releases/tag/2.2.0 .

Checklist

  • Title of this PR is meaningful: e.g. "Adding my_nifty_package", not "updated meta.yaml".
  • License file is packaged (see here for an example).
  • Source is from official source.
  • Package does not vendor other packages. (If a package uses the source of another package, they should be separate packages or the licenses of all packages need to be packaged).
  • If static libraries are linked in, the license of the static library is packaged.
  • Build number is 0.
  • A tarball (url) rather than a repo (e.g. git_url) is used in your recipe (see here for more details).
  • GitHub users listed in the maintainer section have posted a comment confirming they are willing to be listed there.
  • When in trouble, please check our knowledge base documentation before pinging a team.

@conda-forge-linter
Copy link

Hi! This is the friendly automated conda-forge-linting service.

I just wanted to let you know that I linted all conda-recipes in your PR (recipes/mujoco) and found it was in an excellent condition.

@bollwyvl
Copy link
Contributor

Unfortunately don't have a lot to add right now:

  • on linux:
    • it does mention upstream that they are building with clang on linux, not sure if we can force that with e.g.
  • on osx:
    FAILED: test/CMakeFiles/fixture.dir/fixture.cc.o 
    $BUILD_PREFIX/bin/x86_64-apple-darwin13.4.0-clang++ -DEIGEN_MPL2_ONLY -DMJSTATIC -I$SRC_DIR/test/.. -I$SRC_DIR/include -I$SRC_DIR/test/gmock -I$SRC_DIR/build/_deps/abseil-cpp-src -isystem $SRC_DIR/build/_deps/googletest-src/googletest/include -isystem $SRC_DIR/build/_deps/googletest-src/googletest -isystem $SRC_DIR/build/_deps/googletest-src/googlemock/include -isystem $SRC_DIR/build/_deps/googletest-src/googlemock -march=core2 -mtune=haswell -mssse3 -ftree-vectorize -fPIC -fPIE -fstack-protector-strong -O2 -pipe -stdlib=libc++ -fvisibility-inlines-hidden -fmessage-length=0 -isystem $PREFIX/include -fdebug-prefix-map=$SRC_DIR=/usr/local/src/conda/mujoco-2.2.0 -fdebug-prefix-map=$PREFIX=/usr/local/src/conda-prefix -O3 -DNDEBUG -isysroot /Applications/Xcode_12.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -mmacosx-version-min=10.9 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -fdata-sections -ffunction-sections -std=c++17 -MD -MT test/CMakeFiles/fixture.dir/fixture.cc.o -MF test/CMakeFiles/fixture.dir/fixture.cc.o.d -o test/CMakeFiles/fixture.dir/fixture.cc.o -c $SRC_DIR/test/fixture.cc
    $SRC_DIR/test/fixture.cc:84:7: error: 'open' is unavailable: introduced in macOS 10.15 - see https://conda-forge.org/docs/maintainer/knowledge_base.html#newer-c-features-with-old-sdk
    ifs.open(path, std::ifstream::in);
    
  • on windows
    • ???
    • maybe keep that as a stretch goal after the the feedstock is created?

@traversaro

This comment was marked as outdated.

@traversaro

This comment was marked as outdated.

@traversaro
Copy link
Contributor Author

  • on linux:
    * it does mention upstream that they are building with `clang` on linux, not sure if we can force that with e.g.
    

I compiled it locally with apt with gcc, so I suspect that is not the problem.

I was wrong: the compilation works fine with google-deepmind/mujoco@70b19d5 (i.e. current master branch) with both apt's and conda-forge's gcc, but if I switch to v2.0.0 I indeed get the same compilation error of CI. Probably we can backport the fix that is in master.

@traversaro
Copy link
Contributor Author

The history is a bit confusing as 2.2.0 is not a tag in main's history, and the "Initial open sourcing of MuJoCo." commit is different between main and 2.2.0 :

However, by manually running a diff between in main and 2.2.0 this is the result:

traversaro@IITICUBLAP257:~/mujoco/build$ diff working.cc not_working.cc
69,70c69
< mjModel* LoadModelFromString(std::string_view xml, char* error,
<                              int error_size) {
---
> mjModel* LoadModelFromString(std::string_view xml, char* error, int error_size) {
83c82
< const std::string GetFileContents(const char* path) {
---
> const std::string GetFileContents(std::string_view path) {

So 0da0b39 should fix the problem.

@traversaro
Copy link
Contributor Author

Another fix that was in main but not in 2.2.0: c6a893a .

@traversaro
Copy link
Contributor Author

The recipe tests are now failing due to some additional differences between 2.2.0 and main. I will fix this by backporting google-deepmind/mujoco@098b125, but in this case I opened an issue upstream: google-deepmind/mujoco#296 .

@traversaro
Copy link
Contributor Author

Windows build are failing with:

2022-05-24T08:51:43.9790981Z [18/248] Building C object CMakeFiles\mujoco.dir\src\engine\engine_support.c.obj
2022-05-24T08:51:43.9795122Z FAILED: CMakeFiles/mujoco.dir/src/engine/engine_support.c.obj 
2022-05-24T08:51:44.4202920Z C:\PROGRA~2\MICROS~1\2019\ENTERP~1\VC\Tools\MSVC\1416~1.270\bin\HostX64\x64\cl.exe  /nologo -DCCD_STATIC_DEFINE -DEIGEN_MPL2_ONLY -DMUJOCO_DLL_EXPORTS -D_CRT_SECURE_NO_WARNINGS -D_GNU_SOURCE -Dmujoco_EXPORTS -I%SRC_DIR%\include -I%SRC_DIR%\src -I%SRC_DIR%\build\_deps\ccd-src\src -I%SRC_DIR%\build\_deps\ccd-build\src -I%SRC_DIR%\build\_deps\lodepng-src -I%SRC_DIR%\build\_deps\qhull-src\src\libqhull_r -I%SRC_DIR%\build\_deps\tinyobjloader-src -I%SRC_DIR%\build\_deps\tinyxml2-src /DWIN32 /D_WINDOWS /O2 /Ob2 /DNDEBUG -MD /Gy /Gw /Oi /showIncludes /FoCMakeFiles\mujoco.dir\src\engine\engine_support.c.obj /FdCMakeFiles\mujoco.dir\ /FS -c %SRC_DIR%\src\engine\engine_support.c
2022-05-24T08:51:44.4207918Z %SRC_DIR%\src\engine\engine_support.c(1306): error C2059: syntax error: 'type'
2022-05-24T08:57:00.0404993Z [19/248] Building C object CMakeFiles\mujoco.dir\src\engine\engine_solver.c.obj
2022-05-24T08:57:00.0411736Z [20/248] Building C object CMakeFiles\mujoco.dir\src\engine\engine_print.c.obj
2022-05-24T08:57:00.0423667Z ninja: build stopped: subcommand failed.
2022-05-24T08:57:02.3611243Z Traceback (most recent call last):
2022-05-24T08:57:02.3612844Z   File "D:\a\1\s\.ci_support\build_all.py", line 205, in <module>
2022-05-24T08:57:02.3613853Z     build_all(os.path.join(root_dir, "recipes"), args.arch)
2022-05-24T08:57:02.3614663Z   File "D:\a\1\s\.ci_support\build_all.py", line 105, in build_all
2022-05-24T08:57:02.3615695Z     build_folders(recipes_dir, folders, arch, channel_urls)
2022-05-24T08:57:02.3616472Z   File "D:\a\1\s\.ci_support\build_all.py", line 164, in build_folders
2022-05-24T08:57:02.3617310Z     conda_build.api.build([recipe], config=get_config(arch, channel_urls))
2022-05-24T08:57:02.3618053Z   File "C:\Miniconda\lib\site-packages\conda_build\api.py", line 186, in build
2022-05-24T08:57:02.3618922Z     return build_tree(
2022-05-24T08:57:02.3619895Z   File "C:\Miniconda\lib\site-packages\conda_build\build.py", line 3088, in build_tree
2022-05-24T08:57:02.3627438Z     packages_from_this = build(metadata, stats,
2022-05-24T08:57:02.3628257Z   File "C:\Miniconda\lib\site-packages\conda_build\build.py", line 2179, in build
2022-05-24T08:57:02.3633330Z     windows.build(m, build_file, stats=build_stats, provision_only=provision_only)
2022-05-24T08:57:02.3634159Z   File "C:\Miniconda\lib\site-packages\conda_build\windows.py", line 297, in build
2022-05-24T08:57:02.3635422Z     check_call_env(cmd, cwd=m.config.work_dir, stats=stats, rewrite_stdout_env=rewrite_env)
2022-05-24T08:57:02.3636300Z   File "C:\Miniconda\lib\site-packages\conda_build\utils.py", line 410, in check_call_env
2022-05-24T08:57:02.3637404Z     return _func_defaulting_env_to_os_environ('call', *popenargs, **kwargs)
2022-05-24T08:57:02.3638497Z   File "C:\Miniconda\lib\site-packages\conda_build\utils.py", line 390, in _func_defaulting_env_to_os_environ
2022-05-24T08:57:02.3639455Z     raise subprocess.CalledProcessError(proc.returncode, _args)
2022-05-24T08:57:02.3640316Z subprocess.CalledProcessError: Command '['cmd.exe', '/d', '/c', 'conda_build.bat']' returned non-zero exit status 1.
2022-05-24T08:57:07.4104742Z ##[error]Cmd.exe exited with code '1'.
2022-05-24T08:57:07.4539832Z ##[section]Finishing: Build recipe

I tried to fix this by switching to clang-cl .

@traversaro
Copy link
Contributor Author

traversaro commented May 24, 2022

I tried to fix this by switching to clang-cl .

This worked. So macOS and Linux C++ works fine, so we can start the missing points:

@saran-t
Copy link

saran-t commented May 24, 2022

I've just moved the deepmind/mujoco@2.2.0 tag to google-deepmind/mujoco@098b125 so the source code archive (mujoco-2.2.0.zip and mujoco-2.2.0.tar.gz) should now build and install correctly. Sorry about the confusion.

@traversaro
Copy link
Contributor Author

I've just moved the deepmind/mujoco@2.2.0 tag to deepmind/mujoco@098b125 so the source code archive (mujoco-2.2.0.zip and mujoco-2.2.0.tar.gz) should now build and install correctly. Sorry about the confusion.

Thanks @saran-t !

-DMUJOCO_BUILD_TESTS:BOOL=ON \
-DMUJOCO_BUILD_EXAMPLES:BOOL=OFF \
-DMUJOCO_ENABLE_AVX:BOOL=OFF \
-DMUJOCO_ENABLE_AVX_INTRINSICS:BOOL=OFF \
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please consider adding -DCMAKE_INTERPRODEDURAL_OPTIMIZATION:BOOL=ON as well.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo: should be -DCMAKE_INTERPROCEDURAL_OPTIMIZATION

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, done in traversaro@7575534 and traversaro@a5957f4 .

@traversaro
Copy link
Contributor Author

Latest failures are due to the use of -Werror in python bindings and probably we are using a compiled different from the one used to develop the bindings. That should be fixed by 6933151 .

@traversaro
Copy link
Contributor Author

Latest error (reduced):

2022-05-25T07:03:14.4693022Z       [ 91%] Building CXX object CMakeFiles/_structs.dir/indexers.cc.o
2022-05-25T07:03:14.4699871Z       /home/conda/staged-recipes/build_artifacts/mujoco_1653461546575/_build_env/bin/x86_64-conda-linux-gnu-c++ -DEIGEN_MPL2_ONLY -D_structs_EXPORTS -I/tmp/pip-req-build-2zsasblr/build/temp.linux-x86_64-cpython-39/_deps/abseil-cpp-src -I/mujoco -I/tmp/pip-req-build-2zsasblr/build/temp.linux-x86_64-cpython-39/_deps/eigen-src -isystem /home/conda/staged-recipes/build_artifacts/mujoco_1653461546575/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/include/python3.9 -isystem /tmp/pip-req-build-2zsasblr/build/temp.linux-x86_64-cpython-39/_deps/pybind11-src/include -fvisibility-inlines-hidden -std=c++17 -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem /home/conda/staged-recipes/build_artifacts/mujoco_1653461546575/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/include -fdebug-prefix-map=/home/conda/staged-recipes/build_artifacts/mujoco_1653461546575/work=/usr/local/src/conda/mujoco-python-2.2.0 -fdebug-prefix-map=/home/conda/staged-recipes/build_artifacts/mujoco_1653461546575/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac=/usr/local/src/conda-prefix -O3 -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -fdata-sections -ffunction-sections -Wall -Wno-int-in-bool-context -Wno-maybe-uninitialized -Wno-sign-compare -Wno-stringop-overflow -Wno-stringop-truncation -std=c++17 -MD -MT CMakeFiles/_structs.dir/indexers.cc.o -MF CMakeFiles/_structs.dir/indexers.cc.o.d -o CMakeFiles/_structs.dir/indexers.cc.o -c /tmp/pip-req-build-2zsasblr/mujoco/indexers.cc
2022-05-25T07:03:14.4705468Z       /tmp/pip-req-build-2zsasblr/mujoco/indexers.cc: In member function 'pybind11::array_t<int> mujoco::python::MjModelActuatorViews::trntype()':
2022-05-25T07:03:14.4706576Z       /tmp/pip-req-build-2zsasblr/mujoco/indexers.cc:242:1: error: '#pragma' is not allowed here
2022-05-25T07:03:14.4707163Z         242 | MJMODEL_ACTUATOR
2022-05-25T07:03:14.4707545Z             | ^~~
2022-05-25T07:03:14.4708472Z       /tmp/pip-req-build-2zsasblr/mujoco/indexers.cc: In member function 'pybind11::array_t<int> mujoco::python::MjModelActuatorViews::dyntype()':
2022-05-25T07:03:14.4709752Z       /tmp/pip-req-build-2zsasblr/mujoco/indexers.cc:242:1: error: '#pragma' is not allowed here
2022-05-25T07:03:14.4710908Z       /tmp/pip-req-build-2zsasblr/mujoco/indexers.cc: In member function 'pybind11::array_t<int> mujoco::python::MjModelActuatorViews::gaintype()':
2022-05-25T07:03:14.4711911Z       /tmp/pip-req-build-2zsasblr/mujoco/indexers.cc:242:1: error: '#pragma' is not allowed here
2022-05-25T07:03:14.4712967Z       /tmp/pip-req-build-2zsasblr/mujoco/indexers.cc: In member function 'pybind11::array_t<int> mujoco::python::MjModelActuatorViews::biastype()':
2022-05-25T07:03:14.4713963Z       /tmp/pip-req-build-2zsasblr/mujoco/indexers.cc:242:1: error: '#pragma' is not allowed here

@traversaro
Copy link
Contributor Author

Given the usage of _Pragma in the codebase (see https://github.com/deepmind/mujoco/blob/64bc6d27b242d5c5683b4a03dd36f1844b910742/python/mujoco/util/crossplatform.h#L54) and this bug report for GCC: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78657 this may be related to the use of GCC vs Clang, as originally suggested in #19049 (comment) .

@traversaro
Copy link
Contributor Author

traversaro commented May 25, 2022

New error:

ImportError: /home/conda/staged-recipes/build_artifacts/mujoco_1653468396456/_test_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/lib/python3.7/site-packages/mujoco/_enums.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _Znwm

Possibly related to the fact that mujoco C++ is compiled with GCC and the bindingw with Python?

That symbol is:

operator new(unsigned long)

that indeed suggested that there is a problem with symbols in C++ standard library. Perhaps we should tell the bindings to compile with clang but link with libstdcxx?

@traversaro traversaro closed this May 25, 2022
@traversaro traversaro reopened this May 25, 2022
@traversaro
Copy link
Contributor Author

New error:

ImportError: /home/conda/staged-recipes/build_artifacts/mujoco_1653468396456/_test_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/lib/python3.7/site-packages/mujoco/_enums.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _Znwm

Possibly related to the fact that mujoco C++ is compiled with GCC and the bindingw with Python?

That symbol is:

operator new(unsigned long)

that indeed suggested that there is a problem with symbols in C++ standard library. Perhaps we should tell the bindings to compile with clang but link with libstdcxx?

This was fixed by patching the Python bindings to avoid the use of _Pragma with GCC in . This permitted us to reach the stage of Python bindings tests, that however now crash:

export SRC_DIR=/home/conda/staged-recipes/build_artifacts/mujoco_1653483567002/test_tmp
import: 'mujoco'
import: 'mujoco'
+ pytest --pyargs mujoco
============================= test session starts ==============================
platform linux -- Python 3.7.12, pytest-7.1.2, pluggy-1.0.0
rootdir: $SRC_DIR
collected 121 items

bindings_test.py ....................................................... [ 45%]
....................                                                     [ 61%]
Fatal Python error: Aborted

Current thread 0x00007f8033130740 (most recent call first):
  File "/home/conda/staged-recipes/build_artifacts/mujoco_1653483567002/_test_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/lib/python3.7/site-packages/glfw/__init__.py", line 2337 in make_context_current
  File "/home/conda/staged-recipes/build_artifacts/mujoco_1653483567002/_test_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/lib/python3.7/site-packages/mujoco/glfw/__init__.py", line 31 in make_current
  File "/home/conda/staged-recipes/build_artifacts/mujoco_1653483567002/_test_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/lib/python3.7/site-packages/mujoco/render_test.py", line 29 in setUp
  File "/home/conda/staged-recipes/build_artifacts/mujoco_1653483567002/_test_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold/lib/python3.7/unittest/case.py", line 624 in run

The crash seems to be related to pyglfw/glfw, so it could be related to the two copies of glfw vendored by mujoco and by mujoco-python. So it could make sense to first try to tackle de-vendoring glfw, and see if the issue is fixed.

@traversaro
Copy link
Contributor Author

@traversaro
Copy link
Contributor Author

The crash seems to be related to pyglfw/glfw, so it could be related to the two copies of glfw vendored by mujoco and by mujoco-python. So it could make sense to first try to tackle de-vendoring glfw, and see if the issue is fixed.

Actually no copy of glfw is vendored. Probably the crash is due to the fact that the test is running in an headless system?

@traversaro
Copy link
Contributor Author

Windows is failing with:

[53/53] Linking CXX shared library bin\mujoco.dll
FAILED: bin/mujoco.dll lib/mujoco.lib 
cmd.exe /C "cd . && C:\bld\mujoco_1653515866886\_build_env\Library\bin\cmake.exe -E vs_link_dll --intdir=CMakeFiles\mujoco.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100220~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100220~1.0\x64\mt.exe --manifests  -- C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo CMakeFiles\mujoco.dir\src\engine\engine_callback.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_box.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_convex.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_driver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_primitive.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_constraint.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_smooth.c.obj CMakeFiles\mujoco.dir\src\engine\engine_derivative.c.obj CMakeFiles\mujoco.dir\src\engine\engine_file.c.obj CMakeFiles\mujoco.dir\src\engine\engine_forward.c.obj CMakeFiles\mujoco.dir\src\engine\engine_inverse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_io.c.obj CMakeFiles\mujoco.dir\src\engine\engine_print.c.obj CMakeFiles\mujoco.dir\src\engine\engine_ray.c.obj CMakeFiles\mujoco.dir\src\engine\engine_sensor.c.obj CMakeFiles\mujoco.dir\src\engine\engine_setconst.c.obj CMakeFiles\mujoco.dir\src\engine\engine_solver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_support.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_blas.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_errmem.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_misc.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_solve.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_sparse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_spatial.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vfs.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_init.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_interact.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_visualize.c.obj CMakeFiles\mujoco.dir\src\user\user_composite.cc.obj CMakeFiles\mujoco.dir\src\user\user_mesh.cc.obj CMakeFiles\mujoco.dir\src\user\user_model.cc.obj CMakeFiles\mujoco.dir\src\user\user_objects.cc.obj CMakeFiles\mujoco.dir\src\user\user_util.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_api.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_base.cc.obj CMakeFiles\mujoco.dir\src\xml\xml.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_reader.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_numeric_format.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_writer.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_urdf.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_util.cc.obj CMakeFiles\mujoco.dir\src\render\glad\glad.c.obj CMakeFiles\mujoco.dir\src\render\glad\loader.cc.obj CMakeFiles\mujoco.dir\src\render\render_context.c.obj CMakeFiles\mujoco.dir\src\render\render_gl2.c.obj CMakeFiles\mujoco.dir\src\render\render_gl3.c.obj CMakeFiles\mujoco.dir\src\render\render_util.c.obj CMakeFiles\mujoco.dir\src\ui\ui_main.c.obj  /out:bin\mujoco.dll /implib:lib\mujoco.lib /pdb:bin\mujoco.pdb /dll /version:2.2 /machine:x64 /INCREMENTAL:NO  /OPT:REF /OPT:ICF=5  C:\bld\mujoco_1653515866886\_h_env\Library\lib\ccd.lib  lib\lodepng.lib  lib\tinyobjloader.lib  tinyxml2.lib  C:\bld\mujoco_1653515866886\_h_env\Library\lib\qhull_r.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  && cd ."
LINK: command "C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo CMakeFiles\mujoco.dir\src\engine\engine_callback.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_box.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_convex.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_driver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_primitive.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_constraint.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_smooth.c.obj CMakeFiles\mujoco.dir\src\engine\engine_derivative.c.obj CMakeFiles\mujoco.dir\src\engine\engine_file.c.obj CMakeFiles\mujoco.dir\src\engine\engine_forward.c.obj CMakeFiles\mujoco.dir\src\engine\engine_inverse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_io.c.obj CMakeFiles\mujoco.dir\src\engine\engine_print.c.obj CMakeFiles\mujoco.dir\src\engine\engine_ray.c.obj CMakeFiles\mujoco.dir\src\engine\engine_sensor.c.obj CMakeFiles\mujoco.dir\src\engine\engine_setconst.c.obj CMakeFiles\mujoco.dir\src\engine\engine_solver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_support.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_blas.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_errmem.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_misc.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_solve.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_sparse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_spatial.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vfs.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_init.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_interact.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_visualize.c.obj CMakeFiles\mujoco.dir\src\user\user_composite.cc.obj CMakeFiles\mujoco.dir\src\user\user_mesh.cc.obj CMakeFiles\mujoco.dir\src\user\user_model.cc.obj CMakeFiles\mujoco.dir\src\user\user_objects.cc.obj CMakeFiles\mujoco.dir\src\user\user_util.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_api.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_base.cc.obj CMakeFiles\mujoco.dir\src\xml\xml.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_reader.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_numeric_format.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_writer.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_urdf.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_util.cc.obj CMakeFiles\mujoco.dir\src\render\glad\glad.c.obj CMakeFiles\mujoco.dir\src\render\glad\loader.cc.obj CMakeFiles\mujoco.dir\src\render\render_context.c.obj CMakeFiles\mujoco.dir\src\render\render_gl2.c.obj CMakeFiles\mujoco.dir\src\render\render_gl3.c.obj CMakeFiles\mujoco.dir\src\render\render_util.c.obj CMakeFiles\mujoco.dir\src\ui\ui_main.c.obj /out:bin\mujoco.dll /implib:lib\mujoco.lib /pdb:bin\mujoco.pdb /dll /version:2.2 /machine:x64 /INCREMENTAL:NO /OPT:REF /OPT:ICF=5 C:\bld\mujoco_1653515866886\_h_env\Library\lib\ccd.lib lib\lodepng.lib lib\tinyobjloader.lib tinyxml2.lib C:\bld\mujoco_1653515866886\_h_env\Library\lib\qhull_r.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:bin\mujoco.dll.manifest" failed (exit code 1) with the following output:
lld-link: error: undefined symbol: ccd_vec3_origin

>>> referenced by C:\bld\mujoco_1653515866886\work\src\engine\engine_collision_convex.c

>>>               CMakeFiles\mujoco.dir\src\engine\engine_collision_convex.c.obj

ninja: build stopped: subcommand failed.
Traceback (most recent call last):

@traversaro
Copy link
Contributor Author

traversaro commented May 26, 2022

Linux is finally working, points currently missing (that can be also done on the feedstock if anyone is interested in having this soon):

gtest and benchmark are intentionally not devendored as they are only used in tests and not in installed artifacts

@saran-t
Copy link

saran-t commented May 26, 2022

You cannot devendor glad. This is a heavily modified, generated code. It must be treated as part of our codebase.

@traversaro
Copy link
Contributor Author

You cannot devendor glad. This is a heavily modified, generated code. It must be treated as part of our codebase.

Ack, I did not noticed that the symbols are also modified to avoid conflicts. I modified the bullet point to address that, thanks!

@traversaro
Copy link
Contributor Author

traversaro commented May 27, 2022

Understand if it is a problem that we use libccd compiled with float support while mujoco expect libccd with double support

On this, there are quite a scary Wincompatible-pointer-types warnings during compilation. At a first glance I would expect nothing would work, but apparently tests are passing. Perhaps it is just a lucky (or unlucky, in a sense) case.

Warnings from libccd use
2022-05-25T22:25:02.7213994Z [3/54] Building C object CMakeFiles/mujoco.dir/src/engine/engine_collision_convex.c.o
2022-05-25T22:25:02.7222583Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c: In function 'mjccd_center':
2022-05-25T22:25:02.7225552Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:36:19: warning: passing argument 1 of 'mju_copy3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7226895Z    36 |   mju_copy3(center->v, ccd->data->geom_xpos + 3*ccd->geom);
2022-05-25T22:25:02.7227379Z       |             ~~~~~~^~~
2022-05-25T22:25:02.7227724Z       |                   |
2022-05-25T22:25:02.7228069Z       |                   ccd_real_t * {aka float *}
2022-05-25T22:25:02.7228832Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7229970Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:71:29: note: expected 'mjtNum *' {aka 'double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7231198Z    71 | MJAPI void mju_copy3(mjtNum res[3], const mjtNum data[3]);
2022-05-25T22:25:02.7231665Z       |                      ~~~~~~~^~~~~~
2022-05-25T22:25:02.7232461Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c: In function 'mjccd_support':
2022-05-25T22:25:02.7233648Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:58:27: warning: passing argument 2 of 'mju_rotVecMatT' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7234613Z    58 |   mju_rotVecMatT(dir, _dir->v, d->geom_xmat+9*g);
2022-05-25T22:25:02.7235087Z       |                       ~~~~^~~
2022-05-25T22:25:02.7235409Z       |                           |
2022-05-25T22:25:02.7235780Z       |                           const ccd_real_t * {aka const float *}
2022-05-25T22:25:02.7236568Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7237739Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:110:55: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'const ccd_real_t *' {aka 'const float *'}
2022-05-25T22:25:02.7238574Z   110 | MJAPI void mju_rotVecMatT(mjtNum res[3], const mjtNum vec[3], const mjtNum mat[9]);
2022-05-25T22:25:02.7239049Z       |                                          ~~~~~~~~~~~~~^~~~~~
2022-05-25T22:25:02.7240014Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:202:20: warning: passing argument 1 of 'mju_rotVecMat' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7240943Z   202 |   mju_rotVecMat(vec->v, res, d->geom_xmat+9*g);
2022-05-25T22:25:02.7241394Z       |                 ~~~^~~
2022-05-25T22:25:02.7241699Z       |                    |
2022-05-25T22:25:02.7242048Z       |                    ccd_real_t * {aka float *}
2022-05-25T22:25:02.7242800Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7244014Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:107:33: note: expected 'mjtNum *' {aka 'double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7244812Z   107 | MJAPI void mju_rotVecMat(mjtNum res[3], const mjtNum vec[3], const mjtNum mat[9]);
2022-05-25T22:25:02.7245250Z       |                          ~~~~~~~^~~~~~
2022-05-25T22:25:02.7246196Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:205:17: warning: passing argument 1 of 'mju_addTo3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7247120Z   205 |   mju_addTo3(vec->v, d->geom_xpos+3*g);
2022-05-25T22:25:02.7247845Z       |              ~~~^~~
2022-05-25T22:25:02.7249278Z       |                 |
2022-05-25T22:25:02.7249685Z       |                 ccd_real_t * {aka float *}
2022-05-25T22:25:02.7250511Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7251835Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:83:30: note: expected 'mjtNum *' {aka 'double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7252574Z    83 | MJAPI void mju_addTo3(mjtNum res[3], const mjtNum vec[3]);
2022-05-25T22:25:02.7252994Z       |                       ~~~~~~~^~~~~~
2022-05-25T22:25:02.7253759Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c: In function 'mjc_MPRIteration':
2022-05-25T22:25:02.7274317Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:224:30: warning: passing argument 2 of 'mju_copy3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7275613Z   224 |     mju_copy3(con->frame, dir.v);
2022-05-25T22:25:02.7276113Z       |                           ~~~^~
2022-05-25T22:25:02.7276465Z       |                              |
2022-05-25T22:25:02.7276817Z       |                              ccd_real_t * {aka float *}
2022-05-25T22:25:02.7277616Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7278889Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:71:50: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7279653Z    71 | MJAPI void mju_copy3(mjtNum res[3], const mjtNum data[3]);
2022-05-25T22:25:02.7280091Z       |                                     ~~~~~~~~~~~~~^~~~~~~
2022-05-25T22:25:02.7281053Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:225:28: warning: passing argument 2 of 'mju_copy3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7281943Z   225 |     mju_copy3(con->pos, pos.v);
2022-05-25T22:25:02.7282388Z       |                         ~~~^~
2022-05-25T22:25:02.7282721Z       |                            |
2022-05-25T22:25:02.7283049Z       |                            ccd_real_t * {aka float *}
2022-05-25T22:25:02.7283827Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7284985Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:71:50: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7285741Z    71 | MJAPI void mju_copy3(mjtNum res[3], const mjtNum data[3]);
2022-05-25T22:25:02.7286180Z       |                                     ~~~~~~~~~~~~~^~~~~~~
2022-05-25T22:25:02.7286958Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c: In function 'mjc_PlaneConvex':
2022-05-25T22:25:02.7288104Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:420:20: warning: passing argument 2 of 'mju_sub3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7288853Z   420 |   mju_sub3(dif, vec.v, pos1);
2022-05-25T22:25:02.7289224Z       |                 ~~~^~
2022-05-25T22:25:02.7289521Z       |                    |
2022-05-25T22:25:02.7289867Z       |                    ccd_real_t * {aka float *}
2022-05-25T22:25:02.7290642Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7291864Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:80:49: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7292679Z    80 | MJAPI void mju_sub3(mjtNum res[3], const mjtNum vec1[3], const mjtNum vec2[3]);
2022-05-25T22:25:02.7293149Z       |                                    ~~~~~~~~~~~~~^~~~~~~
2022-05-25T22:25:02.7314147Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:428:26: warning: passing argument 2 of 'mju_copy3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7351797Z   428 |   mju_copy3(con->pos, vec.v);
2022-05-25T22:25:02.7352428Z       |                       ~~~^~
2022-05-25T22:25:02.7352777Z       |                          |
2022-05-25T22:25:02.7353141Z       |                          ccd_real_t * {aka float *}
2022-05-25T22:25:02.7353955Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7355276Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:71:50: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7356129Z    71 | MJAPI void mju_copy3(mjtNum res[3], const mjtNum data[3]);
2022-05-25T22:25:02.7356574Z       |                                     ~~~~~~~~~~~~~^~~~~~~
2022-05-25T22:25:02.7357546Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:450:29: warning: passing argument 2 of 'mju_rotVecMatT' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7358531Z   450 |   mju_rotVecMatT(locdir, dir.v, d->geom_xmat+9*g);
2022-05-25T22:25:02.7358993Z       |                          ~~~^~
2022-05-25T22:25:02.7359320Z       |                             |
2022-05-25T22:25:02.7359653Z       |                             ccd_real_t * {aka float *}
2022-05-25T22:25:02.7360432Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7361763Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:110:55: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7362683Z   110 | MJAPI void mju_rotVecMatT(mjtNum res[3], const mjtNum vec[3], const mjtNum mat[9]);
2022-05-25T22:25:02.7363161Z       |                                          ~~~~~~~~~~~~~^~~~~~
2022-05-25T22:25:02.7363918Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c: In function 'prism_support':
2022-05-25T22:25:02.7365084Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:527:36: warning: passing argument 2 of 'mju_dot3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7366019Z   527 |   best = mju_dot3(p->v[istart], dir->v);
2022-05-25T22:25:02.7366446Z       |                                 ~~~^~~
2022-05-25T22:25:02.7366788Z       |                                    |
2022-05-25T22:25:02.7367142Z       |                                    const ccd_real_t * {aka const float *}
2022-05-25T22:25:02.7367942Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7369114Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:101:58: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'const ccd_real_t *' {aka 'const float *'}
2022-05-25T22:25:02.7369894Z   101 | MJAPI mjtNum mju_dot3(const mjtNum vec1[3], const mjtNum vec2[3]);
2022-05-25T22:25:02.7370354Z       |                                             ~~~~~~~~~~~~~^~~~~~~
2022-05-25T22:25:02.7373004Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:529:37: warning: passing argument 2 of 'mju_dot3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7374947Z   529 |     if ((tmp = mju_dot3(p->v[i], dir->v)) > best) {
2022-05-25T22:25:02.7375601Z       |                                  ~~~^~~
2022-05-25T22:25:02.7375950Z       |                                     |
2022-05-25T22:25:02.7376305Z       |                                     const ccd_real_t * {aka const float *}
2022-05-25T22:25:02.7377221Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7378414Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:101:58: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'const ccd_real_t *' {aka 'const float *'}
2022-05-25T22:25:02.7379191Z   101 | MJAPI mjtNum mju_dot3(const mjtNum vec1[3], const mjtNum vec2[3]);
2022-05-25T22:25:02.7379744Z       |                                             ~~~~~~~~~~~~~^~~~~~~
2022-05-25T22:25:02.7380773Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:536:16: warning: passing argument 1 of 'mju_copy3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7381678Z   536 |   mju_copy3(vec->v, p->v[ibest]);
2022-05-25T22:25:02.7382107Z       |             ~~~^~~
2022-05-25T22:25:02.7382408Z       |                |
2022-05-25T22:25:02.7382749Z       |                ccd_real_t * {aka float *}
2022-05-25T22:25:02.7383490Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7384622Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:71:29: note: expected 'mjtNum *' {aka 'double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7385374Z    71 | MJAPI void mju_copy3(mjtNum res[3], const mjtNum data[3]);
2022-05-25T22:25:02.7385769Z       |                      ~~~~~~~^~~~~~
2022-05-25T22:25:02.7386512Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c: In function 'prism_center':
2022-05-25T22:25:02.7387682Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:545:19: warning: passing argument 1 of 'mju_zero3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7388557Z   545 |   mju_zero3(center->v);
2022-05-25T22:25:02.7388977Z       |             ~~~~~~^~~
2022-05-25T22:25:02.7389279Z       |                   |
2022-05-25T22:25:02.7389620Z       |                   ccd_real_t * {aka float *}
2022-05-25T22:25:02.7390624Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7391826Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:68:29: note: expected 'mjtNum *' {aka 'double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7392555Z    68 | MJAPI void mju_zero3(mjtNum res[3]);
2022-05-25T22:25:02.7392945Z       |                      ~~~~~~~^~~~~~
2022-05-25T22:25:02.7393866Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:547:22: warning: passing argument 1 of 'mju_addTo3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7394776Z   547 |     mju_addTo3(center->v, p->v[i]);
2022-05-25T22:25:02.7395187Z       |                ~~~~~~^~~
2022-05-25T22:25:02.7395517Z       |                      |
2022-05-25T22:25:02.7395840Z       |                      ccd_real_t * {aka float *}
2022-05-25T22:25:02.7396608Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7397740Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:83:30: note: expected 'mjtNum *' {aka 'double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7398630Z    83 | MJAPI void mju_addTo3(mjtNum res[3], const mjtNum vec[3]);
2022-05-25T22:25:02.7399058Z       |                       ~~~~~~~^~~~~~
2022-05-25T22:25:02.7400005Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:549:18: warning: passing argument 1 of 'mju_scl3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7400919Z   549 |   mju_scl3(center->v, center->v, 1.0/6.0);
2022-05-25T22:25:02.7401363Z       |            ~~~~~~^~~
2022-05-25T22:25:02.7401665Z       |                  |
2022-05-25T22:25:02.7402011Z       |                  ccd_real_t * {aka float *}
2022-05-25T22:25:02.7402886Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7404120Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:74:28: note: expected 'mjtNum *' {aka 'double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7404905Z    74 | MJAPI void mju_scl3(mjtNum res[3], const mjtNum vec[3], mjtNum scl);
2022-05-25T22:25:02.7405334Z       |                     ~~~~~~~^~~~~~
2022-05-25T22:25:02.7406246Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:549:29: warning: passing argument 2 of 'mju_scl3' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7407169Z   549 |   mju_scl3(center->v, center->v, 1.0/6.0);
2022-05-25T22:25:02.7407596Z       |                       ~~~~~~^~~
2022-05-25T22:25:02.7407929Z       |                             |
2022-05-25T22:25:02.7408261Z       |                             ccd_real_t * {aka float *}
2022-05-25T22:25:02.7409037Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7410190Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:74:49: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7410954Z    74 | MJAPI void mju_scl3(mjtNum res[3], const mjtNum vec[3], mjtNum scl);
2022-05-25T22:25:02.7411405Z       |                                    ~~~~~~~~~~~~~^~~~~~
2022-05-25T22:25:02.7412169Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c: In function 'mjc_ConvexHField':
2022-05-25T22:25:02.7413333Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:733:49: warning: passing argument 2 of 'mju_rotVecMat' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7414118Z   733 |             mju_rotVecMat(con[cnt].frame, dirccd.v, mat1);
2022-05-25T22:25:02.7414529Z       |                                           ~~~~~~^~
2022-05-25T22:25:02.7414852Z       |                                                 |
2022-05-25T22:25:02.7415226Z       |                                                 ccd_real_t * {aka float *}
2022-05-25T22:25:02.7416102Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7417264Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:107:54: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7418059Z   107 | MJAPI void mju_rotVecMat(mjtNum res[3], const mjtNum vec[3], const mjtNum mat[9]);
2022-05-25T22:25:02.7418504Z       |                                         ~~~~~~~~~~~~~^~~~~~
2022-05-25T22:25:02.7419471Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:734:47: warning: passing argument 2 of 'mju_rotVecMat' from incompatible pointer type [-Wincompatible-pointer-types]
2022-05-25T22:25:02.7420387Z   734 |             mju_rotVecMat(con[cnt].pos, vecccd.v, mat1);
2022-05-25T22:25:02.7420777Z       |                                         ~~~~~~^~
2022-05-25T22:25:02.7421120Z       |                                               |
2022-05-25T22:25:02.7421463Z       |                                               ccd_real_t * {aka float *}
2022-05-25T22:25:02.7422251Z In file included from /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_collision_convex.c:26:
2022-05-25T22:25:02.7423410Z /home/conda/staged-recipes/build_artifacts/mujoco_1653517373316/work/src/engine/engine_util_blas.h:107:54: note: expected 'const mjtNum *' {aka 'const double *'} but argument is of type 'ccd_real_t *' {aka 'float *'}
2022-05-25T22:25:02.7424291Z   107 | MJAPI void mju_rotVecMat(mjtNum res[3], const mjtNum vec[3], const mjtNum mat[9]);
2022-05-25T22:25:02.7424805Z       |                                         ~~~~~~~~~~~~~^~~~~~

@traversaro
Copy link
Contributor Author

Understand if it is a problem that we use libccd compiled with float support while mujoco expect libccd with double support

On this, there are quite a scary Wincompatible-pointer-types warnings during compilation. At a first glance I would expect nothing would work, but apparently tests are passing. Perhaps it is just a lucky (or unlucky, in a sense) case.
Warnings from libccd use

For this, we probably will swithc libccd to use double as discussed in conda-forge/libccd-feedstock#4 and proposed in conda-forge/libccd-feedstock#5 .

@traversaro traversaro mentioned this pull request May 29, 2022
9 tasks
@traversaro traversaro closed this Jun 8, 2022
@traversaro traversaro reopened this Jun 8, 2022
@traversaro
Copy link
Contributor Author

Get Windows to work (libccd seems to be missing some symbols)

It seems that the problem is still there even with ccd-double:

[51/51] Linking CXX shared library bin\mujoco.dll
FAILED: bin/mujoco.dll lib/mujoco.lib 
cmd.exe /C "cd . && C:\bld\mujoco_1654716236692\_build_env\Library\bin\cmake.exe -E vs_link_dll --intdir=CMakeFiles\mujoco.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100220~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100220~1.0\x64\mt.exe --manifests  -- C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo CMakeFiles\mujoco.dir\src\engine\engine_callback.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_box.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_convex.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_driver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_primitive.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_constraint.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_smooth.c.obj CMakeFiles\mujoco.dir\src\engine\engine_derivative.c.obj CMakeFiles\mujoco.dir\src\engine\engine_file.c.obj CMakeFiles\mujoco.dir\src\engine\engine_forward.c.obj CMakeFiles\mujoco.dir\src\engine\engine_inverse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_io.c.obj CMakeFiles\mujoco.dir\src\engine\engine_print.c.obj CMakeFiles\mujoco.dir\src\engine\engine_ray.c.obj CMakeFiles\mujoco.dir\src\engine\engine_sensor.c.obj CMakeFiles\mujoco.dir\src\engine\engine_setconst.c.obj CMakeFiles\mujoco.dir\src\engine\engine_solver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_support.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_blas.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_errmem.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_misc.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_solve.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_sparse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_spatial.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vfs.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_init.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_interact.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_visualize.c.obj CMakeFiles\mujoco.dir\src\user\user_composite.cc.obj CMakeFiles\mujoco.dir\src\user\user_mesh.cc.obj CMakeFiles\mujoco.dir\src\user\user_model.cc.obj CMakeFiles\mujoco.dir\src\user\user_objects.cc.obj CMakeFiles\mujoco.dir\src\user\user_util.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_api.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_base.cc.obj CMakeFiles\mujoco.dir\src\xml\xml.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_reader.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_numeric_format.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_writer.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_urdf.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_util.cc.obj CMakeFiles\mujoco.dir\src\render\glad\glad.c.obj CMakeFiles\mujoco.dir\src\render\glad\loader.cc.obj CMakeFiles\mujoco.dir\src\render\render_context.c.obj CMakeFiles\mujoco.dir\src\render\render_gl2.c.obj CMakeFiles\mujoco.dir\src\render\render_gl3.c.obj CMakeFiles\mujoco.dir\src\render\render_util.c.obj CMakeFiles\mujoco.dir\src\ui\ui_main.c.obj  /out:bin\mujoco.dll /implib:lib\mujoco.lib /pdb:bin\mujoco.pdb /dll /version:2.2 /machine:x64 /INCREMENTAL:NO  /OPT:REF /OPT:ICF=5  C:\bld\mujoco_1654716236692\_h_env\Library\lib\ccd.lib  C:\bld\mujoco_1654716236692\_h_env\Library\lib\lodepng.lib  lib\tinyobjloader.lib  tinyxml2.lib  C:\bld\mujoco_1654716236692\_h_env\Library\lib\qhull_r.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  && cd ."
LINK: command "C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo CMakeFiles\mujoco.dir\src\engine\engine_callback.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_box.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_convex.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_driver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_primitive.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_constraint.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_smooth.c.obj CMakeFiles\mujoco.dir\src\engine\engine_derivative.c.obj CMakeFiles\mujoco.dir\src\engine\engine_file.c.obj CMakeFiles\mujoco.dir\src\engine\engine_forward.c.obj CMakeFiles\mujoco.dir\src\engine\engine_inverse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_io.c.obj CMakeFiles\mujoco.dir\src\engine\engine_print.c.obj CMakeFiles\mujoco.dir\src\engine\engine_ray.c.obj CMakeFiles\mujoco.dir\src\engine\engine_sensor.c.obj CMakeFiles\mujoco.dir\src\engine\engine_setconst.c.obj CMakeFiles\mujoco.dir\src\engine\engine_solver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_support.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_blas.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_errmem.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_misc.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_solve.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_sparse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_spatial.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vfs.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_init.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_interact.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_visualize.c.obj CMakeFiles\mujoco.dir\src\user\user_composite.cc.obj CMakeFiles\mujoco.dir\src\user\user_mesh.cc.obj CMakeFiles\mujoco.dir\src\user\user_model.cc.obj CMakeFiles\mujoco.dir\src\user\user_objects.cc.obj CMakeFiles\mujoco.dir\src\user\user_util.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_api.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_base.cc.obj CMakeFiles\mujoco.dir\src\xml\xml.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_reader.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_numeric_format.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_writer.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_urdf.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_util.cc.obj CMakeFiles\mujoco.dir\src\render\glad\glad.c.obj CMakeFiles\mujoco.dir\src\render\glad\loader.cc.obj CMakeFiles\mujoco.dir\src\render\render_context.c.obj CMakeFiles\mujoco.dir\src\render\render_gl2.c.obj CMakeFiles\mujoco.dir\src\render\render_gl3.c.obj CMakeFiles\mujoco.dir\src\render\render_util.c.obj CMakeFiles\mujoco.dir\src\ui\ui_main.c.obj /out:bin\mujoco.dll /implib:lib\mujoco.lib /pdb:bin\mujoco.pdb /dll /version:2.2 /machine:x64 /INCREMENTAL:NO /OPT:REF /OPT:ICF=5 C:\bld\mujoco_1654716236692\_h_env\Library\lib\ccd.lib C:\bld\mujoco_1654716236692\_h_env\Library\lib\lodepng.lib lib\tinyobjloader.lib tinyxml2.lib C:\bld\mujoco_1654716236692\_h_env\Library\lib\qhull_r.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:bin\mujoco.dll.manifest" failed (exit code 1) with the following output:
lld-link: error: undefined symbol: ccd_vec3_origin
>>> referenced by C:\bld\mujoco_1654716236692\work\src\engine\engine_collision_convex.c

>>>               CMakeFiles\mujoco.dir\src\engine\engine_collision_convex.c.obj

ninja: build stopped: subcommand failed.

@traversaro
Copy link
Contributor Author

The symbol seems to be in the library:

(libccd) C:\Users\STraversaro\AppData\Local\mambaforge\envs\libccd\Library\lib>dumpbin /exports ccd.lib
Microsoft (R) COFF/PE Dumper Version 14.16.27048.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file ccd.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  __ccdSupport
                  ccdFirstDirDefault
                  ccdGJKIntersect
                  ccdGJKPenetration
                  ccdGJKSeparate
                  ccdMPRIntersect
                  ccdMPRPenetration
                  ccdPtAddEdge
                  ccdPtAddFace
                  ccdPtAddVertex
                  ccdPtDestroy
                  ccdPtDumpSVT
                  ccdPtDumpSVT2
                  ccdPtInit
                  ccdPtNearest
                  ccdPtRecomputeDistances
                  ccdVec3PointSegmentDist2
                  ccdVec3PointTriDist2
                  ccd_points_on_sphere
                  ccd_points_on_sphere_len
                  ccd_vec3_origin

  Summary

          B7 .debug$S
          14 .idata$2
          14 .idata$3
           8 .idata$4
           8 .idata$5
           8 .idata$6

So the problem is probably elsewhere.

@traversaro
Copy link
Contributor Author

Get Windows to work (libccd seems to be missing some symbols)

It seems that the problem is still there even with ccd-double:

[51/51] Linking CXX shared library bin\mujoco.dll
FAILED: bin/mujoco.dll lib/mujoco.lib 
cmd.exe /C "cd . && C:\bld\mujoco_1654716236692\_build_env\Library\bin\cmake.exe -E vs_link_dll --intdir=CMakeFiles\mujoco.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100220~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100220~1.0\x64\mt.exe --manifests  -- C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo CMakeFiles\mujoco.dir\src\engine\engine_callback.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_box.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_convex.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_driver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_primitive.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_constraint.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_smooth.c.obj CMakeFiles\mujoco.dir\src\engine\engine_derivative.c.obj CMakeFiles\mujoco.dir\src\engine\engine_file.c.obj CMakeFiles\mujoco.dir\src\engine\engine_forward.c.obj CMakeFiles\mujoco.dir\src\engine\engine_inverse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_io.c.obj CMakeFiles\mujoco.dir\src\engine\engine_print.c.obj CMakeFiles\mujoco.dir\src\engine\engine_ray.c.obj CMakeFiles\mujoco.dir\src\engine\engine_sensor.c.obj CMakeFiles\mujoco.dir\src\engine\engine_setconst.c.obj CMakeFiles\mujoco.dir\src\engine\engine_solver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_support.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_blas.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_errmem.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_misc.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_solve.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_sparse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_spatial.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vfs.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_init.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_interact.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_visualize.c.obj CMakeFiles\mujoco.dir\src\user\user_composite.cc.obj CMakeFiles\mujoco.dir\src\user\user_mesh.cc.obj CMakeFiles\mujoco.dir\src\user\user_model.cc.obj CMakeFiles\mujoco.dir\src\user\user_objects.cc.obj CMakeFiles\mujoco.dir\src\user\user_util.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_api.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_base.cc.obj CMakeFiles\mujoco.dir\src\xml\xml.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_reader.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_numeric_format.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_writer.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_urdf.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_util.cc.obj CMakeFiles\mujoco.dir\src\render\glad\glad.c.obj CMakeFiles\mujoco.dir\src\render\glad\loader.cc.obj CMakeFiles\mujoco.dir\src\render\render_context.c.obj CMakeFiles\mujoco.dir\src\render\render_gl2.c.obj CMakeFiles\mujoco.dir\src\render\render_gl3.c.obj CMakeFiles\mujoco.dir\src\render\render_util.c.obj CMakeFiles\mujoco.dir\src\ui\ui_main.c.obj  /out:bin\mujoco.dll /implib:lib\mujoco.lib /pdb:bin\mujoco.pdb /dll /version:2.2 /machine:x64 /INCREMENTAL:NO  /OPT:REF /OPT:ICF=5  C:\bld\mujoco_1654716236692\_h_env\Library\lib\ccd.lib  C:\bld\mujoco_1654716236692\_h_env\Library\lib\lodepng.lib  lib\tinyobjloader.lib  tinyxml2.lib  C:\bld\mujoco_1654716236692\_h_env\Library\lib\qhull_r.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  && cd ."
LINK: command "C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo CMakeFiles\mujoco.dir\src\engine\engine_callback.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_box.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_convex.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_driver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_collision_primitive.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_constraint.c.obj CMakeFiles\mujoco.dir\src\engine\engine_core_smooth.c.obj CMakeFiles\mujoco.dir\src\engine\engine_derivative.c.obj CMakeFiles\mujoco.dir\src\engine\engine_file.c.obj CMakeFiles\mujoco.dir\src\engine\engine_forward.c.obj CMakeFiles\mujoco.dir\src\engine\engine_inverse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_io.c.obj CMakeFiles\mujoco.dir\src\engine\engine_print.c.obj CMakeFiles\mujoco.dir\src\engine\engine_ray.c.obj CMakeFiles\mujoco.dir\src\engine\engine_sensor.c.obj CMakeFiles\mujoco.dir\src\engine\engine_setconst.c.obj CMakeFiles\mujoco.dir\src\engine\engine_solver.c.obj CMakeFiles\mujoco.dir\src\engine\engine_support.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_blas.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_errmem.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_misc.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_solve.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_sparse.c.obj CMakeFiles\mujoco.dir\src\engine\engine_util_spatial.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vfs.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_init.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_interact.c.obj CMakeFiles\mujoco.dir\src\engine\engine_vis_visualize.c.obj CMakeFiles\mujoco.dir\src\user\user_composite.cc.obj CMakeFiles\mujoco.dir\src\user\user_mesh.cc.obj CMakeFiles\mujoco.dir\src\user\user_model.cc.obj CMakeFiles\mujoco.dir\src\user\user_objects.cc.obj CMakeFiles\mujoco.dir\src\user\user_util.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_api.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_base.cc.obj CMakeFiles\mujoco.dir\src\xml\xml.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_reader.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_numeric_format.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_native_writer.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_urdf.cc.obj CMakeFiles\mujoco.dir\src\xml\xml_util.cc.obj CMakeFiles\mujoco.dir\src\render\glad\glad.c.obj CMakeFiles\mujoco.dir\src\render\glad\loader.cc.obj CMakeFiles\mujoco.dir\src\render\render_context.c.obj CMakeFiles\mujoco.dir\src\render\render_gl2.c.obj CMakeFiles\mujoco.dir\src\render\render_gl3.c.obj CMakeFiles\mujoco.dir\src\render\render_util.c.obj CMakeFiles\mujoco.dir\src\ui\ui_main.c.obj /out:bin\mujoco.dll /implib:lib\mujoco.lib /pdb:bin\mujoco.pdb /dll /version:2.2 /machine:x64 /INCREMENTAL:NO /OPT:REF /OPT:ICF=5 C:\bld\mujoco_1654716236692\_h_env\Library\lib\ccd.lib C:\bld\mujoco_1654716236692\_h_env\Library\lib\lodepng.lib lib\tinyobjloader.lib tinyxml2.lib C:\bld\mujoco_1654716236692\_h_env\Library\lib\qhull_r.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:bin\mujoco.dll.manifest" failed (exit code 1) with the following output:
lld-link: error: undefined symbol: ccd_vec3_origin
>>> referenced by C:\bld\mujoco_1654716236692\work\src\engine\engine_collision_convex.c

>>>               CMakeFiles\mujoco.dir\src\engine\engine_collision_convex.c.obj

ninja: build stopped: subcommand failed.

I was unable to solve the problem. However, as that symbol is used just to access a 0.0 0.0 0.0 vector, I patched the source code to avoid using it and instead rely on a zero vector contained in a local instance: 6e08327 .

@traversaro
Copy link
Contributor Author

Python bindings on Windows are failing with:

  -- Building for: NMake Makefiles
  CMake Error at CMakeLists.txt:15 (project):
    Generator
  
      NMake Makefiles
  
    does not support platform specification, but platform
  
      x64
  
    was specified.
  
  
  CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
  CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage

@traversaro traversaro force-pushed the patch-14 branch 3 times, most recently from e71095f to 75aefaa Compare June 17, 2022 23:04
@traversaro
Copy link
Contributor Author

The recipe is ready for review @conda-forge/help-c-cpp @conda-forge/help-python-c .

Some additional notes/points that is better to explain before:

Copy link
Member

@carterbox carterbox left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In regards to revendoring tinyobjlibrary. I believe this is OK because the release candidate version should be published on a conda-forge rc channel which means that would probably require end users to add a special channel in order for the package solver to find a solution. I have questions though:

  1. tinyobjlibrary is statically linked into the mujoco shared library?
  2. Where is the license for tinyobjlibrary since it is being statically linked into mujoco?

recipes/mujoco/meta.yaml Outdated Show resolved Hide resolved
recipes/mujoco/meta.yaml Outdated Show resolved Hide resolved
recipes/mujoco/meta.yaml Outdated Show resolved Hide resolved
recipes/mujoco/meta.yaml Show resolved Hide resolved
# abseil-cpp is used only for tests, we can
# safely ignore its run_exports
ignore_run_exports:
- abseil-cpp
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This library is still being exported on Windows. Maybe you need to add this ignore_run_exports to the python package build section too?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On Python (differently from C++) the library is used in the bindings themselfs, not on tests, see for example the Linux logs:

2022-06-18T14:40:23.0083572Z    INFO (mujoco-python,lib/python3.8/site-packages/mujoco/_structs.cpython-38-x86_64-linux-gnu.so): Needed DSO lib/libabsl_hash.so.2103.0.1 found in conda-forge::abseil-cpp-20210324.2-h9c3ff4c_0
2022-06-18T14:40:23.0147391Z    INFO (mujoco-python,lib/python3.8/site-packages/mujoco/_structs.cpython-38-x86_64-linux-gnu.so): Needed DSO lib/libabsl_raw_hash_set.so.2103.0.1 found in conda-forge::abseil-cpp-20210324.2-h9c3ff4c_0
2022-06-18T14:40:23.0176888Z    INFO (mujoco-python,lib/python3.8/site-packages/mujoco/_structs.cpython-38-x86_64-linux-gnu.so): Needed DSO x86_64-conda-linux-gnu/sysroot/lib64/libpthread.so.0 found in CDT/compiler package conda-forge::sysroot_linux-64-2.12-he073ed8_15
2022-06-18T14:40:23.0238563Z    INFO (mujoco-python,lib/python3.8/site-packages/mujoco/_structs.cpython-38-x86_64-linux-gnu.so): Needed DSO lib/libmujoco.so.2.2.0 found in home/conda/staged-recipes/build_artifacts::mujoco-cxx-2.2.0-h696428e_0
2022-06-18T14:40:23.0298191Z    INFO (mujoco-python,lib/python3.8/site-packages/mujoco/_structs.cpython-38-x86_64-linux-gnu.so): Needed DSO lib/libabsl_throw_delegate.so.2103.0.1 found in conda-forge::abseil-cpp-20210324.2-h9c3ff4c_0

This is the reason why I did not check for that warning on Windows. However, the Windows warning is indeed fishy. By quickly looking at the abseil Windows package, in particular the size of the shipped .lib, at a first glance it seems that a library .lib is shipped, instead of a import library, however I need to check better.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I checked a bit the situation. abseil-cpp is still pinned to a version that shipped static libraries on Windows (i.e. before conda-forge/abseil-cpp-feedstock#25), see https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/a7759497a85d3c3a0e929583e5babacc922950c8/recipe/conda_build_config.yaml#L347 . Once an abseil with shared libraries is available, it will be used, and no modifications are required on the mujoco recipe. At this point, I think leaving avoiding to add the ignore_run_exports on the python side is probably the best/simplest thing to do.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed. If a future version provides non-static linking it's fine.

traversaro and others added 4 commits June 21, 2022 18:52
@traversaro
Copy link
Contributor Author

In regards to revendoring tinyobjlibrary. I believe this is OK because the release candidate version should be published on a conda-forge rc channel which means that would probably require end users to add a special channel in order for the package solver to find a solution. I have questions though:

1. tinyobjlibrary is statically linked into the mujoco shared library?

2. Where is the license for tinyobjlibrary since it is being statically linked into mujoco?

Yes, tinyobjloader is statically linked and I add its license in the meta.yaml.

@traversaro
Copy link
Contributor Author

CI is happy and I think I address all the review points, the PR is ready for a new review. @conda-forge/help-c-cpp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

None yet

5 participants