diff --git a/CMakeLists.txt b/CMakeLists.txt index e889c01ff6..53432fa1c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -405,23 +405,20 @@ if ( ${USE_MPI} ) # Which may or may not get polluted by the environment # It still technically finds MPI but the output is nonintuitive # saying things like hdf5 or pthread - find_package( MPI REQUIRED COMPONENTS Fortran C ) - list( APPEND PROJECT_COMPILE_DEFINITIONS_OPTIONS - USE_MPI=1 - DM_PARALLEL - ) + # Supply any language-specific flags for interrogation if ( DEFINED WRF_MPI_Fortran_FLAGS AND NOT "${WRF_MPI_Fortran_FLAGS}" STREQUAL "" ) - list( APPEND PROJECT_COMPILE_OPTIONS_OPTIONS - $<$:${WRF_MPI_Fortran_FLAGS}> - ) + set( MPI_Fortran_COMPILER_FLAGS ${WRF_MPI_Fortran_FLAGS} ) endif() if ( DEFINED WRF_MPI_C_FLAGS AND NOT "${WRF_MPI_C_FLAGS}" STREQUAL "" ) - list( APPEND PROJECT_COMPILE_OPTIONS_OPTIONS - $<$:${WRF_MPI_C_FLAGS}> - ) + set( MPI_C_COMPILER_FLAGS ${WRF_MPI_C_FLAGS} ) endif() + find_package( MPI REQUIRED COMPONENTS Fortran C ) + list( APPEND PROJECT_COMPILE_DEFINITIONS_OPTIONS + USE_MPI=1 + DM_PARALLEL + ) # Check if MPI in all its glory has forced IPO down our throats due to hard-coding the wrapper flags # https://www.open-mpi.org/faq/?category=mpi-apps#why-no-rpath LOL! diff --git a/arch/configure_reader.py b/arch/configure_reader.py index f5e3efa153..0da6e52efa 100755 --- a/arch/configure_reader.py +++ b/arch/configure_reader.py @@ -141,7 +141,7 @@ def splitIntoFieldAndFlags( self, field ) : fieldValue = self.kvPairs_[ field ] self.kvPairs_[field] = fieldValue.partition(" ")[0] - self.kvPairs_[field + "_FLAGS"] = fieldValue.partition(" ")[1] + self.kvPairs_[field + "_FLAGS"] = fieldValue.partition(" ")[2] ###################################################################################################################### ## @@ -182,6 +182,26 @@ def sanitize( self ) : # And for final measure strip self.kvPairs_[ key ] = self.kvPairs_[ key ].strip() + # Finally, further sanitize MPI compilers, we don't need to specify underlying + # compiler since CMake already does that + filters = [ + self.kvPairs_[ "SFC" ], + self.kvPairs_[ "SCC" ], + "-compiler" + ] + keysToSanitize = [ "DM_FC_FLAGS", "DM_CC_FLAGS" ] + + for keyToSan in keysToSanitize : + if self.kvPairs_[ keyToSan ] : + allFlags = self.kvPairs_[ keyToSan ].split( " " ) + newFlags = [] + for flag in allFlags : + if not any( [ f in flag for f in filters ] ) : + newFlags.append( flag ) + + # We always need this field updated + self.kvPairs_[ keyToSan ] = " ".join( newFlags ) + def serialCompilersAvailable( self ) : return which( self.kvPairs_["SFC"] ) is not None and which( self.kvPairs_["SCC"] ) is not None