From dada3b2a1aad8decf6960d5ef7d226f82ad93ec9 Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Wed, 29 May 2024 12:20:13 +0000 Subject: [PATCH] Separate sources into precision dependent and independent libs --- CMakeLists.txt | 33 ++++++++++++++++++++++++--- field_RANKSUFF_array_util_module.fypp | 12 +++++----- field_access_module.fypp | 1 - field_gathscat_module.fypp | 1 - field_gathscat_type_module.fypp | 2 +- field_shuffle_module.fypp | 1 - field_shuffle_type_module.fypp | 2 +- 7 files changed, 38 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b7538c..1516f95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,14 +150,42 @@ 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}) + +## build precision independent source files +ecbuild_add_library( + TARGET ${LIBNAME}_prec_independent + SOURCES ${srcs} + DEFINITIONS $<$:${FIELD_API_DEFINITIONS}> + PUBLIC_LIBS + $<${HAVE_ACC}:OpenACC::OpenACC_Fortran> + PRIVATE_LIBS + $<${fiat_FOUND}:fiat> + $<${fiat_FOUND}:parkind_${DEFAULT_PRECISION}> + OpenMP::OpenMP_Fortran + ) + target_include_directories( ${LIBNAME}_prec_independent PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + set_property(TARGET ${LIBNAME}_prec_independent PROPERTY C_STANDARD 99) + set_target_properties( ${LIBNAME}_prec_independent PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/${LIBNAME}_prec_independent ) + target_link_options( ${LIBNAME}_prec_independent PUBLIC $<${HAVE_CUDA}:-cuda> ) + + # export target usage interface + target_include_directories( ${LIBNAME}_prec_independent + INTERFACE $ + INTERFACE $ + ) + # set install location for .mod files + install(DIRECTORY ${CMAKE_BINARY_DIR}/include/${LIBNAME}_prec_independent DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + foreach(prec ${precisions}) ## add field_api target ecbuild_add_library( TARGET ${LIBNAME}_${prec} - SOURCES ${srcs} + SOURCES ${prec_srcs} DEFINITIONS $<$:${FIELD_API_DEFINITIONS}> PUBLIC_LIBS - $<${HAVE_ACC}:OpenACC::OpenACC_Fortran> + ${LIBNAME}_prec_independent PRIVATE_LIBS $<${fiat_FOUND}:fiat> $<${fiat_FOUND}:parkind_${prec}> @@ -166,7 +194,6 @@ foreach(prec ${precisions}) target_include_directories( ${LIBNAME}_${prec} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) 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> ) # export target usage interface target_include_directories( ${LIBNAME}_${prec} diff --git a/field_RANKSUFF_array_util_module.fypp b/field_RANKSUFF_array_util_module.fypp index aaf2653..29ab1d0 100644 --- a/field_RANKSUFF_array_util_module.fypp +++ b/field_RANKSUFF_array_util_module.fypp @@ -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 @@ -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 @@ -45,7 +45,7 @@ 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 @@ -53,7 +53,7 @@ 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 @@ -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 @@ -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 diff --git a/field_access_module.fypp b/field_access_module.fypp index b7e281b..5275cee 100644 --- a/field_access_module.fypp +++ b/field_access_module.fypp @@ -11,7 +11,6 @@ MODULE FIELD_ACCESS_MODULE #:set fieldTypeList = fieldType.getFieldTypeList () -USE FIELD_MODULE ${fieldType.useParkind1 ()}$ #:for ft in fieldTypeList diff --git a/field_gathscat_module.fypp b/field_gathscat_module.fypp index 7a20952..addc234 100644 --- a/field_gathscat_module.fypp +++ b/field_gathscat_module.fypp @@ -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 diff --git a/field_gathscat_type_module.fypp b/field_gathscat_type_module.fypp index d0bd208..1aa0aa9 100644 --- a/field_gathscat_type_module.fypp +++ b/field_gathscat_type_module.fypp @@ -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 diff --git a/field_shuffle_module.fypp b/field_shuffle_module.fypp index 202ac84..f40d7a5 100644 --- a/field_shuffle_module.fypp +++ b/field_shuffle_module.fypp @@ -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 diff --git a/field_shuffle_type_module.fypp b/field_shuffle_type_module.fypp index d482579..89b41b8 100644 --- a/field_shuffle_type_module.fypp +++ b/field_shuffle_type_module.fypp @@ -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 ()}$