Legends-of-Azeroth-Pandaria-5.4.8
93 строки · 4.3 Кб
1# Copyright (C) 2011-2016 Project SkyFire <http://www.projectskyfire.org/
2# Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
3#
4# This file is free software; as a special exception the author gives
5# unlimited permission to copy and/or distribute it, with or without
6# modifications, as long as this notice is preserved.
7#
8# This program is distributed in the hope that it will be useful, but
9# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
10# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
12# set up output paths for executable binaries (.exe-files, and .dll-files on DLL-capable platforms)
13set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
14
15set(MSVC_EXPECTED_VERSION 18.0)
16
17if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS MSVC_EXPECTED_VERSION)
18message(FATAL_ERROR "MSVC: SkyFire requires version ${MSVC_EXPECTED_VERSION} (MSVC 2013) to build but found ${CMAKE_CXX_COMPILER_VERSION}")
19endif()
20
21# set up output paths ofr static libraries etc (commented out - shown here as an example only)
22#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
23#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
24
25if(PLATFORM EQUAL 64)
26# This definition is necessary to work around a bug with Intellisense described
27# here: http://tinyurl.com/2cb428. Syntax highlighting is important for proper
28# debugger functionality.
29add_definitions("-D_WIN64")
30message(STATUS "MSVC: 64-bit platform, enforced -D_WIN64 parameter")
31
32#Enable extended object support for debug compiles on X64 (not required on X86)
33set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
34message(STATUS "MSVC: Enabled extended object-support for debug-compiles")
35else()
36# mark 32 bit executables large address aware so they can use > 2GB address space
37set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
38message(STATUS "MSVC: Enabled large address awareness")
39
40add_definitions(/arch:SSE2)
41message(STATUS "MSVC: Enabled SSE2 support")
42endif()
43
44# Set build-directive (used in core to tell which buildtype we used)
45if("${CMAKE_MAKE_PROGRAM}" MATCHES "MSBuild")
46add_compile_options(-D_BUILD_DIRECTIVE="$(ConfigurationName)")
47else()
48add_compile_options(-D_BUILD_DIRECTIVE="$<CONFIG>")
49endif()
50
51# multithreaded compiling on VS
52set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
53
54# Define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES - eliminates the warning by changing the strcpy call to strcpy_s, which prevents buffer overruns
55add_definitions(-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES)
56message(STATUS "MSVC: Overloaded standard names")
57
58# Ignore warnings about older, less secure functions
59add_definitions(-D_CRT_SECURE_NO_WARNINGS)
60message(STATUS "MSVC: Disabled NON-SECURE warnings")
61
62#Ignore warnings about POSIX deprecation
63add_definitions(-D_CRT_NONSTDC_NO_WARNINGS)
64message(STATUS "MSVC: Disabled POSIX warnings")
65
66if(NOT WITH_WARNINGS)
67set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4996 /wd4355 /wd4244 /wd4985 /wd4267 /wd4619 /wd4512")
68set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4996 /wd4355 /wd4244 /wd4985 /wd4267 /wd4619 /wd4512")
69message(STATUS "MSVC: Disabled generic compiletime warnings")
70endif()
71
72# Specify the maximum PreCompiled Header memory allocation limit
73# Fixes a compiler-problem when using PCH - the /Ym flag is adjusted by the compiler in MSVC2012, hence we need to set an upper limit with /Zm to avoid discrepancies)
74# (And yes, this is a verified , unresolved bug with MSVC... *sigh*)
75string(REGEX REPLACE "/Zm[0-9]+ *" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
76set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm500")
77
78# Enable and treat as errors the following warnings to easily detect virtual function signature failures:
79# 'function' : member function does not override any base class virtual member function
80# 'virtual_function' : no override available for virtual member function from base 'class'; function is hidden
81set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /we4263 /we4264")
82
83macro(ApplyFlags variable)
84string(REGEX REPLACE "/INCREMENTAL *" "/INCREMENTAL:NO" ${variable} "${${variable}}")
85endmacro()
86
87if (BUILD_DEV)
88ApplyFlags(CMAKE_EXE_LINKER_FLAGS_DEBUG)
89ApplyFlags(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO)
90ApplyFlags(CMAKE_SHARED_LINKER_FLAGS_DEBUG)
91ApplyFlags(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO)
92set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:inline")
93endif()
94