Skip to content
Snippets Groups Projects
.gitlab-ci.yml 7.51 KiB
Newer Older
  • Learn to ignore specific revisions
  • image: "flowdalic/debian-testing-dev:1.19"
    
    Florian Fischer's avatar
    Florian Fischer committed
      - ulimit -a
    
        readarray TOOLS <<EOF
        c++
        cc
        clang
        clang++
        clang-tidy
        doxygen
        g++
        gcc
        include-what-you-use
        meson
        nasm
        valgrind
        EOF
        for tool in ${TOOLS[@]}; do
          echo -n "$tool version: "
    
    cache:
      paths:
        - subprojects/packagecache
    
    
    .meson-test:
      artifacts:
        paths:
          - build-*/meson-logs
        when: on_failure
        reports:
          junit: build-*/meson-logs/testlog.junit.xml
    
    
      script: make smoke-test-suite
    
    fast-static-analysis:
       stage: smoke-test
       script: make fast-static-analysis
       variables:
           EMPER_IO: "true"
    
    
    .fast-variant-check:
       stage: test
       script: make fast-static-analysis smoke-test-suite
       variables:
           EMPER_IO: "true"
    
    
       script: IWYU_TOOL="${CI_PROJECT_DIR}/tools/iwyu_tool.py" make iwyu
    
       variables:
           EMPER_IO: "true"
    
    clang-tidy:
       stage: smoke-test
       script: make tidy
       variables:
           EMPER_IO: "true"
    
    .build:
      stage: test
      script:
        - make
    
    
      stage: test
      script:
        - make test
    
    .gcc:
      variables:
        CC: gcc
        CXX: g++
    
    .clang:
      variables:
        CC: clang
        CXX: clang++
    
    
    .libc++:
      extends:
        - .clang
      variables:
        EMPER_USE_BUNDLED_DEPS: "always"
        EMPER_CPP_ARGS: "-stdlib=libc++"
        EMPER_CPP_LINK_ARGS: "-stdlib=libc++"
    
    
    .emper-ws-scheduling:
      variables:
        EMPER_DEFAULT_SCHEDULING_STRATEGY: "work_stealing"
    
    .emper-laws-scheduling:
      variables:
        EMPER_DEFAULT_SCHEDULING_STRATEGY: "locality_aware_work_stealing"
    
    
    .emper-worker-no-sleep:
      variables:
        EMPER_WORKER_SLEEP: 'false'
    
    
    .emper-stats:
    
      variables:
    
        EMPER_STATS: 'true'
    
    .emper-userspace-rcu:
      variables:
        EMPER_USERSPACE_RCU: 'true'
    
    
    .emper-pipe-sleep-strategy:
      variables:
        EMPER_WORKER_SLEEP_STRATEGY: 'pipe'
    
    .emper-no-completer:
      variables:
        EMPER_IO_COMPLETER_BEHAVIOR: 'none'
    
    
    .emper-single-poller:
      variables:
        EMPER_IO_URING_SQ_POLLER: 'one'
    
    .emper-numa-poller:
      variables:
        EMPER_IO_URING_SQ_POLLER: 'numa'
    
    .emper-each-poller:
      variables:
        EMPER_IO_URING_SQ_POLLER: 'each'
    
    
    .emper-single-uring:
      variables:
        EMPER_IO_SINGLE_URING: 'true'
    
    
    Florian Fischer's avatar
    Florian Fischer committed
    .emper-io-stealing:
      variables:
        EMPER_IO_STEALING: 'true'
    
    
    .emper-lockless-cq:
      variables:
    
    .default-library-static:
      variables:
        EMPER_DEFAULT_LIBRARY: 'static'
    
    .clang-sanitizer:
      extends:
        - .clang
        - .default-library-static
    
      variables:
        # Clang's sanitizers require undefined symbols to be allowed when
        # linking. See also:
        # - https://github.com/mesonbuild/meson/issues/764
        # - https://mesonbuild.com/Builtin-options.html
        EMPER_B_LUNDEF: 'false'
    
    
    
    .clang-sanitizer-undefined:
      extends:
        - .clang-sanitizer
      variables:
        EMPER_B_SANITIZE: 'undefined'
    
    #.clang-sanitizer-memory:
    #  extends:
    #    - .clang-sanitizer
    #  variables:
    #    EMPER_B_SANITIZE: 'memory'
    
    #.sanitizer-address:
    #  extends:
    #    - .default-library-static
    #  variables:
    #    EMPER_B_SANITIZE: 'address'
    
    
    .release-build:
      variables:
        BUILDTYPE: release
    
    .debug-build:
      variables:
        BUILDTYPE: debug
    
    
    .worker-wakeup-strategy-all:
      variables:
        EMPER_WORKER_WAKEUP_STRATEGY: "all"
    
    
    .emper-worker-wakeup-strategy-throttle:
      variables:
        EMPER_WORKER_WAKEUP_STRATEGY: "throttle"
    
    
    .do-not-log-timestamp:
      variables:
    
    .locked-ws-queues:
      variables:
        EMPER_LOCKED_WS_QUEUE: "true"
    
    
    .waitfree-ws:
      variables:
        EMPER_WAITFREE_WORK_STEALING: "true"
    
    
    .futex-wakeup-semaphore:
      variables:
        EMPER_WAKEUP_SEMAPHORE_IMPLEMENTATION: "futex"
    
    .locked-wakeup-semaphore:
      variables:
        EMPER_WAKEUP_SEMAPHORE_IMPLEMENTATION: "locked"
    
    
    .set-affinity-on-block:
      variables:
        EMPER_SET_AFFINITY_ON_BLOCK: 'true'
    
    
    test-gcc:
      extends:
        - .test
        - .gcc
    
    test-gcc-release:
      extends:
        - test-gcc
        - .release-build
    
    test-gcc-debug:
      extends:
        - test-gcc
        - .debug-build
    
    test-clang:
      extends:
        - .test
        - .clang
    
    test-clang-release:
      extends:
        - test-clang
        - .release-build
    
    test-clang-debug:
      extends:
        - test-clang
        - .debug-build
    
    
    smoke-test-libc++:
      stage: smoke-test
      extends:
        - .fast-variant-check
        - .libc++
    
    test-libc++:
      extends:
        - .test
        - .libc++
    
    
    test-worker-no-sleep:
      extends:
        - .test
        - .emper-worker-no-sleep
    
    test-with-stats:
      extends:
        - .test
    
        - .emper-stats
    
    
    test-with-userspace-rcu:
      extends:
        - .test
        - .emper-userspace-rcu
    
    
    test-clang-sanitizer-undefined:
      extends:
        - .test
        - .clang-sanitizer-undefined
    
    #test-clang-sanitizer-memory:
    #  extends:
    #    - .test
    #    - .clang-sanitizer-memory
    
    #test-clang-sanitizer-address:
    #  extends:
    #    - .test
    #    - .clang
    #    - .sanitizer-address
    
    
    test-laws:
      extends:
        - .test
        - .emper-laws-scheduling
    
    test-laws-release:
      extends:
        - test-laws
        - .release-build
    
    
    test-worker-wakeup-strategy-all:
      extends:
        - .test
        - .worker-wakeup-strategy-all
    
    test-worker-wakeup-strategy-throttle:
     extends:
       - .test
       - .emper-worker-wakeup-strategy-throttle
    
    test-do-not-log-timestamp:
      extends:
        - .test
        - .do-not-log-timestamp
    
    
    test-locked-ws-queues:
      extends:
        - .test
        - .locked-ws-queues
    
    test-waitfree-ws:
      extends:
        - .test
        - .waitfree-ws
    
    
    test-futex-wakeup-semaphore:
      extends:
        - .test
        - .futex-wakeup-semaphore
    
    test-locked-wakeup-semaphore:
      extends:
        - .test
        - .locked-wakeup-semaphore
    
    
    test-set-affinity-on-block:
      extends:
        - .test
        - .set-affinity-on-block
    
    
    test-mmapped-log:
      extends:
        - .meson-test
      script: make && EMPER_LOG_FILE=emper.log make test
    
    
    test-single-uring:
      extends:
        - .test
        - .emper-single-uring
    
    test-pipe-sleep-strategy:
      extends:
        - .test
        - .emper-pipe-sleep-strategy
    
    test-pipe-sleep-strategy-no-completer:
      extends:
        - .test
        - .emper-pipe-sleep-strategy
        - .emper-no-completer
    
    test-lockless-cq:
      extends:
        - .test
        - .emper-lockless-cq
    
    
    Florian Fischer's avatar
    Florian Fischer committed
    test-io-stealing:
      extends:
        - .test
        - .emper-io-stealing
    
    
    test-lockless-io-stealing:
      extends:
        - .test
        - .emper-io-stealing
        - .emper-lockless-cq
    
    
    Florian Fischer's avatar
    Florian Fischer committed
    test-io-stealing-pipe-no-completer:
      extends:
        - .test
        - .emper-pipe-sleep-strategy
        - .emper-no-completer
        - .emper-io-stealing
    
    
    test-io-stealing-pipe-no-completer-lockless:
      extends:
        - .test
        - .emper-pipe-sleep-strategy
        - .emper-no-completer
        - .emper-io-stealing
        - .emper-lockless-cq
    
    
    smoke-test-locked-queue-rwlock:
      extends:
        - .fast-variant-check
      variables:
        EMPER_LOCKED_UNBOUNDED_QUEUE_IMPLEMENTATION: "rwlock"
    
    smoke-test-locked-queue-shared-mutex:
      extends:
        - .fast-variant-check
      variables:
        EMPER_LOCKED_UNBOUNDED_QUEUE_IMPLEMENTATION: "shared_mutex"
    
    smoke-test-locked-queue-boost-shared-mutex:
      extends:
        - .fast-variant-check
      variables:
        EMPER_LOCKED_UNBOUNDED_QUEUE_IMPLEMENTATION: "boost_shared_mutex"
    
    smoke-test-locked-queue-boost-userspace-rcu:
      extends:
        - .fast-variant-check
      variables:
        EMPER_USERSPACE_RCU: "true"
    
    
    # Only build the poller variants because sqpoll needs linux >= 5.15
    # TODO: also test those variants if the CI uses linux >= 5.15
    build-single-poller:
      extends:
        - .build
        - .emper-single-poller
    
    build-numa-poller:
      extends:
        - .build
        - .emper-single-poller
    
    build-each-poller:
      extends:
        - .build
        - .emper-each-poller