# This configuration is used to build and test on GitHub Actions only. # It is not the same configuration that is used by Google DeepMind to create release binaries. # The "official" binaries are built with Clang 13 on all platforms, and are linked against libc++ # on Linux. # # We set CMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF here to reduce build time. # It is highly recommended that this is set to ON for production builds. name: build on: push: paths-ignore: - "doc/**" - "**/README.md" pull_request: paths-ignore: - "doc/**" - "**/README.md" jobs: mujoco: strategy: fail-fast: false matrix: include: - os: ubuntu-22.04 additional_label: "with GCC 11" cmake_args: >- -G Ninja -DCMAKE_C_COMPILER:STRING=gcc-11 -DCMAKE_CXX_COMPILER:STRING=g++-11 -DCMAKE_EXE_LINKER_FLAGS:STRING=-Wl,--no-as-needed tmpdir: "/tmp" - os: ubuntu-20.04 additional_label: "with GCC 10" cmake_args: >- -G Ninja -DCMAKE_C_COMPILER:STRING=gcc-10 -DCMAKE_CXX_COMPILER:STRING=g++-10 -DCMAKE_EXE_LINKER_FLAGS:STRING=-Wl,--no-as-needed tmpdir: "/tmp" - os: ubuntu-20.04 additional_label: "with GCC 9" cmake_args: >- -G Ninja -DCMAKE_C_COMPILER:STRING=gcc-9 -DCMAKE_CXX_COMPILER:STRING=g++-9 -DCMAKE_EXE_LINKER_FLAGS:STRING=-Wl,--no-as-needed tmpdir: "/tmp" - os: ubuntu-22.04 additional_label: "with Clang 14" cmake_args: >- -G Ninja -DCMAKE_C_COMPILER:STRING=clang-14 -DCMAKE_CXX_COMPILER:STRING=clang++-14 -DMUJOCO_HARDEN:BOOL=ON tmpdir: "/tmp" - os: ubuntu-22.04 additional_label: "with Clang 13" cmake_args: >- -G Ninja -DCMAKE_C_COMPILER:STRING=clang-13 -DCMAKE_CXX_COMPILER:STRING=clang++-13 -DMUJOCO_HARDEN:BOOL=ON tmpdir: "/tmp" - os: ubuntu-22.04 additional_label: "with Clang 12" cmake_args: >- -G Ninja -DCMAKE_C_COMPILER:STRING=clang-12 -DCMAKE_CXX_COMPILER:STRING=clang++-12 -DMUJOCO_HARDEN:BOOL=ON tmpdir: "/tmp" - os: ubuntu-20.04 additional_label: "with Clang 11" cmake_args: >- -G Ninja -DCMAKE_C_COMPILER:STRING=clang-11 -DCMAKE_CXX_COMPILER:STRING=clang++-11 -DMUJOCO_HARDEN:BOOL=ON tmpdir: "/tmp" - os: ubuntu-20.04 additional_label: "with Clang 10" cmake_args: >- -G Ninja -DCMAKE_C_COMPILER:STRING=clang-10 -DCMAKE_CXX_COMPILER:STRING=clang++-10 -DMUJOCO_HARDEN:BOOL=ON tmpdir: "/tmp" - os: macos-12 cmake_args: >- -G Ninja -DMUJOCO_HARDEN:BOOL=ON tmpdir: "/tmp" - os: windows-2022 cmake_args: >- -DCMAKE_SYSTEM_VERSION="10.0.22621.0" cmake_build_args: "-- -m" tmpdir: "C:/Temp" - os: windows-2019 cmake_args: >- -DCMAKE_SYSTEM_VERSION="10.0.22621.0" cmake_build_args: "-- -m" tmpdir: "C:/Temp" name: "MuJoCo on ${{ matrix.os }} ${{ matrix.additional_label }}" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: Prepare Linux if: ${{ runner.os == 'Linux' }} run: > sudo apt-get update && sudo apt-get install libgl1-mesa-dev libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev ninja-build - name: Prepare macOS if: ${{ runner.os == 'macOS' }} run: brew install ninja - uses: actions/setup-python@v4 with: python-version: "3.11" - name: Prepare Python shell: bash run: | repo="${PWD}" cd ${{ matrix.tmpdir }} python -m venv venv if [[ $RUNNER_OS == "Windows" ]]; then mkdir venv/bin fixpath="$(s="$(cat venv/Scripts/activate | grep VIRTUAL_ENV=)"; echo "${s:13:-1}")" sed -i "s#$(printf "%q" "${fixpath}")#$(cygpath "${fixpath}")#g" venv/Scripts/activate ln -s ../Scripts/activate venv/bin/activate fi source venv/bin/activate python -m pip install --upgrade --require-hashes -r "${repo}/python/build_requirements.txt" - name: Configure MuJoCo run: > mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:STRING=${{ matrix.tmpdir }}/mujoco_install -DMUJOCO_BUILD_EXAMPLES:BOOL=OFF ${{ matrix.cmake_args }} - name: Build MuJoCo working-directory: build run: cmake --build . --config=Release ${{ matrix.cmake_build_args }} - name: Test MuJoCo working-directory: build run: ctest -C Release --output-on-failure . - name: Install MuJoCo working-directory: build run: cmake --install . - name: Copy plugins (POSIX) if: ${{ runner.os != 'Windows' }} working-directory: build run: mkdir -p ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin && cp lib/libelasticity.* ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin && cp lib/libsensor.* ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin - name: Copy plugins (Windows) if: ${{ runner.os == 'Windows' }} working-directory: build run: mkdir -p ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin && cp bin/Release/elasticity.dll ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin && cp bin/Release/sensor.dll ${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin - name: Configure samples working-directory: sample run: > mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE:STRING=Release -Dmujoco_ROOT:STRING=${{ matrix.tmpdir }}/mujoco_install ${{ matrix.cmake_args }} - name: Build samples working-directory: sample/build run: cmake --build . --config=Release ${{ matrix.cmake_build_args }} - name: Configure simulate working-directory: simulate run: > mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE:STRING=Release -Dmujoco_ROOT:STRING=${{ matrix.tmpdir }}/mujoco_install ${{ matrix.cmake_args }} - name: Build simulate working-directory: simulate/build run: cmake --build . --config=Release ${{ matrix.cmake_build_args }} - name: Make Python sdist shell: bash working-directory: python run: > source ${{ matrix.tmpdir }}/venv/bin/activate && ./make_sdist.sh - name: Build Python bindings if: ${{ runner.os != 'Windows' }} shell: bash working-directory: python/dist run: > source ${{ matrix.tmpdir }}/venv/bin/activate && MUJOCO_PATH="${{ matrix.tmpdir }}/mujoco_install" MUJOCO_PLUGIN_PATH="${{ matrix.tmpdir }}/mujoco_install/mujoco_plugin" MUJOCO_CMAKE_ARGS="-DCMAKE_INTERPROCEDURAL_OPTIMIZATION:BOOL=OFF ${{ matrix.cmake_args }}" pip wheel -v --no-deps mujoco-*.tar.gz - name: Install Python bindings if: ${{ runner.os != 'Windows' }} shell: bash working-directory: python/dist run: > source ${{ matrix.tmpdir }}/venv/bin/activate && pip install mujoco-*.whl - name: Test Python bindings if: ${{ runner.os != 'Windows' }} shell: bash env: MUJOCO_GL: disable run: > source ${{ matrix.tmpdir }}/venv/bin/activate && pytest -v --pyargs mujoco