00-Common.cmake
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:8k
源码类别:

游戏引擎

开发平台:

C++ Builder

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