/indra/cmake/00-Common.cmake

https://bitbucket.org/lindenlab/viewer-beta/ · CMake · 253 lines · 170 code · 47 blank · 36 comment · 27 complexity · 5bbd5dfaec14033766272e2286a7ead1 MD5 · raw file

  1. # -*- cmake -*-
  2. #
  3. # Compilation options shared by all Second Life components.
  4. include(Variables)
  5. # Portable compilation flags.
  6. set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DLL_DEBUG=1")
  7. set(CMAKE_CXX_FLAGS_RELEASE
  8. "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -DNDEBUG")
  9. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
  10. "-DLL_RELEASE=1 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
  11. # Configure crash reporting
  12. set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds")
  13. set(NON_RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in developer builds")
  14. if(RELEASE_CRASH_REPORTING)
  15. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DLL_SEND_CRASH_REPORTS=1")
  16. endif()
  17. if(NON_RELEASE_CRASH_REPORTING)
  18. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DLL_SEND_CRASH_REPORTS=1")
  19. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DLL_SEND_CRASH_REPORTS=1")
  20. endif()
  21. # Don't bother with a MinSizeRel build.
  22. set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug" CACHE STRING
  23. "Supported build types." FORCE)
  24. # Platform-specific compilation flags.
  25. if (WINDOWS)
  26. # Don't build DLLs.
  27. set(BUILD_SHARED_LIBS OFF)
  28. # for "backwards compatibility", cmake sneaks in the Zm1000 option which royally
  29. # screws incredibuild. this hack disables it.
  30. # for details see: http://connect.microsoft.com/VisualStudio/feedback/details/368107/clxx-fatal-error-c1027-inconsistent-values-for-ym-between-creation-and-use-of-precompiled-headers
  31. # http://www.ogre3d.org/forums/viewtopic.php?f=2&t=60015
  32. # http://www.cmake.org/pipermail/cmake/2009-September/032143.html
  33. string(REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
  34. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP -D_SCL_SECURE_NO_WARNINGS=1"
  35. CACHE STRING "C++ compiler debug options" FORCE)
  36. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
  37. "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob0 -D_SECURE_STL=0"
  38. CACHE STRING "C++ compiler release-with-debug options" FORCE)
  39. set(CMAKE_CXX_FLAGS_RELEASE
  40. "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
  41. CACHE STRING "C++ compiler release options" FORCE)
  42. set(CMAKE_CXX_STANDARD_LIBRARIES "")
  43. set(CMAKE_C_STANDARD_LIBRARIES "")
  44. add_definitions(
  45. /DLL_WINDOWS=1
  46. /DDOM_DYNAMIC
  47. /DUNICODE
  48. /D_UNICODE
  49. /GS
  50. /TP
  51. /W3
  52. /c
  53. /Zc:forScope
  54. /nologo
  55. /Oy-
  56. /Zc:wchar_t-
  57. /arch:SSE2
  58. )
  59. # Are we using the crummy Visual Studio KDU build workaround?
  60. if (NOT VS_DISABLE_FATAL_WARNINGS)
  61. add_definitions(/WX)
  62. endif (NOT VS_DISABLE_FATAL_WARNINGS)
  63. # configure win32 API for windows XP+ compatibility
  64. set(WINVER "0x0501" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)")
  65. add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
  66. endif (WINDOWS)
  67. if (LINUX)
  68. set(CMAKE_SKIP_RPATH TRUE)
  69. # Here's a giant hack for Fedora 8, where we can't use
  70. # _FORTIFY_SOURCE if we're using a compiler older than gcc 4.1.
  71. find_program(GXX g++)
  72. mark_as_advanced(GXX)
  73. if (GXX)
  74. execute_process(
  75. COMMAND ${GXX} --version
  76. COMMAND sed "s/^[gc+ ]*//"
  77. COMMAND head -1
  78. OUTPUT_VARIABLE GXX_VERSION
  79. OUTPUT_STRIP_TRAILING_WHITESPACE
  80. )
  81. else (GXX)
  82. set(GXX_VERSION x)
  83. endif (GXX)
  84. # The quoting hack here is necessary in case we're using distcc or
  85. # ccache as our compiler. CMake doesn't pass the command line
  86. # through the shell by default, so we end up trying to run "distcc"
  87. # " g++" - notice the leading space. Ugh.
  88. execute_process(
  89. COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} --version"
  90. COMMAND sed "s/^[gc+ ]*//"
  91. COMMAND head -1
  92. OUTPUT_VARIABLE CXX_VERSION
  93. OUTPUT_STRIP_TRAILING_WHITESPACE)
  94. if (${GXX_VERSION} STREQUAL ${CXX_VERSION})
  95. add_definitions(-D_FORTIFY_SOURCE=2)
  96. else (${GXX_VERSION} STREQUAL ${CXX_VERSION})
  97. if (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat")
  98. add_definitions(-D_FORTIFY_SOURCE=2)
  99. endif (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat")
  100. endif (${GXX_VERSION} STREQUAL ${CXX_VERSION})
  101. # Let's actually get a numerical version of gxx's version
  102. STRING(REGEX REPLACE ".* ([0-9])\\.([0-9])\\.([0-9]).*" "\\1\\2\\3" CXX_VERSION_NUMBER ${CXX_VERSION})
  103. # gcc 4.3 and above don't like the LL boost and also
  104. # cause warnings due to our use of deprecated headers
  105. if(${CXX_VERSION_NUMBER} GREATER 429)
  106. add_definitions(-Wno-parentheses)
  107. set(CMAKE_CXX_FLAGS "-Wno-deprecated ${CMAKE_CXX_FLAGS}")
  108. endif (${CXX_VERSION_NUMBER} GREATER 429)
  109. # End of hacks.
  110. add_definitions(
  111. -DLL_LINUX=1
  112. -D_REENTRANT
  113. -fexceptions
  114. -fno-math-errno
  115. -fno-strict-aliasing
  116. -fsigned-char
  117. -g
  118. -msse2
  119. -mfpmath=sse
  120. -pthread
  121. )
  122. if (SERVER)
  123. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth-60")
  124. if (EXISTS /etc/debian_version)
  125. FILE(READ /etc/debian_version DEBIAN_VERSION)
  126. else (EXISTS /etc/debian_version)
  127. set(DEBIAN_VERSION "")
  128. endif (EXISTS /etc/debian_version)
  129. if (NOT DEBIAN_VERSION STREQUAL "3.1")
  130. add_definitions(-DCTYPE_WORKAROUND)
  131. endif (NOT DEBIAN_VERSION STREQUAL "3.1")
  132. if (EXISTS /usr/lib/mysql4/mysql)
  133. link_directories(/usr/lib/mysql4/mysql)
  134. endif (EXISTS /usr/lib/mysql4/mysql)
  135. endif (SERVER)
  136. if (VIEWER)
  137. add_definitions(-DAPPID=secondlife)
  138. add_definitions(-fvisibility=hidden)
  139. # don't catch SIGCHLD in our base application class for the viewer - some of our 3rd party libs may need their *own* SIGCHLD handler to work. Sigh! The viewer doesn't need to catch SIGCHLD anyway.
  140. add_definitions(-DLL_IGNORE_SIGCHLD)
  141. if (WORD_SIZE EQUAL 32)
  142. add_definitions(-march=pentium4)
  143. endif (WORD_SIZE EQUAL 32)
  144. add_definitions(-mfpmath=sse)
  145. #add_definitions(-ftree-vectorize) # THIS CRASHES GCC 3.1-3.2
  146. if (NOT STANDALONE)
  147. # this stops us requiring a really recent glibc at runtime
  148. add_definitions(-fno-stack-protector)
  149. # linking can be very memory-hungry, especially the final viewer link
  150. set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory")
  151. endif (NOT STANDALONE)
  152. endif (VIEWER)
  153. set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
  154. set(CMAKE_CXX_FLAGS_RELEASE "-O2 ${CMAKE_CXX_FLAGS_RELEASE}")
  155. endif (LINUX)
  156. if (DARWIN)
  157. # NOTE (per http://lists.apple.com/archives/darwin-dev/2008/Jan/msg00232.html):
  158. # > Why the bus error? What am I doing wrong?
  159. # This is a known issue where getcontext(3) is writing past the end of the
  160. # ucontext_t struct when _XOPEN_SOURCE is not defined (rdar://problem/5578699 ).
  161. # As a workaround, define _XOPEN_SOURCE before including ucontext.h.
  162. add_definitions(-DLL_DARWIN=1 -D_XOPEN_SOURCE)
  163. set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first")
  164. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
  165. set(DARWIN_extra_cstar_flags "-mlong-branch")
  166. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DARWIN_extra_cstar_flags}")
  167. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DARWIN_extra_cstar_flags}")
  168. # NOTE: it's critical that the optimization flag is put in front.
  169. # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
  170. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
  171. set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
  172. endif (DARWIN)
  173. if (LINUX OR DARWIN)
  174. set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")
  175. if (NOT GCC_DISABLE_FATAL_WARNINGS)
  176. set(GCC_WARNINGS "${GCC_WARNINGS} -Werror")
  177. endif (NOT GCC_DISABLE_FATAL_WARNINGS)
  178. set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor")
  179. set(CMAKE_C_FLAGS "${GCC_WARNINGS} ${CMAKE_C_FLAGS}")
  180. set(CMAKE_CXX_FLAGS "${GCC_CXX_WARNINGS} ${CMAKE_CXX_FLAGS}")
  181. if (WORD_SIZE EQUAL 32)
  182. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
  183. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
  184. elseif (WORD_SIZE EQUAL 64)
  185. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64")
  186. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
  187. endif (WORD_SIZE EQUAL 32)
  188. endif (LINUX OR DARWIN)
  189. if (STANDALONE)
  190. add_definitions(-DLL_STANDALONE=1)
  191. if (LINUX AND ${ARCH} STREQUAL "i686")
  192. add_definitions(-march=pentiumpro)
  193. endif (LINUX AND ${ARCH} STREQUAL "i686")
  194. else (STANDALONE)
  195. set(${ARCH}_linux_INCLUDES
  196. ELFIO
  197. atk-1.0
  198. glib-2.0
  199. gstreamer-0.10
  200. gtk-2.0
  201. pango-1.0
  202. )
  203. endif (STANDALONE)
  204. if(SERVER)
  205. include_directories(${LIBS_PREBUILT_DIR}/include/havok)
  206. endif(SERVER)