Add BUILD_PYPI option, use it to control installation of libraries int… #5964
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: continuous-integration | |
| # syntax https://help.github.com/en/articles/workflow-syntax-for-github-actions | |
| on: | |
| # Run at 2am every night. | |
| schedule: | |
| - cron: '0 2 * * *' | |
| pull_request: | |
| branches: | |
| - '*' | |
| push: | |
| branches: | |
| - main | |
| tags: | |
| - '*' | |
| jobs: | |
| windows: | |
| runs-on: windows-2025 | |
| name: Windows | |
| outputs: | |
| version: ${{ steps.configure.outputs.version }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Doxygen | |
| # choco install doxygen.portable # <-- too unreliable. | |
| run: | | |
| (New-Object System.Net.WebClient).DownloadFile("https://github.com/doxygen/doxygen/releases/download/Release_1_12_0/doxygen-1.12.0.windows.x64.bin.zip", "doxygen.zip") | |
| 7z x $env:GITHUB_WORKSPACE/doxygen.zip -odoxygen | |
| echo "$env:GITHUB_WORKSPACE\\doxygen" >> $GITHUB_PATH | |
| - name: Install Python packages | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install numpy | |
| #Need numpy to use SWIG numpy typemaps. | |
| run: | | |
| python3 -m pip install numpy==2.0 | |
| python3 -m pip install wheel | |
| python3 -m pip install build | |
| - name: Install SWIG | |
| run: | | |
| choco install swig --version 4.2.0 --yes --limit-output --allow-downgrade | |
| swig -swiglib | |
| - name: Cache dependencies | |
| id: cache-dependencies | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/opensim_dependencies_install | |
| # Every time a cache is created, it's stored with this key. | |
| # In subsequent runs, if the key matches the key of an existing cache, | |
| # then the cache is used. We chose for this key to depend on the | |
| # operating system and a hash of the hashes of all files in the | |
| # dependencies directory (non-recursive). | |
| # https://help.github.com/en/actions/automating-your-workflow-with-github-actions/caching-dependencies-to-speed-up-workflows#matching-a-cache-key | |
| key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }} | |
| - name: Build dependencies | |
| if: steps.cache-dependencies.outputs.cache-hit != 'true' | |
| run: | | |
| echo $env:GITHUB_WORKSPACE\\build_deps | |
| mkdir $env:GITHUB_WORKSPACE\\build_deps | |
| chdir $env:GITHUB_WORKSPACE\\build_deps | |
| # /W0 disables warnings. | |
| # https://msdn.microsoft.com/en-us/library/19z1t1wy.aspx | |
| # TODO: CMake provides /W3, which overrides our /W0 | |
| cmake -E env CXXFLAGS="/W0 /MD" cmake $env:GITHUB_WORKSPACE/dependencies -LAH -G"Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install -DSUPERBUILD_ezc3d=ON -DOPENSIM_WITH_CASADI=ON -DOPENSIM_PYTHON_STANDALONE=ON | |
| cmake --build . --config Release -- /maxcpucount:4 | |
| - name: Configure opensim-core | |
| id: configure | |
| run: | | |
| mkdir $env:GITHUB_WORKSPACE\\build | |
| chdir $env:GITHUB_WORKSPACE\\build | |
| # TODO: Can remove /WX when we use that in CMakeLists.txt. | |
| # Set the CXXFLAGS environment variable to turn warnings into errors. | |
| # Skip timing test section included by default. | |
| cmake -E env CXXFLAGS="/WX /MD -DSKIP_TIMING" cmake $env:GITHUB_WORKSPACE -LAH -G"Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=~/opensim-core-install -DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install -DOPENSIM_C3D_PARSER=ezc3d -DOPENSIM_WITH_=on -DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on -DPython3_ROOT_DIR=C:\hostedtoolcache\windows\Python\3.11.9\x64 | |
| $env:match = cmake -L . | Select-String -Pattern OPENSIM_QUALIFIED_VERSION | |
| $version = $env:match.split('=')[1] | |
| echo $version | |
| echo "VERSION=$version" >> $GITHUB_ENV | |
| echo "version=$version" >> $env:GITHUB_OUTPUT | |
| - name: Build opensim-core | |
| # Install now to avoid building bindings twice (TODO: still an issue with Visual Studio 2022). | |
| run: | | |
| chdir $env:GITHUB_WORKSPACE\\build | |
| cmake --build . --config Release --target doxygen -- /maxcpucount:4 | |
| cmake --build . --config Release --target install -- /maxcpucount:4 | |
| - name: Test opensim-core | |
| run: | | |
| chdir $env:GITHUB_WORKSPACE\\build | |
| ctest --parallel 4 --output-on-failure --build-config Release -E Java_* | |
| - name: Install opensim-core | |
| # TODO: This is where we wish to do the installing, but it's done above for now. | |
| run: | | |
| chdir $env:GITHUB_WORKSPACE\\build | |
| chdir $env:GITHUB_WORKSPACE | |
| Copy-Item -Path "~/opensim-core-install" -Destination "opensim-core-${{ steps.configure.outputs.version }}" -Recurse | |
| 7z a "opensim-core-${{ steps.configure.outputs.version }}.zip" "opensim-core-${{ steps.configure.outputs.version }}" | |
| - name: Build wheel | |
| run: | | |
| cd ~/opensim-core-install/sdk/python | |
| python -m build --wheel | |
| - name: Upload windows wheel | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: opensim-4.5.2-cp310-cp310-win_amd64.whl | |
| path: ~/opensim-core-install/sdk/python/dist/opensim-4.5.2-cp310-cp310-win_amd64.whl | |
| # # Run python tests. | |
| # python -m unittest discover --start-directory opensim/tests --verbose | |
| - name: Upload opensim-core | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: opensim-core-${{ steps.configure.outputs.version }}-win | |
| path: opensim-core-${{ steps.configure.outputs.version }}.zip | |
| mac_x86_64: | |
| runs-on: macos-15-intel | |
| name: Mac x86_64 | |
| outputs: | |
| version: ${{ steps.configure.outputs.version }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Python packages | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Homebrew packages | |
| # Save the gfortran version to a file so we can use it in the cache key. | |
| run: | | |
| brew install pkgconfig autoconf libtool automake wget pcre doxygen llvm | |
| brew reinstall gcc | |
| pip3 install numpy==2.0 | |
| gfortran -v | |
| mkdir gfortran_version | |
| gfortran -v &> gfortran_version/gfortran_version.txt | |
| - name: Cache SWIG | |
| id: cache-swig | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/swig | |
| key: ${{ runner.os }}-swig | |
| - name: Install SWIG | |
| # if: steps.cache-swig.outputs.cache-hit != 'true' | |
| run: | | |
| mkdir ~/swig-source && cd ~/swig-source | |
| wget https://github.com/swig/swig/archive/refs/tags/v4.1.1.tar.gz | |
| tar xzf v4.1.1.tar.gz && cd swig-4.1.1 | |
| sh autogen.sh && ./configure --prefix=$HOME/swig --disable-ccache | |
| make && make -j4 install | |
| - name: Cache dependencies | |
| id: cache-dependencies | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/opensim_dependencies_install | |
| # If Homebrew updates the gcc package, then our cache of IPOPT is invalid. | |
| # Specifically, the pkgcfg_lib_IPOPT_gfortran CMake variable becomes | |
| # undefined. | |
| key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }}-${{ hashFiles('gfortran_version/*') }} | |
| - name: Build dependencies | |
| if: steps.cache-dependencies.outputs.cache-hit != 'true' | |
| run: | | |
| mkdir $GITHUB_WORKSPACE/../build_deps | |
| cd $GITHUB_WORKSPACE/../build_deps | |
| DEP_CMAKE_ARGS=($GITHUB_WORKSPACE/dependencies -LAH) | |
| DEP_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install) | |
| DEP_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) | |
| DEP_CMAKE_ARGS+=(-DSUPERBUILD_ezc3d=ON) | |
| DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_=ON) | |
| DEP_CMAKE_ARGS+=(-DOPENSIM_DISABLE_LOG_FILE=ON) | |
| DEP_CMAKE_ARGS+=(-DCMAKE_OSX_DEPLOYMENT_TARGET=11) | |
| printf '%s\n' "${DEP_CMAKE_ARGS[@]}" | |
| cmake "${DEP_CMAKE_ARGS[@]}" | |
| make --jobs 4 | |
| - name: Configure opensim-core | |
| id: configure | |
| run: | | |
| mkdir $GITHUB_WORKSPACE/../build | |
| cd $GITHUB_WORKSPACE/../build | |
| OSIM_CMAKE_ARGS=($GITHUB_WORKSPACE -LAH) | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/../opensim-core-install) | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install) | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_OSX_DEPLOYMENT_TARGET=11) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_C3D_PARSER=ezc3d) | |
| OSIM_CMAKE_ARGS+=(-DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on) | |
| OSIM_CMAKE_ARGS+=(-DSWIG_EXECUTABLE=$HOME/swig/bin/swig) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_INSTALL_UNIX_FHS=OFF) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_DOXYGEN_USE_MATHJAX=off) | |
| # TODO: Update to simbody.github.io/latest | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_SIMBODY_DOXYGEN_LOCATION="https://simbody.github.io/simtk.org/api_docs/simbody/latest/") | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_CXX_FLAGS="-Werror, -Wdeprecated-copy") | |
| printf '%s\n' "${OSIM_CMAKE_ARGS[@]}" | |
| cmake "${OSIM_CMAKE_ARGS[@]}" | |
| VERSION=`cmake -L . | grep OPENSIM_QUALIFIED_VERSION | cut -d "=" -f2` | |
| echo $VERSION | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Build opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| make --jobs 4 | |
| - name: Test opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| ctest --parallel 4 --output-on-failure | |
| - name: Install opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| make doxygen | |
| make install | |
| cd $GITHUB_WORKSPACE | |
| mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ steps.configure.outputs.version }} | |
| zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}.zip opensim-core-${{ steps.configure.outputs.version }} | |
| mv opensim-core-${{ steps.configure.outputs.version }} $GITHUB_WORKSPACE/../opensim-core-install | |
| - name: Test Python bindings | |
| run: | | |
| cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python | |
| # Run the python tests, verbosely. | |
| python3 -m unittest discover --start-directory opensim/tests --verbose | |
| - name: Upload opensim-core | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| # The upload-artifact zipping does not preserve symlinks or executable | |
| # bits. So we zip ourselves, even though this causes a double-zip. | |
| name: opensim-core-${{ steps.configure.outputs.version }}-mac-x86_64 | |
| path: opensim-core-${{ steps.configure.outputs.version }}.zip | |
| mac_arm64: | |
| runs-on: macos-15 | |
| name: Mac Arm64 | |
| outputs: | |
| version: ${{ steps.configure.outputs.version }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Python packages | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Homebrew packages | |
| # Save the gfortran version to a file so we can use it in the cache key. | |
| run: | | |
| brew install pkgconfig autoconf libtool automake wget pcre doxygen llvm | |
| brew reinstall gcc | |
| pip3 install numpy==2.0 | |
| pip3 install wheel | |
| pip3 install build | |
| gfortran -v | |
| mkdir gfortran_version | |
| gfortran -v &> gfortran_version/gfortran_version.txt | |
| - name: Cache SWIG | |
| id: cache-swig | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/swig | |
| key: ${{ runner.os }}-swig | |
| - name: Install SWIG | |
| # if: steps.cache-swig.outputs.cache-hit != 'true' | |
| run: | | |
| mkdir ~/swig-source && cd ~/swig-source | |
| wget https://github.com/swig/swig/archive/refs/tags/v4.1.1.tar.gz | |
| tar xzf v4.1.1.tar.gz && cd swig-4.1.1 | |
| sh autogen.sh && ./configure --prefix=$HOME/swig --disable-ccache | |
| make && make -j4 install | |
| - name: Cache dependencies | |
| id: cache-dependencies | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/opensim_dependencies_install | |
| # If Homebrew updates the gcc package, then our cache of IPOPT is invalid. | |
| # Specifically, the pkgcfg_lib_IPOPT_gfortran CMake variable becomes | |
| # undefined. | |
| key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }}-${{ hashFiles('gfortran_version/*') }} | |
| - name: Build dependencies | |
| if: steps.cache-dependencies.outputs.cache-hit != 'true' | |
| run: | | |
| mkdir $GITHUB_WORKSPACE/../build_deps | |
| cd $GITHUB_WORKSPACE/../build_deps | |
| DEP_CMAKE_ARGS=($GITHUB_WORKSPACE/dependencies -LAH) | |
| DEP_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install) | |
| DEP_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) | |
| DEP_CMAKE_ARGS+=(-DSUPERBUILD_ezc3d=ON) | |
| DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_=ON) | |
| DEP_CMAKE_ARGS+=(-DOPENSIM_DISABLE_LOG_FILE=ON) | |
| DEP_CMAKE_ARGS+=(-DCMAKE_OSX_DEPLOYMENT_TARGET=11) | |
| printf '%s\n' "${DEP_CMAKE_ARGS[@]}" | |
| cmake "${DEP_CMAKE_ARGS[@]}" | |
| make --jobs 4 | |
| - name: Configure opensim-core | |
| id: configure | |
| run: | | |
| mkdir $GITHUB_WORKSPACE/../build | |
| cd $GITHUB_WORKSPACE/../build | |
| OSIM_CMAKE_ARGS=($GITHUB_WORKSPACE -LAH) | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/../opensim-core-install) | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install) | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_OSX_DEPLOYMENT_TARGET=11) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_C3D_PARSER=ezc3d) | |
| OSIM_CMAKE_ARGS+=(-DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on) | |
| OSIM_CMAKE_ARGS+=(-DBUILD_PYPI=on) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_WITH_=ON) | |
| OSIM_CMAKE_ARGS+=(-DSWIG_EXECUTABLE=$HOME/swig/bin/swig) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_INSTALL_UNIX_FHS=OFF) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_DOXYGEN_USE_MATHJAX=off) | |
| # TODO: Update to simbody.github.io/latest | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_SIMBODY_DOXYGEN_LOCATION="https://simbody.github.io/simtk.org/api_docs/simbody/latest/") | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_CXX_FLAGS="-Werror, -Wdeprecated-copy") | |
| printf '%s\n' "${OSIM_CMAKE_ARGS[@]}" | |
| cmake "${OSIM_CMAKE_ARGS[@]}" | |
| VERSION=`cmake -L . | grep OPENSIM_QUALIFIED_VERSION | cut -d "=" -f2` | |
| echo $VERSION | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Build opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| make --jobs 4 | |
| - name: Test opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| ctest --parallel 4 --output-on-failure | |
| - name: Install opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| make doxygen | |
| make install | |
| cd $GITHUB_WORKSPACE | |
| mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ steps.configure.outputs.version }} | |
| zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}.zip opensim-core-${{ steps.configure.outputs.version }} | |
| mv opensim-core-${{ steps.configure.outputs.version }} $GITHUB_WORKSPACE/../opensim-core-install | |
| - name: Build wheel | |
| run: | | |
| cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python | |
| python3 -m build --wheel | |
| - name: Upload osx wheel | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: opensim-4.5.2-cp310-cp310-macosx_15_0_universal2.whl | |
| path: /Users/runner/work/opensim-core/opensim-core-install/sdk/python/dist/opensim-4.5.2-cp310-cp310-macosx_15_0_universal2.whl | |
| - name: Test Python bindings | |
| run: | | |
| cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python | |
| # Run the python tests, verbosely. | |
| python3 -m unittest discover --start-directory opensim/tests --verbose | |
| - name: Upload opensim-core | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| # The upload-artifact zipping does not preserve symlinks or executable | |
| # bits. So we zip ourselves, even though this causes a double-zip. | |
| name: opensim-core-${{ steps.configure.outputs.version }}-mac-arm64 | |
| path: opensim-core-${{ steps.configure.outputs.version }}.zip | |
| ubuntu22: | |
| name: Ubuntu 22.04 | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Python packages | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Numpy | |
| run: | | |
| pip install pip --upgrade | |
| pip install numpy==2.0 | |
| - name: Install packages | |
| run: sudo apt-get update && sudo apt-get install --yes build-essential libtool autoconf pkg-config gfortran libopenblas-dev liblapack-dev freeglut3-dev libxi-dev libxmu-dev doxygen patchelf | |
| - name: Cache SWIG | |
| id: cache-swig | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/swig | |
| key: ${{ runner.os }}-swig | |
| - name: Install SWIG | |
| # if: steps.cache-swig.outputs.cache-hit != 'true' | |
| run: | | |
| mkdir ~/swig-source && cd ~/swig-source | |
| wget https://github.com/swig/swig/archive/refs/tags/v4.1.1.tar.gz | |
| tar xzf v4.1.1.tar.gz && cd swig-4.1.1 | |
| sh autogen.sh && ./configure --prefix=$HOME/swig --disable-ccache | |
| make && make -j4 install | |
| - name: Cache dependencies | |
| id: cache-dependencies | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/opensim_dependencies_install | |
| key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }} | |
| - name: Build dependencies | |
| #if: steps.cache-dependencies.outputs.cache-hit != 'true' | |
| run: | | |
| mkdir $GITHUB_WORKSPACE/../build_deps | |
| cd $GITHUB_WORKSPACE/../build_deps | |
| DEP_CMAKE_ARGS=($GITHUB_WORKSPACE/dependencies -LAH) | |
| DEP_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install) | |
| DEP_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) | |
| DEP_CMAKE_ARGS+=(-DSUPERBUILD_ezc3d=ON) | |
| DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=ON) | |
| DEP_CMAKE_ARGS+=(-DOPENSIM_DISABLE_LOG_FILE=ON) | |
| printf '%s\n' "${DEP_CMAKE_ARGS[@]}" | |
| cmake "${DEP_CMAKE_ARGS[@]}" | |
| make --jobs 4 | |
| - name: Configure opensim-core | |
| id: configure | |
| run: | | |
| mkdir $GITHUB_WORKSPACE/../build | |
| cd $GITHUB_WORKSPACE/../build | |
| OSIM_CMAKE_ARGS=($GITHUB_WORKSPACE -LAH) | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/../opensim-core-install) | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_C3D_PARSER=ezc3d) | |
| OSIM_CMAKE_ARGS+=(-DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on) | |
| OSIM_CMAKE_ARGS+=(-DSWIG_DIR=~/swig/share/swig) | |
| OSIM_CMAKE_ARGS+=(-DSWIG_EXECUTABLE=~/swig/bin/swig) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_INSTALL_UNIX_FHS=OFF) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_DOXYGEN_USE_MATHJAX=off) | |
| # TODO: Update to simbody.github.io/latest | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_SIMBODY_DOXYGEN_LOCATION="https://simbody.github.io/simtk.org/api_docs/simbody/latest/") | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_CXX_FLAGS="-Werror") | |
| printf '%s\n' "${OSIM_CMAKE_ARGS[@]}" | |
| cmake "${OSIM_CMAKE_ARGS[@]}" | |
| VERSION=`cmake -L . | grep OPENSIM_QUALIFIED_VERSION | cut -d "=" -f2` | |
| echo $VERSION | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Build opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| make --jobs 4 | |
| - name: Test opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| # TODO: Temporary for python to find Simbody libraries. | |
| export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/opensim_dependencies_install/simbody/lib | |
| ctest --parallel 4 --output-on-failure | |
| - name: Install opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| make doxygen | |
| make --jobs 4 install | |
| cd $GITHUB_WORKSPACE | |
| mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ steps.configure.outputs.version }} | |
| zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}-ubuntu22.zip opensim-core-${{ steps.configure.outputs.version }} | |
| mv opensim-core-${{ steps.configure.outputs.version }} $GITHUB_WORKSPACE/../opensim-core-install | |
| - name: Test Python bindings | |
| run: | | |
| export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/opensim_dependencies_install/simbody/lib | |
| cd $GITHUB_WORKSPACE/../opensim-core-install/sdk/Python | |
| # Run the python tests, verbosely. | |
| python3 -m unittest discover --start-directory opensim/tests --verbose | |
| - name: Upload opensim-core | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| # The upload-artifact zipping does not preserve symlinks or executable | |
| # bits. So we zip ourselves, even though this causes a double-zip. | |
| name: opensim-core-${{ steps.configure.outputs.version }}-ubuntu22-linux | |
| path: opensim-core-${{ steps.configure.outputs.version }}-ubuntu22.zip | |
| ubuntu24: | |
| name: Ubuntu 24.04 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Python packages | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Numpy | |
| run: | | |
| pip install pip --upgrade | |
| pip install numpy==2.0 | |
| pip install build | |
| pip install wheel | |
| - name: Install packages | |
| run: sudo apt-get update && sudo apt-get install --yes build-essential libtool autoconf pkg-config gfortran libopenblas-dev liblapack-dev freeglut3-dev libxi-dev libxmu-dev doxygen patchelf | |
| - name: Cache SWIG | |
| id: cache-swig | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/swig | |
| key: ${{ runner.os }}-swig | |
| - name: Install SWIG | |
| # if: steps.cache-swig.outputs.cache-hit != 'true' | |
| run: | | |
| mkdir ~/swig-source && cd ~/swig-source | |
| wget https://github.com/swig/swig/archive/refs/tags/v4.1.1.tar.gz | |
| tar xzf v4.1.1.tar.gz && cd swig-4.1.1 | |
| sh autogen.sh && ./configure --prefix=$HOME/swig --disable-ccache | |
| make && make -j4 install | |
| - name: Cache dependencies | |
| id: cache-dependencies | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/opensim_dependencies_install | |
| key: ${{ runner.os }}-dependencies-${{ hashFiles('dependencies/*') }} | |
| - name: Build dependencies | |
| if: steps.cache-dependencies.outputs.cache-hit != 'true' | |
| run: | | |
| mkdir $GITHUB_WORKSPACE/../build_deps | |
| cd $GITHUB_WORKSPACE/../build_deps | |
| DEP_CMAKE_ARGS=($GITHUB_WORKSPACE/dependencies -LAH) | |
| DEP_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=~/opensim_dependencies_install) | |
| DEP_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) | |
| DEP_CMAKE_ARGS+=(-DSUPERBUILD_ezc3d=ON) | |
| DEP_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=ON) | |
| DEP_CMAKE_ARGS+=(-DOPENSIM_DISABLE_LOG_FILE=ON) | |
| printf '%s\n' "${DEP_CMAKE_ARGS[@]}" | |
| cmake "${DEP_CMAKE_ARGS[@]}" | |
| make --jobs 4 | |
| - name: Configure opensim-core | |
| id: configure | |
| run: | | |
| mkdir $GITHUB_WORKSPACE/../build | |
| cd $GITHUB_WORKSPACE/../build | |
| OSIM_CMAKE_ARGS=($GITHUB_WORKSPACE -LAH) | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/../opensim-core-install) | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=Release) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_DEPENDENCIES_DIR=~/opensim_dependencies_install) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_C3D_PARSER=ezc3d) | |
| OSIM_CMAKE_ARGS+=(-DBUILD_PYTHON_WRAPPING=on -DBUILD_JAVA_WRAPPING=on) | |
| OSIM_CMAKE_ARGS+=(-DBUILD_PYPI=on) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_WITH_CASADI=ON) | |
| OSIM_CMAKE_ARGS+=(-DSWIG_DIR=~/swig/share/swig) | |
| OSIM_CMAKE_ARGS+=(-DSWIG_EXECUTABLE=~/swig/bin/swig) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_INSTALL_UNIX_FHS=ON) | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_DOXYGEN_USE_MATHJAX=off) | |
| # TODO: Update to simbody.github.io/latest | |
| OSIM_CMAKE_ARGS+=(-DOPENSIM_SIMBODY_DOXYGEN_LOCATION="https://simbody.github.io/simtk.org/api_docs/simbody/latest/") | |
| OSIM_CMAKE_ARGS+=(-DCMAKE_CXX_FLAGS="-Werror") | |
| printf '%s\n' "${OSIM_CMAKE_ARGS[@]}" | |
| cmake "${OSIM_CMAKE_ARGS[@]}" | |
| VERSION=`cmake -L . | grep OPENSIM_QUALIFIED_VERSION | cut -d "=" -f2` | |
| echo $VERSION | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Build opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| make --jobs 4 | |
| - name: Test opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| # TODO: Temporary for python to find Simbody libraries. | |
| export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/opensim_dependencies_install/simbody/lib | |
| ctest --parallel 4 --output-on-failure | |
| - name: Install opensim-core | |
| run: | | |
| cd $GITHUB_WORKSPACE/../build | |
| make doxygen | |
| make --jobs 4 install | |
| cd $GITHUB_WORKSPACE | |
| mv $GITHUB_WORKSPACE/../opensim-core-install opensim-core-${{ steps.configure.outputs.version }} | |
| zip --symlinks --recurse-paths --quiet opensim-core-${{ steps.configure.outputs.version }}-ubuntu22.zip opensim-core-${{ steps.configure.outputs.version }} | |
| mv opensim-core-${{ steps.configure.outputs.version }} $GITHUB_WORKSPACE/../opensim-core-install | |
| - name: Build wheel | |
| run: | | |
| cd $GITHUB_WORKSPACE/../opensim-core-install/lib/python3.10/site-packages | |
| python3 -m build --wheel | |
| - name: Upload linux wheel | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: opensim-4.5.2-cp310-cp310-linux_x86_64.whl | |
| path: /home/runner/work/opensim-core/opensim-core-install/lib/python3.10/site-packages/dist/opensim-4.5.2-cp310-cp310-linux_x86_64.whl | |
| - name: Test Python bindings | |
| run: | | |
| pip install /home/runner/work/opensim-core/opensim-core-install/lib/python3.10/site-packages/dist/opensim-4.5.2-cp310-cp310-linux_x86_64.whl | |
| # Run the python tests, verbosely | |
| python3 -m unittest discover --start-directory /home/runner/work/opensim-core/opensim-core-install/lib/python3.10/site-packages/opensim/tests --verbose | |
| - name: Upload opensim-core | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| # The upload-artifact zipping does not preserve symlinks or executable | |
| # bits. So we zip ourselves, even though this causes a double-zip. | |
| name: opensim-core-${{ steps.configure.outputs.version }}-ubuntu24-linux | |
| path: opensim-core-${{ steps.configure.outputs.version }}-ubuntu24.zip | |
| build_gui: | |
| name: Build GUI | |
| runs-on: ubuntu-latest | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| if: ${{ contains(github.event.pull_request.title, '[build-gui]') || contains(github.event.pull_request.body, '[build-gui]') }} | |
| steps: | |
| - name: Dispatch opensim-gui workflow and get the run ID | |
| uses: codex-/return-dispatch@v1 | |
| id: return_dispatch | |
| with: | |
| token: ${{ secrets.ACTION_SECRET }} | |
| ref: refs/heads/main | |
| repo: opensim-gui | |
| owner: opensim-org | |
| workflow: build-on-core-pr.yml | |
| - name: Use the output run ID | |
| run: echo ${{steps.return_dispatch.outputs.run_id}} | |
| - name: Await opensim-gui workflow | |
| uses: Codex-/[email protected] | |
| with: | |
| token: ${{ secrets.ACTION_SECRET }} | |
| repo: opensim-gui | |
| owner: opensim-org | |
| run_id: ${{ steps.return_dispatch.outputs.run_id }} | |
| run_timeout_seconds: 10000 | |
| style: | |
| name: Style | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Check for tabs | |
| # Ensure that there are no tabs in source code. | |
| # GREP returns 0 (true) if there are any matches, and | |
| # we don't want any matches. If there are matches, | |
| # print a helpful message, and make the test fail by using "false". | |
| # The GREP command here checks for any tab characters in the the files | |
| # that match the specified pattern. GREP does not pick up explicit tabs | |
| # (e.g., literally a \t in a source file). | |
| run: if grep --line-num --recursive --exclude-dir="*dependencies*" --exclude-dir="*snopt*" --include={CMakeLists.txt,*.cpp,*.c,*.h} -P "\t" . ; then echo "Tabs found in the lines shown above. See CONTRIBUTING.md about tabs."; false; fi |