CMakeLists.txt 9.24 KB
Newer Older
Sylvain Thery's avatar
Sylvain Thery committed
1
cmake_minimum_required(VERSION 2.8)
Pierre Kraemer's avatar
Pierre Kraemer committed
2

3
# Thanks to Etienne Schmitt for CMakeLists modifications
Pierre Kraemer's avatar
Pierre Kraemer committed
4

5
project(CGoGN)
untereiner's avatar
untereiner committed
6

7
SET ( CGoGN_ROOT_DIR ${CMAKE_SOURCE_DIR} )
8
SET ( CGoGN_SRC_DIR ${CMAKE_SOURCE_DIR}/CGoGN)
9
SET ( CMAKE_MODULE_PATH ${CGoGN_ROOT_DIR}/cmake_modules/ )
Sylvain Thery's avatar
Sylvain Thery committed
10

11
INCLUDE(${CGoGN_ROOT_DIR}/cmake_modules/functions.cmake)
Sylvain Thery's avatar
Sylvain Thery committed
12

13 14


15 16 17
#
# Available options
#
18 19 20
SET ( CGoGN_WITH_ASSIMP OFF CACHE BOOL "build CGoGN with Assimp" )
SET ( CGoGN_WITH_ZINRI OFF CACHE BOOL "build CGoGN with Zinri lib" )
SET ( CGoGN_WITH_QT ON CACHE BOOL "build CGoGN with Qt lib" )
Sylvain Thery's avatar
Sylvain Thery committed
21
SET ( CGoGN_DESIRED_QT_VERSION "4" CACHE STRING "4: QT4/ 5 not yet implemented" )
Sylvain Thery's avatar
Sylvain Thery committed
22
SET ( CGoGN_WITH_GLEWMX OFF CACHE BOOL "use multi-contex GLEW (for VRJuggler)" )
23 24 25 26 27 28 29 30 31
SET ( CGoGN_USE_OGL_CORE_PROFILE OFF CACHE BOOL "use OpenGL 3.3 core profile (do not work on mac)" )

SET ( CGoGN_COMPILE_EXAMPLES OFF CACHE BOOL "compile examples" )
SET ( CGoGN_COMPILE_TUTOS OFF CACHE BOOL "compile tutorials" )
SET ( CGoGN_COMPILE_TESTS OFF CACHE BOOL "compile tests" )
SET ( CGoGN_COMPILE_BENCHES OFF CACHE BOOL "compile benches" )
SET ( CGoGN_COMPILE_SANDBOX OFF CACHE BOOL "compile all in sandbox" )
SET ( CGoGN_ASSERT_ACTIVED OFF CACHE BOOL "assertion activated")
SET ( CGoGN_ONELIB OFF CACHE BOOL "build CGoGN in one lib" )
32 33 34
IF (WIN32)
	SET ( CMAKE_CONFIGURATION_TYPES Release Debug)
	SET ( CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING "Only Release or Debug" FORCE)
35
	SET ( CGoGN_WITH_QTCREATOR OFF CACHE BOOL "use QtCreator to compile" )
36
ENDIF ()
Sylvain Thery's avatar
Sylvain Thery committed
37
SET ( BUILD_SHARED_LIBS ON CACHE BOOL "if used all library are build as shared type (.so/.dylib/.dll)" )
38

39 40 41 42 43 44

checkCpp11Support()
setBuildType()


SET(EXECUTABLE_OUTPUT_PATH ${CGoGN_ROOT_DIR}/bin/)
45
IF(WIN32)
Sylvain Thery's avatar
Sylvain Thery committed
46
	IF (CGoGN_WITH_QTCREATOR)
47
		SET(LIBRARY_OUTPUT_PATH ${CGoGN_ROOT_DIR}/bin/${CMAKE_BUILD_TYPE})
Sylvain Thery's avatar
Sylvain Thery committed
48 49
	ELSE()
		SET(LIBRARY_OUTPUT_PATH ${CGoGN_ROOT_DIR}/bin/)
50
	ENDIF()
51 52
ELSE()
	SET(LIBRARY_OUTPUT_PATH ${CGoGN_ROOT_DIR}/lib/${CMAKE_BUILD_TYPE})
Sylvain Thery's avatar
Sylvain Thery committed
53 54
ENDIF()

55 56 57
#
# External Libraries (not included a third party libraries)
#
Sylvain Thery's avatar
Sylvain Thery committed
58 59 60 61
IF(WIN32)
	SET ( CMAKE_PREFIX_PATH ${CGoGN_ROOT_DIR}/windows_dependencies CACHE STRING "path to dependencies" )
ENDIF(WIN32)

62 63 64
FIND_PACKAGE(OpenGL REQUIRED)
FIND_PACKAGE(ZLIB REQUIRED)
FIND_PACKAGE(GLEW REQUIRED)
65
IF (CGoGN_WITH_QT)
Sylvain Thery's avatar
Sylvain Thery committed
66 67 68 69 70
	IF(${CGoGN_DESIRED_QT_VERSION} STREQUAL "5")
		include(cmake_modules/Qt_5x.cmake)
	ELSE()
		include(cmake_modules/Qt_4x.cmake)
	ENDIF()
71
ELSE ()
72
	FIND_PACKAGE(DevIL REQUIRED)
73
ENDIF()
74 75
IF (NOT WIN32)
	FIND_PACKAGE(SuiteSparse REQUIRED)
Sylvain Thery's avatar
Sylvain Thery committed
76
ELSE()
77 78
	set(SUITESPARSE_SUITESPARSECONFIG_INCLUDE_DIR  ${CGoGN_ROOT_DIR}/windows_dependencies/include)
	set(SUITESPARSE_USE_LAPACK_BLAS ON)
Sylvain Thery's avatar
Sylvain Thery committed
79
	find_package(SuiteSparse QUIET NO_MODULE)
80 81
	if(NOT SUITESPARSE_FOUND)
        set(SUITESPARSE_VERBOSE ON)
Sylvain Thery's avatar
Sylvain Thery committed
82 83
        find_package(SuiteSparse REQUIRED) # 2nd: Use FindSuiteSparse.cmake module
	endif()
84
ENDIF()
85 86
MESSAGE (STATUS ${SUITESPARSE_LIBRARIES})
MESSAGE (STATUS ${SUITESPARSE_INCLUDE_DIRS})
87

Sylvain Thery's avatar
Sylvain Thery committed
88

89 90 91
#
#	ThirdParty
#
92

93
INCLUDE_DIRECTORIES(${CGoGN_ROOT_DIR}/ThirdParty/include)
Sylvain Thery's avatar
Sylvain Thery committed
94

95 96 97 98 99 100
ADD_SUBDIRECTORY(ThirdParty/Tools)

ADD_SUBDIRECTORY(ThirdParty/OpenNL)

ADD_SUBDIRECTORY(ThirdParty/tetgen)

101
IF (CGoGN_WITH_ZINRI)
102
	ADD_SUBDIRECTORY(ThirdParty/Zinri)
103
ENDIF()
104

105
IF (CGoGN_WITH_ASSIMP)
106
	ADD_SUBDIRECTORY(ThirdParty/Assimp)
107
ENDIF ()
Sylvain Thery's avatar
Sylvain Thery committed
108

109 110
ADD_SUBDIRECTORY(ThirdParty/TinyXml2)

111 112
#IF (CGoGN_WITH_QT AND (NOT WIN32))
IF (CGoGN_WITH_QT)
113 114
	ADD_SUBDIRECTORY(ThirdParty/libQGLViewer/QGLViewer)
ENDIF()
Sylvain Thery's avatar
Sylvain Thery committed
115

116 117 118
IF (NOT WIN32)
	ADD_SUBDIRECTORY(ThirdParty/libuuid)
ENDIF()
Sylvain Thery's avatar
Sylvain Thery committed
119 120


121

122 123 124 125 126 127 128 129 130 131 132
#
# COMPILER FLAGS
#
IF(NOT WIN32)
	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -fPIC -std=c++11")
	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Woverride-init -fPIC")
	# remove the 60000+ "no unused local typedefs" warnings with GCC4.8+
	IF(CMAKE_COMPILER_IS_GNUCXX)
		SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs")
		SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-local-typedefs")
	ENDIF()
133 134 135
	IF(APPLE)
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wno-overloaded-virtual")
	ENDIF()
Sylvain Thery's avatar
Sylvain Thery committed
136
ELSE()
Sylvain Thery's avatar
Sylvain Thery committed
137
	ADD_DEFINITIONS("/wd4251") #dll export warnings
138 139
ENDIF()

140

141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157


#
# COMPILE DEFINITIONS
#
LIST(APPEND CGoGN_DEFS -DGLM_FORCE_RADIANS)

LIST(APPEND CGoGN_DEFS -DCGOGN_ASSERT_BOOL=${CGoGN_ASSERT_ACTIVED})

IF(CGoGN_USE_OGL_CORE_PROFILE)
	LIST(APPEND CGoGN_DEFS -DCGoGN_USE_OGL_CORE_PROFILE=1)
ENDIF()

LIST(APPEND CGoGN_DEFS -DSHADERPATH=\"${CGoGN_ROOT_DIR}/lib/Shaders/\")

IF (CGoGN_WITH_ASSIMP)
	LIST(APPEND CGoGN_DEFS -DCGOGN_WITH_ASSIMP)
158
ENDIF ()
159

160 161
IF (CGoGN_WITH_ZINRI)
	LIST(APPEND CGoGN_DEFS -DCGOGN_WITH_ZINRI)
162
ENDIF ()
163

164 165
IF (CGoGN_WITH_GLEWMX)
	LIST(APPEND CGoGN_DEFS -DCGOGN_GLEW_MX)
166 167
ENDIF ()

168 169
IF (CGoGN_WITH_QT)
	LIST(APPEND CGoGN_DEFS -DCGOGN_WITH_QT)
Sylvain Thery's avatar
Sylvain Thery committed
170
#	LIST(APPEND CGoGN_DEFS("-DCGOGN_QT_DESIRED_VERSION=${CGoGN_DESIRED_QT_VERSION}"))
171 172
ENDIF()

173 174 175 176
IF(WIN32)
	LIST(APPEND CGoGN_DEFS -D_USE_MATH_DEFINES)
ENDIF ()

177 178 179
ADD_DEFINITIONS(${CGoGN_DEFS})


180

181 182 183 184 185
#
# INCLUDES AND LIBS
#
SET (CGoGN_EXT_INCLUDES)
SET (CGoGN_EXT_LIBS)
186
IF (CGoGN_WITH_QT)
187 188
        LIST(APPEND CGoGN_EXT_INCLUDES ${QT_INCLUDE_DIR})
        LIST(APPEND CGoGN_EXT_LIBS QGLViewer ${QT_LIBRARIES})
Sylvain Thery's avatar
Sylvain Thery committed
189
		LIST(APPEND CGoGN_EXT_INCLUDES ${CGoGN_ROOT_DIR}/ThirdParty/libQGLViewer/)
190
ELSE ()
191 192
	 LIST(APPEND CGoGN_EXT_INCLUDES ${IL_INCLUDE_DIR})
	 LIST(APPEND CGoGN_EXT_LIBS ${IL_LIBRARIES})
193
ENDIF ()
194

Sylvain Thery's avatar
Sylvain Thery committed
195
# define includes of external libs 
196 197
LIST(INSERT CGoGN_EXT_INCLUDES 0
    ${CGoGN_ROOT_DIR}/ThirdParty/include
Sylvain Thery's avatar
Sylvain Thery committed
198 199 200
	${OPENGL_INCLUDE_DIR}
	${GLEW_INCLUDE_DIRS}
	${ZLIB_INCLUDE_DIRS}
201
	${SUITESPARSE_INCLUDE_DIRS}
202
)
Sylvain Thery's avatar
Sylvain Thery committed
203

204 205 206 207 208 209 210 211 212 213 214 215 216
LIST(APPEND CGoGN_EXT_INCLUDES ${CGoGN_ROOT_DIR}/ThirdParty/OpenNL/src)
LIST(APPEND CGoGN_EXT_INCLUDES ${CGoGN_ROOT_DIR}/ThirdParty/tetgen)
LIST(APPEND CGoGN_EXT_INCLUDES ${CGoGN_ROOT_DIR}/ThirdParty/Zinri)
LIST(APPEND CGoGN_EXT_INCLUDES ${CGoGN_ROOT_DIR}/ThirdParty/Assimp/include/)
LIST(APPEND CGoGN_EXT_INCLUDES ${CGoGN_ROOT_DIR}/ThirdParty/TinyXml2)

IF (NOT WIN32)
	LIST(APPEND CGoGN_EXT_INCLUDES ${CGoGN_ROOT_DIR}/ThirdParty/libuuid)
ENDIF()

list(REMOVE_DUPLICATES CGoGN_EXT_INCLUDES)


Sylvain Thery's avatar
Sylvain Thery committed
217
# define libs for external libs
218
IF (CGoGN_WITH_ASSIMP)
219
	LIST(APPEND CGoGN_EXT_LIBS assimp)
220 221 222
	file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_assimp.h "1" )
ELSE ()
	file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_assimp.h "0" )
223
ENDIF ()
224

225
IF (CGoGN_WITH_ZINRI)
226
	LIST(APPEND CGoGN_EXT_LIBS Zinri)
227 228 229
	file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_zinri.h "1" )
ELSE ()
	file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_zinri.h "0" )
230
ENDIF ()
231 232 233 234

LIST(APPEND CGoGN_EXT_LIBS
    nl
    tinyxml2
Sylvain Thery's avatar
Sylvain Thery committed
235 236 237
	${OPENGL_LIBRARY}
	${GLEW_LIBRARIES}
	${ZLIB_LIBRARIES}
238
	${SUITESPARSE_LIBRARIES}
239
)
240

Sylvain Thery's avatar
Sylvain Thery committed
241 242 243
IF(NOT WIN32)
	LIST(APPEND CGoGN_EXT_LIBS pthread) #for c++11 thread
ENDIF()
244

245

246
include_directories( 
247
	${CGoGN_SRC_DIR}/include
248
	${CGoGN_EXT_INCLUDES} )
Sylvain Thery's avatar
Sylvain Thery committed
249 250


251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
#
# save some infos for schnapps and apps
#
IF (CGoGN_ONELIB)
	file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_onelib.h "1" )
ELSE ()
	file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_onelib.h "0" )
ENDIF ()

IF (CGoGN_WITH_GLEWMX)
	file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_gmx.h "1" )
ELSE ()
	file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_gmx.h "0" )
ENDIF ()

Sylvain Thery's avatar
Sylvain Thery committed
266 267 268 269 270
IF (CGoGN_WITH_QT)
    file(WRITE ${CGoGN_ROOT_DIR}/CGoGN/include/cgogn_qt.h ${CGoGN_DESIRED_QT_VERSION})
ENDIF ()


271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286
file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_ext_includes.h "" )
foreach(VAR_INC ${CGoGN_EXT_INCLUDES})
	file(APPEND ${CGoGN_SRC_DIR}/include/cgogn_ext_includes.h ${VAR_INC} \n )
endforeach()

file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_ext_libs.h "" )
foreach(VAR_LIB ${CGoGN_EXT_LIBS})
	file(APPEND ${CGoGN_SRC_DIR}/include/cgogn_ext_libs.h ${VAR_LIB} \n )
endforeach()

file(WRITE ${CGoGN_SRC_DIR}/include/cgogn_defs.h "" )
foreach(VAR_DEF ${CGoGN_DEFS})
	file(APPEND ${CGoGN_SRC_DIR}/include/cgogn_defs.h ${VAR_DEF} \n )
endforeach()


287
add_subdirectory(${CGoGN_SRC_DIR} CGoGN)
Sylvain Thery's avatar
Sylvain Thery committed
288 289

add_subdirectory(${CGoGN_ROOT_DIR}/Apps Apps)
Sylvain Thery's avatar
Sylvain Thery committed
290 291 292 293 294 295


# 
# Add custom clean targets for cleaning without cleaning dependencies
#
if (WIN32)
Sylvain Thery's avatar
Sylvain Thery committed
296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319
#	add_custom_target(clean_cgogn 
#			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
#	add_custom_command(TARGET clean_cgogn PRE_BUILD 
#			COMMAND del /q CCoGN
#			COMMAND cmake ..
#			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
#			COMMENT "cleaning CGoGN libs")
#
#	add_custom_target(clean_apps 
#			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
#	add_custom_command(TARGET clean_apps PRE_BUILD 
#			COMMAND del /q Apps
#			COMMAND cmake ..
#			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
#			COMMENT "cleaning Apps")
#
#	add_custom_target(clean_cgogn_apps 
#			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
#	add_custom_command(TARGET clean_cgogn_apps PRE_BUILD 
#			COMMAND del /q CGoGN
#			COMMAND del /q Apps
#			COMMAND cmake ..
#			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
#			COMMENT "cleaning Apps")
Sylvain Thery's avatar
Sylvain Thery committed
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346

ELSE()

	add_custom_target(clean_cgogn 
			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
	add_custom_command(TARGET clean_cgogn PRE_BUILD 
			COMMAND rm -rf CGoGN
			COMMAND cmake ..
			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
			COMMENT "cleaning CGoGN libs")

	add_custom_target(clean_apps 
		WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
	add_custom_command(TARGET clean_apps PRE_BUILD 
			COMMAND rm -rf Apps
			COMMAND cmake ..
			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
			COMMENT "cleaning Apps")

	add_custom_target(clean_cgogn_apps 
			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
	add_custom_command(TARGET clean_cgogn_apps PRE_BUILD 
			COMMAND rm -rf CGoGN
			COMMAND rm -rf Apps
			COMMAND cmake ..
			WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
			COMMENT "cleaning Apps")
347
ENDIF()