Skip to content

Commit

Permalink
Separate sources into precision dependent and independent libs
Browse files Browse the repository at this point in the history
  • Loading branch information
awnawab committed May 29, 2024
1 parent e6d9208 commit 6be4850
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 14 deletions.
39 changes: 36 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,17 @@ ecbuild_add_option( FEATURE DOUBLE_PRECISION

set(DEFAULT_PRECISION sp)
if(HAVE_SINGLE_PRECISION)
list(APPEND fiat_components single)
list(APPEND precisions sp)
endif()
if(HAVE_DOUBLE_PRECISION)
set(DEFAULT_PRECISION dp)
list(APPEND precisions dp)
list(APPEND fiat_components double)
endif()

## find fiat
ecbuild_find_package(NAME fiat)
ecbuild_find_package(NAME fiat COMPONENTS ${fiat_components})
if( NOT fiat_FOUND )
if(NOT UTIL_MODULE_PATH)
ecbuild_critical("If not building with fiat, then the path for utility modules must be specified")
Expand Down Expand Up @@ -150,20 +152,49 @@ if( HAVE_ACC )
ecbuild_warn("OpenACC builds force static linking.")
endif()

list(APPEND prec_srcs field_module.F90 field_array_module.F90 field_array_util_module.F90 field_util_module.F90)
list(REMOVE_ITEM srcs ${prec_srcs})

set(LIB_TYPE OBJECT)
if(NOT BUILD_SHARED_LIBS)
set(LIB_TYPE STATIC)
endif()

## build precision independent source files
ecbuild_add_library(
TARGET ${LIBNAME}
TYPE ${LIB_TYPE}
SOURCES ${srcs}
DEFINITIONS $<$<NOT:${fiat_FOUND}>:${FIELD_API_DEFINITIONS}>
PRIVATE_LIBS
$<${HAVE_ACC}:OpenACC::OpenACC_Fortran>
$<${fiat_FOUND}:fiat>
$<${fiat_FOUND}:parkind_${DEFAULT_PRECISION}>
OpenMP::OpenMP_Fortran
)
target_include_directories( ${LIBNAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
set_property(TARGET ${LIBNAME} PROPERTY C_STANDARD 99)
set_target_properties( ${LIBNAME} PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/${LIBNAME} )
target_link_options( ${LIBNAME} PRIVATE $<${HAVE_CUDA}:-cuda> )

# set install location for .mod files
install(DIRECTORY ${CMAKE_BINARY_DIR}/include/${LIBNAME} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

foreach(prec ${precisions})
## add field_api target
ecbuild_add_library(
TARGET ${LIBNAME}_${prec}
SOURCES ${srcs}
SOURCES ${prec_srcs}
DEFINITIONS $<$<NOT:${fiat_FOUND}>:${FIELD_API_DEFINITIONS}>
PUBLIC_LIBS
$<${HAVE_ACC}:OpenACC::OpenACC_Fortran>
PRIVATE_LIBS
${LIBNAME}
$<${fiat_FOUND}:fiat>
$<${fiat_FOUND}:parkind_${prec}>
OpenMP::OpenMP_Fortran
)
target_include_directories( ${LIBNAME}_${prec} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories( ${LIBNAME}_${prec} PRIVATE ${CMAKE_BINARY_DIR}/include/${LIBNAME})
set_property(TARGET ${LIBNAME}_${prec} PROPERTY C_STANDARD 99)
set_target_properties( ${LIBNAME}_${prec} PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/${LIBNAME}_${prec} )
target_link_options( ${LIBNAME}_${prec} PUBLIC $<${HAVE_CUDA}:-cuda> )
Expand All @@ -172,6 +203,8 @@ foreach(prec ${precisions})
target_include_directories( ${LIBNAME}_${prec}
INTERFACE $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include/${LIBNAME}_${prec}>
INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${LIBNAME}_${prec}>
INTERFACE $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include/${LIBNAME}>
INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${LIBNAME}>
)

if( prec MATCHES sp )
Expand Down
12 changes: 6 additions & 6 deletions field_RANKSUFF_array_util_module.fypp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ MODULE FIELD_${RANK}$${SUFF}$_ARRAY_UTIL_MODULE

#:set fieldTypeList = fieldType.getFieldTypeList (ranks=[RANK], kinds=['JP' + SUFF], hasView=True)

USE FIELD_ARRAY_MODULE
USE FIELD_${RANK}$${SUFF}$_ARRAY_MODULE
${fieldType.useParkind1 ()}$

IMPLICIT NONE
Expand All @@ -32,7 +32,7 @@ CONTAINS

SUBROUTINE LOAD_${ft.name}$_ARRAY (KLUN, YD)

USE FIELD_UTIL_MODULE, ONLY : LOAD
USE FIELD_${RANK}$${SUFF}$_UTIL_MODULE, ONLY : LOAD

INTEGER (KIND=JPIM), INTENT (IN) :: KLUN
TYPE (${ft.name}$_ARRAY) :: YD
Expand All @@ -45,15 +45,15 @@ END SUBROUTINE

SUBROUTINE SAVE_${ft.name}$_ARRAY (KLUN, YD)

USE FIELD_UTIL_MODULE, ONLY : SAVE
USE FIELD_${RANK}$${SUFF}$_UTIL_MODULE, ONLY : SAVE

INTEGER (KIND=JPIM), INTENT (IN) :: KLUN
TYPE (${ft.name}$_ARRAY) :: YD
END SUBROUTINE

SUBROUTINE COPY_${ft.name}$_ARRAY (SELF, LDCREATED, LDFIELDAPI)

USE FIELD_UTIL_MODULE, ONLY : COPY
USE FIELD_${RANK}$${SUFF}$_UTIL_MODULE, ONLY : COPY

TYPE (${ft.name}$_ARRAY) :: SELF
LOGICAL, INTENT (IN), OPTIONAL :: LDCREATED, LDFIELDAPI
Expand Down Expand Up @@ -83,7 +83,7 @@ END SUBROUTINE

SUBROUTINE WIPE_${ft.name}$_ARRAY (SELF, LDDELETED, LDFIELDAPI)

USE FIELD_UTIL_MODULE, ONLY : WIPE
USE FIELD_${RANK}$${SUFF}$_UTIL_MODULE, ONLY : WIPE

TYPE (${ft.name}$_ARRAY) :: SELF
LOGICAL, INTENT (IN), OPTIONAL :: LDDELETED, LDFIELDAPI
Expand All @@ -107,7 +107,7 @@ END SUBROUTINE

SUBROUTINE HOST_${ft.name}$_ARRAY (SELF)

USE FIELD_UTIL_MODULE, ONLY : HOST
USE FIELD_${RANK}$${SUFF}$_UTIL_MODULE, ONLY : HOST

TYPE (${ft.name}$_ARRAY) :: SELF

Expand Down
1 change: 0 additions & 1 deletion field_access_module.fypp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ MODULE FIELD_ACCESS_MODULE

#:set fieldTypeList = fieldType.getFieldTypeList ()

USE FIELD_MODULE
${fieldType.useParkind1 ()}$

#:for ft in fieldTypeList
Expand Down
1 change: 0 additions & 1 deletion field_gathscat_module.fypp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ MODULE FIELD_GATHSCAT_MODULE

#:set fieldTypeList = fieldType.getFieldTypeList ()

USE FIELD_MODULE
USE FIELD_ACCESS_MODULE
USE FIELD_FACTORY_MODULE
USE FIELD_GATHSCAT_TYPE_MODULE
Expand Down
2 changes: 1 addition & 1 deletion field_gathscat_type_module.fypp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ MODULE FIELD_GATHSCAT_TYPE_MODULE

#:set fieldTypeList = fieldType.getFieldTypeList (hasView=True)

USE FIELD_MODULE
USE FIELD_2LM_MODULE, ONLY : FIELD_2LM
USE FIELD_ACCESS_MODULE
USE FIELD_FACTORY_MODULE
USE FIELD_SHUFFLE_TYPE_MODULE
Expand Down
1 change: 0 additions & 1 deletion field_shuffle_module.fypp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ MODULE FIELD_SHUFFLE_MODULE

#:set fieldTypeList = fieldType.getFieldTypeList ()

USE FIELD_MODULE
USE FIELD_ACCESS_MODULE
USE FIELD_FACTORY_MODULE
USE FIELD_SHUFFLE_TYPE_MODULE
Expand Down
2 changes: 1 addition & 1 deletion field_shuffle_type_module.fypp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ MODULE FIELD_SHUFFLE_TYPE_MODULE

#:set fieldTypeList = fieldType.getFieldTypeList (hasView=True)

USE FIELD_MODULE
USE FIELD_3IM_MODULE, ONLY : FIELD_3IM
USE FIELD_ACCESS_MODULE
USE FIELD_FACTORY_MODULE
${fieldType.useParkind1 ()}$
Expand Down

0 comments on commit 6be4850

Please sign in to comment.