The AOCC is based on LLVM 12, so the problem rises from the clang / flang support with the libraries.
The test here was done on CentOS 7.9, with AOCC 3.0.0, szip 2.1.1, HDF5 1.12.0, NetCDF-C 4.8.0 and NetCDF-Fortran 4.5.3. Also, a copy of cmake 3.20.3 was built from source with built-in gcc 4.8.5.
These libraries will be installed to the same folder, $NETCDF.
Remember to setup the AOCC by sourcing the setenv_AOCC.sh, and set the PATH and LD_LIBRARY_PATH to $NETCDF/bin and $NETCDF/lib.
1. The szip can be built (static and shared) with configure method without problem:
./configure --prefix=$NETCDF CC=clang; make -j4; make install
2. The HDF5 shared Fortran library can't be built with configure method, for the libtool lacks flang support. If you need static C / Fortran library only , or need shared C library only, you can get away with configure method:
./configure --prefix=$NETCDF --with-szlib=$NETCDF \
--enable-build-mode=production --with-szlib=$NETCDF \
--with-default-api-version=v18 --enable-shared=no \
--enable-fortran=yes CC=clang FC=flang; \
make -j4; make install
or:
./configure --prefix=$NETCDF --with-szlib=$NETCDF \
--enable-build-mode=production --with-szlib=$NETCDF \
--with-default-api-version=v18 --enable-shared=yes \
--enable-fortran=no CC=clang; make -j4; make install
If you do need the HDF5 shared Fortran library built, you'll have to build it with cmake:
mkdir build; cd build; cmake .. -DCMAKE_INSTALL_PREFIX=$NETCDF \
-DCMAKE_C_COMPILER=clang -DCMAKE_Fortran_COMPILER=flang \
-DSZIP_LIBRARY=$NETCDF/lib/libsz.so -SZIP_INCLUDE_DIR=$NETCDF/include \
-DSZIP_USE_EXTERNAL:BOOL=OFF -DZLIB_LIBRARY=/usr/lib64/libz.so \
-DZLIB_INCLUDE_DIR=/usr/include -DZLIB_USE_EXTERNAL:BOOL=OFF \
-DHDF5_BUILD_FORTRAN=ON -DHDF5_ENABLE_SZIP_SUPPORT=ON \
-DHDF5_ENABLE_Z_LIB_SUPPORT=ON -DDEFAULT_API_VERSION=v18 \
-DCMAKE_BUILD_TYPE=Release; make -j4; make install
3. The NetCDF-C can be built with configure method without problem:
./configure --prefix=$NETCDF CPPFLAGS=-I$NETCDF/include \
LDFLAGS=-L$NETCDF/lib CC=clang; make -j4; make install
4. Again, you can get away with configure if you need static NetCDF-Fortran library only:
./configure --prefix=$NETCDF CPPFLAGS=-I$NETCDF/include \
LDFLAGS=-L$NETCDF/lib CC=clang FC=flang F77=flang --enable-shared=no; \
make -j4; make install
But you'll have to use cmake to build shared NetCDF-Fortran library:
mkdir build; cd build; cmake .. -DCMAKE_C_COMPILER=clang \
-DCMAKE_INSTALL_PREFIX=$NETCDF -DCMAKE_INSTALL_LIBDIR=lib \
-DCMAKE_Fortran_COMPILER=flang -DHAVE_SZIP_WRITE=1; \
make -j4; make install
Note that the cmake in NetCDF-Fortran can only build shared library. So if you need both the static and shared libraries, you'll have to it twice.
The resulting libraries can be used to build WRF-ARW 4.2.1, with modified configure.wrf from option 54 (PGI clang/flang dmpar) template. The WRF can run single domain case without error. The WRF is another topic and will not be mentioned here.
No comments:
Post a Comment