Skip to content

Commit

Permalink
Merge branch 'release/2.9.1'
Browse files Browse the repository at this point in the history
* release/2.9.1:
  ECBUILD-391: fix permissions for script
  version bump
  MPIEXEC_EXECUTABLE is what find_package uses for searches for
  Only find MPIEXEC if not already defined
  ECBUILD-392: output cleanup
  ECBUILD-392: Allow user override fftw libs
  ECBUILD-390 Add SUFFIX option to ecbuild_generate_fortran_interfaces
  Set LINK_LIBRARIES for try_run to CMAKE_EXE_LINKER_FLAGS so that the resulting executable can find any runtimes shared libraries.
  ECBUILD-387: (quick-)Fix get_test_data with Ninja
  ECBUILD-388 Don't link ECBUILD_IMPLICIT_LINK_LIBRARIES to object library targets
  Fix detection of the NAG library on Cray
  • Loading branch information
tlmquintino committed Sep 27, 2018
2 parents 85fbf5d + b9a9404 commit d8c1b6c
Show file tree
Hide file tree
Showing 10 changed files with 120 additions and 102 deletions.
158 changes: 81 additions & 77 deletions cmake/FindFFTW.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@
# :FFTW_ROOT: if set, this path is exclusively searched
# :FFTW_DIR: equivalent to FFTW_ROOT
# :FFTW_PATH: equivalent to FFTW_ROOT
# :FFTW_LIBRARY: FFTW library to use
# :FFTW_INCLUDE_DIR: FFTW include directory
# :FFTW_LIBRARIES: User overriden FFTW libraries
# :FFTW_INCLUDES: User overriden FFTW includes directories
#
##############################################################################

Expand Down Expand Up @@ -104,6 +104,7 @@ else()
set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX} )
endif()


if( FFTW_FIND_COMPONENTS )
ecbuild_debug( "FindFFTW: looking for components: ${FFTW_FIND_COMPONENTS}" )
foreach( _component ${FFTW_FIND_COMPONENTS} )
Expand Down Expand Up @@ -136,96 +137,99 @@ else()
set( _include_paths ${PKG_FFTW_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR} )
endif()

#find includes
# find includes

find_path(
FFTW_INCLUDES
NAMES "fftw3.h"
PATHS ${_include_paths}
PATH_SUFFIXES "include"
${_default_paths}
)
if( NOT FFTW_INCLUDES ) # allow user to override with FFTW_INCLUDES

if( NOT FFTW_INCLUDES )
ecbuild_warn("FindFFTW: fftw include headers not found")
endif()
find_path(
FFTW_INCLUDES
NAMES "fftw3.h"
PATHS ${_include_paths}
PATH_SUFFIXES "include"
${_default_paths}
)

#find libs

if( _require_dp )
find_library(
FFTW_LIB
NAMES "fftw3"
PATHS ${_lib_paths}
PATH_SUFFIXES "lib" "lib64"
${_default_paths}
)
if( NOT FFTW_LIB )
ecbuild_warn("FindFFTW: double precision required, but fftw3 was not found")
endif()
endif()
if( NOT FFTW_INCLUDES )
ecbuild_warn("FindFFTW: fftw include headers not found")
endif()

if( _require_sp )
find_library(
FFTWF_LIB
NAMES "fftw3f"
PATHS ${_lib_paths}
PATH_SUFFIXES "lib" "lib64"
${_default_paths}
)
if( NOT FFTWF_LIB )
ecbuild_warn("FindFFTW: single precision required, but fftw3f was not found")
endif()
endif()

if( _require_lp )
find_library(
FFTWL_LIB
NAMES "fftw3l"
PATHS ${_lib_paths}
PATH_SUFFIXES "lib" "lib64"
${_default_paths}
)
if( NOT FFTWL_LIB )
ecbuild_warn("FindFFTW: long double precision required, but fftw3l was not found")
endif()
endif()
# find libs

if( _require_qp )
find_library(
FFTWQ_LIB
NAMES "fftw3q"
PATHS ${_lib_paths}
PATH_SUFFIXES "lib" "lib64"
${_default_paths}
)
if( NOT FFTWQ_LIB )
ecbuild_warn("FindFFTW: quad precision required, but fftw3q was not found")
endif()
endif()
if( NOT FFTW_LIBRARIES ) # allow user to override with FFTW_LIBRARIES (e.g. for MKL implementation)

set(FFTW_LIBRARIES ${FFTW_LIB} ${FFTWF_LIB} ${FFTWL_LIB} ${FFTWQ_LIB})
if( _require_dp )
find_library(
FFTW_LIB
NAMES "fftw3"
PATHS ${_lib_paths}
PATH_SUFFIXES "lib" "lib64"
${_default_paths}
)
if( NOT FFTW_LIB )
ecbuild_warn("FindFFTW: double precision required, but fftw3 was not found")
else()
ecbuild_info("FFTW double precision: ${FFTW_LIB}")
endif()
endif()

if( _require_sp )
find_library(
FFTWF_LIB
NAMES "fftw3f"
PATHS ${_lib_paths}
PATH_SUFFIXES "lib" "lib64"
${_default_paths}
)
if( NOT FFTWF_LIB )
ecbuild_warn("FindFFTW: single precision required, but fftw3f was not found")
else()
ecbuild_info("FFTW single precision: ${FFTWF_LIB}")
endif()
endif()

if( _require_lp )
find_library(
FFTWL_LIB
NAMES "fftw3l"
PATHS ${_lib_paths}
PATH_SUFFIXES "lib" "lib64"
${_default_paths}
)
if( NOT FFTWL_LIB )
ecbuild_warn("FindFFTW: long double precision required, but fftw3l was not found")
else()
ecbuild_info("FFTW long double precision: ${FFTWL_LIB}")
endif()
endif()

if( _require_qp )
find_library(
FFTWQ_LIB
NAMES "fftw3q"
PATHS ${_lib_paths}
PATH_SUFFIXES "lib" "lib64"
${_default_paths}
)
if( NOT FFTWQ_LIB )
ecbuild_warn("FindFFTW: quad precision required, but fftw3q was not found")
else()
ecbuild_info("FFTW quad precision: ${FFTWQ_LIB}")
endif()
endif()

set(FFTW_LIBRARIES ${FFTW_LIB} ${FFTWF_LIB} ${FFTWL_LIB} ${FFTWQ_LIB})

ecbuild_info("FFTW summary:")
ecbuild_info("FFTW includes: ${FFTW_INCLUDES}")
if( _require_dp )
ecbuild_info("FFTW double precision: ${FFTW_LIB}")
endif()
if( _require_sp )
ecbuild_info("FFTW single precision: ${FFTWF_LIB}")
endif()
if( _require_lp )
ecbuild_info("FFTW long double precision: ${FFTWL_LIB}")
endif()
if( _require_qp )
ecbuild_info("FFTW quad precision: ${FFTWQ_LIB}")
endif()

ecbuild_info("FFTW includes : ${FFTW_INCLUDES}")
ecbuild_info("FFTW libraries: ${FFTW_LIBRARIES}")

set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} )

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(FFTW DEFAULT_MSG
FFTW_INCLUDES FFTW_LIBRARIES)

mark_as_advanced(FFTW_INCLUDES FFTW_LIBRARIES FFTW_LIB FFTWF_LIB FFTWL_LIB)
mark_as_advanced(FFTW_INCLUDES FFTW_LIBRARIES FFTW_LIB FFTWF_LIB FFTWL_LIB FFTWQ_LIB)
4 changes: 2 additions & 2 deletions cmake/FindNAG.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@
# NAG_DIR - root folder of the NAG installation
# NAG_PATH - root folder of the NAG installation

find_path( NAG_INCLUDE_DIR nag_library.mod
find_path( NAG_INCLUDE_DIR nag_precisions.mod
PATHS ${NAG_PATH} ENV NAG_PATH
${NAG_DIR} ENV NAG_DIR
PATH_SUFFIXES include
NO_DEFAULT_PATH )

find_library( NAG_LIBRARY NAMES nag nag_nag
find_library( NAG_LIBRARY NAMES nag
PATHS ${NAG_PATH} ENV NAG_PATH
${NAG_DIR} ENV NAG_DIR
PATH_SUFFIXES lib lib64
Expand Down
4 changes: 2 additions & 2 deletions cmake/VERSION.cmake
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
set( ECBUILD_MAJOR_VERSION "2" )
set( ECBUILD_MINOR_VERSION "9" )
set( ECBUILD_PATCH_VERSION "0" )
set( ECBUILD_PATCH_VERSION "1" )

set( ECBUILD_VERSION_STR "2.9.0" )
set( ECBUILD_VERSION_STR "2.9.1" )

set( ECBUILD_MACRO_VERSION "${ECBUILD_VERSION_STR}" )
2 changes: 1 addition & 1 deletion cmake/ecbuild_add_library.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ function( ecbuild_add_library_impl )
endif()
endif()

if( ECBUILD_IMPLICIT_LINK_LIBRARIES )
if( NOT _PAR_TYPE MATCHES "OBJECT" AND ECBUILD_IMPLICIT_LINK_LIBRARIES )
target_link_libraries( ${_PAR_TARGET} ${ECBUILD_IMPLICIT_LINK_LIBRARIES} )
endif()

Expand Down
10 changes: 8 additions & 2 deletions cmake/ecbuild_add_test.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,14 @@ macro( ecbuild_add_test )
set( _PAR_ENABLED 0 )
elseif( _PAR_MPI )
# Check for MPIEXEC if it not set
find_program( MPIEXEC NAMES mpiexec mpirun lamexec srun
DOC "Executable for running MPI programs." )
if( MPIEXEC_EXECUTABLE )
set( MPIEXEC ${MPIEXEC_EXECUTABLE} )
endif()
if( NOT MPIEXEC )
find_program( MPIEXEC NAMES mpiexec mpirun lamexec srun
DOC "Executable for running MPI programs." )
endif()

if( MPIEXEC )
set(MPIEXEC_NUMPROC_FLAG "-np" CACHE STRING "Flag used by MPI to specify the number of processes for MPIEXEC")
ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): Running using ${MPIEXEC} on ${_PAR_MPI} MPI rank(s)")
Expand Down
20 changes: 10 additions & 10 deletions cmake/ecbuild_generate_fortran_interfaces.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ function( ecbuild_generate_fortran_interfaces )
endif()

set( options )
set( single_value_args TARGET DESTINATION PARALLEL INCLUDE_DIRS GENERATED SOURCE_DIR FCM_CONFIG_FILE )
set( single_value_args TARGET DESTINATION PARALLEL INCLUDE_DIRS GENERATED SOURCE_DIR SUFFIX FCM_CONFIG_FILE )
set( multi_value_args DIRECTORIES )

cmake_parse_arguments( P "${options}" "${single_value_args}" "${multi_value_args}" ${_FIRST_ARG} ${ARGN} )
Expand All @@ -57,7 +57,11 @@ function( ecbuild_generate_fortran_interfaces )
ecbuild_debug_var( P_PARALLEL )

if( NOT DEFINED P_SOURCE_DIR )
ecbuild_error( "ecbuild_generate_fortran_interfaces: SOURCE_DIR argument missing")
set( P_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" )
endif()

if( NOT DEFINED P_SUFFIX )
set( P_SUFFIX ".intfb.h" )
endif()

if( DEFINED P_FCM_CONFIG_FILE )
Expand All @@ -75,13 +79,9 @@ function( ecbuild_generate_fortran_interfaces )
endif()

if( NOT FCM_CONFIG_FILE )
set( DEFAULT_FCM_CONFIG_FILE "${ECBUILD_MACROS_DIR}/fcm-make-interfaces.cfg" )
if( EXISTS ${DEFAULT_FCM_CONFIG_FILE} )
set( FCM_CONFIG_FILE ${DEFAULT_FCM_CONFIG_FILE} )
ecbuild_debug( "ecbuild_generate_fortran_interfaces: fcm configuration found in ${DEFAULT_FCM_CONFIG_FILE}" )
else()
ecbuild_debug( "ecbuild_generate_fortran_interfaces: fcm configuration not found in ${DEFAULT_FCM_CONFIG_FILE}" )
endif()
set( FCM_CONFIG_FILE "${ECBUILD_MACROS_DIR}/fcm-make-interfaces.cfg" )
set( FCM_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/fcm-make-interfaces.${P_TARGET}.cfg" )
configure_file( "${ECBUILD_MACROS_DIR}/fcm-make-interfaces.cfg.in" "${FCM_CONFIG_FILE}" @ONLY )
endif()

ecbuild_debug_var( FCM_CONFIG_FILE )
Expand Down Expand Up @@ -110,7 +110,7 @@ function( ecbuild_generate_fortran_interfaces )
foreach( fortran_file ${fortran_files} )
#list( APPEND fullpath_fortran_files ${CMAKE_CURRENT_SOURCE_DIR}/${fortran_file} )
get_filename_component(base ${fortran_file} NAME_WE)
set( interface_file "${CMAKE_CURRENT_BINARY_DIR}/interfaces/include/${base}.intfb.h" )
set( interface_file "${CMAKE_CURRENT_BINARY_DIR}/interfaces/include/${base}${P_SUFFIX}" )
list( APPEND interface_files ${interface_file} )
set_source_files_properties( ${interface_file} PROPERTIES GENERATED TRUE )
math(EXPR _cnt "${_cnt}+1")
Expand Down
14 changes: 9 additions & 5 deletions cmake/ecbuild_get_test_data.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -405,12 +405,16 @@ endfunction()\n\n" )
TARGET __get_data_${_p_TARGET}_${_name}
NAME ${_file} ${_dirname} ${_md5} ${_extract} ${_nocheck} )

# The option /fast disables dependency checking on a target, see
# https://cmake.org/Wiki/CMake_FAQ#Is_there_a_way_to_skip_checking_of_dependent_libraries_when_compiling.3F
if( WIN32 )
set( _fast "\fast" )
if ( ${CMAKE_GENERATOR} MATCHES Ninja )
set( _fast "" )
else()
set( _fast "/fast" )
# The option /fast disables dependency checking on a target, see
# https://cmake.org/Wiki/CMake_FAQ#Is_there_a_way_to_skip_checking_of_dependent_libraries_when_compiling.3F
if( WIN32 )
set( _fast "\fast" )
else()
set( _fast "/fast" )
endif()
endif()
file( APPEND ${_script}
"exec_check( \"${CMAKE_COMMAND}\" --build \"${CMAKE_BINARY_DIR}\" --target __get_data_${_p_TARGET}_${_name}${_fast} )\n" )
Expand Down
4 changes: 4 additions & 0 deletions cmake/ecbuild_try_run.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,10 @@ function( ecbuild_try_run RUN_RESULT_VAR COMPILE_RESULT_VAR BINDIR SRCFILE )
ecbuild_critical("Unknown keywords given to ecbuild_try_run(): \"${_p_UNPARSED_ARGUMENTS}\"")
endif()

if( CMAKE_EXE_LINKER_FLAGS )
set( _p_LINK_LIBRARIES "${_p_LINK_LIBRARIES} ${CMAKE_EXE_LINKER_FLAGS}" )
endif()

# Build argument list for try_compile
foreach( _opt CMAKE_FLAGS COMPILE_DEFINITIONS LINK_LIBRARIES )
if( _p_${_opt} )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

# FCM configuration file used to auto-generate interface files
# for F77 and F90 files.
# Interface files will have the extention ".intfb.h"
# Interface files will have the extention "@P_SUFFIX@"
# Results will be in a directory "interfaces/include" relative to cwd

# Usage: fcm make --config-file=<path -to-this-file> \
Expand All @@ -31,7 +31,7 @@ interfaces.ns-excl = /
# interfaces.ns-incl = <list of dirs passed at command-line>

# Extention of interface files
interfaces.prop{file-ext.f90-interface} = .intfb.h
interfaces.prop{file-ext.f90-interface} = @P_SUFFIX@

# Do not follow includes
interfaces.prop{no-dep.f.module} = *
Expand Down
2 changes: 1 addition & 1 deletion share/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@
# SOURCE_PACK ecmwf_license_header.txt
# DONT_PACK_DIRS ecbuild )

install( DIRECTORY ecbuild/toolchains DESTINATION ${INSTALL_DATA_DIR} )
install( DIRECTORY ecbuild/toolchains USE_SOURCE_PERMISSIONS DESTINATION ${INSTALL_DATA_DIR} )

0 comments on commit d8c1b6c

Please sign in to comment.