CMakeLists.txt 5.9 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
19
20
21
22
# Should we build with documentation
option(XDMF_BUILD_DOCUMENTATION OFF)
if(XDMF_BUILD_DOCUMENTATION)
	add_subdirectory(doc)
endif(XDMF_BUILD_DOCUMENTATION)

23
24
25
26
27
28
option(XDMF_BUILD_TESTING ON)
if(XDMF_BUILD_TESTING)
    enable_testing()
    include(CTest)
endif(XDMF_BUILD_TESTING)

29
30
31
32
33
34
35
36
# 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})
37
38
39
	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)
40
41
42
43
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)
44
	find_package(PythonInterp REQUIRED)
45
46
47
48
49
50
	find_package(PythonLibs REQUIRED)
	include_directories(${PYTHON_INCLUDE_DIRS})

	# 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
51
52
53
54
55
	# 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
56
57
	MACRO(XDMF_SWIG_PYTHON python_name)
		set(CMAKE_SWIG_OUTDIR ${CMAKE_BINARY_DIR})
58
		set(CMAKE_SWIG_FLAGS "")
59
60
61
		set_source_files_properties(${python_name}.i PROPERTIES CPLUSPLUS ON)
		swig_add_module(${python_name} python ${python_name}.i)
		swig_link_libraries(${python_name} ${python_name} ${PYTHON_LIBRARIES})
62
63
64
65
		set_property(DIRECTORY APPEND PROPERTY
			ADDITIONAL_MAKE_CLEAN_FILES
			${CMAKE_BINARY_DIR}/${python_name}.pyc
		)	
66
67
68
		if("${ARGN}" STRGREATER "")
			add_dependencies(${python_name} "${ARGN}")
		endif("${ARGN}" STRGREATER "")
69
70
71
72
		install(FILES ${CMAKE_BINARY_DIR}/${python_name}.py 
                DESTINATION lib/python)
		install(TARGETS ${SWIG_MODULE_${python_name}_REAL_NAME} 
                DESTINATION lib/python)
73
74
75
76
77
78
79
80
81
82
83
84
	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
85
86
87
88
89
90
	# 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
91
	MACRO(XDMF_SWIG_JAVA java_name)
92
93
		set(${java_name}_JAVA_JAR ${CMAKE_BINARY_DIR}/${java_name}.jar)
        set(XDMF_JAVA_PACKAGE_DIR mil/army/arl/xdmf)
94
		set(XDMF_JAVA_DIR ${CMAKE_CURRENT_BINARY_DIR}/${XDMF_JAVA_PACKAGE_DIR})
95
96
97
98
		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)
		swig_add_module(${java_name}Java java ${java_name}.i)
99
		swig_link_libraries(${java_name}Java ${java_name})	
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
        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}
            COMMAND ${JAVA_COMPILE}
            ARGS    -cp "'${CMAKE_BINARY_DIR}/*'"
                    "${XDMF_JAVA_DIR}/*.java"
            COMMAND ${JAVA_ARCHIVE}
            ARGS    -cvf ${${java_name}_JAVA_JAR}
                    "${XDMF_JAVA_PACKAGE_DIR}/*.class"
        )
        add_dependencies(${java_name}Java ${java_name}_Java_Dir)
        add_dependencies(Compiled_${java_name}_Jar ${java_name}Java "${ARGN}")

118
119
120
121
122
		set_property(DIRECTORY APPEND PROPERTY
			ADDITIONAL_MAKE_CLEAN_FILES
			${CMAKE_BINARY_DIR}/${java_name}.jar
			${XDMF_JAVA_DIR}
		)
123
124
125
126
        install(FILES ${CMAKE_BINARY_DIR}/${java_name}.jar 
                DESTINATION lib/java)
       	install(TARGETS ${SWIG_MODULE_${java_name}Java_REAL_NAME}
                DESTINATION lib/java)
127
128
129
	ENDMACRO(XDMF_SWIG_JAVA)
endif(XDMF_WRAP_JAVA)

130
131
add_subdirectory(core)
include_directories(${XdmfCore_INCLUDE_DIRS})
132

133
134
135
136
137
138
option(XDMF_BUILD_CORE_ONLY OFF)
if(NOT XDMF_BUILD_CORE_ONLY)
	set(XdmfSources
		XdmfAttribute
		XdmfAttributeCenter
		XdmfAttributeType
139
		XdmfCurvilinearGrid
140
141
142
143
144
145
146
147
148
		XdmfDomain
		XdmfGeometry
		XdmfGeometryType
		XdmfGrid
		XdmfGridCollection
		XdmfGridCollectionType
		XdmfItemFactory
		XdmfMap
		XdmfReader
149
150
		XdmfRectilinearGrid
		XdmfRegularGrid
151
152
153
154
155
		XdmfSet
		XdmfSetType
		XdmfTime
		XdmfTopology
		XdmfTopologyType
156
		XdmfUnstructuredGrid
157
158
159
160
161
162
	)
	
	add_library(Xdmf ${XdmfSources})
	target_link_libraries(Xdmf XdmfCore)
	
	if(XDMF_WRAP_JAVA)
163
		XDMF_SWIG_JAVA(Xdmf Compiled_XdmfCore_Jar)
164
165
	endif(XDMF_WRAP_JAVA)
	
166
167
168
169
	if(XDMF_WRAP_PYTHON)
		XDMF_SWIG_PYTHON(Xdmf XdmfCore)
	endif(XDMF_WRAP_PYTHON)
	
170
	if(BUILD_TESTING)
171
		add_subdirectory(tests)
172
	endif(BUILD_TESTING)
173
174
175
176
177
178
	
	option(XDMF_BUILD_UTILS OFF)
	if(XDMF_BUILD_UTILS)
		add_subdirectory(utils)
	endif(XDMF_BUILD_UTILS)
		
179
	file(GLOB XdmfHeaders "*.hpp" "*.tpp" "*.i")
180
181
182
	install(FILES ${XdmfHeaders} DESTINATION include)
	install(TARGETS Xdmf LIBRARY DESTINATION lib)
endif(NOT XDMF_BUILD_CORE_ONLY)