CMakeLists.txt 8.75 KB
Newer Older
1
project(Xdmf)
Ken Leiter (Civ's avatar
Ken Leiter (Civ committed
2
3
4
cmake_minimum_required(VERSION 2.6)

set(BUILD_SHARED_LIBS true)
5
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
6
7
8
9
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)
10
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
11
12
set(CMAKE_MODULE_PATH 
	${CMAKE_SOURCE_DIR}/CMake
Brian Panneton's avatar
Brian Panneton committed
13
14
	${CMAKE_SOURCE_DIR}/CMake/TestingSuite
	${CMAKE_SOURCE_DIR}/CMake/VersionSuite
15
) 
Ken Leiter (Civ's avatar
Ken Leiter (Civ committed
16

17
18
include("${CMAKE_CURRENT_SOURCE_DIR}/XdmfFunctions.cmake")

19
20
21
22
23
24
# Should we build with documentation
option(XDMF_BUILD_DOCUMENTATION OFF)
if(XDMF_BUILD_DOCUMENTATION)
	add_subdirectory(doc)
endif(XDMF_BUILD_DOCUMENTATION)

25
26
27
28
29
30
option(XDMF_BUILD_TESTING ON)
if(XDMF_BUILD_TESTING)
    enable_testing()
    include(CTest)
endif(XDMF_BUILD_TESTING)

31
32
33
34
35
36
37
38
# Wrapper Setup
option(XDMF_WRAP_PYTHON OFF)
option(XDMF_WRAP_JAVA OFF)

# If we are wrapping either, we need swig
if(XDMF_WRAP_PYTHON OR XDMF_WRAP_JAVA)
	find_package(SWIG REQUIRED)
	include(${SWIG_USE_FILE})
39
40
41
	if(${SWIG_VERSION} LESS 2.0.0)
		message(SEND_ERROR "Swig must be version 2.0.0 or greater")
	endif(${SWIG_VERSION} LESS 2.0.0)
42
43
44
45
endif(XDMF_WRAP_PYTHON OR XDMF_WRAP_JAVA)

# If we are wrapping python, let's include it in the top level
if(XDMF_WRAP_PYTHON)
46
	find_package(PythonInterp REQUIRED)
47
48
	find_package(PythonLibs REQUIRED)
	include_directories(${PYTHON_INCLUDE_DIRS})
49
 
50
51
52
	# A macro to swig and create the python files
	# Since we essentually do the same thing inside and outside core, it
	# would be easier as a macro
53
54
55
56
57
	# Parameters:
	#	python_name = the name of the intended target to be wrapped
	#	${ARGN} = any dependencies needed by the target
	# Output:
	#	Target Name = the output target name will have ${python_name} as its name
58
59
	MACRO(XDMF_SWIG_PYTHON python_name)
		set(CMAKE_SWIG_OUTDIR ${CMAKE_BINARY_DIR})
60
		set(CMAKE_SWIG_FLAGS "")
61
		set_source_files_properties(${python_name}.i PROPERTIES CPLUSPLUS ON)
62
        set(swig_extra_generated_files "")
63
64
		swig_add_module(${python_name} python ${python_name}.i)
		swig_link_libraries(${python_name} ${python_name} ${PYTHON_LIBRARIES})
65
66
67
68
		set_property(DIRECTORY APPEND PROPERTY
			ADDITIONAL_MAKE_CLEAN_FILES
			${CMAKE_BINARY_DIR}/${python_name}.pyc
		)	
69
70
71
		if("${ARGN}" STRGREATER "")
			add_dependencies(${python_name} "${ARGN}")
		endif("${ARGN}" STRGREATER "")
72
73
74

        if(WIN32)
            set_target_properties(${SWIG_MODULE_${python_name}_REAL_NAME}
75
76
77
78
79
                PROPERTIES 
                PREFIX ../
                RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
                LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
                ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
80
81
            )
        endif(WIN32)
82
83
    
        string(TOUPPER ${python_name} python_name_upper)
84
        set(${python_name_upper}_PYTHON
85
                ${CMAKE_INSTALL_PREFIX}/lib/python/${python_name}.py)
86
87
88
89
90
91
92
        get_directory_property(${python_name}Parent PARENT_DIRECTORY)
        if(NOT "${${python_name}Parent}" STREQUAL "")
            set(${python_name_upper}_PYTHON ${${python_name_upper}_PYTHON} 
                PARENT_SCOPE)
        endif(NOT "${${python_name}Parent}" STREQUAL "") 
		
        install(FILES ${CMAKE_BINARY_DIR}/${python_name}.py 
93
94
95
                DESTINATION lib/python)
		install(TARGETS ${SWIG_MODULE_${python_name}_REAL_NAME} 
                DESTINATION lib/python)
96
97
98
99
100
101
102
103
104
105
106
107
	ENDMACRO(XDMF_SWIG_PYTHON)
endif(XDMF_WRAP_PYTHON)

# If we are wrapping java, let's include it in the top level
if(XDMF_WRAP_JAVA)
	find_package(Java REQUIRED)
	find_package(JNI REQUIRED)
	include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})

	# A macro to swig and create the jar files
	# Since we essentually do the same thing inside and outside core, it
	# would be easier as a macro
108
109
110
111
112
113
	# Parameters:
	#	java_name = the name of the intended target to be wrapped
	#	${ARGN} = any dependencies needed by the target
	# Output:
	#	Target Name	= the output target name will have ${java_name}Java as its name
	#	Target Jar	= the output target jar will have ${java_name}Java.jar as its name
114
	MACRO(XDMF_SWIG_JAVA java_name)
115
116
		set(${java_name}_JAVA_JAR ${CMAKE_BINARY_DIR}/${java_name}.jar)
        set(XDMF_JAVA_PACKAGE_DIR mil/army/arl/xdmf)
117
		set(XDMF_JAVA_DIR ${CMAKE_CURRENT_BINARY_DIR}/${XDMF_JAVA_PACKAGE_DIR})
118
119
120
		set(CMAKE_SWIG_OUTDIR ${XDMF_JAVA_DIR})
		set(CMAKE_SWIG_FLAGS -v -make_default -package mil.army.arl.xdmf)
		set_source_files_properties(${java_name}.i PROPERTIES CPLUSPLUS ON)
121
        set(swig_extra_generated_files "")
122
		swig_add_module(${java_name}Java java ${java_name}.i)
123
		swig_link_libraries(${java_name}Java ${java_name})	
124
125
126
127
128
129
130
131
132

        if(WIN32)
            set_target_properties(${SWIG_MODULE_${java_name}Java_REAL_NAME} 
                PROPERTIES 
                    PREFIX ../
                    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
                    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
                    ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
            )
133
            set(java_compile_args -cp ".\;${CMAKE_BINARY_DIR}/*" *.java)
134
135
            set(java_dest "bin")
        else(WIN32)
136
            set(java_compile_args -cp "${CMAKE_BINARY_DIR}/*.jar" ${XDMF_JAVA_DIR}/*.java)
137
138
139
            set(java_dest "lib/java")
        endif(WIN32)

140
141
142
143
144
145
146
147
        add_custom_target(${java_name}_Java_Dir ALL DEPENDS 
                            ${XDMF_JAVA_DIR})
        add_custom_command(OUTPUT ${XDMF_JAVA_DIR}
            COMMAND ${CMAKE_COMMAND} -E make_directory ${XDMF_JAVA_DIR}
        )
        add_custom_target(Compiled_${java_name}_Jar ALL DEPENDS 
                            ${${java_name}_JAVA_JAR})
        add_custom_command(OUTPUT ${${java_name}_JAVA_JAR}
148
            COMMAND ${CMAKE_COMMAND} -E chdir ${XDMF_JAVA_PACKAGE_DIR} 
149
150
                    ${JAVA_COMPILE} ${java_compile_args} 
            COMMAND ${JAVA_ARCHIVE} -cvf ${${java_name}_JAVA_JAR}
151
152
153
                    "${XDMF_JAVA_PACKAGE_DIR}/*.class"
        )
        add_dependencies(${java_name}Java ${java_name}_Java_Dir)
154
155
156
157
158
        add_dependencies(Compiled_${java_name}_Jar ${java_name}Java)

        if(NOT ${ARGN} EQUAL "")
            add_dependencies(Compiled_${java_name}_Jar "${ARGN}")
        endif(NOT ${ARGN} EQUAL "")
159

160
161
162
163
164
		set_property(DIRECTORY APPEND PROPERTY
			ADDITIONAL_MAKE_CLEAN_FILES
			${CMAKE_BINARY_DIR}/${java_name}.jar
			${XDMF_JAVA_DIR}
		)
165
166

        string(TOUPPER ${java_name} java_name_upper)
167
168
169
170
171
172
173
174
        set(${java_name_upper}_JAVA_JAR
                ${CMAKE_INSTALL_PREFIX}/lib/java/${java_name}.jar)
        get_directory_property(${java_name}Parent PARENT_DIRECTORY)
        if(NOT "${${java_name}Parent}" STREQUAL "")
            set(${java_name_upper}_JAVA_JAR ${${java_name_upper}_JAVA_JAR}
                PARENT_SCOPE)
        endif(NOT "${${java_name}Parent}" STREQUAL "")

175
176
177
        install(FILES ${CMAKE_BINARY_DIR}/${java_name}.jar 
                DESTINATION lib/java)
       	install(TARGETS ${SWIG_MODULE_${java_name}Java_REAL_NAME}
178
                DESTINATION ${java_dest})
179
180
181
	ENDMACRO(XDMF_SWIG_JAVA)
endif(XDMF_WRAP_JAVA)

182
183
add_subdirectory(core)
include_directories(${XdmfCore_INCLUDE_DIRS})
184

185
186
187
188
189
190
option(XDMF_BUILD_CORE_ONLY OFF)
if(NOT XDMF_BUILD_CORE_ONLY)
	set(XdmfSources
		XdmfAttribute
		XdmfAttributeCenter
		XdmfAttributeType
191
		XdmfCurvilinearGrid
192
193
194
195
196
197
198
199
200
		XdmfDomain
		XdmfGeometry
		XdmfGeometryType
		XdmfGrid
		XdmfGridCollection
		XdmfGridCollectionType
		XdmfItemFactory
		XdmfMap
		XdmfReader
201
202
		XdmfRectilinearGrid
		XdmfRegularGrid
203
204
205
206
207
		XdmfSet
		XdmfSetType
		XdmfTime
		XdmfTopology
		XdmfTopologyType
208
		XdmfUnstructuredGrid
209
210
211
212
	)
	
	add_library(Xdmf ${XdmfSources})
	target_link_libraries(Xdmf XdmfCore)
213
214
215

    if(WIN32)
        set_target_properties(Xdmf PROPERTIES 
216
217
218
219
220
            DEFINE_SYMBOL Xdmf_EXPORTS
            PREFIX ../
            RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
            LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
            ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
221
    endif(WIN32)
222
223
	
	if(XDMF_WRAP_JAVA)
224
		XDMF_SWIG_JAVA(Xdmf Compiled_XdmfCore_Jar)
225
226
	endif(XDMF_WRAP_JAVA)
	
227
228
229
230
	if(XDMF_WRAP_PYTHON)
		XDMF_SWIG_PYTHON(Xdmf XdmfCore)
	endif(XDMF_WRAP_PYTHON)
	
231
	if(BUILD_TESTING)
232
		add_subdirectory(tests)
233
	endif(BUILD_TESTING)
234
235
236
237
238
239
	
	option(XDMF_BUILD_UTILS OFF)
	if(XDMF_BUILD_UTILS)
		add_subdirectory(utils)
	endif(XDMF_BUILD_UTILS)
		
240
    if(WIN32)
241
        set(XDMF_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/Xdmf.lib)
242
    else(WIN32)
243
        set(XDMF_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/libXdmf.so)
244
245
246
    endif(WIN32)
	
    file(GLOB XdmfHeaders "*.hpp" "*.tpp" "*.i" "CMake/VersionSuite/*.hpp")
247
    install(FILES ${XdmfHeaders} DESTINATION include)
248
249
250
251
252
    install(TARGETS Xdmf 
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib
    )
253
endif(NOT XDMF_BUILD_CORE_ONLY)
254

255
xdmf_create_config_file(${PROJECT_NAME})
256
install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" DESTINATION ${CMAKE_INSTALL_PREFIX})