Skip to content

gha: build - Remove ubuntu on ARM (strange moc error in VTK build) #64

gha: build - Remove ubuntu on ARM (strange moc error in VTK build)

gha: build - Remove ubuntu on ARM (strange moc error in VTK build) #64

Workflow file for this run

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.8.2
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, windows-latest]
steps:
- name: Checkout open_iA
uses: actions/checkout@v4
with:
submodules: true
fetch-tags: true
fetch-depth: 500
# 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'
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'
# ln -s /usr/local/Cellar/libomp/$ompversion/include/omp.h /usr/local/include/omp.h
# export LDFLAGS="-L/opt/homebrew/opt/libomp/lib"
# export CPPFLAGS="-I/opt/homebrew/opt/libomp/include"
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"
- 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
##################################################################
# 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
- 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
- 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 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
#- 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_INCLUDE_DIR=${{github.workspace}}/boost_${{env.BOOST_VERSION_UNDERSCORE}}" >> $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