CMakeLists.txt 5.64 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
99
100
101
  XdmfArray
  XdmfArrayType
  XdmfCoreItemFactory
  XdmfCoreReader
102
  XdmfError
103
  XdmfFunction
104
105
106
107
108
109
110
  XdmfHDF5Controller
  XdmfHDF5Writer
  XdmfHeavyDataController
  XdmfHeavyDataWriter
  XdmfInformation
  XdmfItem
  XdmfItemProperty
Kenneth Leiter's avatar
Kenneth Leiter committed
111
  XdmfSparseMatrix
Andrew J. Burns (Cont's avatar
Andrew J. Burns (Cont committed
112
  XdmfSubset
113
114
115
116
  XdmfSystemUtils
  ${CMAKE_BINARY_DIR}/XdmfVersion
  XdmfVisitor
  XdmfWriter)
117
118

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

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

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

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

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

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

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

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

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

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

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

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