summaryrefslogtreecommitdiffstats
path: root/fortran/src/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'fortran/src/CMakeLists.txt')
-rw-r--r--fortran/src/CMakeLists.txt229
1 files changed, 229 insertions, 0 deletions
diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
new file mode 100644
index 0000000..dc68891
--- /dev/null
+++ b/fortran/src/CMakeLists.txt
@@ -0,0 +1,229 @@
+cmake_minimum_required (VERSION 2.8)
+PROJECT (HDF5_F90_SRC C CXX Fortran)
+
+#-----------------------------------------------------------------------------
+# When building utility executables that generate other (source) files :
+# we make use of the following variables defined in the root CMakeLists.
+# Certain systems may add /Debug or /Release to output paths
+# and we need to call the executable from inside the CMake configuration
+#-----------------------------------------------------------------------------
+#inherit EXE_EXT from parent HDF5 cmake project
+#inherit CFG_INIT from parent HDF5 cmake project
+
+#-----------------------------------------------------------------------------
+# Setup the Fortran auto-detection utilities
+# H5test_kind(_SIZEOF).f90 used to generate H5fortran_detect.f90
+# H5fortran_detect.f90 used to generate H5fort_type_defines.h
+# H5fort_type_defines.h used to generate H5f90i_gen.h + H5fortran_types.f90
+#-----------------------------------------------------------------------------
+IF (FORTRAN_HAVE_SIZEOF)
+ ADD_EXECUTABLE (H5test_FortranHavekind
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind_SIZEOF.f90
+ )
+ELSE (FORTRAN_HAVE_SIZEOF)
+ ADD_EXECUTABLE (H5test_FortranHavekind
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind.f90
+ )
+ENDIF (FORTRAN_HAVE_SIZEOF)
+IF (WIN32)
+ IF (MSVC)
+ IF (BUILD_SHARED_LIBS)
+ SET_TARGET_PROPERTIES (H5test_FortranHavekind
+ PROPERTIES
+ COMPILE_FLAGS "/MT"
+ )
+ ENDIF (BUILD_SHARED_LIBS)
+ SET_TARGET_PROPERTIES (H5test_FortranHavekind
+ PROPERTIES
+ LINK_FLAGS "/SUBSYSTEM:CONSOLE"
+ )
+ ENDIF (MSVC)
+ENDIF (WIN32)
+SET_TARGET_PROPERTIES (H5test_FortranHavekind PROPERTIES LINKER_LANGUAGE Fortran)
+
+SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5test_FortranHavekind${EXE_EXT})
+ADD_CUSTOM_COMMAND (
+ OUTPUT ${HDF5_F90_BINARY_DIR}/H5fortran_detect.f90
+ COMMAND ${CMD}
+ ARGS > ${HDF5_F90_BINARY_DIR}/H5fortran_detect.f90
+ WORKING_DIRECTORY ${HDF5_F90_BINARY_DIR}
+ DEPENDS H5test_FortranHavekind
+)
+#-----------------------------------------------------------------------------
+ADD_EXECUTABLE (H5fortran_detect
+ ${HDF5_F90_BINARY_DIR}/H5fortran_detect.f90
+)
+IF (WIN32)
+ IF (MSVC)
+ IF (BUILD_SHARED_LIBS)
+ SET_TARGET_PROPERTIES (H5fortran_detect
+ PROPERTIES
+ COMPILE_FLAGS "/MT"
+ )
+ ENDIF (BUILD_SHARED_LIBS)
+ SET_TARGET_PROPERTIES (H5fortran_detect
+ PROPERTIES
+ LINK_FLAGS "/SUBSYSTEM:CONSOLE"
+ )
+ ENDIF (MSVC)
+ENDIF (WIN32)
+SET_TARGET_PROPERTIES (H5test_FortranHavekind PROPERTIES LINKER_LANGUAGE Fortran)
+
+SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5fortran_detect${EXE_EXT})
+ADD_CUSTOM_COMMAND (
+ OUTPUT ${HDF5_F90_BINARY_DIR}/H5fort_type_defines.h
+ COMMAND ${CMD}
+ ARGS > ${HDF5_F90_BINARY_DIR}/H5fort_type_defines.h
+ WORKING_DIRECTORY ${HDF5_F90_BINARY_DIR}
+ DEPENDS H5fortran_detect
+)
+
+#-----------------------------------------------------------------------------
+ADD_EXECUTABLE (H5match_types
+ ${HDF5_F90_BINARY_DIR}/H5fort_type_defines.h
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5match_types.c
+)
+SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5match_types${EXE_EXT})
+ADD_CUSTOM_COMMAND (
+ OUTPUT ${HDF5_F90_BINARY_DIR}/H5f90i_gen.h
+ ${HDF5_F90_BINARY_DIR}/H5fortran_types.f90
+ COMMAND ${CMD}
+ WORKING_DIRECTORY ${HDF5_F90_BINARY_DIR}
+ DEPENDS H5match_types
+)
+
+#-----------------------------------------------------------------------------
+# f90CStub lib
+#-----------------------------------------------------------------------------
+SET (f90CStub_C_SRCS
+ # generated files
+ ${HDF5_F90_BINARY_DIR}/H5f90i_gen.h
+
+ # normal distribution
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5f90kit.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5_f.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Af.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Df.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Ef.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Ff.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Gf.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5If.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Lf.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Of.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Pf.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Rf.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Sf.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Tf.c
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Zf.c
+)
+
+IF (H5_HAVE_PARALLEL)
+ SET (f90CStub_C_SRCS
+ ${f90CStub_C_SRCS}
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5FDmpiof.c
+ )
+ENDIF (H5_HAVE_PARALLEL)
+
+SET_SOURCE_FILES_PROPERTIES (${f90CStub_C_SRCS} PROPERTIES LANGUAGE C)
+
+ADD_LIBRARY (${HDF5_F90_C_LIB_TARGET} ${LIB_TYPE} ${f90CStub_C_SRCS})
+TARGET_LINK_LIBRARIES (${HDF5_F90_C_LIB_TARGET} ${HDF5_LIB_TARGET})
+SET_GLOBAL_VARIABLE (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_F90_C_LIB_TARGET}")
+H5_SET_LIB_OPTIONS (${HDF5_F90_C_LIB_TARGET} ${HDF5_F90_C_LIB_NAME} ${LIB_TYPE})
+
+#-----------------------------------------------------------------------------
+# Fortran Real Size
+#-----------------------------------------------------------------------------
+IF (FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
+ # default real is 4 bytes, so include double signatures
+ SET (F_DBLE "Include")
+ELSE (FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
+ # default real is 8 bytes, so exclude double signatures
+ SET (F_DBLE "Exclude")
+ENDIF (FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
+
+#-----------------------------------------------------------------------------
+# Fortran Modules
+#-----------------------------------------------------------------------------
+SET (f90_F_SRCS
+ # generated files
+ ${HDF5_F90_BINARY_DIR}/H5fortran_types.f90
+
+ # normal distribution
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5f90global.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5_ff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Aff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Dff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Eff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Fff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Gff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Iff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Lff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Off.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Pff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Rff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Sff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Tff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5Zff.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5_DBLE_Interface${F_DBLE}.f90
+)
+
+#-----------------------------------------------------------------------------
+# Add H5FDMPIO if parallel
+#-----------------------------------------------------------------------------
+IF (H5_HAVE_PARALLEL)
+ SET (f90_F_SRCS
+ ${f90_F_SRCS}
+ ${HDF5_F90_SRC_SOURCE_DIR}/HDF5mpio.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5FDmpioff.f90
+ )
+ELSE (H5_HAVE_PARALLEL)
+ SET (f90_F_SRCS
+ ${f90_F_SRCS}
+ ${HDF5_F90_SRC_SOURCE_DIR}/HDF5.f90
+ )
+ENDIF (H5_HAVE_PARALLEL)
+
+#-----------------------------------------------------------------------------
+# Add Main fortran library
+#-----------------------------------------------------------------------------
+ADD_LIBRARY (${HDF5_F90_LIB_TARGET} ${LIB_TYPE} ${f90_F_SRCS})
+IF (WIN32)
+ IF (BUILD_SHARED_LIBS)
+ SET_PROPERTY (TARGET ${HDF5_F90_LIB_TARGET}
+ APPEND PROPERTY COMPILE_DEFINITIONS
+ BUILD_HDF5_DLL
+ )
+ IF (MSVC)
+ SET_TARGET_PROPERTIES (${HDF5_F90_LIB_TARGET}
+ PROPERTIES
+ COMPILE_FLAGS "/dll"
+ LINK_FLAGS "/SUBSYSTEM:CONSOLE /DLL /DEF:${HDF5_F90_SRC_SOURCE_DIR}/hdf5_fortrandll.def"
+ )
+ ENDIF (MSVC)
+ ENDIF (BUILD_SHARED_LIBS)
+ SET_PROPERTY (TARGET ${HDF5_F90_LIB_TARGET}
+ APPEND PROPERTY COMPILE_DEFINITIONS
+ HDF5F90_WINDOWS
+ )
+ENDIF (WIN32)
+SET_TARGET_PROPERTIES (${HDF5_F90_LIB_TARGET} PROPERTIES LINKER_LANGUAGE Fortran)
+TARGET_LINK_LIBRARIES (${HDF5_F90_LIB_TARGET} ${HDF5_F90_C_LIB_TARGET} ${HDF5_LIB_TARGET})
+SET_GLOBAL_VARIABLE (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_F90_LIB_TARGET}")
+H5_SET_LIB_OPTIONS (${HDF5_F90_LIB_TARGET} ${HDF5_F90_LIB_NAME} ${LIB_TYPE})
+
+#-----------------------------------------------------------------------------
+# Add Target(s) to CMake Install for import into other projects
+#-----------------------------------------------------------------------------
+IF (HDF5_EXPORTED_TARGETS)
+ INSTALL (
+ TARGETS
+ ${HDF5_F90_C_LIB_TARGET}
+ ${HDF5_F90_LIB_TARGET}
+ EXPORT
+ ${HDF5_EXPORTED_TARGETS}
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ RUNTIME DESTINATION bin
+ )
+ENDIF (HDF5_EXPORTED_TARGETS)