CMakeLists.txt 6.17 KB
Newer Older
1
2
3
project(XdmfCore)
cmake_minimum_required(VERSION 2.6)

4
include(CheckCXXSourceCompiles)
Brian Panneton's avatar
Brian Panneton committed
5
include(SetUpVersion)
6

7
8
if(VERSION_CONTROL_AUTOUPDATE OR 
    NOT EXISTS ${CMAKE_BINARY_DIR}/XdmfVersion.hpp)
9
  VersionCreate("Xdmf" "2" "XDMFCORE_EXPORT" "XdmfCore.hpp")
10
11
endif(VERSION_CONTROL_AUTOUPDATE OR 
    NOT EXISTS ${CMAKE_BINARY_DIR}/XdmfVersion.hpp)
Brian Panneton's avatar
Brian Panneton committed
12

13
14
set(BUILD_SHARED_LIBS true)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
15
16
17
18
19
include_directories(${CMAKE_BINARY_DIR})
set(CMAKE_SKIP_BUILD_RPATH  FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
20

21
22
option(XDMF_BUILD_DSM OFF)

23
mark_as_advanced(CLEAR Boost_INCLUDE_DIR)
24
25
find_package(Boost REQUIRED)
if(Boost_FOUND)
26
27
  include_directories(${Boost_INCLUDE_DIRS})
  mark_as_advanced(FORCE Boost_INCLUDE_DIR)
28
29
endif(Boost_FOUND)

30
31
32
mark_as_advanced(CLEAR HDF5_C_INCLUDE_DIR)
mark_as_advanced(CLEAR HDF5_hdf5_LIBRARY_DEBUG)
mark_as_advanced(CLEAR HDF5_hdf5_LIBRARY_RELEASE)
33
34
find_package(HDF5 REQUIRED)
if(HDF5_FOUND)
35
36
37
  mark_as_advanced(FORCE HDF5_C_INCLUDE_DIR)
  mark_as_advanced(FORCE HDF5_hdf5_LIBRARY_DEBUG)
  mark_as_advanced(FORCE HDF5_hdf5_LIBRARY_RELEASE)
38
  include_directories(${HDF5_INCLUDE_DIRS})
39
  include_directories(${HDF5_C_INCLUDE_DIR})
40
41
  get_filename_component(HDF5_LIBRARY_DIR "${HDF5_hdf5_LIBRARY_RELEASE}" PATH)
  set(XDMF_LIBRARY_DIRS ${XDMF_LIBRARY_DIRS} ${HDF5_LIBRARY_DIR})
42
  set(HDF5_LIBRARIES ${HDF5_hdf5_LIBRARY_RELEASE})
43
44
  # FIXME: Would like to get this info from HDF5 so we don't have conflicting
  # MPI versions
45
46
47
48
  if(HDF5_IS_PARALLEL)
    find_package(MPI REQUIRED)
    if(MPI_FOUND)
      include_directories(${MPI_INCLUDE_PATH})
49
      set(XDMF_LIBRARIES ${XDMF_LIBRARIES} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARY})
50
51
      get_filename_component(MPI_LIBRARY_DIR ${MPI_LIBRARY} PATH)
      set(XDMF_LIBRARY_DIRS ${XDMF_LIBRARY_DIRS} ${MPI_LIBRARY_DIR})
52
53
54
55
    endif(MPI_FOUND)
  endif(HDF5_IS_PARALLEL)
  get_filename_component(HDF5_ROOT "${HDF5_INCLUDE_DIR}/../" REALPATH)
  set(HDF5_BINARY_DIRS ${HDF5_ROOT}/bin ${HDF5_ROOT}/dll)
56
  set(XDMF_LIBRARIES ${XDMF_LIBRARIES} ${HDF5_LIBRARIES})
57
58
  set(XDMF_HDF5_BINARY_DIRS ${HDF5_BINARY_DIRS} PARENT_SCOPE)
  set(XDMF_BINARIES ${XDMF_BINARIES} ${HDF5_BINARY_DIRS})
59
60
61
62
endif(HDF5_FOUND)

find_package(LibXml2 REQUIRED)
if(LIBXML2_FOUND)
63
  include_directories(${LIBXML2_INCLUDE_DIR})
64
65
66
67
68
  get_filename_component(LIBXML2_ROOT "${LIBXML2_INCLUDE_DIR}/../" REALPATH)
  set(LIBXML2_BINARY_DIRS ${LIBXML2_ROOT}/bin)
  set(LIBXML2_BINARY_DIRS ${LIBXML2_BINARY_DIRS} PARENT_SCOPE)
  set(XDMF_LIBRARIES ${XDMF_LIBRARIES} ${LIBXML2_LIBRARIES})
  set(XDMF_BINARIES ${XDMF_BINARIES} ${LIBXML2_BINARY_DIRS})
69
70
endif(LIBXML2_FOUND)

71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# Perform compile-time checks and generate XdmfConfig.hpp
unset(HAVE_BOOST_SHARED_DYNAMIC_CAST CACHE)
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${Boost_INCLUDE_DIRS})
check_cxx_source_compiles("
#include <boost/shared_ptr.hpp>

struct Base { virtual ~Base(){} };
struct Derived : public Base {};

int main(int ac, char * av)
{
  boost::shared_ptr<Base> ptr(new Base());
  boost::shared_dynamic_cast<Derived>(ptr);
}
"
HAVE_BOOST_SHARED_DYNAMIC_CAST)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/XdmfConfig.hpp.in 
               ${CMAKE_BINARY_DIR}/XdmfConfig.hpp)

90
set(XdmfCoreSources
91
92
93
94
  XdmfArray
  XdmfArrayType
  XdmfCoreItemFactory
  XdmfCoreReader
95
  XdmfError
96
97
98
99
100
101
102
  XdmfHDF5Controller
  XdmfHDF5Writer
  XdmfHeavyDataController
  XdmfHeavyDataWriter
  XdmfInformation
  XdmfItem
  XdmfItemProperty
Kenneth Leiter's avatar
Kenneth Leiter committed
103
  XdmfSparseMatrix
104
105
106
107
  XdmfSystemUtils
  ${CMAKE_BINARY_DIR}/XdmfVersion
  XdmfVisitor
  XdmfWriter)
108

109
option(XDMF_BUILD_DSM OFF)
110
if(XDMF_BUILD_DSM)
111
112
113
114
  set(XdmfCoreSources
    ${XdmfCoreSources}
    XdmfHDF5ControllerDSM
    XdmfHDF5WriterDSM)
115
116
117

  find_package(H5FDdsm REQUIRED NO_MODULE)
  if(H5FDdsm_FOUND)
118
119
120
121
    include_directories(${H5FDdsm_INCLUDE_DIR})
    get_filename_component(H5FDdsm_LIBRARY_DIR 
                           "${H5FDdsm_INCLUDE_DIR}/../lib" REALPATH)
    set(XDMF_LIBRARY_DIRS ${XDMF_LIBRARY_DIRS} ${H5FDdsm_LIBRARY_DIR})
122
    get_property(h5fddsm_lib_location TARGET H5FDdsm PROPERTY LOCATION)
123
124
    set(H5FDdsm_LIBRARIES ${h5fddsm_lib_location})
    set(XDMF_LIBRARIES ${XDMF_LIBRARIES} ${H5FDdsm_LIBRARIES})
125
126
127
128
  else(H5FDdsm_FOUND)
    message(SEND_ERROR
      "Cannot find HDF5 DSM!  Please set H5FDdsm_DIR and configure again.")
  endif(H5FDdsm_FOUND)
129
130
endif(XDMF_BUILD_DSM)

131
add_library(XdmfCore ${XdmfCoreSources})
132
133
link_directories(${XDMF_LIBRARY_DIRS})
target_link_libraries(XdmfCore ${XDMF_LIBRARIES})
134

135
if(WIN32)
136
  add_definitions(-D_HDF5USEDLL_ -D_HDF5USEHLDLL_)
137
  set_target_properties(XdmfCore PROPERTIES 
138
139
140
141
142
143
144
145
146
      DEFINE_SYMBOL XdmfCore_EXPORTS)
  if(NOT MSVC10)
	set_target_properties(XdmfCore PROPERTIES
      PREFIX ../
      IMPORT_PREFIX ../
      RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
      LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
      ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
  endif(NOT MSVC10)
147
148
endif(WIN32)

149
if(XDMF_WRAP_JAVA)
150
  XDMF_SWIG_JAVA(XdmfCore)
151
152
endif(XDMF_WRAP_JAVA)

153
if(XDMF_WRAP_PYTHON)
154
  XDMF_SWIG_PYTHON(XdmfCore)
155
156
endif(XDMF_WRAP_PYTHON)

157
set(XDMF_LIBRARY_DIRS ${XDMF_LIBRARY_DIRS} PARENT_SCOPE)
158
if(WIN32)
159
    set(XDMFCORE_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/XdmfCore.lib PARENT_SCOPE)
160
161
162
endif(WIN32)

if(UNIX)
163
164
    set(XDMFCORE_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/libXdmfCore.so
        PARENT_SCOPE)
165
166
167
168
169
170
endif(UNIX)

if(APPLE)
    set(XDMFCORE_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/libXdmfCore.dylib
        PARENT_SCOPE)
endif(APPLE)
171

172
173
174
175
file(GLOB_RECURSE
  XdmfCoreHeaders
  "*.hpp" "*.tpp" "*.i"
  "../CMake/VersionSuite/*.hpp")
176
file(GLOB LokiHeaders loki/*.h)
177
install(FILES ${XdmfCoreHeaders} DESTINATION include)
178
install(FILES ${LokiHeaders} DESTINATION include/loki)
179
180
181
182
183
184
185
186
187
188
189
190
install(TARGETS XdmfCore
  RUNTIME DESTINATION bin
  LIBRARY DESTINATION lib
  ARCHIVE DESTINATION lib)

set(XdmfCore_INCLUDE_DIRS
  ${Boost_INCLUDE_DIRS}
  ${CMAKE_CURRENT_SOURCE_DIR}
  ${HDF5_INCLUDE_DIR}
  ${LIBXML2_INCLUDE_DIR}
  ${PYTHON_INCLUDE_DIRS}
  CACHE INTERNAL "")
191

192
193
194
set(XDMF_LIBRARIES ${XDMF_LIBRARIES} ${CMAKE_INSTALL_PREFIX}/lib)
set(XDMF_BINARIES ${XDMF_BINARIES} ${CMAKE_INSTALL_PREFIX}/bin)

195
if(BUILD_TESTING)
196
  add_subdirectory(tests)
197
endif(BUILD_TESTING)
198

199
200
set(XDMF_LIBRARIES ${XDMF_LIBRARIES} PARENT_SCOPE)
set(XDMF_BINARIES ${XDMF_BINARIES} PARENT_SCOPE)
201