From 1d8e799ffc4b35b9b1d18f66d70c3d29fec12055 Mon Sep 17 00:00:00 2001
From: Ben Cumming <bcumming@cscs.ch>
Date: Wed, 19 May 2021 15:09:55 +0200
Subject: [PATCH] Add Fujitsu ARM-SVE CI test (#1512)

Add a CI test for ARM-SVE

- compiles and runs the unit tests with vectorization enabled for the `armv8.2-a+sv` architecture
- uses a dedicated gitlab runner on ault.cscs.ch

Fixes #1498
---
 ci/gitlab-cscs.yml          | 81 ++++++++++++++++++++++++++++---------
 ci/test-ault-fujitsu.sh     | 24 +++++++++++
 cmake/CompilerOptions.cmake | 12 +++---
 3 files changed, 92 insertions(+), 25 deletions(-)
 create mode 100755 ci/test-ault-fujitsu.sh

diff --git a/ci/gitlab-cscs.yml b/ci/gitlab-cscs.yml
index e8d46151..39392368 100644
--- a/ci/gitlab-cscs.yml
+++ b/ci/gitlab-cscs.yml
@@ -1,5 +1,3 @@
-include:
-  - remote: 'https://gitlab.com/cscs-ci/recipes/-/raw/master/templates/v2/.cscs.yml'
 
 stages:
   - build
@@ -8,6 +6,54 @@ stages:
   - upload_reports
   - cleanup
 
+# instead of including parameters from here:
+#       https://gitlab.com/cscs-ci/recipes/-/raw/master/templates/v2/.cscs.yml
+# hard code them here, to make it easier to also use runners on other systems
+## Piz Daint slurm stuff
+
+.daint:
+  tags:
+    - daint-container
+  variables:
+    CRAY_CUDA_MPS: 1
+    USE_MPI: 'YES'
+    DISABLE_AFTER_SCRIPT: 'YES'
+    PULL_IMAGE: 'NO'
+    SLURM_CONSTRAINT: gpu
+    SLURM_JOB_NUM_NODES: 2
+    SLURM_PARTITION: normal
+    SLURM_TIMELIMIT: '15:00'
+    SLURM_EXCLUSIVE: '' # make sure resources are not shared
+
+.daint_alloc:
+  extends: .daint
+  variables:
+    ONLY_ALLOCATE: 1
+    GIT_STRATEGY: none
+  script: nothing
+
+.daint_dealloc:
+  extends: .daint
+  variables:
+    ONLY_DEALLOCATE: 1
+    GIT_STRATEGY: none
+  script: nothing
+  when: always
+
+## Kubernetes for building docker images
+.dind:
+  variables:
+    DOCKER_DRIVER: overlay2
+    DOCKER_HOST: tcp://localhost:2375
+    DOCKER_TLS_CERTDIR: ""
+    DOCKER_BUILDKIT: 1
+    BUILDKIT_PROGRESS: plain
+  image: docker:19.03.12
+  tags:
+    - kubernetes
+  services:
+    - docker:19.03.12-dind
+
 # Builds a docker image on kubernetes
 .build_docker_images:
   extends: .dind
@@ -22,7 +68,7 @@ stages:
     - docker build -f $DEPLOY_DOCKERFILE --network=host --build-arg BUILD_ENV=$BUILD_IMAGE -t $DEPLOY_IMAGE .
     - docker push $DEPLOY_IMAGE
 
-build release:
+build_release:
   extends: .build_docker_images
   variables:
     BUILD_DOCKERFILE: ci/release/build.Dockerfile
@@ -39,20 +85,8 @@ notify_github_start:
   script: ./ci/set_github_status.sh pending
 
 
-# Some variables used for running on daint
-variables:
-  CRAY_CUDA_MPS: 1
-  USE_MPI: 'YES'
-  DISABLE_AFTER_SCRIPT: 'YES'
-  PULL_IMAGE: 'NO'
-  SLURM_CONSTRAINT: gpu
-  SLURM_JOB_NUM_NODES: 2
-  SLURM_PARTITION: normal
-  SLURM_TIMELIMIT: '15:00'
-  SLURM_EXCLUSIVE: '' # make sure resources are not shared
-
 ### Release tests ###
-allocate release:
+allocate_release:
   stage: allocate
   image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA
   only: ['master', 'staging', 'trying']
@@ -61,7 +95,7 @@ allocate release:
     PULL_IMAGE: 'YES'
     ALLOCATION_NAME: arbor-ci-release-$CI_PIPELINE_ID
 
-single node release:
+single_node_release:
   extends: .daint
   image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA
   only: ['master', 'staging', 'trying']
@@ -75,7 +109,7 @@ single node release:
     SLURM_NTASKS: 1
     ALLOCATION_NAME: arbor-ci-release-$CI_PIPELINE_ID
 
-multi node release:
+multi_node_release:
   extends: .daint
   image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA
   only: ['master', 'staging', 'trying']
@@ -87,7 +121,16 @@ multi node release:
     SLURM_NTASKS: 2
     ALLOCATION_NAME: arbor-ci-release-$CI_PIPELINE_ID
 
-deallocate release:
+test_ault_fujitsu:
+    needs: []
+    tags:
+        - arm-a64fx
+    stage: test
+    script:
+        - chmod +x ci/test-ault-fujitsu.sh
+        - srun --partition=a64fx -c48 ci/test-ault-fujitsu.sh "$(pwd)"
+
+deallocate_release:
   only: ['master', 'staging', 'trying']
   image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA
   stage: cleanup
diff --git a/ci/test-ault-fujitsu.sh b/ci/test-ault-fujitsu.sh
new file mode 100755
index 00000000..cdfb081c
--- /dev/null
+++ b/ci/test-ault-fujitsu.sh
@@ -0,0 +1,24 @@
+#! /bin/bash
+
+base_path="$1"
+host="$(hostname)"
+echo "=== path: $base_path"
+echo "=== host: $host"
+
+echo "=== loading environment"
+source /users/bcumming/a64fx/env.sh
+spack load git gcc@11.1.0 cmake ninja
+
+build_path="$base_path/build"
+echo "=== building: $build_path"
+mkdir "$build_path"
+cd "$build_path"
+echo "=== CC=gcc CXX=g++ cmake .. -DARB_USE_BUNDLED_LIBS=on -DARB_ARCH=armv8.2-a+sve -DARB_VECTORIZE=on -G Ninja"
+CC=gcc CXX=g++ cmake .. -DARB_USE_BUNDLED_LIBS=on -DARB_ARCH=armv8.2-a+sve -DARB_VECTORIZE=on -G Ninja
+ninja -j48 unit
+
+bin_path="$build_path/bin"
+echo "=== running unit tests: $bin_path/unit"
+cd "$bin_path"
+./unit
+
diff --git a/cmake/CompilerOptions.cmake b/cmake/CompilerOptions.cmake
index d91786e6..08672685 100644
--- a/cmake/CompilerOptions.cmake
+++ b/cmake/CompilerOptions.cmake
@@ -6,12 +6,6 @@ include(CMakePushCheckState)
 set(CXXOPT_DEBUG "-g")
 set(CXXOPT_CXX11 "-std=c++11")
 
-if(CMAKE_CXX_COMPILER_ID MATCHES "XL")
-    # CMake, bless its soul, likes to insert this unsupported flag. Hilarity ensues.
-    string(REPLACE "-qhalt=e" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-endif()
-
-
 if(${ARBDEV_COLOR})
     set(colorflags
         $<IF:$<CXX_COMPILER_ID:Clang>,-fcolor-diagnostics,>
@@ -83,6 +77,12 @@ set(CXXOPT_WALL
 
     $<IF:$<CXX_COMPILER_ID:GNU>,-Wno-maybe-uninitialized,>
 
+    # * Disable comments that point out that an ABI bug has been patched, which
+    #   could lead to bugs when linking against code compiled an older compiler,
+    #   because there is nothing to fix on our side.
+
+    $<IF:$<CXX_COMPILER_ID:GNU>,-Wno-psabi,>
+
     # Intel:
     #
     # Disable warning for unused template parameter
-- 
GitLab