CMake updates:

Add build folder as Include for generated files
Add install option for copying Fortran mod files to include folder
Add PRI defines to win32defs file
Exclude mingw from extra flags
This commit is contained in:
Allen Byrne 2020-07-15 10:27:06 -05:00
parent 7db1ff03a1
commit 271208dceb
11 changed files with 137 additions and 11 deletions

View File

@ -969,6 +969,17 @@ if (EXISTS "${HDF5_SOURCE_DIR}/fortran" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/for
endif ()
endif ()
#option (HDF5_INSTALL_MOD_FORTRAN "Copy FORTRAN mod files to include directory (NO SHARED STATIC)" "NO")
set (HDF5_INSTALL_MOD_FORTRAN "SHARED" CACHE STRING "Copy FORTRAN mod files to include directory (NO SHARED STATIC)")
set_property (CACHE HDF5_INSTALL_MOD_FORTRAN PROPERTY STRINGS NO SHARED STATIC)
if (NOT HDF5_INSTALL_MOD_FORTRAN MATCHES "NO")
if (NOT BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS)
set (HDF5_INSTALL_MOD_FORTRAN "STATIC")
elseif (BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS)
set (HDF5_INSTALL_MOD_FORTRAN "SHARED")
endif ()
endif ()
add_subdirectory (fortran)
if (HDF5_BUILD_HL_LIB)
if (EXISTS "${HDF5_SOURCE_DIR}/hl/fortran" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/hl/fortran")

View File

@ -85,7 +85,7 @@ if (NOT MSVC AND NOT MINGW)
list (APPEND H5_CXXFLAGS0 "-Wsign-compare -Wtrigraphs -Wwrite-strings")
endif()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED
if (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_LOADED
AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8)
# add the general CXX flags for g++ compiler versions 4.8 and above.
ADD_H5_FLAGS (HDF5_CMAKE_CXX_FLAGS "${HDF5_SOURCE_DIR}/config/gnu-warnings/cxx-general")

View File

@ -48,7 +48,7 @@ endif ()
# CDash is configured to only allow 3000 warnings, so
# break into groups (from the config/gnu-flags file)
#-----------------------------------------------------------------------------
if (NOT MSVC)
if (NOT MSVC AND NOT MINGW)
# General flags
if (CMAKE_Fortran_COMPILER_ID STREQUAL "Intel")
ADD_H5_FLAGS (HDF5_CMAKE_Fortran_FLAGS "${HDF5_SOURCE_DIR}/config/intel-warnings/ifort-general")

View File

@ -23,6 +23,9 @@ set (HDF_PACKAGE_NAMESPACE "hdf5::" CACHE STRING "Name for HDF package namespace
set (HDF5_BUILD_FORTRAN ON CACHE BOOL "Build FORTRAN support" FORCE)
set (HDF5_INSTALL_MOD_FORTRAN "NO" CACHE STRING "Copy FORTRAN mod files to include directory (NO SHARED STATIC)" FORCE)
set_property (CACHE HDF5_INSTALL_MOD_FORTRAN PROPERTY STRINGS NO SHARED STATIC)
set (HDF5_BUILD_GENERATORS ON CACHE BOOL "Build Test Generators" FORCE)
set (HDF5_ENABLE_Z_LIB_SUPPORT ON CACHE BOOL "Enable Zlib Filters" FORCE)

View File

@ -2,3 +2,7 @@
-Wno-inline
-Wno-missing-format-attribute
-Wno-missing-noreturn
# NOTE: -pedantic includes -Woverlength-strings which triggers a warning
# regarding the library settings string (H5libhdf5_settings). We'll turn
# it off here but leave it on in the developer flags.
-Wno-overlength-strings

View File

@ -412,6 +412,16 @@ if (NOT ONLY_SHARED_LIBS)
COMPONENT
fortheaders
)
if (HDF5_INSTALL_MOD_FORTRAN MATCHES "STATIC")
install (
FILES
${mod_files}
DESTINATION
${HDF5_INSTALL_INCLUDE_DIR}
COMPONENT
fortheaders
)
endif ()
endif ()
if (BUILD_SHARED_LIBS)
@ -445,6 +455,16 @@ if (BUILD_SHARED_LIBS)
COMPONENT
fortheaders
)
if (HDF5_INSTALL_MOD_FORTRAN MATCHES "SHARED")
install (
FILES
${modsh_files}
DESTINATION
${HDF5_INSTALL_INCLUDE_DIR}
COMPONENT
fortheaders
)
endif ()
endif ()
#-----------------------------------------------------------------------------

View File

@ -234,7 +234,6 @@ if (NOT ONLY_SHARED_LIBS)
${MOD_BUILD_DIR}/h5lt_const.mod
${MOD_BUILD_DIR}/h5im.mod
)
install (
FILES
${mod_files}
@ -243,6 +242,16 @@ if (NOT ONLY_SHARED_LIBS)
COMPONENT
fortheaders
)
if (HDF5_INSTALL_MOD_FORTRAN MATCHES "STATIC")
install (
FILES
${mod_files}
DESTINATION
${HDF5_INSTALL_INCLUDE_DIR}
COMPONENT
fortheaders
)
endif ()
endif ()
if (BUILD_SHARED_LIBS)
set (modsh_files
@ -261,6 +270,16 @@ if (BUILD_SHARED_LIBS)
COMPONENT
fortheaders
)
if (HDF5_INSTALL_MOD_FORTRAN MATCHES "SHARED")
install (
FILES
${modsh_files}
DESTINATION
${HDF5_INSTALL_INCLUDE_DIR}
COMPONENT
fortheaders
)
endif ()
endif ()
#-----------------------------------------------------------------------------

View File

@ -624,6 +624,7 @@ The config/cmake/cacheinit.cmake file can override the following values.
---------------- General Build Options ---------------------
BUILD_SHARED_LIBS "Build Shared Libraries" ON
BUILD_STATIC_LIBS "Build Static Libraries" ON
BUILD_STATIC_EXECS "Build Static Executables" OFF
BUILD_TESTING "Build HDF5 Unit Testing" ON
@ -636,6 +637,7 @@ HDF5_BUILD_HL_LIB "Build HIGH Level HDF5 Library" ON
HDF5_BUILD_TOOLS "Build HDF5 Tools" ON
---------------- HDF5 Advanced Options ---------------------
ONLY_SHARED_LIBS "Only Build Shared Libraries" OFF
ALLOW_UNSUPPORTED "Allow unsupported combinations of configure options" OFF
HDF5_EXTERNAL_LIB_PREFIX "Use prefix for custom library naming." ""
HDF5_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF
@ -676,6 +678,12 @@ if (CMAKE_BUILD_TYPE MATCHES Debug)
HDF5_ENABLE_INSTRUMENT "Instrument The library" OFF
if (HDF5_TEST_VFD)
HDF5_TEST_FHEAP_VFD "Execute fheap test with different VFDs" ON
if (HDF5_BUILD_FORTRAN)
HDF5_INSTALL_MOD_FORTRAN "Copy FORTRAN mod files to include directory (NO SHARED STATIC)" "XX"
if (BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is SHARED
if (BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is SHARED
if (NOT BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is STATIC
if (NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) default HDF5_INSTALL_MOD_FORTRAN is SHARED
---------------- External Library Options ---------------------
HDF5_ALLOW_EXTERNAL_SUPPORT "Allow External Library Building (NO GIT TGZ)" "NO"

View File

@ -46,6 +46,31 @@ New Features
Configuration:
-------------
- CMake option to link the generated Fortran MOD files into the include
directory.
The Fortran generation of MOD files by a Fortran compile can produce
different binary files between SHARED and STATIC compiles with different
compilers and/or different platforms. Note that it has been found that
different versions of Fortran compilers will produce incompatible MOD
files. Currently, CMake will locate these MOD files in subfolders of
the include directory and add that path to the Fortran library target
in the CMake config file, which can be used by the CMake find library
process. For other build systems using the binary from a CMake install,
a new CMake configuration can be used to copy the pre-chosen version
of the Fortran MOD files into the install include directory.
The default will depend on the configuration of
BUILD_STATIC_LIBS and BUILD_SHARED_LIBS:
YES YES Default to SHARED
YES NO Default to STATIC
NO YES Default to SHARED
NO NO Default to SHARED
The defaults can be overriden by setting the config option
HDF5_INSTALL_MOD_FORTRAN to one of NO, SHARED, or STATIC
(ADB - 2020/07/9, HDFFV-11116)
- CMake option to use AEC (open source SZip) library instead of SZip
The open source AEC library is a replacement library for SZip. In

View File

@ -1135,7 +1135,7 @@ if (NOT ONLY_SHARED_LIBS)
add_library (${HDF5_LIB_TARGET} STATIC ${common_SRCS} ${gen_SRCS} ${H5_PUBLIC_HEADERS} ${H5_PRIVATE_HEADERS} ${H5_GENERATED_HEADERS})
target_include_directories (${HDF5_LIB_TARGET}
PRIVATE "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>"
INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>;$<BUILD_INTERFACE:${HDF5_BINARY_DIR}>"
)
target_compile_options(${HDF5_LIB_TARGET} PRIVATE "${HDF5_CMAKE_C_FLAGS}")
target_compile_definitions(${HDF5_LIB_TARGET}
@ -1172,7 +1172,7 @@ if (BUILD_SHARED_LIBS)
target_include_directories (${HDF5_LIBSH_TARGET}
PRIVATE "${HDF5_SRC_DIR};${HDF5_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>"
PUBLIC "$<$<BOOL:${HDF5_ENABLE_HDFS}>:${HDFS_INCLUDE_DIR}>"
INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
INTERFACE "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>;$<BUILD_INTERFACE:${HDF5_BINARY_DIR}>"
)
target_compile_options(${HDF5_LIBSH_TARGET} PRIVATE "${HDF5_CMAKE_C_FLAGS}")
target_compile_definitions(${HDF5_LIBSH_TARGET}

View File

@ -20,6 +20,45 @@
* inside H5private.h
*
*/
#ifndef H5_HAVE_INTTYPES_H
/* The following definitions should be suitable for 64-bit Windows, which is
* LLP64, and for 32-bit Windows, which is ILP32. Those are the only
* platforms where <inttypes.h> is likely to be missing. VS2015 and later
* *may* provide these definitions.
*/
#ifdef _WIN64
# define PRIdPTR "lld"
# define PRIoPTR "llo"
# define PRIuPTR "llu"
# define PRIxPTR "llx"
#else /* _WIN64 */
# define PRIdPTR "ld"
# define PRIoPTR "lo"
# define PRIuPTR "lu"
# define PRIxPTR "lx"
#endif /* _WIN64 */
# define PRId8 "d"
# define PRIo8 "o"
# define PRIu8 "u"
# define PRIx8 "x"
# define PRId16 "d"
# define PRIo16 "o"
# define PRIu16 "u"
# define PRIx16 "x"
# define PRId32 "d"
# define PRIo32 "o"
# define PRIu32 "u"
# define PRIx32 "x"
# define PRId64 "lld"
# define PRIo64 "llo"
# define PRIu64 "llu"
# define PRIx64 "llx"
# define PRIdMAX "lld"
# define PRIoMAX "llo"
# define PRIuMAX "llu"
# define PRIxMAX "llx"
#endif
/*
* _MSC_VER = 1900 VS2015
@ -41,11 +80,6 @@ typedef __int64 h5_stat_size_t;
#define HDfstat(F,B) _fstati64(F,B)
#define HDisatty(F) _isatty(F)
/* The isnan function needs underscore in VS2012 and earlier */
#if (_MSC_VER <= 1700)
#define HDisnan(X) _isnan(X)
#endif /* MSC_VER < 1700 */
#define HDgetcwd(S,Z) _getcwd(S,Z)
#define HDgetdcwd(D,S,Z) _getdcwd(D,S,Z)
#define HDgetdrive() _getdrive()
@ -111,8 +145,10 @@ struct timespec
};
#endif /* MSC_VER < 1900 */
/* The round functions do not exist in VS2012 and earlier */
#if (_MSC_VER <= 1700)
/* The isnan function needs underscore in VS2012 and earlier */
#define HDisnan(X) _isnan(X)
/* The round functions do not exist in VS2012 and earlier */
#define HDllround(V) Wllround(V)
#define HDllroundf(V) Wllroundf(V)
#define HDlround(V) Wlround(V)