99jobs :
1010 testMPI :
1111 runs-on : ubuntu-latest
12+ # Define a build matrix over compilers
1213 strategy :
1314 matrix :
1415 compiler : [GCC, ICC, CLANG]
1516
1617 steps :
17- - uses : actions/checkout@v4
18+ # 1) Check out the repository code
19+ - name : Checkout repository
20+ uses : actions/checkout@v4
1821
22+ # 2) Set up Spack for package management
1923 - name : Set-up Spack
2024 uses : spack/setup-spack@v2
2125 with :
22- ref : develop
23- buildcache : true
24- color : true
25- path : spack
26+ ref : develop # Use the 'develop' branch of the spack/setup-spack action
27+ buildcache : true # Enable Spack binary cache
28+ color : true # Enable colored output
29+ path : spack # Install Spack under ./spack directory
2630
31+ # 3) Install necessary compiler and MPI packages via Spack
2732 - name : Install Compilers and MPI Wrappers
2833 run : |
34+ # Source Spack environment to get spack commands
2935 . ./spack/share/spack/setup-env.sh
3036
31- if [[ "${{ matrix.compiler }}" == "GCC" ]]; then
32- spack install -j 4 openmpi
33- elif [[ "${{ matrix.compiler }}" == "ICC" ]]; then
34- spack install -j 4 intel-oneapi-compilers
35- spack install -j 4 intel-oneapi-mpi
36- elif [[ "${{ matrix.compiler }}" == "CLANG" ]]; then
37- spack install -j 4 llvm
38- spack install -j 4 openmpi
39- fi
40-
41- - name : Configure and Make SparseBench
37+ # Based on matrix.compiler, install the right packages
38+ case "${{ matrix.compiler }}" in
39+ GCC)
40+ # Install OpenMPI for GCC
41+ spack install -j 4 openmpi;;
42+ ICC)
43+ # Install Intel compilers and Intel MPI
44+ spack install -j 4 intel-oneapi-compilers
45+ spack install -j 4 intel-oneapi-mpi;;
46+ CLANG)
47+ # Install LLVM/Clang and OpenMPI
48+ spack install -j 4 llvm
49+ spack install -j 4 openmpi;;
50+ esac
51+
52+ # 4) Configure, build, and run tests in one step to preserve environment
53+ - name : Configure and Make SparseBench Tests
4254 run : |
55+ # Re-source Spack so we have spack load available
4356 . ./spack/share/spack/setup-env.sh
4457
45- if [[ "${{ matrix.compiler }}" == "GCC" ]]; then
46- eval "$(spack load --sh openmpi)"
47- elif [[ "${{ matrix.compiler }}" == "ICC" ]]; then
48- eval "$(spack load --sh intel-oneapi-compilers)"
49- eval "$(spack load --sh intel-oneapi-mpi)"
50- elif [[ "${{ matrix.compiler }}" == "CLANG" ]]; then
51- eval "$(spack load --sh llvm)"
52- eval "$(spack load --sh openmpi)"
53- fi
54-
58+ # Based on matrix.compiler, load the correct compiler/MPI into this shell
59+ case "${{ matrix.compiler }}" in
60+ GCC)
61+ # Load OpenMPI for GCC
62+ eval "$(spack load --sh openmpi)";;
63+ ICC)
64+ # Load Intel compilers and Intel MPI
65+ eval "$(spack load --sh intel-oneapi-compilers)"
66+ eval "$(spack load --sh intel-oneapi-mpi)";;
67+ CLANG)
68+ # Load LLVM/Clang and OpenMPI
69+ eval "$(spack load --sh llvm)"
70+ eval "$(spack load --sh openmpi)";;
71+ esac
72+
73+ # Export TOOLCHAIN for the Makefile
5574 TOOLCHAIN="${{ matrix.compiler }}"
5675
76+ # Update build configuration flags in config.mk
5777 sed -E -i \
5878 -e 's/^(ENABLE_MPI[[:space:]]*\?=[[:space:]]*).*/\1true/' \
5979 -e 's/^(ENABLE_OPENMP[[:space:]]*\?=[[:space:]]*).*/\1false/' \
6080 -e 's/^(MTX_FMT[[:space:]]*\?=[[:space:]]*).*/\1SCS/' \
6181 -e "s/^(TOOLCHAIN[[:space:]]*\?=[[:space:]]*).*/\1${TOOLCHAIN}/" \
6282 config.mk
6383
84+ # Build the main project
6485 make
6586
66- - name : Make and Run Tests
67- run : |
68- . ./spack/share/spack/setup-env.sh
69-
70- if [[ "${{ matrix.compiler }}" == "GCC" ]]; then
71- eval "$(spack load --sh openmpi)"
72- elif [[ "${{ matrix.compiler }}" == "ICC" ]]; then
73- eval "$(spack load --sh intel-oneapi-compilers)"
74- eval "$(spack load --sh intel-oneapi-mpi)"
75- elif [[ "${{ matrix.compiler }}" == "CLANG" ]]; then
76- eval "$(spack load --sh llvm)"
77- eval "$(spack load --sh openmpi)"
78- fi
79-
87+ # Move into the tests directory
8088 cd tests
89+ # Build test suite
8190 make
82- ./runTests
83-
84- # - name: Run Tests
85- # run: |
86- # ./runTests
87-
88- # - name: Upload Executables
89- # uses: actions/upload-artifact@v4
90- # with:
91- # name: sparseBench-SCS-${{ matrix.compiler }}
92- # path: |
93- # ./sparseBench-SCS-${{ matrix.compiler }}
94-
95- # runTests:
96- # runs-on: ubuntu-latest
97- # needs: build
98- # strategy:
99- # matrix:
100- # compiler: [GCC, ICC, CLANG]
101-
102- # steps:
103- # - uses: actions/checkout@v4
104-
105- # - name: Download Executables
106- # uses: actions/download-artifact@v4
107- # with:
108- # name: sparseBench-SCS-${{ matrix.compiler }}
109- # path: ./executables
110-
111- # - name: Set up Spack
112- # uses: spack/setup-spack@v2
113- # with:
114- # ref: develop
115- # buildcache: true
116- # color: true
117- # path: spack
118-
119- # - name: Load Compiler and MPI
120- # run: |
121- # . ./spack/share/spack/setup-env.sh
122-
123- # if [[ "${{ matrix.compiler }}" == "GCC" ]]; then
124- # eval "$(spack load --sh openmpi)"
125- # elif [[ "${{ matrix.compiler }}" == "ICC" ]]; then
126- # eval "$(spack load --sh intel-oneapi-compilers)"
127- # eval "$(spack load --sh intel-oneapi-mpi)"
128- # elif [[ "${{ matrix.compiler }}" == "CLANG" ]]; then
129- # eval "$(spack load --sh llvm)"
130- # eval "$(spack load --sh openmpi)"
131- # fi
132-
133- # - name: Make Tests
134- # run: |
135- # cd tests
136- # make
137-
138- # - name: Run Tests
139- # run: |
140- # ./runTests
91+ # Run the tests
92+ ./runTests
0 commit comments