Skip to content
Snippets Groups Projects
.gitlab-ci.yml 5.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • # vim: tabstop=4 shiftwidth=4 softtabstop=4
    
    before_script:
        - which g++
        - which cmake
    
    # Stages are useful only to enforce some ordering of the jobs. Every job is run
    # in its own directory and only very few data can be shared between the jobs in
    # different stages. It has to be zipped and uploaded to the server, so we can't
    # do it with the build directory. Hence, we must build, test and install in the
    # same job.
    stages:
        - build
    
    # default flags for cmake
    .default_cmake_flags_def: &default_cmake_flags
    
        WITH_OPENMP: "no"
    
        WITH_CUDA: "no"
        WITH_CUDA_ARCH: "auto"
        WITH_MIC: "no"
    
        WITH_TESTS: "yes"
        WITH_COVERAGE: "no"
    
        # these are built only in the "full" config
        WITH_BENCHMARKS: "no"
        WITH_EXAMPLES: "no"
        WITH_TOOLS: "no"
        WITH_PYTHON: "no"
    
    
    # template for build jobs
    .build_template_def: &build_template
        stage: build
        script:
    
            # set MPI compiler wrapper
            - if [[ ${WITH_MPI} == "yes" ]]; then
                    export CXX=mpicxx;
                    export CC=mpicc;
              fi
    
            - export NUM_CORES=$(grep "core id" /proc/cpuinfo | wc -l)
            # all pyhsical cores
    #        - export NUM_CORES=$(grep "core id" /proc/cpuinfo | sort -u | wc -l)
    
            # ninja does not have -l
    #        - export MAKEFLAGS="-l$(echo 1.5*$NUM_CORES | bc) -j$NUM_CORES"
            - export NINJAFLAGS="-j$NUM_CORES"
            - export CTEST_OUTPUT_ON_FAILURE=1
    
            - mkdir -p "./builddir/$CI_JOB_NAME"
            - pushd "./builddir/$CI_JOB_NAME"
            - cmake ../..
    
                    -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
                    -DCMAKE_INSTALL_PREFIX=$(pwd)/${BUILD_TYPE}_install_prefix
    
                    -DWITH_OPENMP=${WITH_OPENMP}
    
                    -DWITH_CUDA=${WITH_CUDA}
                    -DWITH_CUDA_ARCH=${WITH_CUDA_ARCH}
                    -DWITH_MIC=${WITH_MIC}
                    -DWITH_TESTS=${WITH_TESTS}
                    -DWITH_COVERAGE=${WITH_COVERAGE}
    
                    -DWITH_EXAMPLES=${WITH_EXAMPLES}
    
                    -DWITH_TOOLS=${WITH_TOOLS}
                    -DWITH_PYTHON=${WITH_PYTHON}
    
    #        - make
    #        - make test
    #        - make install
            - ninja ${NINJAFLAGS}
            - ninja test
            - ninja install
    
            - popd
        variables:
            <<: *default_cmake_flags
            BUILD_TYPE: Debug
    
    
    # Cuda builds are specified first because they take more time than host-only builds,
    # which can be allocated on hosts whitout GPUs.
    
    
        <<: *build_template
    
        tags:
            - gpu
        variables:
            <<: *default_cmake_flags
            WITH_CUDA: "yes"
            BUILD_TYPE: Debug
    
        <<: *build_template
    
        variables:
            <<: *default_cmake_flags
    
            WITH_CUDA: "yes"
    
            BUILD_TYPE: Release
    
    
    cuda_mpi_Debug:
        <<: *build_template
        tags:
            - openmp
            - gpu
            - mpi
        variables:
            <<: *default_cmake_flags
            WITH_OPENMP: "yes"
            WITH_CUDA: "yes"
            WITH_MPI: "yes"
            BUILD_TYPE: Debug
    
    cuda_mpi_Release:
        <<: *build_template
        tags:
            - openmp
            - gpu
            - mpi
        variables:
            <<: *default_cmake_flags
            WITH_OPENMP: "yes"
            WITH_CUDA: "yes"
            WITH_MPI: "yes"
            BUILD_TYPE: Release
    
    
        <<: *build_template
        tags:
    
            - gpu
        variables:
            <<: *default_cmake_flags
    
            WITH_OPENMP: "yes"
    
            WITH_CUDA: "yes"
            BUILD_TYPE: Debug
    
            WITH_BENCHMARKS: "yes"
            WITH_EXAMPLES: "yes"
            WITH_TOOLS: "yes"
            WITH_PYTHON: "yes"
    
        <<: *build_template
        tags:
    
            - gpu
        variables:
            <<: *default_cmake_flags
    
            WITH_OPENMP: "yes"
    
            WITH_CUDA: "yes"
            BUILD_TYPE: Release
    
            WITH_BENCHMARKS: "yes"
            WITH_EXAMPLES: "yes"
            WITH_TOOLS: "yes"
            WITH_PYTHON: "yes"
    
        <<: *build_template
    
    
        <<: *build_template
        variables:
            <<: *default_cmake_flags
            BUILD_TYPE: Release
    
    
    default_mpi_Debug:
        <<: *build_template
        tags:
            - openmp
            - mpi
        variables:
            <<: *default_cmake_flags
            WITH_OPENMP: "yes"
            WITH_MPI: "yes"
            BUILD_TYPE: Debug
    
    default_mpi_Release:
        <<: *build_template
        tags:
            - openmp
            - mpi
        variables:
            <<: *default_cmake_flags
            WITH_OPENMP: "yes"
            WITH_MPI: "yes"
            BUILD_TYPE: Release
    
    
        <<: *build_template
        tags:
            - openmp
        variables:
            <<: *default_cmake_flags
            WITH_OPENMP: "yes"
            BUILD_TYPE: Debug
    
            WITH_BENCHMARKS: "yes"
            WITH_EXAMPLES: "yes"
            WITH_TOOLS: "yes"
            WITH_PYTHON: "yes"
    
        <<: *build_template
        tags:
            - openmp
        variables:
            <<: *default_cmake_flags
            WITH_OPENMP: "yes"
            BUILD_TYPE: Release
    
            WITH_BENCHMARKS: "yes"
            WITH_EXAMPLES: "yes"
            WITH_TOOLS: "yes"
            WITH_PYTHON: "yes"