# # Copyright (C) 2016+ AzerothCore , released under GNU AGPL3 v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3 # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # 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. # # Set projectname (must be done AFTER setting configurationtypes) project(AzerothCore) # Require a min version Cmake cmake_minimum_required(VERSION 3.8) # CMake policies (can not be handled elsewhere) cmake_policy(SET CMP0005 NEW) # 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) set(AC_PATH_ROOT "${CMAKE_SOURCE_DIR}") # set macro-directory list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/src/cmake/macros" "${CMAKE_SOURCE_DIR}/deps/cotire/CMake") include(CheckCXXSourceRuns) include(CheckIncludeFiles) # some utils for cmake include(deps/drassil/cmake-utils/utils.cmake) include(src/cmake/ac_macros.cmake) # set default buildoptions and print them include(conf/dist/config.cmake) # load custom configurations for cmake if exists if(EXISTS "${CMAKE_SOURCE_DIR}/conf/config.cmake") include(conf/config.cmake) endif() # # 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};") continue() 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() CU_RUN_HOOK("AFTER_LOAD_CONF") # build in Release-mode by default if not explicitly set if( NOT CMAKE_BUILD_TYPE ) set(CMAKE_BUILD_TYPE "Release") endif() # turn off PCH totally if enabled (hidden setting, mainly for devs) if( NOPCH ) set(USE_COREPCH 0) set(USE_SCRIPTPCH 0) endif() include(ConfigureBaseTargets) include(CheckPlatform) include(GroupSources) include(AutoCollect) CU_RUN_HOOK("AFTER_LOAD_CMAKE_MODULES") # basic packagesearching and setup (further support will be needed, this is a preliminary release!) set(ACE_EXPECTED_VERSION 6.0.3) find_package(PCHSupport) find_package(ACE REQUIRED) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") add_definitions(-DACE_LACKS_AUTO_PTR=1) endif() find_package(MySQL REQUIRED) if(UNIX AND WITH_PERFTOOLS) find_package(Gperftools) endif() if(NOT WITHOUT_GIT) find_package(Git) endif() # Find revision ID and hash of the sourcetree include(src/cmake/genrev.cmake) # print out the results before continuing include(src/cmake/showoptions.cmake) # # Loading framework # add_subdirectory(deps) if( SERVERS OR TOOLS) add_subdirectory(src/common) endif() if( TOOLS ) add_subdirectory(src/tools) endif() # # Loading application sources # CU_RUN_HOOK("BEFORE_SRC_LOAD") # add core sources add_subdirectory(src) CU_RUN_HOOK("AFTER_SRC_LOAD") if( UNIT_TESTS ) # 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") endif() message("Unit tests code coverage: enabling ${UNIT_TEST_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${UNIT_TEST_CXX_FLAGS}") include(src/cmake/googletest.cmake) fetch_googletest( ${PROJECT_SOURCE_DIR}/src/cmake ${PROJECT_BINARY_DIR}/googletest ) enable_testing() add_subdirectory(src/test) add_custom_target(coverage DEPENDS coverage_command) add_custom_command(OUTPUT coverage_command # Run unit tests. COMMAND ctest # Run the graphical front-end for code coverage. COMMAND lcov --directory src --capture --output-file coverage.info COMMAND lcov --remove coverage.info '/usr/*' '${CMAKE_BINARY_DIR}/googletest/*' '${CMAKE_CURRENT_SOURCE_DIR}/src/test/*' --output-file coverage.info COMMAND genhtml -o ${CMAKE_CURRENT_SOURCE_DIR}/coverage-report coverage.info WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" ) endif()