diff --git a/.travis.yml b/.travis.yml index c9b4919f..acf2766e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -65,12 +65,12 @@ matrix: # +boost +itk -hdf5 +swig env: EXTRA_BUILD_FLAGS="-DUSE_SYSTEM_Boost=ON -DUSE_ITK=ON -DUSE_SYSTEM_HDF5=OFF -DUSE_SYSTEM_SWIG=ON" MATRIX_EVAL="CC=gcc CXX=g++" PYMVER=2 # docker - #- os: linux - # # +armadillo +boost +fftw3 +hdf5 +siemens_to_ismrmrd +swig - # env: DOCKER_BUILD=1 - #- os: linux - # # +DEVEL +armadillo +boost +fftw3 +hdf5 +siemens_to_ismrmrd +swig - # env: DOCKER_BUILD=DEVEL + - os: linux + # +ace +armadillo +boost +fftw3 +hdf5 +itk +siemens_to_ismrmrd +swig + env: DOCKER_BUILD=1 + - os: linux + # +DEVEL +ace +armadillo +boost +fftw3 +hdf5 +itk +siemens_to_ismrmrd +swig + env: DOCKER_BUILD=DEVEL env: global: @@ -184,7 +184,7 @@ before_install: brew install curl #brew install cmake # already present # alternative: get our own - #curl -L -O https://cmake.org/files/v3.8/cmake-3.8.0-Darwin-x86_64.tar.gz + #curl -L -O https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4-Darwin-x86_64.tar.gz #tar xzf cmake-*.tar.gz #mv cmake-*/CMake.app/Contents/* cmake #export PATH="$PWD/cmake/bin:$PATH" @@ -192,10 +192,9 @@ before_install: elif [[ "$TRAVIS_OS_NAME" == "linux" ]]; then PY_EXE=python$PYMVER if [[ -z "$DOCKER_BUILD" ]]; then - curl -L -O https://github.com/Kitware/CMake/releases/download/v3.13.1/cmake-3.13.1-Linux-x86_64.tar.gz - ls -l cmake-* - tar xzf cmake-*.tar.gz - mv cmake-*x86_64 cmake + curl -o cmake.tgz -L https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4-Linux-x86_64.tar.gz + tar xzf cmake.tgz && rm cmake.tgz + ln -s cmake-*x86_64 cmake export PATH="$PWD/cmake/bin:$PATH" fi fi @@ -231,7 +230,7 @@ before_install: # N.B.: don't put into build matrix to allow caching. - BUILD_FLAGS="$BUILD_FLAGS -DPYVER=$PYMVER" - cmake --version - + install: - | if [[ -n "$DOCKER_BUILD" ]]; then @@ -268,7 +267,7 @@ install: $PY_EXE -m pip install --user --only-binary=numpy,scipy,matplotlib numpy scipy matplotlib cmake $BUILD_FLAGS $EXTRA_BUILD_FLAGS . # Job may timeout (>50min) if no ccache, otherwise should be <1min: - make + make mv INSTALL/share/gadgetron/config/gadgetron.xml.example INSTALL/share/gadgetron/config/gadgetron.xml ) || travis_terminate 1 source $PWD/INSTALL/bin/env_ccppetmr.sh diff --git a/docker/Dockerfile b/docker/Dockerfile index 634d64a2..47679f55 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:16.04 as base +FROM ubuntu:18.04 as base LABEL \ author.name="Casper da Costa-Luis" \ author.email=imaging@caspersci.uk.to \ @@ -76,9 +76,11 @@ COPY user_sirf-ubuntu.sh . COPY devel/.ccache/ /opt/ccache/ RUN ccache -o cache_dir=/opt/ccache ARG BUILD_FLAGS="\ - -DCMAKE_BUILD_TYPE=Release -DBUILD_STIR_WITH_OPENMP=ON \ - -DUSE_SYSTEM_Armadillo=ON -DUSE_SYSTEM_Boost=ON -DUSE_SYSTEM_FFTW3=ON \ - -DUSE_SYSTEM_HDF5=ON -DBUILD_siemens_to_ismrmrd=ON -DUSE_SYSTEM_SWIG=ON" + -DCMAKE_BUILD_TYPE=Release\ + -DBUILD_STIR_WITH_OPENMP=ON -DUSE_SYSTEM_ACE=ON\ + -DUSE_SYSTEM_Armadillo=ON -DUSE_SYSTEM_Boost=ON -DUSE_SYSTEM_FFTW3=ON\ + -DUSE_SYSTEM_HDF5=ON -DUSE_ITK=ON -DBUILD_siemens_to_ismrmrd=ON\ + -DUSE_SYSTEM_SWIG=ON" ARG EXTRA_BUILD_FLAGS="" RUN bash user_sirf-ubuntu.sh RUN rm user_sirf-ubuntu.sh diff --git a/docker/build_essential-ubuntu.sh b/docker/build_essential-ubuntu.sh index 6dd4dc41..49724544 100755 --- a/docker/build_essential-ubuntu.sh +++ b/docker/build_essential-ubuntu.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash set -ev +INSTALL_DIR="${1:-/opt}" # Essential apt-get update -qq apt-get install -yq curl @@ -14,9 +15,25 @@ apt-get install -yq --no-install-recommends \ sudo apt-get clean +pushd $INSTALL_DIR + # CMake -mkdir /opt/cmake -curl https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.sh > cmake.sh -echo y | bash cmake.sh --prefix=/opt/cmake --exclude-subdir -export PATH="/opt/cmake/bin:$PATH" -rm cmake.sh +curl -o cmake.tgz -L https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4-Linux-x86_64.tar.gz +tar xzf cmake.tgz && rm cmake.tgz +ln -s cmake-*x86_64 cmake +export PATH="$PWD/cmake/bin:$PATH" + +# ccache +mkdir -p bin +pushd bin +# ccache compiler override +ln -s "$(which ccache)" g++ +ln -s "$(which ccache)" g++-6 +ln -s "$(which ccache)" g++-7 +ln -s "$(which ccache)" gcc +ln -s "$(which ccache)" gcc-6 +ln -s "$(which ccache)" gcc-7 +export PATH="$PWD:$PATH" +popd + +popd diff --git a/docker/build_gadgetron-ubuntu.sh b/docker/build_gadgetron-ubuntu.sh index ac9de0a1..a57281d5 100755 --- a/docker/build_gadgetron-ubuntu.sh +++ b/docker/build_gadgetron-ubuntu.sh @@ -1,16 +1,23 @@ #!/usr/bin/env bash set -ev # Gadgetron +# from https://github.com/gadgetron/gadgetron/blob/master/docker/base/ubuntu_1804/Dockerfile#L8 apt-get update -qq apt-get install -yq --no-install-recommends \ - h5utils \ - liblapack-dev \ - libace-dev -# Not required (yet) by SIRF -# libxml2-dev -# libxslt-dev -# python-h5py -# python-libxml2 -# python-psutil -# libplplot-dev + libhdf5-serial-dev \ + libboost-all-dev \ + libfftw3-dev \ + h5utils \ + jq \ + hdf5-tools \ + libatlas-base-dev \ + libxml2-dev \ + libfreetype6-dev \ + libxslt-dev \ + libarmadillo-dev \ + libace-dev \ + liblapack-dev \ + liblapacke-dev \ + libplplot-dev \ + libdcmtk-dev apt-get clean diff --git a/docker/build_system-ubuntu.sh b/docker/build_system-ubuntu.sh index c2c47f53..00baf3ba 100755 --- a/docker/build_system-ubuntu.sh +++ b/docker/build_system-ubuntu.sh @@ -3,15 +3,13 @@ set -ev # SIRF external dependencies apt-get update -qq apt-get install -yq --no-install-recommends \ - hdf5-tools \ - hdfview \ - libarmadillo-dev \ libboost-all-dev \ libfftw3-dev \ - libgtest-dev \ libhdf5-serial-dev \ - libplplot-dev \ - libxml2-dev \ - libxslt-dev \ swig + +# siemens_to_ismrmrd external dependencies +apt-get install -yq --no-install-recommends \ + libxml2-dev \ + libxslt-dev apt-get clean diff --git a/docker/devel/test.sh b/docker/devel/test.sh index 9b081e7e..33c783da 100755 --- a/docker/devel/test.sh +++ b/docker/devel/test.sh @@ -17,16 +17,17 @@ pushd $SIRF_PATH/../.. # start gadgetron GCONFIG=./INSTALL/share/gadgetron/config/gadgetron.xml [ -f "$GCONFIG" ] || cp "$GCONFIG".example "$GCONFIG" -./INSTALL/bin/gadgetron >& gadgetron.log& +[ -f ./INSTALL/bin/gadgetron ] && ./INSTALL/bin/gadgetron >& gadgetron.log& -# print for debugging -[ "$DEBUG" != 0 ] && cat builds/SIRF/build/CMakeCache.txt ctest -VV ret=$? +[ -n "$(pidof gadgetron)" ] && kill -n 15 $(pidof gadgetron) + # print for debugging +[ "$DEBUG" != 0 ] && cat builds/SIRF/build/CMakeCache.txt [ "$DEBUG" != 0 ] && cat builds/SIRF/build/Testing/Temporary/LastTest.log # may exceed 4MB travis log limit -[ "$DEBUG" != 0 ] && cat gadgetron.log +[ "$DEBUG" != 0 ] && [ -f gadgetron.log ] && cat gadgetron.log popd diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index a8d689d1..131229c9 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -18,9 +18,12 @@ services: - ccppetmr/sirf:latest stdin_open: true tty: true - cap_add: - - NET_ADMIN - network_mode: "bridge" + # cap_add: + # - NET_ADMIN + #TODO: uncomment for external gadgetron + # network_mode: "host" # host only works on linux: https://docs.docker.com/network/host/ + # depends_on: + # - gadgetron volumes: - ./devel:/devel core: @@ -29,5 +32,20 @@ services: context: . target: core cache_from: - - ubuntu:16.04 + - ubuntu:18.04 - ccppetmr/sirf:core + gadgetron: + container_name: gadgetron + image: gadgetron/ubuntu_1804_no_cuda:latest + restart: unless-stopped + environment: + GADGETRON_RELAY_HOST: 0.0.0.0 + ports: + - "9002:9002" # gadgetron + - "9080:9080" # ReST API + - "8002:8002" # CloudBus relay + - "9888:8888" # ? https://github.com/gadgetron/gadgetron/wiki/How-to-set-up-Gadgetron-cloud-in-the-LAN-environment + - "18002:18002" # ReST API + - "9001:9001" # supervisord web interface + volumes: + - ./devel/gadgetron_data:/tmp/gadgetron_data diff --git a/docker/user_python-ubuntu.sh b/docker/user_python-ubuntu.sh index 2dc0a7d5..88bcfabd 100755 --- a/docker/user_python-ubuntu.sh +++ b/docker/user_python-ubuntu.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -set -ev [ -f .bashrc ] && . .bashrc +set -ev INSTALL_DIR="${1:-/opt/pyvenv}" PYTHON="${2:-miniconda}" @@ -13,8 +13,8 @@ miniconda) rm miniconda.sh source "$INSTALL_DIR"/bin/activate conda config --add channels conda-forge - conda update -c conda-forge -y conda - conda update -c conda-forge -y --all + # https://github.com/conda/conda/issues/6030 + #conda update -c conda-forge -y conda ;; *python*) # virtualenv diff --git a/docker/user_sirf-ubuntu.sh b/docker/user_sirf-ubuntu.sh index 0bd65097..8f7957f5 100755 --- a/docker/user_sirf-ubuntu.sh +++ b/docker/user_sirf-ubuntu.sh @@ -1,13 +1,18 @@ #!/usr/bin/env bash -set -ev [ -f .bashrc ] && . .bashrc +set -ev +INSTALL_DIR="${1:-/opt}" # SIRF -git clone https://github.com/CCPPETMR/SIRF-SuperBuild --recursive -b master /opt/SIRF-SuperBuild -pushd /opt/SIRF-SuperBuild +git clone https://github.com/CCPPETMR/SIRF-SuperBuild --recursive -b docker $INSTALL_DIR/SIRF-SuperBuild +pushd $INSTALL_DIR/SIRF-SuperBuild + +echo $BUILD_FLAGS $EXTRA_BUILD_FLAGS cmake $BUILD_FLAGS $EXTRA_BUILD_FLAGS . make -j 2 [ -f INSTALL/share/gadgetron/config/gadgetron.xml ] || \ +[ -f INSTALL/share/gadgetron/config/gadgetron.xml.example ] && \ mv INSTALL/share/gadgetron/config/gadgetron.xml.example \ INSTALL/share/gadgetron/config/gadgetron.xml + popd