Build open_iA #124
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: "Build open_iA" | |
| on: | |
| # manual triggering allowed: | |
| workflow_dispatch: | |
| #pull_request: | |
| # branches: [ "main" ] | |
| # required for manual triggering when not in main branch: | |
| push: | |
| branches: | |
| - '**' | |
| schedule: | |
| # trigger automatic build Mon-Sat at 4:39 UTC: | |
| - cron: '39 4 * * 1-6' | |
| env: | |
| BUILD_TYPE: Release | |
| VTK_CMAKE_OPTIONS: -DBUILD_SHARED_LIBS=ON -DVTK_BUILD_EXAMPLES=OFF -DVTK_BUILD_TESTING=OFF -DVTK_LEGACY_REMOVE:BOOL=ON -DVTK_MODULE_ENABLE_VTK_GUISupportQt:STRING=YES -DVTK_MODULE_ENABLE_VTK_GUISupportQtSQL:STRING=NO -DVTK_MODULE_ENABLE_VTK_RenderingQt:STRING=YES -DVTK_MODULE_ENABLE_VTK_ViewsQt:STRING=YES -DVTK_MODULE_ENABLE_VTK_RenderingContextOpenGL2:STRING=YES | |
| # optional: -DVTK_SMP_IMPLEMENTATION_TYPE:STRING=${VTK_SMP_TYPE} | |
| # Qt: -DQt6_DIR:PATH=${Qt6_DIR} -DQt6WidgetsTools_DIR:PATH=${Qt6_DIR}WidgetsTools -DQt6CoreTools_DIR:PATH=${Qt6_DIR}CoreTools -DQt6GuiTools_DIR:PATH=${Qt6_DIR}GuiTools | |
| # Compiler: -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER} | |
| ITK_CMAKE_OPTIONS: -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING:BOOL=OFF -DITK_USE_64BITS_IDS:BOOL=ON -DModule_ITKReview:BOOL=ON -DModule_HigherOrderAccurateGradient:BOOL=ON -DModule_SplitComponents:BOOL=ON -DModule_ITKVtkGlue:BOOL=ON | |
| OPENIA_CMAKE_OPTIONS: -DopeniA_CUDA_ENABLED:BOOL=OFF -DModule_CommonImageFilters:BOOL=ON -DModule_FeatureCharacteristics:BOOL=ON -DModule_MetaFilters:BOOL=ON -DModule_Metrics:BOOL=ON -DModule_Segmentation:BOOL=ON -DModule_Surfaces:BOOL=ON -DModule_4DCT:BOOL=ON -DModule_AdaptiveThreshold:BOOL=ON -DModule_BoneThickness:BOOL=ON -DModule_CompVis:BOOL=ON -DModule_DreamCaster:BOOL=ON -DModule_DynamicVolumeLines:BOOL=ON -DModule_FeatureAnalyzer:BOOL=ON -DModule_FeatureAnalyzerComputation:BOOL=ON -DModule_FeatureScout:BOOL=ON -DModule_FiAKEr:BOOL=ON -DModule_FilterPreview:BOOL=ON -DModule_FuzzyFeatureTracking:BOOL=ON -DModule_GEMSe:BOOL=ON -DModule_InSpectr:BOOL=ON -DModule_Labelling:BOOL=ON -DModule_MultiModalTF:BOOL=ON -DModule_Remote:BOOL=ON -DModule_VolumePlayer:BOOL=ON | |
| OPENIA_BUILD_VERSION: nightly | |
| QT_VERSION: 6.8.3 | |
| VTK_VERSION: 9.4.2 | |
| VTK_SHORTVER: 9.4 | |
| ITK_VERSION: 5.4.3 | |
| ITK_SHORTVER: 5.4 | |
| HDF5_VERSION: 1.14.5 | |
| HDF5_ZLIB_VERSION: 1.3.1 | |
| OPENXR_VERSION: 1.1.48 | |
| OPENVR_VERSION: 2.5.1 | |
| BOOST_VERSION: 1.88.0 | |
| BOOST_VERSION_UNDERSCORE: 1_88_0 | |
| OPENCL_VERSION: 2024.10.24 | |
| # EIGEN: tested, working commit from Jun 18, 2024: | |
| EIGEN_LONGREF: d791d48859c6fc7850c9fd5270d2b236c818068d | |
| EIGEN_SHORTREF: d791d48859c6 | |
| jobs: | |
| build: | |
| name: Build open_iA | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [macos-13, macos-latest, ubuntu-latest, ubuntu-24.04-arm, windows-latest] | |
| steps: | |
| - name: Checkout open_iA | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| fetch-tags: true | |
| fetch-depth: 0 | |
| - if: runner.os == 'macOS' | |
| name: Set up required libraries (macOS) | |
| run: | | |
| brew install node | |
| brew install libomp | |
| - if: matrix.os == 'macos-13' | |
| name: Set up OpenMP (macOS) | |
| run: | | |
| ompversion=$(ls /usr/local/Cellar/libomp | tr -d '/') | |
| ln -s /usr/local/Cellar/libomp/$ompversion/include/omp.h /usr/local/include/omp.h | |
| echo "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DOpenMP_CXX_FLAGS:STRING=\"-Xpreprocessor -fopenmp -lomp\" -DOpenMP_CXX_INCLUDE_DIR:PATH=\"/usr/local/include\" -DOpenMP_libomp_LIBRARY:FILEPATH=\"/usr/local/Cellar/libomp/$ompversion/lib/libomp.dylib\"" >> "$GITHUB_ENV" | |
| # - if: matrix.os == 'macos-latest' | |
| # # export LDFLAGS="-L/opt/homebrew/opt/libomp/lib" | |
| # # export CPPFLAGS="-I/opt/homebrew/opt/libomp/include" | |
| # name: Set up OpenMP (macOS ARM) | |
| # run: | | |
| # echo "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DOpenMP_CXX_FLAGS=\"-Xpreprocessor -fopenmp -lomp\" -DOpenMP_CXX_INCLUDE_DIR=\"/opt/homebrew/opt/libomp/include\" -DOpenMP_libomp_LIBRARY=\"/opt/homebrew/opt/libomp/lib/libomp.dylib\"" >> "$GITHUB_ENV" | |
| - if: ${{ (matrix.os != 'ubuntu-24.04-arm' && matrix.os != 'macos-latest') }} | |
| name: Qt install | |
| # see https://github.com/marketplace/actions/install-qt for details | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: ${{env.QT_VERSION}} | |
| modules: 'qtcharts qthttpserver qtwebsockets' | |
| setup-python: true | |
| cache: true | |
| cache-key-prefix: Qt | |
| - if: matrix.os == 'ubuntu-24.04-arm' | |
| name: Qt install (Ubuntu ARM) | |
| run: | | |
| sudo apt update | |
| sudo apt install libgl1-mesa-dev libxt-dev libxt-dev libxcursor-dev libsdl2-dev | |
| sudo apt install qt6-base-dev qt6-tools-dev qt6-svg-dev | |
| sudo apt install qt6-charts-dev qt6-httpserver-dev qt6-websockets-dev npm | |
| echo "QT_VERSION=$(/usr/bin/dpkg -s qt6-base-dev | /usr/bin/grep 'Version' | /usr/bin/awk '{ split($2, a, "+"); print a[1]; }')" >> "$GITHUB_ENV" | |
| - if: matrix.os == 'macos-latest' | |
| name: install macPorts (macOS ARM) | |
| uses: melusina-org/setup-macports@v1 | |
| - if: matrix.os == 'macos-latest' | |
| name: Qt install / OpenMP (macOS ARM) | |
| run: | | |
| sudo port install qt6 qt6-qtcharts qt6-qthttpserver qt6-qtwebsockets | |
| #port contents qt6-qtcharts | |
| #port contents qt6-qthttpserver | |
| #port contents qt6-qtwebsockets | |
| echo "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DQt6Charts_DIR:PATH=/opt/local/libexec/qt6/lib/cmake/Qt6Charts -DQt6HttpServer_DIR:PATH=/opt/local/libexec/qt6/lib/cmake/Qt6HttpServer -DQt6WebSockets_DIR:PATH=/opt/local/libexec/qt6/lib/cmake/Qt6WebSockets -DOpenMP_CXX_FLAGS:STRING=\"-Xpreprocessor -fopenmp -lomp\" -DOpenMP_CXX_INCLUDE_DIR:PATH=\"/opt/homebrew/opt/libomp/include\" -DOpenMP_libomp_LIBRARY:FILEPATH=\"/opt/homebrew/opt/libomp/lib/libomp.dylib\"" >> "$GITHUB_ENV" | |
| ################################################################## | |
| # VR: OpenXR, OpenVR, boost | |
| - if: runner.os == 'Windows' | |
| name: Check cache OpenXR | |
| uses: actions/cache@v4 | |
| id: cache-openxr | |
| with: | |
| path: openxr-${{ env.OPENXR_VERSION }} | |
| key: ${{ matrix.os }}-openxr-${{ env.OPENXR_VERSION }} | |
| - if: ${{ (runner.os == 'Windows' && steps.cache-openxr.outputs.cache-hit != 'true' ) }} | |
| name: Download and extract OpenXR | |
| run: | | |
| curl -L https://github.com/KhronosGroup/OpenXR-SDK-Source/releases/download/release-${{ env.OPENXR_VERSION }}/openxr_loader_windows-${{ env.OPENXR_VERSION }}.zip --output openxr-${{ env.OPENXR_VERSION }}.zip | |
| 7z x openxr-${{ env.OPENXR_VERSION }}.zip -o"openxr-${{ env.OPENXR_VERSION }}" | |
| rm openxr-${{ env.OPENXR_VERSION }}.zip | |
| cd openxr-${{ env.OPENXR_VERSION }} | |
| rm -r ARM64_uwp | |
| rm -r Win32 | |
| rm -r Win32_uwp | |
| rm -r x64_uwp | |
| - if: runner.os == 'Windows' | |
| name: Set up OpenXR options | |
| run: | | |
| "VTK_CMAKE_OPTIONS=${{env.VTK_CMAKE_OPTIONS}} -DVTK_MODULE_ENABLE_VTK_RenderingOpenXR:BOOL=YES -DOpenXR_DIR:PATH=${{github.workspace}}/openxr-${{ env.OPENXR_VERSION }}/x64/lib/cmake/openxr" >> $env:GITHUB_ENV | |
| "ITK_CMAKE_OPTIONS=${{env.ITK_CMAKE_OPTIONS}} -DOpenXR_DIR:PATH=${{github.workspace}}/openxr-${{ env.OPENXR_VERSION }}/x64/lib/cmake/openxr" >> $env:GITHUB_ENV | |
| "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DOpenXR_DIR:PATH=${{github.workspace}}/openxr-${{ env.OPENXR_VERSION }}/x64/lib/cmake/openxr" >> $env:GITHUB_ENV | |
| # disabling Linux for now, as it turns out that OpenVR causes problems in installation of open_iA, | |
| # see https://discourse.cmake.org/t/file-paths-to-dependencies-are-not-supported-on-cpack-with-runtime-dependency-set/11434/6 | |
| - if: ${{ (runner.os == 'Windows') }} # || runner.os == 'Linux' | |
| name: Check cache OpenVR | |
| uses: actions/cache@v4 | |
| id: cache-openvr | |
| with: | |
| path: openvr-${{ env.OPENVR_VERSION }} | |
| key: ${{ matrix.os }}-openvr-${{ env.OPENVR_VERSION }} | |
| - if: ${{ ((runner.os == 'Windows') && steps.cache-openvr.outputs.cache-hit != 'true' ) }} # || runner.os == 'Linux' | |
| name: Download and extract OpenVR | |
| run: | | |
| curl -L https://github.com/ValveSoftware/openvr/archive/v${{ env.OPENVR_VERSION }}.zip --output openvr-${{ env.OPENVR_VERSION }}.zip | |
| 7z x openvr-${{ env.OPENVR_VERSION }}.zip | |
| rm openvr-${{ env.OPENVR_VERSION }}.zip | |
| cd openvr-${{ env.OPENVR_VERSION }} | |
| rm -r ./bin/androidarm64 | |
| rm -r ./bin/linux32 | |
| rm -r ./bin/linux64 | |
| rm -r ./bin/linuxarm64 | |
| rm -r ./bin/osx32 | |
| rm -r ./bin/win32 | |
| rm -r ./codegen | |
| rm -r ./controller_callouts | |
| rm -r ./docs | |
| rm -r ./samples | |
| rm -r ./src | |
| rm -r ./lib/androidarm64 | |
| rm -r ./lib/linux32 | |
| rm -r ./lib/linux64 | |
| rm -r ./lib/linuxarm64 | |
| rm -r ./lib/osx32 | |
| rm -r ./lib/win32 | |
| - if: ${{ runner.os == 'Windows' }} | |
| name: Set up OpenVR options (Windows) | |
| run: | | |
| "VTK_CMAKE_OPTIONS=${{env.VTK_CMAKE_OPTIONS}} -DVTK_MODULE_ENABLE_VTK_RenderingOpenVR:BOOL=YES -DOpenVR_INCLUDE_DIR:PATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/headers -DOpenVR_LIBRARY:FILEPATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/lib/win64/openvr_api.lib" >> $env:GITHUB_ENV | |
| "ITK_CMAKE_OPTIONS=${{env.ITK_CMAKE_OPTIONS}} -DOpenVR_INCLUDE_DIR:PATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/headers -DOpenVR_LIBRARY:FILEPATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/lib/win64/openvr_api.lib" >> $env:GITHUB_ENV | |
| "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DOpenVR_INCLUDE_DIR:PATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/headers -DOpenVR_LIBRARY:FILEPATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/lib/win64/openvr_api.lib" >> $env:GITHUB_ENV | |
| # - if: ${{ runner.os == 'Linux' }} | |
| # name: Set up OpenVR options (Linux) | |
| # run: | | |
| # echo "VTK_CMAKE_OPTIONS=${{env.VTK_CMAKE_OPTIONS}} -DVTK_MODULE_ENABLE_VTK_RenderingOpenVR:BOOL=YES -DOpenVR_INCLUDE_DIR:PATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/headers -DOpenVR_LIBRARY:FILEPATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/lib/linux64/libopenvr_api.so" >> "$GITHUB_ENV" | |
| # echo "ITK_CMAKE_OPTIONS=${{env.ITK_CMAKE_OPTIONS}} -DOpenVR_INCLUDE_DIR:PATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/headers -DOpenVR_LIBRARY:FILEPATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/lib/linux64/libopenvr_api.so" >> "$GITHUB_ENV" | |
| # echo "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DOpenVR_INCLUDE_DIR:PATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/headers -DOpenVR_LIBRARY:FILEPATH=${{github.workspace}}/openvr-${{ env.OPENVR_VERSION }}/lib/linux64/libopenvr_api.so" >> "$GITHUB_ENV" | |
| # set up boost, required for VR: | |
| - if: ${{ (runner.os == 'Windows') }} # || runner.os == 'Linux' | |
| name: Check cache Boost | |
| uses: actions/cache@v4 | |
| id: cache-boost | |
| with: | |
| path: boost_${{ env.BOOST_VERSION_UNDERSCORE }} | |
| key: ${{ matrix.os }}-boost-${{ env.BOOST_VERSION }} | |
| - if: ${{ ((runner.os == 'Windows') && steps.cache-boost.outputs.cache-hit != 'true' ) }} # || runner.os == 'Linux' | |
| name: Download and build Boost | |
| run: | | |
| curl -L https://archives.boost.io/release/${{env.BOOST_VERSION}}/source/boost_${{env.BOOST_VERSION_UNDERSCORE}}.zip --output boost-${{ env.BOOST_VERSION }}.zip | |
| 7z x boost-${{ env.BOOST_VERSION }}.zip | |
| rm boost-${{ env.BOOST_VERSION }}.zip | |
| cd ${{github.workspace}}/boost_${{env.BOOST_VERSION_UNDERSCORE}} | |
| & .\bootstrap.bat | |
| .\b2 -j8 address-model=64 link=static threading=multi runtime-link=shared --with-system stage | |
| rm -r doc | |
| rm -r libs | |
| rm -r bin.v2 | |
| rm -r tools | |
| rm -r more | |
| rm -r boost/phoenix | |
| rm -r boost/geometry | |
| rm -r boost/hana | |
| rm -r boost/graph | |
| rm -r boost/beast | |
| rm -r boost/qvm | |
| rm -r boost/log | |
| rm -r boost/mysql | |
| rm -r boost/compute | |
| rm -r boost/gil | |
| rm -r boost/polygon | |
| rm -r boost/json | |
| rm -r boost/wave | |
| rm -r boost/pfr | |
| rm -r boost/parser | |
| rm -r boost/process | |
| rm -r boost/msm | |
| rm -r boost/vmd | |
| rm -r boost/url | |
| rm -r boost/random | |
| rm -r boost/python | |
| # we need to build boost in order to get the CMake config it seems... | |
| #- if: runner.os == 'Linux' | |
| # name: Install OpenXR and OpenVR | |
| # run: | | |
| # sudo apt update && apt install libopenxr-dev libopenvr-dev libboost-dev | |
| # boost could be problematic - no findpackage(boost) in open_iA (yet) | |
| # enable open_iA VR modules, set boost path | |
| - if: runner.os == 'Windows' | |
| name: Set up VR modules (Windows) | |
| run: | | |
| "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DModule_ImNDT:BOOL=YES -DModule_VRAnnotation:BOOL=YES -DModule_XVRA:BOOL=YES -DBoost_DIR:PATH=${{github.workspace}}/boost_${{env.BOOST_VERSION_UNDERSCORE}}/stage/lib/cmake/Boost-${{env.BOOST_VERSION}}" >> $env:GITHUB_ENV | |
| # - if: runner.os == 'Linux' | |
| # name: Set up VR modules (Linux) | |
| # run: | | |
| # echo "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DModule_ImNDT:BOOL=YES -DModule_VRAnnotation:BOOL=YES -DModule_XVRA:BOOL=YES -DBOOST_INCLUDE_DIR=${{github.workspace}}/boost_${{env.BOOST_VERSION_UNDERSCORE}}" >> "$GITHUB_ENV" | |
| ################################################################## | |
| # VTK | |
| - name: Check cache for VTK build | |
| id: cache-vtk | |
| uses: actions/cache@v4 | |
| with: | |
| path: vtk-${{ env.VTK_VERSION }} | |
| key: ${{ matrix.os }}-qt${{env.QT_VERSION}}-vtk-${{ env.VTK_VERSION }} | |
| - if: ${{ ( runner.os == 'Linux' && steps.cache-vtk.outputs.cache-hit != 'true' ) }} | |
| name: VTK install prerequisites (Linux) | |
| run: | | |
| sudo apt update && sudo apt install libopengl-dev libglx-dev libglw-dev | |
| - if: steps.cache-vtk.outputs.cache-hit != 'true' | |
| name: VTK download, extract, configure, build, install | |
| run: | | |
| mkdir vtk | |
| curl -L https://vtk.org/files/release/${{ env.VTK_SHORTVER }}/VTK-${{ env.VTK_VERSION }}.tar.gz --output vtk/src-${{ env.VTK_VERSION }}.tar.gz | |
| cd vtk | |
| tar -xzf src-${{ env.VTK_VERSION }}.tar.gz | |
| mkdir bin-${{ env.VTK_VERSION }} | |
| cd bin-${{ env.VTK_VERSION }} | |
| cmake -DCMAKE_BUILD_TYPE:STRING=${{env.BUILD_TYPE}} ${{env.VTK_CMAKE_OPTIONS}} -DCMAKE_INSTALL_PREFIX:PATH=${{github.workspace}}/vtk-${{ env.VTK_VERSION }} ../VTK-${{ env.VTK_VERSION }} | |
| cmake --build . --config ${{env.BUILD_TYPE}} -j 4 | |
| cmake --install . --config ${{env.BUILD_TYPE}} | |
| cd ../.. | |
| rm -r vtk | |
| ################################################################## | |
| # OpenCL | |
| # Download and build ICD loader, C headers and CPP headers, and cache the install folder: | |
| - if: runner.os != 'macOS' | |
| name: Check cache for OpenCL | |
| id: cache-opencl | |
| uses: actions/cache@v4 | |
| with: | |
| path: opencl-${{ env.OPENCL_VERSION }} | |
| key: ${{ matrix.os }}-opencl-${{ env.OPENCL_VERSION }} | |
| - if: ${{ (runner.os != 'macOS' && steps.cache-opencl.outputs.cache-hit != 'true') }} | |
| name: Install OpenCL | |
| run: | | |
| mkdir opencl | |
| curl -L https://github.com/KhronosGroup/OpenCL-Headers/archive/refs/tags/v${{ env.OPENCL_VERSION }}.tar.gz --output opencl/headers-${{ env.OPENCL_VERSION }}.tar.gz | |
| curl -L https://github.com/KhronosGroup/OpenCL-CLHPP/archive/refs/tags/v${{ env.OPENCL_VERSION }}.tar.gz --output opencl/clhpp-${{ env.OPENCL_VERSION }}.tar.gz | |
| curl -L https://github.com/KhronosGroup/OpenCL-ICD-Loader/archive/refs/tags/v${{ env.OPENCL_VERSION }}.tar.gz --output opencl/icdloader-${{ env.OPENCL_VERSION }}.tar.gz | |
| cd opencl | |
| tar -xzf headers-${{ env.OPENCL_VERSION }}.tar.gz | |
| tar -xzf clhpp-${{ env.OPENCL_VERSION }}.tar.gz | |
| tar -xzf icdloader-${{ env.OPENCL_VERSION }}.tar.gz | |
| mkdir bin-headers | |
| cd bin-headers | |
| cmake -DCMAKE_BUILD_TYPE:STRING=${{env.BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }} -DBUILD_TESTING:BOOL=OFF ../OpenCL-Headers-${{ env.OPENCL_VERSION }} | |
| cmake --build . --config ${{env.BUILD_TYPE}} -j 4 | |
| cmake --install . --config ${{env.BUILD_TYPE}} | |
| cd .. | |
| mkdir bin-clhpp | |
| cd bin-clhpp | |
| cmake -DCMAKE_BUILD_TYPE:STRING=${{env.BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }} -DOpenCLHeaders_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLHeaders -DBUILD_DOCS:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF -DBUILD_TESTING:BOOL=OFF ../OpenCL-CLHPP-${{ env.OPENCL_VERSION }} | |
| cmake --build . --config ${{env.BUILD_TYPE}} -j 4 | |
| cmake --install . --config ${{env.BUILD_TYPE}} | |
| cd .. | |
| mkdir bin-icdloader | |
| cd bin-icdloader | |
| cmake -DCMAKE_BUILD_TYPE:STRING=${{env.BUILD_TYPE}} -DCMAKE_INSTALL_PREFIX:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }} -DOpenCLHeaders_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLHeaders -DENABLE_OPENCL_LAYERINFO:BOOL=OFF -DOPENCL_ICD_LOADER_BUILD_SHARED_LIBS:BOOL=ON -DBUILD_TESTING:BOOL=OFF ../OpenCL-ICD-Loader-${{ env.OPENCL_VERSION }} | |
| cmake --build . --config ${{env.BUILD_TYPE}} -j 4 | |
| cmake --install . --config ${{env.BUILD_TYPE}} | |
| cd ../.. | |
| rm -r opencl | |
| - if: runner.os == 'Linux' | |
| name: Set up OpenCL library path for ITK (Linux) | |
| run: | | |
| echo "ITK_CMAKE_OPTIONS=${{env.ITK_CMAKE_OPTIONS}} -DITK_USE_GPU:BOOL=ON -DOpenCL_LIBRARY:FILEPATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/lib/libOpenCL.so -DOpenCL_INCLUDE_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/include" >> "$GITHUB_ENV" | |
| echo "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DOpenCLHeaders_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLHeaders -DOpenCLHeadersCpp_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLHeadersCpp -DOpenCLICDLoader_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLICDLoader" >> "$GITHUB_ENV" | |
| - if: runner.os == 'Windows' | |
| name: Set up OpenCL library path for ITK (Windows) | |
| run: | | |
| "ITK_CMAKE_OPTIONS=${{env.ITK_CMAKE_OPTIONS}} -DITK_USE_GPU:BOOL=ON -DOpenCL_LIBRARY:FILEPATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/lib/OpenCL.lib -DOpenCL_INCLUDE_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/include" >> $env:GITHUB_ENV | |
| "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DOpenCLHeaders_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLHeaders -DOpenCLHeadersCpp_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLHeadersCpp -DOpenCLICDLoader_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLICDLoader" >> $env:GITHUB_ENV | |
| #- if: runner.os == 'macOS' | |
| # name: Set up OpenCL library path for ITK (macOS) | |
| # run: | | |
| # echo "ITK_CMAKE_OPTIONS=${{env.ITK_CMAKE_OPTIONS}} -DITK_USE_GPU:BOOL=ON -DOpenCL_LIBRARY:FILEPATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/lib/libOpenCL.dylib -DOpenCL_INCLUDE_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/include" >> "$GITHUB_ENV" | |
| # echo "OPENIA_CMAKE_OPTIONS=${{env.OPENIA_CMAKE_OPTIONS}} -DOpenCLHeaders_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLHeaders -DOpenCLHeadersCpp_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLHeadersCpp -DOpenCLICDLoader_DIR:PATH=${{github.workspace}}/opencl-${{ env.OPENCL_VERSION }}/share/cmake/OpenCLICDLoader" >> "$GITHUB_ENV" | |
| ################################################################## | |
| # ITK | |
| - name: Check cache for ITK build | |
| id: cache-itk | |
| uses: actions/cache@v4 | |
| with: | |
| path: itk-${{ env.ITK_VERSION }} | |
| key: ${{ matrix.os }}-qt${{env.QT_VERSION}}-itk-${{ env.ITK_VERSION }} | |
| - if: steps.cache-itk.outputs.cache-hit != 'true' | |
| name: ITK download, extract, configure, build, install | |
| run: | | |
| curl -L https://github.com/InsightSoftwareConsortium/ITK/archive/refs/tags/v${{ env.ITK_VERSION }}.tar.gz --output itk-src-${{ env.ITK_VERSION }}.tar.gz | |
| tar -xzf itk-src-${{ env.ITK_VERSION }}.tar.gz | |
| mv ITK-${{ env.ITK_VERSION }} itk-src-${{ env.ITK_VERSION }} | |
| mkdir -p itk-bin-${{ env.ITK_VERSION }} | |
| cd itk-bin-${{ env.ITK_VERSION }} | |
| cmake -DCMAKE_BUILD_TYPE:STRING=${{env.BUILD_TYPE}} ${{env.ITK_CMAKE_OPTIONS}} -DVTK_DIR:PATH=${{github.workspace}}/vtk-${{ env.VTK_VERSION }}/lib/cmake/vtk-${{ env.VTK_SHORTVER }} -DCMAKE_INSTALL_PREFIX:PATH=${{github.workspace}}/itk-${{ env.ITK_VERSION }} ../itk-src-${{ env.ITK_VERSION }} | |
| cmake --build . --config ${{env.BUILD_TYPE}} -j 4 | |
| cmake --install . --config ${{env.BUILD_TYPE}} | |
| cd .. | |
| # fails on windows for some reason with message "You do not have sufficient access rights to perform this operation or the item is hidden, system, or read only." | |
| # rm -r itk-src-${{ env.ITK_VERSION }} | |
| # rm -r itk-bin-${{ env.ITK_VERSION }} | |
| - if: runner.os != 'Windows' | |
| name: Set ITK_DIR (non-Windows) | |
| run: | | |
| echo "ITK_DIR=${{github.workspace}}/itk-${{ env.ITK_VERSION }}/lib/cmake/ITK-${{ env.ITK_SHORTVER }}" >> "$GITHUB_ENV" | |
| - if: runner.os == 'Windows' | |
| name: Set ITK_DIR (Windows) | |
| run: | | |
| "ITK_DIR=${{github.workspace}}/itk-${{ env.ITK_VERSION }}/lib/cmake/ITK-${{ env.ITK_SHORTVER }}" >> $env:GITHUB_ENV | |
| ################################################################## | |
| # eigen | |
| - name: Check cache for eigen | |
| id: cache-eigen | |
| uses: actions/cache@v4 | |
| with: | |
| path: eigen-${{env.EIGEN_SHORTREF}} | |
| key: ${{ matrix.os }}-eigen-${{env.EIGEN_SHORTREF}} | |
| - if: steps.cache-eigen.outputs.cache-hit != 'true' | |
| name: Clone eigen repository | |
| # "workaround" for only checking out a specific commit, from https://stackoverflow.com/a/78674407: | |
| run: | | |
| mkdir eigen-${{env.EIGEN_SHORTREF}} | |
| cd eigen-${{env.EIGEN_SHORTREF}} | |
| git init | |
| git remote add origin https://gitlab.com/libeigen/eigen.git | |
| git fetch origin --depth 1 ${{env.EIGEN_LONGREF}} | |
| git checkout FETCH_HEAD | |
| ################################################################## | |
| # HDF5 | |
| - name: Check cache for hdf5 | |
| id: cache-hdf5 | |
| uses: actions/cache@v4 | |
| with: | |
| path: hdf5-${{env.HDF5_VERSION}} | |
| key: ${{ matrix.os }}-hdf5-${{env.HDF5_VERSION}} | |
| - if: steps.cache-hdf5.outputs.cache-hit != 'true' | |
| name: Build hdf5 | |
| run: | | |
| mkdir hdf5 | |
| cd hdf5 | |
| curl -L https://github.com/HDFGroup/hdf5/archive/refs/tags/hdf5_${{env.HDF5_VERSION}}.tar.gz --output src-${{ env.HDF5_VERSION }}.tar.gz | |
| tar xf src-${{ env.HDF5_VERSION }}.tar.gz | |
| curl -L https://github.com/madler/zlib/releases/download/v${{env.HDF5_ZLIB_VERSION}}/zlib-${{env.HDF5_ZLIB_VERSION}}.tar.gz --output zlib-${{env.HDF5_ZLIB_VERSION}}.tar.gz | |
| mkdir bin | |
| cd bin | |
| cmake -C ../hdf5-hdf5_${{env.HDF5_VERSION}}/config/cmake/cacheinit.cmake --log-level=VERBOSE -DCMAKE_BUILD_TYPE:STRING=${{env.BUILD_TYPE}} -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING=TGZ -DBUILD_SHARED_LIBS:BOOL=OFF -DHDF5_BUILD_TOOLS:BOOL=OFF -DHDF5_BUILD_UTILS:BOOL=OFF -DBUILD_TESTING:BOOL=OFF -DHDF5_BUILD_EXAMPLES:BOOL=OFF -DHDF5_BUILD_JAVA:BOOL=OFF -DHDF5_BUILD_FORTRAN:BOOL=OFF -DHDF5_BUILD_CPP_LIB:BOOL=OFF -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=ON -DZLIB_TGZ_NAME:STRING=zlib-${{env.HDF5_ZLIB_VERSION}}.tar.gz -DZLIB_USE_LOCALCONTENT:BOOL=ON -DZLIB_USE_EXTERNAL:BOOL=ON -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=OFF -DHDF5_PACKAGE_EXTLIBS:BOOL=ON -DTGZPATH:PATH=${{github.workspace}}/hdf5 -DCMAKE_INSTALL_PREFIX:PATH=${{github.workspace}}/hdf5-${{env.HDF5_VERSION}} ../hdf5-hdf5_${{env.HDF5_VERSION}} | |
| cmake --build . --config ${{env.BUILD_TYPE}} -j 4 | |
| cmake --install . --config ${{env.BUILD_TYPE}} | |
| ################################################################## | |
| # Node/npm (required for Remote module) | |
| - name: Install npm | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 18 | |
| ################################################################## | |
| # open_iA | |
| # dependencies stated in superbuild: libgl1-mesa-dev libxt-dev libxt-dev libxcursor-dev libsdl2-dev | |
| # VR: libboost-dev libopenvr-dev libopenxr-dev | |
| # OpenCL: ocl-icd-opencl-dev opencl-headers opencl-clhpp-headers | |
| # clang: clang libomp-dev | |
| # if: runner.os == 'Linux' only runs on ubuntu currently anyway | |
| - name: open_iA build | |
| run: | | |
| mkdir bin | |
| cd bin | |
| cmake -B . -DCMAKE_BUILD_TYPE:STRING=${{env.BUILD_TYPE}} ${{env.OPENIA_CMAKE_OPTIONS}} -DITK_DIR:PATH=${{env.ITK_DIR}} -DEIGEN3_INCLUDE_DIR:PATH=${{github.workspace}}/eigen-${{env.EIGEN_SHORTREF}} -DHDF5_DIR:PATH=${{github.workspace}}/hdf5-${{env.HDF5_VERSION}}/cmake .. | |
| cmake --build . --config ${{env.BUILD_TYPE}} -j 4 | |
| cmake --install . --config ${{env.BUILD_TYPE}} --prefix ${{github.workspace}}/install | |
| - name: Create zip archive | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: open_iA-${{matrix.os}}-${{env.OPENIA_BUILD_VERSION}}.zip | |
| path: ${{github.workspace}}/install | |
| if-no-files-found: error | |
| overwrite: true |