mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 10:37:02 +00:00
For leak detection you can also use tools like Valgrind. If you really want to use VLD you can revert this commit and remove the comments in MemoryLeaks.cpp and MemoryLeaks.h. The VLD version which has been shipped with MaNGOS is *heavily* outdated and I thus suggest you to use a newer version of it, if you really plan to use it. You can find the newest version on github in its official repository: https://github.com/dmoulding/vld
428 lines
No EOL
13 KiB
CMake
428 lines
No EOL
13 KiB
CMake
#
|
|
# Copyright (C) 2005-2011 MaNGOS project <http://getmangos.com/>
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
#
|
|
|
|
project(MaNGOS)
|
|
set(MANGOS_VERSION 0.17.0)
|
|
|
|
# CMake policies
|
|
cmake_minimum_required(VERSION 2.8)
|
|
|
|
set(CMAKE_MODULE_PATH
|
|
${CMAKE_MODULE_PATH}
|
|
${CMAKE_SOURCE_DIR}/cmake
|
|
)
|
|
|
|
# Force out-of-source build
|
|
string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" BUILDING_IN_SOURCE)
|
|
if(BUILDING_IN_SOURCE)
|
|
message(FATAL_ERROR
|
|
"This project requires an out of source build. Remove the file 'CMakeCache.txt' found in this directory before continuing, create a separate build directory and run 'cmake <srcs> [options]' from there."
|
|
)
|
|
endif()
|
|
|
|
if(WIN32 AND NOT MSVC)
|
|
message(FATAL_ERROR
|
|
"Under Windows other compiler than Microsoft Visual Studio are not supported."
|
|
)
|
|
endif()
|
|
|
|
find_package(Platform REQUIRED)
|
|
find_package(Git)
|
|
|
|
# VS100 uses MSBuild.exe instead of devenv.com, so force it to use devenv.com
|
|
if(WIN32 AND MSVC_VERSION MATCHES 1600)
|
|
find_package(VisualStudio2010)
|
|
endif()
|
|
|
|
# if(NOT PLATFORM MATCHES X86 AND NOT PLATFORM MATCHES X64)
|
|
# message(FATAL_ERROR
|
|
# "An unknown Architecture was selected. Only the values X86 and X64 for PLATFORM are supported."
|
|
# )
|
|
# endif()
|
|
|
|
# Output description of this script
|
|
message(
|
|
"\nThis script builds the MaNGOS server.
|
|
Options that can be used in order to configure the process:
|
|
PREFIX: Path where the server should be installed to
|
|
PCH: Use precompiled headers
|
|
DEBUG: Debug mode
|
|
To set an option simply type -D<OPTION>=<VALUE> after 'cmake <srcs>'.
|
|
For example: cmake .. -DDEBUG=1 -DPREFIX=/opt/mangos\n"
|
|
) # TODO: PLATFORM: Sets the architecture for compile (X86,X64)
|
|
|
|
# Override configuration-types - we don't use anything else than debug and release
|
|
if(CMAKE_CONFIGURATION_TYPES)
|
|
set(CMAKE_CONFIGURATION_TYPES Release Debug)
|
|
set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
|
|
"Reset the configurations to what we need"
|
|
FORCE)
|
|
endif()
|
|
|
|
# Find out what system we use to include the needed libs
|
|
if(WIN32)
|
|
if(PLATFORM MATCHES X86) # 32-bit
|
|
set(DEP_ARCH win32)
|
|
else() # 64-bit
|
|
set(DEP_ARCH x64)
|
|
endif()
|
|
endif()
|
|
|
|
# if(WIN32)
|
|
# if(PLATFORM MATCHES X86)
|
|
# set(ARCH_FLAGS "/MACHINE:X86")
|
|
# else()
|
|
# set(ARCH_FLAGS "/MACHINE:X64")
|
|
# endif()
|
|
# elseif(UNIX)
|
|
# if(PLATFORM MATCHES X86)
|
|
# set(ARCH_FLAGS "-m32")
|
|
# else()
|
|
# set(ARCH_FLAGS "-m64")
|
|
# endif()
|
|
# endif()
|
|
|
|
option(DEBUG "Debug mode" 0)
|
|
# option(CLI "With CLI" 1) # Not used by MaNGOS so far
|
|
# option(RA "With Remote Access" 0) # TODO: support remote access
|
|
option(TBB_USE_EXTERNAL "Use external TBB" 0)
|
|
option(USE_STD_MALLOC "Use standard malloc instead of TBB" 0)
|
|
option(ACE_USE_EXTERNAL "Use external ACE" 0)
|
|
|
|
find_package(PCHSupport)
|
|
|
|
# Add options for compile of mangos
|
|
if(PCHSupport_FOUND)
|
|
if(WIN32)
|
|
option(PCH "Use precompiled headers" 1)
|
|
else()
|
|
option(PCH "Use precompiled headers" 0)
|
|
endif()
|
|
endif()
|
|
|
|
# FIXME: options that should be checked
|
|
# option(SQL "Copy SQL files" 0)
|
|
# option(TOOLS "Build tools" 0)
|
|
|
|
# Set up the install-prefix
|
|
if(CMAKE_INSTALL_PREFIX STREQUAL "/usr/local")
|
|
get_filename_component(PREFIX_ABSOLUTE "../mangos-server" ABSOLUTE)
|
|
set(CMAKE_INSTALL_PREFIX ${PREFIX_ABSOLUTE} CACHE PATH "Install path prefix." FORCE)
|
|
endif()
|
|
if(PREFIX)
|
|
string(REGEX REPLACE "^~" "$ENV{HOME}" PREFIX ${PREFIX})
|
|
get_filename_component(PREFIX_ABSOLUTE ${PREFIX} ABSOLUTE)
|
|
set(CMAKE_INSTALL_PREFIX ${PREFIX} CACHE PATH "Install path prefix." FORCE)
|
|
else()
|
|
set(PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Install path prefix.")
|
|
endif()
|
|
|
|
set(BIN_DIR ${CMAKE_INSTALL_PREFIX}/bin)
|
|
set(CONF_DIR ${CMAKE_INSTALL_PREFIX}/etc)
|
|
# If win32 put it in the bin dir not lib
|
|
if(WIN32)
|
|
set(LIBS_DIR ${CMAKE_INSTALL_PREFIX}/bin)
|
|
else()
|
|
set(LIBS_DIR ${CMAKE_INSTALL_PREFIX}/lib)
|
|
endif()
|
|
|
|
# For Unix systems set the rpath so that libraries are found
|
|
set(CMAKE_INSTALL_RPATH ${LIBS_DIR})
|
|
set(CMAKE_INSTALL_NAME_DIR ${LIBS_DIR})
|
|
# Run out of build tree
|
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH OFF)
|
|
|
|
# Find needed packages and if necessery abort if something important is missing
|
|
unset(ACE_INCLUDE_DIR CACHE)
|
|
unset(ACE_LIBRARIES CACHE)
|
|
unset(ACE_LIBRARIES_DIR CACHE)
|
|
unset(ACE_INCLUDE_DIR)
|
|
unset(ACE_LIBRARIES)
|
|
unset(ACE_LIBRARIES_DIR)
|
|
if(ACE_USE_EXTERNAL)
|
|
find_package(ACE)
|
|
if(NOT ACE_FOUND)
|
|
message(FATAL_ERROR
|
|
"This project requires ACE installed when ACE_USE_EXTERNAL is set. Please download the ACE Micro Release Kit from http://download.dre.vanderbilt.edu/ and install it. If this script didn't find ACE and it was correctly installed please set ACE_ROOT to the correct path."
|
|
)
|
|
endif()
|
|
if(EXISTS ${ACE_INCLUDE_DIR}/ace/Stack_Trace.h)
|
|
set(HAVE_ACE_STACK_TRACE_H ON) # config.h.cmake
|
|
endif()
|
|
else()
|
|
include(cmake/ImportACE.cmake)
|
|
endif()
|
|
|
|
if(NOT USE_STD_MALLOC)
|
|
unset(TBB_INCLUDE_DIR CACHE)
|
|
unset(TBB_LIBRARIES CACHE)
|
|
unset(TBB_LIBRARIES_DIR CACHE)
|
|
unset(TBB_INCLUDE_DIR)
|
|
unset(TBB_LIBRARIES)
|
|
unset(TBB_LIBRARIES_DIR)
|
|
if(TBB_USE_EXTERNAL)
|
|
find_package(TBB)
|
|
if(NOT TBB_FOUND)
|
|
message(FATAL_ERROR
|
|
"This project requires TBB installed when TBB_USE_EXTERNAL is set. Please download the TBB Stable Release from http://www.threadingbuildingblocks.org/ and install it. If this script didn't find TBB and it was correctly installed please set TBB_ROOT to the correct path."
|
|
)
|
|
endif()
|
|
else()
|
|
include(cmake/ImportTBB.cmake)
|
|
endif()
|
|
endif()
|
|
|
|
# Win32 delifered packages
|
|
if(WIN32)
|
|
set(MYSQL_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/dep/include/mysql)
|
|
set(MYSQL_LIBRARY ${CMAKE_SOURCE_DIR}/dep/lib/${DEP_ARCH}_release/libmySQL.lib)
|
|
set(MYSQL_DEBUG_LIBRARY ${CMAKE_SOURCE_DIR}/dep/lib/${DEP_ARCH}_debug/libmySQL.lib)
|
|
set(OPENSSL_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/dep/include/openssl)
|
|
set(OPENSSL_LIBRARIES ${CMAKE_SOURCE_DIR}/dep/lib/${DEP_ARCH}_release/libeay32.lib)
|
|
set(OPENSSL_DEBUG_LIBRARIES ${CMAKE_SOURCE_DIR}/dep/lib/${DEP_ARCH}_debug/libeay32.lib)
|
|
# zlib is build
|
|
endif()
|
|
|
|
# *nix-specific packages
|
|
if(UNIX)
|
|
find_package(MySQL REQUIRED)
|
|
find_package(OpenSSL REQUIRED)
|
|
find_package(ZLIB REQUIRED)
|
|
endif()
|
|
|
|
# Add uninstall script and target
|
|
configure_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
IMMEDIATE @ONLY
|
|
)
|
|
|
|
add_custom_target(uninstall
|
|
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
)
|
|
|
|
# Find core revision
|
|
if(GIT_EXECUTABLE)
|
|
execute_process(
|
|
COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
OUTPUT_VARIABLE GIT_REVISION
|
|
RESULT_VARIABLE GIT_RESULT
|
|
ERROR_QUIET
|
|
)
|
|
if(GIT_RESULT)
|
|
set(GIT_REVISION "Git repository not found")
|
|
endif()
|
|
else()
|
|
set(GIT_REVISION "Git not found")
|
|
endif()
|
|
|
|
message("")
|
|
message("MaNGOS-Core revision : ${GIT_REVISION}")
|
|
message("Install server to : ${CMAKE_INSTALL_PREFIX}")
|
|
message("")
|
|
|
|
# if(CLI)
|
|
# message("Build with CLI : Yes (default)")
|
|
# add_definitions(-DENABLE_CLI)
|
|
# else()
|
|
# message("Build with CLI : No")
|
|
# endif()
|
|
|
|
# if(RA)
|
|
# message("* Build with RA : Yes")
|
|
# add_definitions(-DENABLE_RA)
|
|
# else(RA)
|
|
# message("* Build with RA : No (default)")
|
|
# endif(RA)
|
|
|
|
if(PCH AND NOT PCHSupport_FOUND)
|
|
set(PCH 0 CACHE BOOL
|
|
"Use precompiled headers"
|
|
FORCE)
|
|
message(
|
|
"No PCH for your system possible but PCH was set to 1. Resetting it."
|
|
)
|
|
endif()
|
|
if(PCH)
|
|
message("Use PCH : Yes")
|
|
else()
|
|
message("Use PCH : No")
|
|
endif()
|
|
|
|
if(DEBUG)
|
|
message("Build in debug-mode : Yes")
|
|
set(CMAKE_BUILD_TYPE Debug)
|
|
else()
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
message("Build in debug-mode : No (default)")
|
|
endif()
|
|
# Handle debugmode compiles (this will require further work for proper WIN32-setups)
|
|
if(UNIX)
|
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
|
|
endif()
|
|
|
|
# Set warning levels for different builds
|
|
if(UNIX)
|
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} --no-warnings")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} --no-warnings")
|
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall -Wfatal-errors -Wextra")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wfatal-errors -Wextra")
|
|
elseif(WIN32)
|
|
# Disable warnings in Visual Studio 8 and above
|
|
if(MSVC AND NOT CMAKE_GENERATOR MATCHES "Visual Studio 7")
|
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /wd4996 /wd4355 /wd4244 /wd4985 /wd4267")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4996 /wd4355 /wd4244 /wd4267")
|
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /wd4996 /wd4355 /wd4244 /wd4985 /wd4267")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /wd4996 /wd4355 /wd4244 /wd4985 /wd4267")
|
|
endif()
|
|
endif()
|
|
|
|
# if(SQL)
|
|
# message("Install SQL-files : Yes")
|
|
# else()
|
|
# message("Install SQL-files : No (default)")
|
|
# endif()
|
|
|
|
# if(TOOLS)
|
|
# message("Build map/vmap tools : Yes")
|
|
# else()
|
|
# message("Build map/vmap tools : No (default)")
|
|
# endif()
|
|
|
|
message("")
|
|
|
|
# Some small tweaks for Visual Studio 7 and above.
|
|
if(MSVC)
|
|
# Mark 32 bit executables large address aware so they can use > 2GB address space
|
|
if(PLATFORM MATCHES X86)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
|
|
endif()
|
|
endif()
|
|
|
|
set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
set(CMAKE_INSTALL_RPATH ${LIBS_DIR})
|
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
|
|
|
# Generate revision-extractor
|
|
set(GENREV_SRC
|
|
src/tools/genrevision/genrevision.cpp
|
|
)
|
|
|
|
add_executable(genrev
|
|
${GENREV_SRC}
|
|
)
|
|
|
|
# if(WIN32)
|
|
# set_target_properties(genrev PROPERTIES
|
|
# COMPILE_FLAGS "/MACHINE:X86"
|
|
# )
|
|
# elseif(UNIX)
|
|
# set_target_properties(genrev PROPERTIES
|
|
# COMPILE_FLAGS "-m32"
|
|
# LINK_FLAGS "-m32"
|
|
# )
|
|
# endif()
|
|
# if(XCODE)
|
|
# set_target_properties(genrev PROPERTIES
|
|
# XCODE_ATTRIBUTE_ARCHS "i386"
|
|
# )
|
|
# endif()
|
|
|
|
get_target_property(GENERATE_EXE genrev LOCATION)
|
|
add_custom_target("revision.h" ALL
|
|
COMMAND ${GENERATE_EXE} ${CMAKE_SOURCE_DIR}
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
DEPENDS genrev
|
|
)
|
|
|
|
if(WIN32)
|
|
install(
|
|
FILES
|
|
${CMAKE_SOURCE_DIR}/dep/lib/${DEP_ARCH}_release/libeay32.dll
|
|
${CMAKE_SOURCE_DIR}/dep/lib/${DEP_ARCH}_release/libmySQL.dll
|
|
DESTINATION ${LIBS_DIR}
|
|
CONFIGURATIONS Release
|
|
)
|
|
install(
|
|
FILES
|
|
${CMAKE_SOURCE_DIR}/dep/lib/${DEP_ARCH}_debug/libeay32.dll
|
|
${CMAKE_SOURCE_DIR}/dep/lib/${DEP_ARCH}_debug/libmySQL.dll
|
|
DESTINATION ${LIBS_DIR}
|
|
CONFIGURATIONS Debug
|
|
)
|
|
if(PLATFORM MATCHES X86)
|
|
# Copy dll's Windows needs
|
|
install(
|
|
FILES
|
|
${CMAKE_SOURCE_DIR}/dep/lib/win32_release/dbghelp.dll
|
|
DESTINATION ${LIBS_DIR}
|
|
CONFIGURATIONS Release
|
|
)
|
|
install(
|
|
FILES
|
|
${CMAKE_SOURCE_DIR}/dep/lib/win32_debug/dbghelp.dll
|
|
DESTINATION ${LIBS_DIR}
|
|
CONFIGURATIONS Debug
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARCH_FLAGS}")
|
|
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_FLAGS}")
|
|
# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${ARCH_FLAGS}")
|
|
if(XCODE)
|
|
if(PLATFORM MATCHES X86)
|
|
set(CMAKE_OSX_ARCHITECTURES i386)
|
|
else()
|
|
set(CMAKE_OSX_ARCHITECTURES x86_64)
|
|
endif()
|
|
endif()
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
|
|
|
add_subdirectory(dep) # TODO: add vmap extractor build support
|
|
|
|
# Add definitions for all build types
|
|
# Don't place this above 'dep' subdirectory! Because of defines build will crash.
|
|
set(DEFINITIONS
|
|
DO_MYSQL
|
|
HAVE_CONFIG_H
|
|
VERSION="${MANGOS_VERSION}"
|
|
SYSCONFDIR="${CONF_DIR}/"
|
|
)
|
|
set(DEFINITIONS_RELEASE NDEBUG)
|
|
set(DEFINITIONS_DEBUG _DEBUG MANGOS_DEBUG)
|
|
if(WIN32)
|
|
set(DEFINITIONS ${DEFINITIONS} WIN32 _WIN32)
|
|
set(DEFINITIONS_RELEASE ${DEFINITIONS_RELEASE} _CRT_SECURE_NO_WARNINGS)
|
|
endif()
|
|
if(USE_STD_MALLOC)
|
|
set(DEFINITIONS ${DEFINITIONS} USE_STANDARD_MALLOC)
|
|
endif()
|
|
|
|
set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "${DEFINITIONS}")
|
|
set_directory_properties(PROPERTIES COMPILE_DEFINITIONS_RELEASE "${DEFINITIONS_RELEASE}")
|
|
set_directory_properties(PROPERTIES COMPILE_DEFINITIONS_DEBUG "${DEFINITIONS_DEBUG}")
|
|
|
|
add_subdirectory(src)
|
|
# if(SQL)
|
|
# add_subdirectory(sql)
|
|
# endif() |