1################################################################################## 2# This currently sets up the options for the WARNING FLAGS for the compiler we are generating for. 3# Currently only have gnu 4################################################################################## 5MACRO(OSSIM_ADD_COMMON_LIBRARY_FLAGS) 6 OPTION(OSSIM_COMPILE_WITH_FULL_WARNING "OSSIM developers : Compilation with FULL warning (use only for ossim developers)." OFF) 7 MARK_AS_ADVANCED(OSSIM_COMPILE_WITH_FULL_WARNING) 8 9 IF(OSSIM_COMPILE_WITH_FULL_WARNING) 10 IF(CMAKE_COMPILER_IS_GNUCXX) 11 SET(OSSIM_COMMON_COMPILER_FLAGS "${OSSIM_COMMON_COMPILER_FLAGS} -Wall -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wuninitialized -Wsign-compare -Wparentheses -Wunknown-pragmas -Wswitch" CACHE STRING "List of compilation parameters.") 12 ENDIF(CMAKE_COMPILER_IS_GNUCXX) 13 ENDIF(OSSIM_COMPILE_WITH_FULL_WARNING) 14 15 IF(WIN32) 16 #--- 17 # This option is to enable the /MP to compile multiple source files by using 18 # multiple processes. 19 #--- 20 OPTION(WIN32_USE_MP "Set to ON to build OSSIM with the /MP option (Visual Studio 2005 and above)." OFF) 21 MARK_AS_ADVANCED(WIN32_USE_MP) 22 IF(WIN32_USE_MP) 23 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") 24 ENDIF(WIN32_USE_MP) 25 26 set(OSSIM_COMMON_COMPILER_FLAGS "${OSSIM_COMMON_COMPILER_FLAGS} -DNOMINMAX -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE") 27 28 set(DEBUG_BUILD OFF) 29 IF(CMAKE_BUILD_TYPE) 30 string ( COMPARE EQUAL ${CMAKE_BUILD_TYPE} "Debug" DEBUG_BUILD ) 31 ENDIF(CMAKE_BUILD_TYPE) 32 33 ### 34 # Currently must set /FORCE:MULTIPLE for Visual Studio 2010. 29 October 2010 - drb 35 ### 36 37 IF(MSVC) 38 message("MSVC_VERSION: ${MSVC_VERSION}") 39 40 if( (MSVC_VERSION GREATER 1600) OR (MSVC_VERSION EQUAL 1600)) 41 if (DEBUG_BUILD) 42 SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD /NODEFAULTLIB:MSVCRT /FORCE:MULTIPLE /MANIFEST:NO") 43 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD /FORCE:MULTIPLE /MANIFEST:NO") 44 45 else ( ) 46 SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD /FORCE:MULTIPLE /MANIFEST:NO") 47 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD /FORCE:MULTIPLE /MANIFEST:NO") 48 endif (DEBUG_BUILD) 49 50 SET(OSSIM_COMMON_COMPILER_FLAGS "${OSSIM_COMMON_COMPILER_FLAGS} /EHsc") 51 SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD /FORCE:MULTIPLE") 52 else( ) 53 SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD") 54 endif() 55 ENDIF(MSVC) 56 ENDIF(WIN32) 57 58 OPTION(OSSIM_ADD_FPIC "Compilation with FPIC flag if static library. The default is on since we have plugins that need to be shared." ON) 59 MARK_AS_ADVANCED(OSSIM_ADD_FPIC) 60 IF(OSSIM_ADD_FPIC) 61 IF(UNIX AND NOT BUILD_SHARED_LIBS) 62 STRING(REGEX MATCH "fPIC" REG_MATCHED "${OSSIM_COMMON_COMPILER_FLAGS}") 63 if(NOT REG_MATCHED) 64 set(OSSIM_COMMON_COMPILER_FLAGS "${OSSIM_COMMON_COMPILER_FLAGS} -fPIC") 65 endif(NOT REG_MATCHED) 66 ENDIF(UNIX AND NOT BUILD_SHARED_LIBS) 67 ENDIF(OSSIM_ADD_FPIC) 68 69 MARK_AS_ADVANCED(OSSIM_COMMON_COMPILER_FLAGS) 70ENDMACRO(OSSIM_ADD_COMMON_LIBRARY_FLAGS) 71 72MACRO(USE_CXX11) 73 if (CMAKE_VERSION VERSION_LESS "3.1") 74 if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") 75 set (CMAKE_CXX_FLAGS "--std=gnu++11 ${CMAKE_CXX_FLAGS}") 76 elseif (APPLE) 77 set (CMAKE_CXX_FLAGS "--std=gnu++11 ${CMAKE_CXX_FLAGS}") 78 endif() 79 else () 80 set(CMAKE_CXX_STANDARD 11) 81 set(CMAKE_CXX_STANDARD_REQUIRED ON) 82 set(CMAKE_CXX_EXTENSIONS OFF) 83 endif () 84ENDMACRO(USE_CXX11) 85 86MACRO(OSSIM_ADD_COMMON_SETTINGS) 87 ################################################################################### 88 # Set defaults for Universal Binaries. We want 32-bit Intel/PPC on 10.4 89 # and 32/64-bit Intel/PPC on >= 10.5. Anything <= 10.3 doesn't support. 90 # These are just defaults/recommendations, but how we want to build 91 # out of the box. But the user needs to be able to change these options. 92 # So we must only set the values the first time CMake is run, or we 93 # will overwrite any changes the user sets. 94 # FORCE is used because the options are not reflected in the UI otherwise. 95 # Seems like a good place to add version specific compiler flags too. 96 ################################################################################### 97 98 USE_CXX11() 99 100 IF(APPLE) 101 # use, i.e. don't skip the full RPATH for the build tree 102 SET(CMAKE_SKIP_BUILD_RPATH FALSE) 103 104 # when building, don't use the install RPATH already 105 # (but later on when installing) 106 SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 107 108 SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}") 109 110 # add the automatically determined parts of the RPATH 111 # which point to directories outside the build tree to the install RPATH 112 SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) 113 114 115 # the RPATH to be used when installing, but only if it's not a system directory 116 LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) 117 118 IF("${isSystemDir}" STREQUAL "-1") 119 SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}") 120 ENDIF("${isSystemDir}" STREQUAL "-1") 121 SET(TEMP_CMAKE_OSX_ARCHITECTURES "") 122 SET(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT}") 123 # This is really fragile, but CMake doesn't provide the OS system 124 # version information we need. (Darwin versions can be changed 125 # independently of OS X versions.) 126 # It does look like CMake handles the CMAKE_OSX_SYSROOT automatically. 127 IF(EXISTS /Developer/SDKs/MacOSX10.6.sdk) 128 SET(TEMP_CMAKE_OSX_ARCHITECTURES "i386;x86_64") 129 IF(NOT ("${CMAKE_CXX_FLAGS}" MATCHES "mmacosx-version-min")) 130 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types.") 131 ENDIF() 132 ELSEIF(EXISTS /Developer/SDKs/MacOSX10.5.sdk) 133 # 64-bit compiles are not supported with Carbon. We should enable 134 SET(TEMP_CMAKE_OSX_ARCHITECTURES "i386;x86_64") 135 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types.") 136 ELSEIF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk) 137 SET(TEMP_CMAKE_OSX_ARCHITECTURES "i386;ppc") 138 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.4 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types.") 139 ELSE() 140 # No Universal Binary support 141 # Should break down further to set the -mmacosx-version-min, 142 # but the SDK detection is too unreliable here. 143 ENDIF() 144 IF(NOT CMAKE_OSX_ARCHITECTURES) 145 SET(CMAKE_OSX_ARCHITECTURES "${TEMP_CMAKE_OSX_ARCHITECTURES}" CACHE STRING "Build architectures for OSX" FORCE) 146 ENDIF() 147 OPTION(OSSIM_BUILD_APPLICATION_BUNDLES "Enable the building of applications and examples as OSX Bundles" OFF) 148 149 MARK_AS_ADVANCED(CMAKE_OSX_ARCHITECTURES) 150 MARK_AS_ADVANCED(CMAKE_CXX_FLAGS) 151 MARK_AS_ADVANCED(CMAKE_OSX_SYSROOT) 152 MARK_AS_ADVANCED(OSSIM_BUILD_APPLICATION_BUNDLES) 153 ENDIF(APPLE) 154 155 SET(MAKE_APPENDS_BUILD_TYPE "NO") 156 IF(CMAKE_GENERATOR) 157 STRING(TOUPPER ${CMAKE_GENERATOR} CMAKE_GENERATOR_TEST_UPPER) 158 STRING(COMPARE EQUAL "${CMAKE_GENERATOR_TEST_UPPER}" "XCODE" CMAKE_GENERATOR_TEST) 159 IF(CMAKE_GENERATOR_TEST) 160 SET(MAKE_APPENDS_BUILD_TYPE "YES") 161 ELSE() 162 STRING(COMPARE NOTEQUAL "." "${CMAKE_CFG_INTDIR}" CMAKE_GENERATOR_TEST) 163 IF(CMAKE_GENERATOR_TEST) 164 SET(MAKE_APPENDS_BUILD_TYPE "YES") 165 ENDIF() 166 ENDIF() 167 ENDIF(CMAKE_GENERATOR) 168 OSSIM_ADD_COMMON_LIBRARY_FLAGS() 169 170 # Dynamic vs Static Linking 171 OPTION(BUILD_SHARED_LIBS "Set to ON to build OSSIM for dynamic linking. Use OFF for static." ON) 172 OPTION(BUILD_OSSIM_FRAMEWORKS "Set to ON to build OSSIM for framework if BUILD_SHARED_LIBS is on. Use OFF for dylib if BUILD_SHARED_LIBS is on." ON) 173 IF(BUILD_SHARED_LIBS) 174 SET(OSSIM_USER_DEFINED_DYNAMIC_OR_STATIC "SHARED") 175 ELSE () 176 SET(OSSIM_USER_DEFINED_DYNAMIC_OR_STATIC "STATIC") 177 ENDIF() 178 179# IF(NOT OSSIM_LIBRARY_BUILD_OUTPUT_DIRECTORY) 180# SET(OSSIM_LIBRARY_BUILD_OUTPUT_DIRECTORY ${${PROJECT_NAME}_SOURCE_DIR}/lib) 181# ENDIF(NOT OSSIM_LIBRARY_BUILD_OUTPUT_DIRECTORY) 182# IF(NOT OSSIM_RUNTIME_BUILD_OUTPUT_DIRECTORY) 183# SET(OSSIM_RUNTIME_BUILD_OUTPUT_DIRECTORY ${${PROJECT_NAME}_SOURCE_DIR}/bin) 184# ENDIF(NOT OSSIM_RUNTIME_BUILD_OUTPUT_DIRECTORY) 185 186 # Libraries and archives go to lib or lib64. 187 get_property(LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS) 188 if(LIB64) 189 set(LIBSUFFIX 64) 190 else() 191 set(LIBSUFFIX "") 192 endif() 193 194 IF(MAKE_APPENDS_BUILD_TYPE) 195 SET(BUILD_FRAMEWORK_DIR "") 196 SET(BUILD_RUNTIME_DIR "bin") 197 SET(BUILD_LIBRARY_DIR lib${LIBSUFFIX}) 198 SET(BUILD_ARCHIVE_DIR lib${LIBSUFFIX}) 199 SET(BUILD_INCLUDE_DIR "include") 200 ELSE() 201 IF(NOT DEFINED BUILD_FRAMEWORK_DIR) 202 SET(BUILD_FRAMEWORK_DIR "") 203 ENDIF() 204 IF(NOT DEFINED BUILD_RUNTIME_DIR) 205 SET(BUILD_RUNTIME_DIR "bin") 206 ENDIF() 207 IF(NOT DEFINED BUILD_LIBRARY_DIR) 208 SET(BUILD_LIBRARY_DIR lib${LIBSUFFIX}) 209 ENDIF() 210 IF(NOT DEFINED BUILD_ARCHIVE_DIR) 211 SET(BUILD_ARCHIVE_DIR lib${LIBSUFFIX}) 212 ENDIF() 213 IF(NOT DEFINED BUILD_INCLUDE_DIR) 214 SET(BUILD_INCLUDE_DIR "include") 215 ENDIF() 216 ENDIF() 217 218 SET(INSTALL_FRAMEWORK_DIR "Frameworks") 219 SET(INSTALL_RUNTIME_DIR "bin") 220 SET(INSTALL_INCLUDE_DIR "include") 221 set(INSTALL_LIBRARY_DIR lib${LIBSUFFIX} CACHE PATH "Installation directory for libraries") 222 set(INSTALL_ARCHIVE_DIR lib${LIBSUFFIX} CACHE PATH "Installation directory for archive") 223 mark_as_advanced(LIBSUFFIX) 224 mark_as_advanced(INSTALL_LIBRARY_DIR) 225 mark_as_advanced(INSTALL_ARCHIVE_DIR) 226 227 IF(WIN32) 228 IF(NOT DEFINED CMAKE_DEBUG_POSTFIX) 229 SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Debug variable used to add the postfix to dll's and exe's. Defaults to 'd' on WIN32 builds and empty on all other platforms" FORCE) 230 ENDIF() 231 ENDIF() 232 IF(NOT CMAKE_BUILD_TYPE) 233 SET(CMAKE_BUILD_TYPE Release) 234 ENDIF(NOT CMAKE_BUILD_TYPE) 235 236 # force some variables that could be defined in the command line to be written to cache 237 SET( CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH 238 "Where to install ${PROJECT_NAME}" FORCE ) 239 SET( CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING 240 "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE ) 241 SET( CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" CACHE PATH 242 "Path to custom CMake Modules" FORCE ) 243 SET( INSTALL_DOC "${INSTALL_DOC}" CACHE BOOL 244 "Set to OFF to skip build/install Documentation" FORCE ) 245 246 IF(NOT OSSIM_DEV_HOME) 247 SET(OSSIM_DEV_HOME "$ENV{OSSIM_DEV_HOME}") 248 GET_FILENAME_COMPONENT(OSSIM_DEV_HOME "${OSSIM_DEV_HOME}" ABSOLUTE) 249 ENDIF(NOT OSSIM_DEV_HOME) 250 IF(NOT CMAKE_INSTALL_PREFIX) 251 SET(CMAKE_INSTALL_PREFIX "$ENV{OSSIM_INSTALL_PREFIX}") 252 GET_FILENAME_COMPONENT(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" ABSOLUTE) 253 ENDIF(NOT CMAKE_INSTALL_PREFIX) 254 IF(NOT OSSIM_DEPENDENCIES) 255 SET(OSSIM_DEPENDENCIES "$ENV{OSSIM_DEPENDENCIES}") 256 GET_FILENAME_COMPONENT(OSSIM_DEPENDENCIES "${OSSIM_DEPENDENCIES}" ABSOLUTE) 257 ENDIF(NOT OSSIM_DEPENDENCIES) 258 259 # Define paths used by package finders defined in this directory: 260 IF(OSSIM_INSTALL_PREFIX) 261 SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};${OSSIM_INSTALL_PREFIX}/lib${LIBSUFFIX}") 262 SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};${OSSIM_INSTALL_PREFIX}/include") 263 ENDIF() 264 IF(OSSIM_DEPENDENCIES) 265 SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};${OSSIM_DEPENDENCIES}/lib;${OSSIM_DEPENDENCIES}/lib64") 266 SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};${OSSIM_DEPENDENCIES}/include;${OSSIM_DEPENDENCIES}/kakadu/include;${OSSIM_DEPENDENCIES}") 267 ENDIF() 268# SET(CMAKE_LIBRARY_PATH "${CMAKE_LIBRARY_PATH};/usr/lib;/usr/local/lib;/usr/lib64;/usr/lib/x86_64-linux-gnu") 269 SET(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH};${OSSIM_DEV_HOME}/ossim/include;/usr/include;/usr/local/include") 270 271 #################################### ADd some common options for all modules to use ################################### 272 OPTION(BUILD_OSSIM_VIDEO "Set to ON to build the video decoding library. Use OFF to skip this module." OFF) 273 OPTION(BUILD_OSSIM_PLANET "Set to ON to build the 3-D visualization module. Use OFF to skip this module." OFF) 274 OPTION(BUILD_OSSIM_GUI "Set to ON to build the new ossimGui library and geocell application." ON) 275 OPTION(BUILD_OMS "Set to ON to build the oms api library." ON) 276 OPTION(BUILD_OSSIM_WMS "Set to ON to build the wms api library." ON) 277 278 SET(CMAKE_INCLUDE_DIRS_FILE "${CMAKE_BINARY_DIR}/CMakeIncludeDirs.txt") 279 SET(CMAKE_FILENAMES_FILE "${CMAKE_BINARY_DIR}/CMakeFileNames.txt") 280 281ENDMACRO(OSSIM_ADD_COMMON_SETTINGS) 282 283 284OSSIM_ADD_COMMON_SETTINGS() 285