2019-09-21 18:25:56 +07:00
#
2020-12-08 04:05:13 +01:00
# Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
2016-06-26 10:39:44 +02:00
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
2016-07-08 23:58:11 +02:00
# modifications, as long as this notice is preserved.
2016-06-26 10:39:44 +02:00
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2019-09-21 18:25:56 +07:00
#
2016-06-26 10:39:44 +02:00
2021-04-02 17:29:33 +07:00
# Require version Cmake
cmake_minimum_required ( VERSION 3.16...3.21 )
2019-09-21 18:25:56 +07:00
2020-11-30 18:10:10 +01:00
message ( STATUS "CMake version: ${CMAKE_VERSION}" )
2016-06-26 10:39:44 +02:00
# CMake policies (can not be handled elsewhere)
2019-09-22 19:02:40 +07:00
cmake_policy ( SET CMP0005 NEW )
2016-06-26 10:39:44 +02:00
2020-12-07 21:50:45 +01:00
# Set projectname (must be done AFTER setting configurationtypes)
project ( AzerothCore VERSION 3.0.0 LANGUAGES CXX C )
2016-06-26 10:39:44 +02:00
# add this options before PROJECT keyword
set ( CMAKE_DISABLE_SOURCE_CHANGES ON )
set ( CMAKE_DISABLE_IN_SOURCE_BUILD ON )
# Set RPATH-handing (CMake parameters)
set ( CMAKE_SKIP_BUILD_RPATH 0 )
set ( CMAKE_BUILD_WITH_INSTALL_RPATH 0 )
set ( CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" )
set ( CMAKE_INSTALL_RPATH_USE_LINK_PATH 1 )
2016-08-19 09:29:26 +02:00
set ( AC_PATH_ROOT "${CMAKE_SOURCE_DIR}" )
2016-06-26 10:39:44 +02:00
# set macro-directory
2019-04-02 03:41:08 +07:00
list ( APPEND CMAKE_MODULE_PATH
2021-04-02 17:29:33 +07:00
" $ { C M A K E _ S O U R C E _ D I R } / s r c / c m a k e / m a c r o s " )
2016-06-26 10:39:44 +02:00
include ( CheckCXXSourceRuns )
include ( CheckIncludeFiles )
2021-04-22 03:16:12 +07:00
include ( ConfigureScripts )
2016-06-26 10:39:44 +02:00
2016-07-09 04:57:07 +02:00
# some utils for cmake
2021-04-22 09:57:05 +02:00
include ( deps/acore/cmake-utils/utils.cmake )
2016-07-09 04:57:07 +02:00
2016-08-12 02:37:42 +02:00
include ( src/cmake/ac_macros.cmake )
2016-08-11 20:10:08 +02:00
2016-06-26 10:39:44 +02:00
# set default buildoptions and print them
2020-08-06 02:37:14 +02:00
include ( conf/dist/config.cmake )
2016-07-25 17:29:20 +02:00
# load custom configurations for cmake if exists
2018-07-29 00:27:38 +08:00
if ( EXISTS "${CMAKE_SOURCE_DIR}/conf/config.cmake" )
2020-08-15 22:34:45 +02:00
include ( conf/config.cmake )
2016-07-25 17:29:20 +02:00
endif ( )
2018-05-23 02:22:11 +08:00
#
# Loading dyn modules
#
# add modules and dependencies
CU_SUBDIRLIST ( sub_DIRS "${CMAKE_SOURCE_DIR}/modules" FALSE FALSE )
FOREACH ( subdir ${ sub_DIRS } )
get_filename_component ( MODULENAME ${ subdir } NAME )
if ( ";${DISABLED_AC_MODULES};" MATCHES ";${MODULENAME};" )
2020-08-15 22:34:45 +02:00
continue ( )
2018-05-23 02:22:11 +08:00
endif ( )
STRING ( REGEX REPLACE "^${CMAKE_SOURCE_DIR}/" "" subdir_rel ${ subdir } )
if ( EXISTS "${subdir}/CMakeLists.txt" )
message ( "Loading module: ${subdir_rel}" )
add_subdirectory ( "${subdir_rel}" )
endif ( )
ENDFOREACH ( )
2016-08-11 20:10:08 +02:00
CU_RUN_HOOK ( "AFTER_LOAD_CONF" )
2016-07-28 13:31:07 +02:00
2016-07-25 17:29:20 +02:00
# build in Release-mode by default if not explicitly set
if ( NOT CMAKE_BUILD_TYPE )
2020-08-15 22:34:45 +02:00
set ( CMAKE_BUILD_TYPE "Release" )
2016-07-25 17:29:20 +02:00
endif ( )
2016-06-26 10:39:44 +02:00
# turn off PCH totally if enabled (hidden setting, mainly for devs)
if ( NOPCH )
2020-08-15 22:34:45 +02:00
set ( USE_COREPCH 0 )
set ( USE_SCRIPTPCH 0 )
2016-06-26 10:39:44 +02:00
endif ( )
2019-09-18 20:04:48 +07:00
include ( ConfigureBaseTargets )
2016-06-26 10:39:44 +02:00
include ( CheckPlatform )
2019-01-10 11:20:32 +07:00
include ( GroupSources )
2019-04-02 03:41:08 +07:00
include ( AutoCollect )
2021-02-28 20:37:03 +07:00
include ( ConfigInstall )
2016-06-26 10:39:44 +02:00
2019-04-02 22:49:04 +07:00
CU_RUN_HOOK ( "AFTER_LOAD_CMAKE_MODULES" )
2016-06-26 10:39:44 +02:00
# basic packagesearching and setup (further support will be needed, this is a preliminary release!)
2016-08-10 12:39:25 +02:00
set ( ACE_EXPECTED_VERSION 6.0.3 )
2016-06-26 10:39:44 +02:00
find_package ( PCHSupport )
find_package ( ACE REQUIRED )
2020-08-21 12:19:02 +02:00
if ( CMAKE_SYSTEM_NAME MATCHES "Darwin" )
add_definitions ( -DACE_LACKS_AUTO_PTR=1 )
endif ( )
2016-07-09 23:56:08 +01:00
find_package ( MySQL REQUIRED )
2016-06-26 10:39:44 +02:00
2019-04-02 03:41:08 +07:00
if ( UNIX AND WITH_PERFTOOLS )
2020-08-15 22:34:45 +02:00
find_package ( Gperftools )
2016-06-26 10:39:44 +02:00
endif ( )
2016-08-09 16:09:37 +02:00
if ( NOT WITHOUT_GIT )
2020-08-15 22:34:45 +02:00
find_package ( Git )
2016-08-09 16:09:37 +02:00
endif ( )
2016-06-26 10:39:44 +02:00
# Find revision ID and hash of the sourcetree
2016-08-12 02:37:42 +02:00
include ( src/cmake/genrev.cmake )
2016-06-26 10:39:44 +02:00
# print out the results before continuing
2016-08-12 02:37:42 +02:00
include ( src/cmake/showoptions.cmake )
2016-06-26 10:39:44 +02:00
2016-08-23 12:11:46 +02:00
#
# Loading framework
#
2017-10-13 19:22:30 +02:00
add_subdirectory ( deps )
2016-08-23 12:11:46 +02:00
if ( SERVERS OR TOOLS )
2020-08-15 22:34:45 +02:00
add_subdirectory ( src/common )
2016-08-23 12:11:46 +02:00
endif ( )
if ( TOOLS )
2020-08-15 22:34:45 +02:00
add_subdirectory ( src/tools )
2016-08-23 12:11:46 +02:00
endif ( )
#
# Loading application sources
#
2016-08-11 20:10:08 +02:00
CU_RUN_HOOK ( "BEFORE_SRC_LOAD" )
2016-06-26 10:39:44 +02:00
# add core sources
add_subdirectory ( src )
2016-07-09 04:57:07 +02:00
2016-08-11 20:10:08 +02:00
CU_RUN_HOOK ( "AFTER_SRC_LOAD" )
2020-08-15 22:34:45 +02:00
2020-11-29 19:28:47 +01:00
if ( BUILD_TESTING )
2020-08-18 16:34:45 +02:00
# we use these flags to get code coverage
set ( UNIT_TEST_CXX_FLAGS "-fprofile-arcs -ftest-coverage -fno-inline" )
# enable additional flags for GCC.
if ( CMAKE_CXX_COMPILER_ID MATCHES GNU )
set ( UNIT_TEST_CXX_FLAGS "${UNIT_TEST_CXX_FLAGS} -fno-inline-small-functions -fno-default-inline" )
2020-08-15 22:34:45 +02:00
endif ( )
2020-08-18 16:34:45 +02:00
message ( "Unit tests code coverage: enabling ${UNIT_TEST_CXX_FLAGS}" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${UNIT_TEST_CXX_FLAGS}" )
2020-08-15 22:34:45 +02:00
include ( src/cmake/googletest.cmake )
fetch_googletest (
$ { P R O J E C T _ S O U R C E _ D I R } / s r c / c m a k e
$ { P R O J E C T _ B I N A R Y _ D I R } / g o o g l e t e s t
)
enable_testing ( )
add_subdirectory ( src/test )
2020-08-18 16:34:45 +02:00
add_custom_target ( coverage DEPENDS coverage_command )
add_custom_command ( OUTPUT coverage_command
# Run unit tests.
C O M M A N D c t e s t
# Run the graphical front-end for code coverage.
C O M M A N D l c o v - - d i r e c t o r y s r c - - c a p t u r e - - o u t p u t - f i l e c o v e r a g e . i n f o
C O M M A N D l c o v - - r e m o v e c o v e r a g e . i n f o ' / u s r / * ' ' $ { C M A K E _ B I N A R Y _ D I R } / g o o g l e t e s t / * ' ' $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / t e s t / * ' - - o u t p u t - f i l e c o v e r a g e . i n f o
C O M M A N D g e n h t m l - o $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c o v e r a g e - r e p o r t c o v e r a g e . i n f o
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ B I N A R Y _ D I R } "
)
2020-08-15 22:34:45 +02:00
endif ( )