Skip to content

[hipfort] [package list]

hipfort/0.4-0-cpeCray-22.08-rocm5.3 (hipfort-0.4-0-cpeCray-22.08-rocm5.3.eb)

This software is archived in the LUMI-EasyBuild-contrib GitHub repository as easybuild/easyconfigs/__archive__/h/hipfort/hipfort-0.4-0-cpeCray-22.08-rocm5.3.eb. The corresponding module would be hipfort/0.4-0-cpeCray-22.08-rocm5.3.

# Created for LUMI by Orian Louant

easyblock = 'CMakeMake'

name = 'hipfort'
version = '0.4-0'
versionsuffix = '-rocm5.3'

local_rocm_version = '5.3.3'

homepage = 'https://rocmdocs.amd.com/projects/hipfort/en/latest/'

whatis = ['Description: FORTRAN interface library for accessing AMD GPU Kernels.']

description = """
 hipfort is a FORTRAN interface library for accessing AMD GPU Kernels. It
 provides interfaces to the following HIP and ROCm libraries:

  - HIP: HIP runtime, hipBLAS, hipSPARSE, hipFFT, hipRAND, hipSOLVER
  - ROCm: rocBLAS, rocSPARSE, rocFFT, rocRAND, rocSOLVER

 The role of this package is to replace the default hipfort installation that 
 only support gfortran. This package provide Fortran modules compatible 
 with the Cray Fortran compiler as well as direct use of hipfort with the 
 Fortran Cray Compiler wrapper (ftn). 

 The main use case is for Fortran code using a mix of OpenACC and HIP kernels as
 only the Cray compiler supports OpenACC on LUMI.
"""

usage = """
 This module can be used in two ways. The first option is to use the AMD 
 provided 'hipfc' compiler script:

  $ hipfc -o out.exe --offload-arch=gfx90a hip_kernels.cpp fortran_code.f90

 With this method, the fortran code and 
 The second option is use the Cray 'ftn' compiler wrapper as you would do to
 compile any fortran code. The appropriate module and library search paths as
 well as library linking flags will be automatically added by the compiler 
 wrappper:

  $ ftn -c fortran_code.f90
  $ CC -xhip -c hip_kernels.cpp
  $ ftn -o out.exe fortran_code.o hip_kernels.o
"""

docurls = ['https://rocmdocs.amd.com/projects/hipfort/en/latest/']
software_license_urls = ['https://github.com/ROCmSoftwarePlatform/hipfort/blob/develop/LICENSE']

local_pkgconfig_content = """
includedir=%(installdir)s/include
libdir=%(installdir)s/lib

Name: hipfort
Description: Fortran interface for AMD GPU kernels
Version: 0.4-0

Libs: -L${libdir} -lhipfort-amdgcn
Cflags: -eT -J${includedir}/hipfort/amdgcn/
"""

toolchain = {'name': 'cpeCray', 'version': '22.08'}

source_urls = ['https://github.com/ROCmSoftwarePlatform/hipfort/archive/refs/tags/']
sources = ['rocm-%s.tar.gz' % local_rocm_version]
checksums = ['593be86502578b68215ffe767c26849fd27d4dbd92c8e76762275805f99e64f5']

builddependencies = [
    ('buildtools', '%(toolchain_version)s', '', True),
]

dependencies = [
    ('rocm/%s' % local_rocm_version, EXTERNAL_MODULE),
]

configopts  = ' -DHIPFORT_COMPILER=ftn'
configopts += ' -DHIPFORT_COMPILER_FLAGS="-ffree -eZ"'
configopts += ' -DHIPFORT_INSTALL_DIR=%(installdir)s'
configopts += ' -DHIPFORT_AR=${CRAY_BINUTILS_BIN_X86_64}/ar'
configopts += ' -DHIPFORT_RANLIB=${CRAY_BINUTILS_BIN_X86_64}/ranlib'

local_pkgconfig_dir = '%(installdir)s/lib/pkgconfig'
local_pkgconfig_file = local_pkgconfig_dir + '/hipfort.pc'

postinstallcmds = [
    'mkdir -p ' + local_pkgconfig_dir,
    'cat <<EOF > ' + local_pkgconfig_file + '\n' + local_pkgconfig_content.replace('$', '\$') + '\nEOF\n',
]

modluafooter = """
prepend_path("PE_FORTRAN_PKGCONFIG_LIBS", "hipfort")
"""

sanity_check_paths = {
    'files': ['bin/hipfc', 'lib/libhipfort-amdgcn.a'],
    'dirs': ['include/hipfort/amdgcn'],
}

moduleclass = 'compiler'

[hipfort] [package list]