| 1 | CMAKE_MINIMUM_REQUIRED(VERSION 2.4.5 FATAL_ERROR) |
|---|
| 2 | |
|---|
| 3 | # Setup compatibility modes |
|---|
| 4 | IF(COMMAND cmake_policy) |
|---|
| 5 | if(POLICY CMP0011) |
|---|
| 6 | cmake_policy(SET CMP0011 OLD) # or NEW |
|---|
| 7 | endif(POLICY CMP0011) |
|---|
| 8 | |
|---|
| 9 | cmake_policy(SET CMP0003 NEW) |
|---|
| 10 | ENDIF(COMMAND cmake_policy) |
|---|
| 11 | |
|---|
| 12 | |
|---|
| 13 | ################################################################################ |
|---|
| 14 | # Set default values |
|---|
| 15 | ################################################################################ |
|---|
| 16 | PROJECT(osgPPU) |
|---|
| 17 | SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules;${osgPPU_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}") |
|---|
| 18 | SET(SOURCE_DIR ${osgPPU_SOURCE_DIR}) |
|---|
| 19 | SET(OSG_DIR "${CMAKE_INSTALL_PREFIX}" CACHE STRING "Path where to find the osg installation") |
|---|
| 20 | SET(CUDA_DIR "${CMAKE_INSTALL_PREFIX}/cuda" CACHE STRING "Path where to find the cuda installation") |
|---|
| 21 | |
|---|
| 22 | |
|---|
| 23 | ####################################### |
|---|
| 24 | # Versions |
|---|
| 25 | ####################################### |
|---|
| 26 | SET(OSGPPU_MAJOR_VERSION 0) |
|---|
| 27 | SET(OSGPPU_MINOR_VERSION 5) |
|---|
| 28 | SET(OSGPPU_PATCH_VERSION 7) |
|---|
| 29 | SET(OSGPPU_SOVERSION 5) |
|---|
| 30 | |
|---|
| 31 | SET(OSGPPU_RELEASE_CANDIDATE 0) |
|---|
| 32 | |
|---|
| 33 | SET(OSGPPU_VERSION ${OSGPPU_MAJOR_VERSION}.${OSGPPU_MINOR_VERSION}.${OSGPPU_PATCH_VERSION}) |
|---|
| 34 | SET(OSGPPU_SONAMES TRUE) |
|---|
| 35 | |
|---|
| 36 | |
|---|
| 37 | ################################################################################ |
|---|
| 38 | # Define already some installation components. |
|---|
| 39 | # This is need for later installation process if we enable it |
|---|
| 40 | ################################################################################ |
|---|
| 41 | IF(CMAKE_CPACK_COMMAND) |
|---|
| 42 | ENDIF(CMAKE_CPACK_COMMAND) |
|---|
| 43 | |
|---|
| 44 | |
|---|
| 45 | ####################################### |
|---|
| 46 | # Dynamic vs Static Linking |
|---|
| 47 | ####################################### |
|---|
| 48 | OPTION(DYNAMIC_OSGPPU "Set to ON to build osgPPU for dynamic linking. Use OFF for static." ON) |
|---|
| 49 | IF (DYNAMIC_OSGPPU) |
|---|
| 50 | SET(OSGPPU_USER_DEFINED_DYNAMIC_OR_STATIC "SHARED") |
|---|
| 51 | ELSE (DYNAMIC_OSGPPU) |
|---|
| 52 | SET(OSGPPU_USER_DEFINED_DYNAMIC_OR_STATIC "STATIC") |
|---|
| 53 | SET(CMAKE_MODULE_CXX_FLAGS_DEBUG "-pthread") |
|---|
| 54 | ENDIF(DYNAMIC_OSGPPU) |
|---|
| 55 | |
|---|
| 56 | |
|---|
| 57 | ####################################### |
|---|
| 58 | # Library files |
|---|
| 59 | ####################################### |
|---|
| 60 | FIND_PACKAGE( OpenGL REQUIRED ) |
|---|
| 61 | FIND_PACKAGE( OSG REQUIRED ) |
|---|
| 62 | |
|---|
| 63 | ####################################### |
|---|
| 64 | # enable CUDA support |
|---|
| 65 | ####################################### |
|---|
| 66 | INCLUDE(${CMAKE_SOURCE_DIR}/CMakeModules/cuda/FindCuda.cmake) |
|---|
| 67 | |
|---|
| 68 | |
|---|
| 69 | ################################################################################ |
|---|
| 70 | # Make the headers visible to everything |
|---|
| 71 | ################################################################################ |
|---|
| 72 | IF(NOT ${PROJECT_BINARY_DIR} EQUAL ${PROJECT_SOURCE_DIR}) |
|---|
| 73 | INCLUDE_DIRECTORIES(BEFORE ${PROJECT_BINARY_DIR}/include) |
|---|
| 74 | ENDIF(NOT ${PROJECT_BINARY_DIR} EQUAL ${PROJECT_SOURCE_DIR}) |
|---|
| 75 | |
|---|
| 76 | |
|---|
| 77 | INCLUDE_DIRECTORIES(BEFORE |
|---|
| 78 | ${OPENGL_INCLUDE_DIR} |
|---|
| 79 | ${OSG_INCLUDE_DIRS} |
|---|
| 80 | ${SOURCE_DIR}/include |
|---|
| 81 | ) |
|---|
| 82 | |
|---|
| 83 | |
|---|
| 84 | SET(GL_LIBS |
|---|
| 85 | ${OPENGL_gl_LIBRARY} |
|---|
| 86 | ${OPENGL_glu_LIBRARY} |
|---|
| 87 | ) |
|---|
| 88 | |
|---|
| 89 | |
|---|
| 90 | |
|---|
| 91 | ####################################### |
|---|
| 92 | # Solution definition |
|---|
| 93 | ####################################### |
|---|
| 94 | IF(WIN32) |
|---|
| 95 | |
|---|
| 96 | IF(MSVC) |
|---|
| 97 | ADD_DEFINITIONS(-D_USE_MATH_DEFINES) |
|---|
| 98 | ADD_DEFINITIONS(-D_SCL_SECURE_NO_WARNINGS) |
|---|
| 99 | ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE) |
|---|
| 100 | |
|---|
| 101 | # This option is to enable the /MP switch for Visual Studio 2005 and above compilers |
|---|
| 102 | OPTION(WIN32_USE_MP "Set to ON to build osgPPU with the /MP option (Visual Studio 2005 and above)." OFF) |
|---|
| 103 | MARK_AS_ADVANCED(WIN32_USE_MP) |
|---|
| 104 | IF(WIN32_USE_MP) |
|---|
| 105 | SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") |
|---|
| 106 | ENDIF(WIN32_USE_MP) |
|---|
| 107 | |
|---|
| 108 | ENDIF(MSVC) |
|---|
| 109 | |
|---|
| 110 | # Both Cygwin and Msys need -DNOMINMAX ??? |
|---|
| 111 | IF(UNIX) |
|---|
| 112 | ADD_DEFINITIONS(-DNOMINMAX) |
|---|
| 113 | ENDIF(UNIX) |
|---|
| 114 | |
|---|
| 115 | ######################################################################################################## |
|---|
| 116 | # the following options are MSVC specific, |
|---|
| 117 | # the first OSG_MSVC_VERSIONED_DLL activate a custom build-time layout that should allow to run examples and application |
|---|
| 118 | # fron bin folder without requiring installation step. |
|---|
| 119 | # it also prepend "osg${OPENSCENEGRAPH_SOVERSION}-" to only .dll files, leaving .lib files untouched in lib |
|---|
| 120 | # it also use a hack to get rid of Debug and Release folder in MSVC projects |
|---|
| 121 | # all the .dll and .pdb are in bin and all the .lib and .exp are in lib |
|---|
| 122 | # |
|---|
| 123 | # the second option disable incremental linking in debug build , that is enabled by default by CMake |
|---|
| 124 | ########################################################################################################## |
|---|
| 125 | IF(MSVC) |
|---|
| 126 | IF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4 AND ${CMAKE_PATCH_VERSION} LESS 7) |
|---|
| 127 | MESSAGE("Warning: disabling versioned options 2.4.6 exibits inconsintencies in .pdb naming, at least under MSVC, suggested upgrading at least to 2.4.7") |
|---|
| 128 | SET(OSGPPU_MSVC_VERSIONED_DLL OFF) |
|---|
| 129 | SET(OSGPPU_MSVC_DEBUG_INCREMENTAL_LINK ON) |
|---|
| 130 | ELSE(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4 AND ${CMAKE_PATCH_VERSION} LESS 7) |
|---|
| 131 | OPTION(OSGPPU_MSVC_VERSIONED_DLL "Set to ON to build osgPPU with versioned dll names" ON) |
|---|
| 132 | MARK_AS_ADVANCED(OSGPPU_MSVC_VERSIONED_DLL) |
|---|
| 133 | OPTION(OSGPPU_MSVC_DEBUG_INCREMENTAL_LINK "Set to OFF to build without incremental linking in debug (release is off by default)" OFF) |
|---|
| 134 | MARK_AS_ADVANCED(OSGPPU_MSVC_DEBUG_INCREMENTAL_LINK) |
|---|
| 135 | IF(NOT OSGPPU_MSVC_DEBUG_INCREMENTAL_LINK) |
|---|
| 136 | SET(CMAKE_MODULE_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:NO") |
|---|
| 137 | SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:NO") |
|---|
| 138 | SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:NO") |
|---|
| 139 | ENDIF(NOT OSGPPU_MSVC_DEBUG_INCREMENTAL_LINK) |
|---|
| 140 | ENDIF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4 AND ${CMAKE_PATCH_VERSION} LESS 7) |
|---|
| 141 | ENDIF(MSVC) |
|---|
| 142 | |
|---|
| 143 | ENDIF(WIN32) |
|---|
| 144 | |
|---|
| 145 | |
|---|
| 146 | |
|---|
| 147 | ################################################################################ |
|---|
| 148 | #Solution |
|---|
| 149 | ################################################################################ |
|---|
| 150 | SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) |
|---|
| 151 | SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) |
|---|
| 152 | SET(EXAMPLE_PREFIX osgppu_ CACHE STRING "Prefix used to build examples") |
|---|
| 153 | LINK_DIRECTORIES(${LIBRARY_OUTPUT_PATH}) |
|---|
| 154 | |
|---|
| 155 | |
|---|
| 156 | INCLUDE(OsgPPUMacroUtils) |
|---|
| 157 | |
|---|
| 158 | |
|---|
| 159 | ################################################################################ |
|---|
| 160 | # Some usefull definition |
|---|
| 161 | ################################################################################ |
|---|
| 162 | DETECT_OSG_VERSION() |
|---|
| 163 | IF(CMAKE_COMPILER_IS_GNUCC) |
|---|
| 164 | SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0") |
|---|
| 165 | ENDIF(CMAKE_COMPILER_IS_GNUCC) |
|---|
| 166 | IF(CMAKE_COMPILER_IS_GNUCXX) |
|---|
| 167 | SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0") |
|---|
| 168 | ENDIF(CMAKE_COMPILER_IS_GNUCXX) |
|---|
| 169 | |
|---|
| 170 | |
|---|
| 171 | |
|---|
| 172 | ################################################################################ |
|---|
| 173 | # maintainer options |
|---|
| 174 | ################################################################################ |
|---|
| 175 | OPTION(OSGPPU_MAINTAINER "Enable osgPPU maintainer build methods, such as making svn branches, tags, updating ChangeLog." OFF) |
|---|
| 176 | IF (OSGPPU_MAINTAINER) |
|---|
| 177 | |
|---|
| 178 | SET(OSGPPU_SVN "trunk") |
|---|
| 179 | SET(OSGPPU_BRANCH osgPPU-${OSGPPU_MAJOR_VERSION}.${OSGPPU_MINOR_VERSION}) |
|---|
| 180 | |
|---|
| 181 | # |
|---|
| 182 | # Provide target for tagging a release |
|---|
| 183 | # |
|---|
| 184 | SET(SVNCOMMAND svn) |
|---|
| 185 | SET(SVNTRUNKDIR http://svn.tevs.eu/osgPPU/trunk) |
|---|
| 186 | SET(SVNTAGDIR http://svn.tevs.eu/osgPPU/tags) |
|---|
| 187 | SET(SVNBRANCHDIR http://svn.tevs.eu/osgPPU/branch) |
|---|
| 188 | |
|---|
| 189 | IF (OSGPPU_SVN STREQUAL "trunk") |
|---|
| 190 | SET(SVNSOURCEDIR ${SVNTRUNKDIR}) |
|---|
| 191 | ELSE (OOSGPPU_SVN STREQUAL "trunk") |
|---|
| 192 | SET(SVNSOURCEDIR ${SVNBRANCH_DIR}/${OSGPPU_BRANCH}) |
|---|
| 193 | ENDIF(OSGPPU_SVN STREQUAL "trunk") |
|---|
| 194 | |
|---|
| 195 | |
|---|
| 196 | IF (OSGPPU_RELEASE_CANDIDATE EQUAL 0) |
|---|
| 197 | SET(RELEASE_NAME osgPPU-${OSGPPU_VERSION}) |
|---|
| 198 | ELSE (OSGPPU_RELEASE_CANDIDATE EQUAL 0) |
|---|
| 199 | SET(RELEASE_NAME osgPPU-${OSGPPU_VERSION}-rc${OSGPPU_RELEASE_CANDIDATE}) |
|---|
| 200 | ENDIF(OSGPPU_RELEASE_CANDIDATE EQUAL 0) |
|---|
| 201 | |
|---|
| 202 | |
|---|
| 203 | ADD_CUSTOM_TARGET(tag-test |
|---|
| 204 | COMMAND echo ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNTAGDIR}/${RELEASE_NAME} -m "Release ${RELEASE_NAME}" |
|---|
| 205 | ) |
|---|
| 206 | |
|---|
| 207 | ADD_CUSTOM_TARGET(tag-run |
|---|
| 208 | COMMAND ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNTAGDIR}/${RELEASE_NAME} -m "Release ${RELEASE_NAME}" |
|---|
| 209 | ) |
|---|
| 210 | |
|---|
| 211 | ADD_CUSTOM_TARGET(branch-test |
|---|
| 212 | COMMAND echo ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNBRANCHDIR}/${OSGPPU_BRANCH} -m "Branch ${OSGPPU_BRANCH}" |
|---|
| 213 | ) |
|---|
| 214 | |
|---|
| 215 | ADD_CUSTOM_TARGET(branch-run |
|---|
| 216 | COMMAND ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNBRANCHDIR}/${OSGPPU_BRANCH} -m "Branch ${OSGPPU_BRANCH}" |
|---|
| 217 | ) |
|---|
| 218 | |
|---|
| 219 | # |
|---|
| 220 | # Provide target for generating ChangeLog |
|---|
| 221 | # |
|---|
| 222 | SET(GENERATELOGS svn2cl) |
|---|
| 223 | |
|---|
| 224 | ADD_CUSTOM_TARGET(ChangeLog |
|---|
| 225 | COMMAND ${SVNCOMMAND} update |
|---|
| 226 | #COMMAND ${SVNCOMMAND} up |
|---|
| 227 | #COMMAND ${GENERATELOGS} |
|---|
| 228 | COMMAND ${SVNCOMMAND} log --xml --verbose | xsltproc doc/scripts/svn2cl.xsl - > ChangeLog |
|---|
| 229 | ) |
|---|
| 230 | |
|---|
| 231 | ENDIF(OSGPPU_MAINTAINER) |
|---|
| 232 | |
|---|
| 233 | |
|---|
| 234 | |
|---|
| 235 | ################################################################################ |
|---|
| 236 | # present the packaging option only if we have the cpack command defined (effectively >= 2.6.0) |
|---|
| 237 | ################################################################################ |
|---|
| 238 | IF(CMAKE_CPACK_COMMAND) |
|---|
| 239 | |
|---|
| 240 | # option to build the package target |
|---|
| 241 | OPTION(BUILD_OSGPPU_PACKAGES "Set to ON to generate CPack configuration files and packaging targets" OFF) |
|---|
| 242 | |
|---|
| 243 | # names used in other cmake script to determine package component |
|---|
| 244 | SET(PACKAGE_HEADERS headers) |
|---|
| 245 | SET(PACKAGE_LIB libraries) |
|---|
| 246 | SET(PACKAGE_DATA data) |
|---|
| 247 | SET(PACKAGE_SRC source) |
|---|
| 248 | SET(PACKAGE_EXAMPLES examples) |
|---|
| 249 | |
|---|
| 250 | # we would like to build all components |
|---|
| 251 | SET(CPACK_COMPONENTS_ALL ${PACKAGE_HEADERS} ${PACKAGE_LIB} ${PACKAGE_DATA} ${PACKAGE_SRC}) |
|---|
| 252 | |
|---|
| 253 | # group according package properties |
|---|
| 254 | SET(CPACK_COMPONENT_GROUP_DEV_DISPLAY_NAME "Development") |
|---|
| 255 | SET(CPACK_COMPONENT_GROUP_RUNTIME_DISPLAY_NAME "Runtime") |
|---|
| 256 | SET(CPACK_COMPONENT_GROUP_EXTRA_DISPLAY_NAME "Extras") |
|---|
| 257 | |
|---|
| 258 | # setup component properties |
|---|
| 259 | SET(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C/C++ Headers") |
|---|
| 260 | SET(CPACK_COMPONENT_HEADERS_DEPENDS ${PACKAGE_LIB}) |
|---|
| 261 | SET(CPACK_COMPONENT_HEADERS_GROUP "Development") |
|---|
| 262 | |
|---|
| 263 | SET(CPACK_COMPONENT_SOURCE_DISPLAY_NAME "C/C++ Sources") |
|---|
| 264 | SET(CPACK_COMPONENT_SOURCE_DEPENDS ${PACKAGE_HEADERS}) |
|---|
| 265 | SET(CPACK_COMPONENT_SOURCE_DISABLED TRUE) |
|---|
| 266 | SET(CPACK_COMPONENT_SOURCE_GROUP "Development") |
|---|
| 267 | |
|---|
| 268 | SET(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Runtime libraries") |
|---|
| 269 | SET(CPACK_COMPONENT_LIBRARIES_REQUIRED TRUE) |
|---|
| 270 | SET(CPACK_COMPONENT_LIBRARIES_GROUP "Runtime") |
|---|
| 271 | |
|---|
| 272 | SET(CPACK_COMPONENT_DATA_DISPLAY_NAME "Data files for Examples") |
|---|
| 273 | SET(CPACK_COMPONENT_DATA_DISABLED TRUE) |
|---|
| 274 | SET(CPACK_COMPONENT_DATA_GROUP "Extras") |
|---|
| 275 | |
|---|
| 276 | SET(CPACK_COMPONENT_EXAMPLES_DISPLAY_NAME "C/C++ Example Sources") |
|---|
| 277 | SET(CPACK_COMPONENT_EXAMPLES_DEPENDS ${PACKAGE_HEADERS} ${PACKAGE_LIB} ${PACKAGE_SRC}) |
|---|
| 278 | SET(CPACK_COMPONENT_EXAMPLES_DISABLED TRUE) |
|---|
| 279 | SET(CPACK_COMPONENT_EXAMPLES_GROUP "Extras") |
|---|
| 280 | |
|---|
| 281 | # if we would like to build them |
|---|
| 282 | IF(BUILD_OSGPPU_PACKAGES) |
|---|
| 283 | |
|---|
| 284 | # include all macros which will specify target build for the packages |
|---|
| 285 | INCLUDE(OsgPPUCPack) |
|---|
| 286 | |
|---|
| 287 | SET(PACKAGE_GROUP "") |
|---|
| 288 | list(APPEND PACKAGE_GROUP ${PACKAGE_HEADERS}) |
|---|
| 289 | list(APPEND PACKAGE_GROUP ${PACKAGE_SRC}) |
|---|
| 290 | list(APPEND PACKAGE_GROUP ${PACKAGE_EXAMPLES}) |
|---|
| 291 | GENERATE_PACKAGING_GROUP_TARGET("complete") |
|---|
| 292 | |
|---|
| 293 | ENDIF(BUILD_OSGPPU_PACKAGES) |
|---|
| 294 | ENDIF(CMAKE_CPACK_COMMAND) |
|---|
| 295 | |
|---|
| 296 | |
|---|
| 297 | ################################################################################ |
|---|
| 298 | # Create bin and lib directories if required |
|---|
| 299 | ################################################################################ |
|---|
| 300 | #IF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") |
|---|
| 301 | # FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin ${CMAKE_BINARY_DIR}/lib ${CMAKE_BINARY_DIR}/lib/${OSG_PLUGINS}) |
|---|
| 302 | #ENDIF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") |
|---|
| 303 | |
|---|
| 304 | |
|---|
| 305 | ################################################################################ |
|---|
| 306 | # Set Config file |
|---|
| 307 | ################################################################################ |
|---|
| 308 | SET(OSGPPU_CONFIG_HEADER "${PROJECT_BINARY_DIR}/include/osgPPU/Config.h") |
|---|
| 309 | CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osgPPU/Config.in" |
|---|
| 310 | "${OSGPPU_CONFIG_HEADER}") |
|---|
| 311 | |
|---|
| 312 | |
|---|
| 313 | ################################################################################ |
|---|
| 314 | ### uninstall target |
|---|
| 315 | ################################################################################ |
|---|
| 316 | CONFIGURE_FILE( |
|---|
| 317 | "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/cmake_uninstall.cmake.in" |
|---|
| 318 | "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" |
|---|
| 319 | IMMEDIATE @ONLY) |
|---|
| 320 | ADD_CUSTOM_TARGET(uninstall |
|---|
| 321 | "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") |
|---|
| 322 | |
|---|
| 323 | |
|---|
| 324 | ################################################################################ |
|---|
| 325 | # Compile subdirectory |
|---|
| 326 | ################################################################################ |
|---|
| 327 | ADD_SUBDIRECTORY(src) |
|---|
| 328 | ADD_SUBDIRECTORY(Data) |
|---|
| 329 | |
|---|