CMakeLists.txt 5.66 KB
Newer Older
1
2
project(XdmfCore)
cmake_minimum_required(VERSION 2.6)
3
4
5
if (POLICY CMP0015)
  cmake_policy(SET CMP0015 NEW)
endif (POLICY CMP0015)
6

7
include(CheckCXXSourceCompiles)
Brian Panneton's avatar
Brian Panneton committed
8
include(SetUpVersion)
9

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

16
17
set(BUILD_SHARED_LIBS true)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
18
19
20
21
22
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)
23

24
25
option(XDMF_BUILD_DSM OFF)

26
27
28
29
if(XDMF_BUILD_DSM)
  option(XDMF_BUILD_DSM_THREADS ON)
endif(XDMF_BUILD_DSM)

30
mark_as_advanced(CLEAR Boost_INCLUDE_DIR)
31
32
find_package(Boost REQUIRED)
if(Boost_FOUND)
33
34
  include_directories(${Boost_INCLUDE_DIRS})
  mark_as_advanced(FORCE Boost_INCLUDE_DIR)
35
36
endif(Boost_FOUND)

37
38
39
mark_as_advanced(CLEAR HDF5_C_INCLUDE_DIR)
mark_as_advanced(CLEAR HDF5_hdf5_LIBRARY_DEBUG)
mark_as_advanced(CLEAR HDF5_hdf5_LIBRARY_RELEASE)
40
41
find_package(HDF5 REQUIRED)
if(HDF5_FOUND)
42
43
44
  mark_as_advanced(FORCE HDF5_C_INCLUDE_DIR)
  mark_as_advanced(FORCE HDF5_hdf5_LIBRARY_DEBUG)
  mark_as_advanced(FORCE HDF5_hdf5_LIBRARY_RELEASE)
45
  include_directories(${HDF5_INCLUDE_DIRS})
46
  include_directories(${HDF5_C_INCLUDE_DIR})
47
48
  get_filename_component(HDF5_LIBRARY_DIR "${HDF5_hdf5_LIBRARY_RELEASE}" PATH)
  set(XDMF_LIBRARY_DIRS ${XDMF_LIBRARY_DIRS} ${HDF5_LIBRARY_DIR})
49
  set(HDF5_LIBRARIES ${HDF5_hdf5_LIBRARY_RELEASE})
50
51
  # FIXME: Would like to get this info from HDF5 so we don't have conflicting
  # MPI versions
52
53
54
55
  if(HDF5_IS_PARALLEL)
    find_package(MPI REQUIRED)
    if(MPI_FOUND)
      include_directories(${MPI_INCLUDE_PATH})
56
      set(XDMF_LIBRARIES ${XDMF_LIBRARIES} ${MPI_LIBRARY} ${MPI_EXTRA_LIBRARY})
57
58
      get_filename_component(MPI_LIBRARY_DIR ${MPI_LIBRARY} PATH)
      set(XDMF_LIBRARY_DIRS ${XDMF_LIBRARY_DIRS} ${MPI_LIBRARY_DIR})
59
60
61
62
    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)
63
  set(XDMF_LIBRARIES ${XDMF_LIBRARIES} ${HDF5_LIBRARIES})
64
65
  set(XDMF_HDF5_BINARY_DIRS ${HDF5_BINARY_DIRS} PARENT_SCOPE)
  set(XDMF_BINARIES ${XDMF_BINARIES} ${HDF5_BINARY_DIRS})
66
67
68
69
endif(HDF5_FOUND)

find_package(LibXml2 REQUIRED)
if(LIBXML2_FOUND)
70
  include_directories(${LIBXML2_INCLUDE_DIR})
71
72
73
74
75
  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})
76
77
endif(LIBXML2_FOUND)

78
79
80
81
82
83
84
85
86
# 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 {};

87
int main(int ac, char * av)
88
89
90
91
92
93
94
95
96
{
  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)

97
set(XdmfCoreSources
98
  XdmfArray
99
  XdmfArrayReference
100
101
102
  XdmfArrayType
  XdmfCoreItemFactory
  XdmfCoreReader
103
  XdmfError
104
  XdmfFunction
105
106
107
108
109
110
111
  XdmfHDF5Controller
  XdmfHDF5Writer
  XdmfHeavyDataController
  XdmfHeavyDataWriter
  XdmfInformation
  XdmfItem
  XdmfItemProperty
Kenneth Leiter's avatar
Kenneth Leiter committed
112
  XdmfSparseMatrix
Andrew J. Burns (Cont's avatar
Andrew J. Burns (Cont committed
113
  XdmfSubset
114
115
116
117
  XdmfSystemUtils
  ${CMAKE_BINARY_DIR}/XdmfVersion
  XdmfVisitor
  XdmfWriter)
118
119

add_library(XdmfCore ${XdmfCoreSources})
120
121
link_directories(${XDMF_LIBRARY_DIRS})
target_link_libraries(XdmfCore ${XDMF_LIBRARIES})
122

123
if(WIN32)
124
  add_definitions(-D_HDF5USEDLL_ -D_HDF5USEHLDLL_)
125
  set_target_properties(XdmfCore PROPERTIES 
126
127
128
129
130
131
132
133
134
      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)
135
136
endif(WIN32)

137
if(XDMF_WRAP_JAVA)
138
  XDMF_SWIG_JAVA(XdmfCore)
139
140
endif(XDMF_WRAP_JAVA)

141
if(XDMF_WRAP_PYTHON)
142
  XDMF_SWIG_PYTHON(XdmfCore)
143
144
endif(XDMF_WRAP_PYTHON)

145
set(XDMF_LIBRARY_DIRS ${XDMF_LIBRARY_DIRS} PARENT_SCOPE)
146
if(WIN32)
147
    set(XDMFCORE_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/XdmfCore.lib PARENT_SCOPE)
148
149
150
endif(WIN32)

if(UNIX)
151
152
    set(XDMFCORE_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/libXdmfCore.so
        PARENT_SCOPE)
153
154
155
156
157
158
endif(UNIX)

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

160
161
162
163
file(GLOB_RECURSE
  XdmfCoreHeaders
  "*.hpp" "*.tpp" "*.i"
  "../CMake/VersionSuite/*.hpp")
164
file(GLOB LokiHeaders loki/*.h)
165
install(FILES ${XdmfCoreHeaders} DESTINATION include)
166
install(FILES ${LokiHeaders} DESTINATION include/loki)
167
168
169
170
171
172
173
174
175
176
177
178
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 "")
179

180
181
182
set(XDMF_LIBRARIES ${XDMF_LIBRARIES} ${CMAKE_INSTALL_PREFIX}/lib)
set(XDMF_BINARIES ${XDMF_BINARIES} ${CMAKE_INSTALL_PREFIX}/bin)

183
184
185
186
if(XDMF_BUILD_DSM)
  add_subdirectory(dsm)
endif(XDMF_BUILD_DSM)

187
if(BUILD_TESTING)
188
  add_subdirectory(tests)
189
endif(BUILD_TESTING)
190

191
192
set(XDMF_LIBRARIES ${XDMF_LIBRARIES} PARENT_SCOPE)
set(XDMF_BINARIES ${XDMF_BINARIES} PARENT_SCOPE)
193