summaryrefslogtreecommitdiff
path: root/indra/cmake/00-Common.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'indra/cmake/00-Common.cmake')
-rw-r--r--indra/cmake/00-Common.cmake249
1 files changed, 249 insertions, 0 deletions
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
new file mode 100644
index 0000000000..a114d6e778
--- /dev/null
+++ b/indra/cmake/00-Common.cmake
@@ -0,0 +1,249 @@
+# -*- cmake -*-
+#
+# Compilation options shared by all Second Life components.
+
+include(Variables)
+
+
+# Portable compilation flags.
+
+if (EXISTS ${CMAKE_SOURCE_DIR}/llphysics)
+ # The release build should only offer to send crash reports if we're
+ # building from a Linden internal source tree.
+ set(release_crash_reports 1)
+else (EXISTS ${CMAKE_SOURCE_DIR}/llphysics)
+ set(release_crash_reports 0)
+endif (EXISTS ${CMAKE_SOURCE_DIR}/llphysics)
+
+set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DLL_DEBUG=1")
+set(CMAKE_CXX_FLAGS_RELEASE
+ "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=${release_crash_reports} -DNDEBUG")
+
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
+ "-DLL_RELEASE=1 -D_SECURE_SCL=0 -DLL_SEND_CRASH_REPORTS=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
+
+
+# Don't bother with a MinSizeRel build.
+
+set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug" CACHE STRING
+ "Supported build types." FORCE)
+
+
+# Platform-specific compilation flags.
+
+if (WINDOWS)
+ # Don't build DLLs.
+ set(BUILD_SHARED_LIBS OFF)
+
+ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP"
+ CACHE STRING "C++ compiler debug options" FORCE)
+ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
+ "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP"
+ CACHE STRING "C++ compiler release-with-debug options" FORCE)
+ set(CMAKE_CXX_FLAGS_RELEASE
+ "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP"
+ CACHE STRING "C++ compiler release options" FORCE)
+
+ set(CMAKE_CXX_STANDARD_LIBRARIES "")
+ set(CMAKE_C_STANDARD_LIBRARIES "")
+
+ add_definitions(
+ /DLL_WINDOWS=1
+ /DUNICODE
+ /D_UNICODE
+ /GS
+ /TP
+ /W3
+ /c
+ /Zc:forScope
+ /nologo
+ /Oy-
+ )
+
+ if(MSVC80 OR MSVC90)
+ set(CMAKE_CXX_FLAGS_RELEASE
+ "${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
+ CACHE STRING "C++ compiler release options" FORCE)
+
+ add_definitions(
+ /Zc:wchar_t-
+ )
+ endif (MSVC80 OR MSVC90)
+
+ # Are we using the crummy Visual Studio KDU build workaround?
+ if (NOT VS_DISABLE_FATAL_WARNINGS)
+ add_definitions(/WX)
+ endif (NOT VS_DISABLE_FATAL_WARNINGS)
+
+ # configure win32 API for windows XP+ compatibility
+ set(WINVER "0x0501" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)")
+ add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
+endif (WINDOWS)
+
+
+if (LINUX)
+ set(CMAKE_SKIP_RPATH TRUE)
+
+ # Here's a giant hack for Fedora 8, where we can't use
+ # _FORTIFY_SOURCE if we're using a compiler older than gcc 4.1.
+
+ find_program(GXX g++)
+ mark_as_advanced(GXX)
+
+ if (GXX)
+ execute_process(
+ COMMAND ${GXX} --version
+ COMMAND sed "s/^[gc+ ]*//"
+ COMMAND head -1
+ OUTPUT_VARIABLE GXX_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ else (GXX)
+ set(GXX_VERSION x)
+ endif (GXX)
+
+ # The quoting hack here is necessary in case we're using distcc or
+ # ccache as our compiler. CMake doesn't pass the command line
+ # through the shell by default, so we end up trying to run "distcc"
+ # " g++" - notice the leading space. Ugh.
+
+ execute_process(
+ COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} --version"
+ COMMAND sed "s/^[gc+ ]*//"
+ COMMAND head -1
+ OUTPUT_VARIABLE CXX_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if (${GXX_VERSION} STREQUAL ${CXX_VERSION})
+ add_definitions(-D_FORTIFY_SOURCE=2)
+ else (${GXX_VERSION} STREQUAL ${CXX_VERSION})
+ if (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat")
+ add_definitions(-D_FORTIFY_SOURCE=2)
+ endif (NOT ${GXX_VERSION} MATCHES " 4.1.*Red Hat")
+ endif (${GXX_VERSION} STREQUAL ${CXX_VERSION})
+
+ # Let's actually get a numerical version of gxx's version
+ STRING(REGEX REPLACE ".* ([0-9])\\.([0-9])\\.([0-9]).*" "\\1\\2\\3" CXX_VERSION_NUMBER ${CXX_VERSION})
+
+ # gcc 4.3 and above don't like the LL boost and also
+ # cause warnings due to our use of deprecated headers
+ if(${CXX_VERSION_NUMBER} GREATER 429)
+ add_definitions(-Wno-parentheses)
+ set(CMAKE_CXX_FLAGS "-Wno-deprecated ${CMAKE_CXX_FLAGS}")
+ endif (${CXX_VERSION_NUMBER} GREATER 429)
+
+ # End of hacks.
+
+ add_definitions(
+ -DLL_LINUX=1
+ -D_REENTRANT
+ -fexceptions
+ -fno-math-errno
+ -fno-strict-aliasing
+ -fsigned-char
+ -g
+ -pthread
+ )
+
+ if (SERVER)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth-60")
+ if (EXISTS /etc/debian_version)
+ FILE(READ /etc/debian_version DEBIAN_VERSION)
+ else (EXISTS /etc/debian_version)
+ set(DEBIAN_VERSION "")
+ endif (EXISTS /etc/debian_version)
+
+ if (NOT DEBIAN_VERSION STREQUAL "3.1")
+ add_definitions(-DCTYPE_WORKAROUND)
+ endif (NOT DEBIAN_VERSION STREQUAL "3.1")
+
+ if (EXISTS /usr/lib/mysql4/mysql)
+ link_directories(/usr/lib/mysql4/mysql)
+ endif (EXISTS /usr/lib/mysql4/mysql)
+
+ add_definitions(
+ -msse2
+ -mfpmath=sse
+ )
+ endif (SERVER)
+
+ if (VIEWER)
+ add_definitions(-DAPPID=secondlife)
+ add_definitions(-fvisibility=hidden)
+ # 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.
+ add_definitions(-DLL_IGNORE_SIGCHLD)
+ if (NOT STANDALONE)
+ # this stops us requiring a really recent glibc at runtime
+ add_definitions(-fno-stack-protector)
+ # linking can be very memory-hungry, especially the final viewer link
+ set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory")
+ endif (NOT STANDALONE)
+ endif (VIEWER)
+
+ set(CMAKE_CXX_FLAGS_DEBUG "-fno-inline ${CMAKE_CXX_FLAGS_DEBUG}")
+ set(CMAKE_CXX_FLAGS_RELEASE "-O2 ${CMAKE_CXX_FLAGS_RELEASE}")
+endif (LINUX)
+
+
+if (DARWIN)
+ # NOTE (per http://lists.apple.com/archives/darwin-dev/2008/Jan/msg00232.html):
+ # > Why the bus error? What am I doing wrong?
+ # This is a known issue where getcontext(3) is writing past the end of the
+ # ucontext_t struct when _XOPEN_SOURCE is not defined (rdar://problem/5578699 ).
+ # As a workaround, define _XOPEN_SOURCE before including ucontext.h.
+ add_definitions(-DLL_DARWIN=1 -D_XOPEN_SOURCE)
+ set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
+ set(DARWIN_extra_cstar_flags "-mlong-branch")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DARWIN_extra_cstar_flags}")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DARWIN_extra_cstar_flags}")
+ # NOTE: it's critical that the optimization flag is put in front.
+ # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
+ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
+ set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
+endif (DARWIN)
+
+
+if (LINUX OR DARWIN)
+ set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")
+
+ if (NOT GCC_DISABLE_FATAL_WARNINGS)
+ set(GCC_WARNINGS "${GCC_WARNINGS} -Werror")
+ endif (NOT GCC_DISABLE_FATAL_WARNINGS)
+
+ set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor -Woverloaded-virtual")
+
+ set(CMAKE_C_FLAGS "${GCC_WARNINGS} ${CMAKE_C_FLAGS}")
+ set(CMAKE_CXX_FLAGS "${GCC_CXX_WARNINGS} ${CMAKE_CXX_FLAGS}")
+
+ if (WORD_SIZE EQUAL 32)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
+ elseif (WORD_SIZE EQUAL 64)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
+ endif (WORD_SIZE EQUAL 32)
+endif (LINUX OR DARWIN)
+
+
+if (STANDALONE)
+ add_definitions(-DLL_STANDALONE=1)
+
+ if (LINUX AND ${ARCH} STREQUAL "i686")
+ add_definitions(-march=pentiumpro)
+ endif (LINUX AND ${ARCH} STREQUAL "i686")
+
+else (STANDALONE)
+ set(${ARCH}_linux_INCLUDES
+ ELFIO
+ atk-1.0
+ glib-2.0
+ gstreamer-0.10
+ gtk-2.0
+ pango-1.0
+ )
+endif (STANDALONE)
+
+if(SERVER)
+ include_directories(${LIBS_PREBUILT_DIR}/include/havok)
+endif(SERVER)