44
44
- os : macos-13
45
45
mpi : mpich
46
46
47
-
48
47
steps :
49
48
- name : Checkout code
50
49
uses : actions/checkout@v4
70
69
netcdf
71
70
netcdf-fortran
72
71
73
- - name : (Windows) Setup VS Build environment
74
- if : contains(matrix.os,'windows') && contains(matrix.mpi,'intel')
75
- uses : seanmiddleditch/gha-setup-vsdevenv@master
76
-
77
- - name : (Windows) Retrieve Intel toolchain
78
- if : contains(matrix.os,'windows') && contains(matrix.mpi,'intel')
79
- shell : pwsh
80
- working-directory : C:\TEMP
81
- run : |
82
- curl.exe --output webimage.exe --url https://registrationcenter-download.intel.com/akdlm/irc_nas/19085/w_HPCKit_p_2023.0.0.25931_offline.exe --retry 5 --retry-delay 5
83
- Start-Process -FilePath "webimage.exe" -ArgumentList "-s -x -f oneAPI --log extract.log" -Wait
84
- Remove-Item "webimage.exe" -Force
85
- Start-Process -FilePath "oneAPI\bootstrapper.exe" -ArgumentList "-s --action install --eula=accept --components=""intel.oneapi.win.cpp-compiler:intel.oneapi.win.ifort-compiler:intel.oneapi.win.mpi.devel"" -p=NEED_VS2017_INTEGRATION=0 -p=NEED_VS2019_INTEGRATION=0 -p=NEED_VS2022_INTEGRATION=0 --log-dir=." -Wait
86
- Remove-Item "oneAPI" -Force -Recurse
87
-
88
72
- name : (Ubuntu) Install gfortran
89
73
if : contains(matrix.os,'ubuntu')
90
74
run : |
@@ -106,48 +90,66 @@ jobs:
106
90
sudo apt install -y -q mpich hwloc fabric libhdf5-dev libhdf5-fortran-102 \
107
91
libnetcdf-dev libnetcdff-dev
108
92
109
- - name : (Ubuntu) Retrieve Intel toolchain
110
- if : contains(matrix.os,'ubuntu') && contains(matrix.mpi,'intel')
111
- timeout-minutes : 1
112
- run : |
113
- wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
114
- echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
115
- sudo apt-get update
93
+ # Intel
116
94
117
- - name : (Ubuntu) Install Intel oneAPI
118
- if : contains(matrix.os,'ubuntu') && contains(matrix.mpi,'intel')
119
- uses :
fortran-lang/[email protected]
120
- id : setup-fortran
95
+ - name : Setup Intel Environment
96
+ if : contains(matrix.mpi, 'intel')
97
+ uses : ./.github/actions/setup-intel
121
98
with :
122
- compiler : intel
123
- version : 2024.1.0
99
+ os : ${{ matrix.os }}
124
100
125
- - name : (Ubuntu) finalize oneAPI environment
126
- if : contains(matrix.os,'ubuntu') && contains(matrix.mpi,'intel')
101
+ - name : (Ubuntu) Build and Install HDF5 from source
102
+ if : contains(matrix.os, 'ubuntu') && contains(matrix.mpi, 'intel')
103
+ # Needs checkout if source code isn't available, adjust if needed
104
+ # Ensure compilers are available from the previous step's environment setup
105
+ shell : bash
127
106
run : |
128
- # Install MPI
129
- sudo apt-get install -y -q intel-oneapi-mpi-devel ninja-build cmake libcurl4-gnutls-dev
107
+ # Source again just in case shell context is lost (shouldn't be, but safer)
130
108
source /opt/intel/oneapi/setvars.sh --force
131
- printenv >> $GITHUB_ENV
132
- # To run HDF5 with oneAPI, we need to build it from source. Use CMake to generate pkg-config info
109
+ # Download HDF5
133
110
curl -O -L https://github.com/HDFGroup/hdf5/archive/refs/tags/snapshot-1.14.tar.gz
134
111
tar zxf snapshot-1.14.tar.gz
135
112
cd hdf5-snapshot-1.14
113
+ # Configure HDF5 with Intel compilers
136
114
cmake -B build -DCMAKE_Fortran_COMPILER=ifx -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DHDF5_BUILD_FORTRAN=ON -DCMAKE_INSTALL_PREFIX=/usr
137
115
cd build
138
- make -j
116
+ make -j $(nproc)
139
117
sudo make install
118
+ cd ../.. # Go back to workspace directory
119
+ rm -rf hdf5-snapshot-1.14 snapshot-1.14.tar.gz # Clean up
120
+
121
+ - name : (Ubuntu) Build and Install NetCDF-C from source
122
+ if : contains(matrix.os, 'ubuntu') && contains(matrix.mpi, 'intel')
123
+ shell : bash
124
+ run : |
125
+ source /opt/intel/oneapi/setvars.sh --force
126
+ # Download NetCDF-C
140
127
curl -L https://github.com/Unidata/netcdf-c/archive/refs/tags/v4.9.2.tar.gz -o - | tar xz
141
128
cd netcdf-c-4.9.2
142
- CC=icx CXX=icpx FC=ifx ./configure --prefix=/usr --with-hdf5=/usr
143
- CC=icx CXX=icpx FC=ifx make -j
129
+ # Configure NetCDF-C with Intel Compilers, referencing installed HDF5
130
+ # Set CC/CXX/FC explicitly in environment for configure script
131
+ export CC=icx CXX=icpx FC=ifx
132
+ ./configure --prefix=/usr --enable-netcdf-4 --with-hdf5=/usr
133
+ make -j $(nproc)
144
134
sudo make install
135
+ cd .. # Go back to workspace directory
136
+ rm -rf netcdf-c-4.9.2 # Clean up
137
+
138
+ - name : (Ubuntu) Build and Install NetCDF-Fortran from source
139
+ if : contains(matrix.os, 'ubuntu') && contains(matrix.mpi, 'intel')
140
+ shell : bash
141
+ run : |
142
+ source /opt/intel/oneapi/setvars.sh --force
143
+ # Download NetCDF-Fortran
145
144
curl -L https://github.com/Unidata/netcdf-fortran/archive/refs/tags/v4.6.1.tar.gz -o - | tar xz
146
145
cd netcdf-fortran-4.6.1
146
+ # Configure NetCDF-Fortran with Intel Compilers using CMake
147
147
cmake -B build -DCMAKE_Fortran_COMPILER=ifx -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DCMAKE_INSTALL_PREFIX=/usr
148
148
cd build
149
- make -j
149
+ make -j $(nproc)
150
150
sudo make install
151
+ cd ../.. # Go back to workspace directory
152
+ rm -rf netcdf-fortran-4.6.1 # Clean up
151
153
152
154
- name : (Windows) Put MSYS2_MinGW64 on PATH
153
155
if : contains(matrix.os,'windows') && (!contains(matrix.mpi,'intel'))
@@ -168,26 +170,13 @@ jobs:
168
170
# can't use MSMPI_BIN as Actions doesn't update PATH from msmpisetup.exe
169
171
run : Test-Path "C:\Program Files\Microsoft MPI\Bin\mpiexec.exe" -PathType leaf
170
172
171
- - name : (Windows) test that OneAPI is installed
172
- if : contains(matrix.os,'windows') && contains(matrix.mpi,'intel')
173
- run : |
174
- Test-Path -Path "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" -PathType leaf
175
- Test-Path -Path "C:\Program Files (x86)\Intel\oneAPI\compiler\latest\env\vars.bat" -PathType leaf
176
-
177
173
- name : (Windows) put MSMPI_BIN on PATH (where mpiexec is)
178
174
if : contains(matrix.os,'windows') && contains(matrix.mpi,'msmpi')
179
175
run : |
180
176
echo "C:\Program Files\Microsoft MPI\Bin\" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
181
177
echo "/c/Program Files/Microsoft MPI/Bin/" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
182
178
echo "MSMPI_BIN=C:\Program Files\Microsoft MPI\Bin\" | Out-File -FilePath $env:GITHUB_ENV -Append
183
179
184
- - name : (Windows) load OneAPI environment variables
185
- if : contains(matrix.os,'windows') && contains(matrix.mpi,'intel')
186
- shell : cmd
187
- run : |
188
- "C:\Program Files (x86)\Intel\oneAPI\setvars.bat"
189
- "C:\Program Files (x86)\Intel\oneAPI\compiler\latest\env\vars.bat"
190
-
191
180
- name : (Windows) Install MSYS2 msmpi package
192
181
if : contains(matrix.os,'windows') && contains(matrix.mpi,'msmpi')
193
182
shell : msys2 {0}
0 commit comments