gha: build - fix arm conditions #79
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_FoamCharacterization:BOOL=ON -DModule_FuzzyFeatureTracking:BOOL=ON -DModule_GEMSe:BOOL=ON -DModule_InSpectr:BOOL=ON -DModule_Labelling:BOOL=ON -DModule_NModalTF:BOOL=ON -DModule_Remote:BOOL=ON -DModule_TripleHistogramTF:BOOL=ON -DModule_Uncertainty:BOOL=ON -DModule_VolumePlayer:BOOL=ON | |
| OPENIA_BUILD_VERSION: nightly | |
| QT_VERSION: 6.7.3 | |
| VTK_VERSION: 9.4.1 | |
| VTK_SHORTVER: 9.4 | |
| ITK_VERSION: 5.4.2 | |
| ITK_SHORTVER: 5.4 | |
| HDF5_VERSION: 1.14.5 | |
| HDF5_ZLIB_VERSION: 1.3.1 | |
| OPENXR_VERSION: 1.1.45 | |
| OPENVR_VERSION: 2.5.1 | |
| BOOST_VERSION: 1.87.0 | |
| BOOST_VERSION_UNDERSCORE: 1_87_0 | |
| OPENCL_VERSION: 2024.10.24 | |
| UBUNTU2004_GCC_VERSION: 10 | |
| # 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, ubuntu-latest, ubuntu-20.04, ubuntu-24.04-arm, windows-latest] | |
| steps: | |
| - name: Checkout open_iA | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| fetch-tags: true | |
| fetch-depth: 0 | |
| # On Ubuntu 20.04 | |
| # - we cannot use the standard g++9 because it's not fully C++20 compatible yet (e.g. <numbers> header is not available on g++-9) | |
| # - install g++ 11 | |
| # - update open_iA cmake config to use it | |
| # - explored option 1: | |
| # echo "OPENIA_CMAKE_OPTIONS=-DCMAKE_C_COMPILER=/usr/bin/gcc-11 -DCMAKE_CXX_COMPILER=/usr/bin/g++-11 ${{env.OPENIA_CMAKE_OPTIONS}}" >> "$GITHUB_ENV" | |
| # -> linker problem (https://github.com/3dct/open_iA/actions/runs/13563745786/job/37912093841 : | |
| # /usr/bin/ld: ../bin/libiAio.so: undefined reference to `__isoc23_sscanf' | |
| # /usr/bin/ld: ../bin/libiAio.so: undefined reference to `__isoc23_strtol' | |
| # - maybe not all necessary commands where used -> just set g++ 11 as default! | |
| # - set up alternatives for gcc and depending commands: https://stackoverflow.com/a/67453352 | |
| # - scripted (non-interactive) setting of alternative: https://stackoverflow.com/a/70487421 | |
| # - Also, aqt cannot install Qt > 6.8.0 there | |
| # - only aqt >= 3.1.19 can do that, but it's only available in version 3.1.18 | |
| # - see https://github.com/miurahr/aqtinstall/issues/825 | |
| - if: matrix.os == 'ubuntu-20.04' | |
| name: Set Qt version (Ubuntu 20.04) | |
| run: | | |
| sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test | |
| sudo apt update | |
| sudo apt upgrade -y | |
| sudo apt install -y g++-${{env.UBUNTU2004_GCC_VERSION}} | |
| sudo update-alternatives --remove-all cpp | |
| sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9 --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-9 --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-9 --slave /usr/bin/cpp cpp /usr/bin/cpp-9 | |
| sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{env.UBUNTU2004_GCC_VERSION}} ${{env.UBUNTU2004_GCC_VERSION}}0 --slave /usr/bin/g++ g++ /usr/bin/g++-${{env.UBUNTU2004_GCC_VERSION}} --slave /usr/bin/gcov gcov /usr/bin/gcov-${{env.UBUNTU2004_GCC_VERSION}} --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-${{env.UBUNTU2004_GCC_VERSION}} --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-${{env.UBUNTU2004_GCC_VERSION}} --slave /usr/bin/cpp cpp /usr/bin/cpp-${{env.UBUNTU2004_GCC_VERSION}} | |
| sudo update-alternatives --set gcc /usr/bin/gcc-${{env.UBUNTU2004_GCC_VERSION}} | |
| echo "QT_VERSION=6.7.3" >> "$GITHUB_ENV" | |
| - 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=\"-Xpreprocessor -fopenmp -lomp\" -DOpenMP_CXX_INCLUDE_DIR=\"/usr/local/include\" -DOpenMP_libomp_LIBRARY=\"/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' | |
| 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: false | |
| 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 qt6-base-dev qt6-tools-dev qt6-svg-dev | |
| 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" | |
| ################################################################## | |
| # 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=${{env.BUILD_TYPE}} ${{env.VTK_CMAKE_OPTIONS}} -DCMAKE_INSTALL_PREFIX=${{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=${{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=${{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=${{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=${{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=${{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=${{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=${{env.BUILD_TYPE}} ${{env.OPENIA_CMAKE_OPTIONS}} -DITK_DIR=${{env.ITK_DIR}} -DEIGEN3_INCLUDE_DIR=${{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 |