refactor(Cmake): add support build selected applications and tools (#11836)

This commit is contained in:
Kargatum
2022-05-31 17:05:39 +07:00
committed by GitHub
parent 40a5eef152
commit 4fbec972a8
56 changed files with 1006 additions and 622 deletions

View File

@@ -37,15 +37,13 @@ jobs:
env: env:
CONTINUOUS_INTEGRATION: true CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh - name: Create conf/config.sh
run: source ./apps/ci/ci-conf.sh run: source ./apps/ci/ci-conf-core.sh
- name: Process pending sql - name: Process pending sql
run: bash bin/acore-db-pendings run: bash bin/acore-db-pendings
- name: Import db
run: source ./apps/ci/ci-import-db.sh
- name: Build - name: Build
run: source ./apps/ci/ci-compile.sh run: source ./apps/ci/ci-compile.sh
- name: Dry run - name: Dry run
run: source ./apps/ci/ci-worldserver-dry-run.sh run: source ./apps/ci/ci-dry-run.sh worldserver
- name: Check startup errors - name: Check startup errors
run: source ./apps/ci/ci-error-check.sh run: source ./apps/ci/ci-error-check.sh
- name: Run unit tests - name: Run unit tests

View File

@@ -49,13 +49,11 @@ jobs:
env: env:
CONTINUOUS_INTEGRATION: true CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh - name: Create conf/config.sh
run: source ./apps/ci/ci-conf.sh run: source ./apps/ci/ci-conf-core.sh
- name: Import db
run: source ./apps/ci/ci-import-db.sh
- name: Build - name: Build
run: source ./apps/ci/ci-compile.sh run: source ./apps/ci/ci-compile.sh
- name: Dry run - name: Dry run
run: source ./apps/ci/ci-worldserver-dry-run.sh run: source ./apps/ci/ci-dry-run.sh worldserver
- name: Check startup errors - name: Check startup errors
run: source ./apps/ci/ci-error-check.sh run: source ./apps/ci/ci-error-check.sh
- name: Run unit tests - name: Run unit tests

View File

@@ -42,13 +42,11 @@ jobs:
env: env:
CONTINUOUS_INTEGRATION: true CONTINUOUS_INTEGRATION: true
- name: Create conf/config.sh - name: Create conf/config.sh
run: source ./apps/ci/ci-conf.sh run: source ./apps/ci/ci-conf-core.sh
- name: Import db
run: source ./apps/ci/ci-import-db.sh
- name: Build - name: Build
run: source ./apps/ci/ci-compile.sh run: source ./apps/ci/ci-compile.sh
- name: Dry run - name: Dry run
run: source ./apps/ci/ci-worldserver-dry-run.sh run: source ./apps/ci/ci-dry-run.sh worldserver
- name: Check startup errors - name: Check startup errors
run: source ./apps/ci/ci-error-check.sh run: source ./apps/ci/ci-error-check.sh
- name: Run unit tests - name: Run unit tests

View File

@@ -15,16 +15,16 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [windows-2019] os: [windows-latest]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-MSVC16 name: ${{ matrix.os }}-${{ matrix.compiler }}
env: env:
BOOST_ROOT: C:\local\boost_1_74_0 BOOST_ROOT: C:\local\boost_1_79_0
if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build') if: github.repository == 'azerothcore/azerothcore-wotlk' && (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Configure OS - name: Configure OS
run: choco install --no-progress openssl boost-msvc-14.2 run: choco install --no-progress openssl boost-msvc-14.3
- name: Build - name: Build
shell: bash shell: bash
run: | run: |
@@ -39,5 +39,5 @@ jobs:
cp "/c/Program Files/OpenSSL-Win64/bin/libssl-1_1-x64.dll" "build/bin/Release/" cp "/c/Program Files/OpenSSL-Win64/bin/libssl-1_1-x64.dll" "build/bin/Release/"
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v2
with: with:
name: windows-2019-MSVC16-release name: windows-2022-MSVC17-release
path: build/bin/Release path: build/bin/Release

View File

@@ -41,6 +41,8 @@ include(CheckCXXSourceRuns)
include(CheckIncludeFiles) include(CheckIncludeFiles)
include(ConfigureScripts) include(ConfigureScripts)
include(ConfigureModules) include(ConfigureModules)
include(ConfigureApplications)
include(ConfigureTools)
# some utils for cmake # some utils for cmake
include(deps/acore/cmake-utils/utils.cmake) include(deps/acore/cmake-utils/utils.cmake)
@@ -96,9 +98,6 @@ include(ConfigInstall)
CU_RUN_HOOK("AFTER_LOAD_CMAKE_MODULES") 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(PCHSupport)
find_package(MySQL REQUIRED) find_package(MySQL REQUIRED)
@@ -121,14 +120,7 @@ include(src/cmake/showoptions.cmake)
# #
add_subdirectory(deps) add_subdirectory(deps)
add_subdirectory(src/common)
if (SERVERS OR TOOLS)
add_subdirectory(src/common)
endif()
if (TOOLS)
add_subdirectory(src/tools)
endif()
# #
# Loading application sources # Loading application sources
@@ -139,12 +131,14 @@ CU_RUN_HOOK("BEFORE_SRC_LOAD")
# add core sources # add core sources
add_subdirectory(src) add_subdirectory(src)
# add modules sources if (BUILD_APPLICATION_WORLDSERVER)
add_subdirectory(modules) # add modules sources
add_subdirectory(modules)
endif()
CU_RUN_HOOK("AFTER_SRC_LOAD") CU_RUN_HOOK("AFTER_SRC_LOAD")
if( BUILD_TESTING ) if (BUILD_TESTING AND BUILD_APPLICATION_WORLDSERVER)
# we use these flags to get code coverage # we use these flags to get code coverage
set(UNIT_TEST_CXX_FLAGS "-fprofile-arcs -ftest-coverage -fno-inline") set(UNIT_TEST_CXX_FLAGS "-fprofile-arcs -ftest-coverage -fno-inline")

View File

@@ -7,10 +7,9 @@ MTHREADS=$(($(grep -c ^processor /proc/cpuinfo) + 2))
CWARNINGS=ON CWARNINGS=ON
CDEBUG=OFF CDEBUG=OFF
CTYPE=Release CTYPE=Release
CTOOLS_BUILD=all
CSCRIPTS=static CSCRIPTS=static
CBUILD_TESTING=ON CBUILD_TESTING=ON
CSERVERS=ON
CTOOLS=ON
CSCRIPTPCH=OFF CSCRIPTPCH=OFF
CCOREPCH=OFF CCOREPCH=OFF
CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"' CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"'
@@ -19,10 +18,6 @@ DB_AUTH_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';" DB_WORLD_CONF="MYSQL_USER='root'; MYSQL_PASS='root'; MYSQL_HOST='localhost';"
CONFIG_SH CONFIG_SH
if [[ $ENABLE_CPP_20 -eq 1 ]]; then
echo "CUSE_CPP_20=ON" >> ./conf/config.sh
fi
case $COMPILER in case $COMPILER in
# this is in order to use the "default" gcc version of the OS, without forcing a specific version # this is in order to use the "default" gcc version of the OS, without forcing a specific version

68
apps/ci/ci-conf-tools.sh Normal file
View File

@@ -0,0 +1,68 @@
#!/bin/bash
set -e
cat >>conf/config.sh <<CONFIG_SH
MTHREADS=$(($(grep -c ^processor /proc/cpuinfo) + 2))
CWARNINGS=ON
CDEBUG=OFF
CTYPE=Release
CSCRIPTS=static
CAPPS_BUILD=none
CTOOLS_BUILD=maps-only
CSCRIPTPCH=OFF
CCOREPCH=OFF
CCUSTOMOPTIONS='-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror"'
CONFIG_SH
case $COMPILER in
# this is in order to use the "default" gcc version of the OS, without forcing a specific version
"gcc" )
time sudo apt-get install -y gcc g++
echo "CCOMPILERC=\"gcc\"" >> ./conf/config.sh
echo "CCOMPILERCXX=\"g++\"" >> ./conf/config.sh
;;
"gcc8" )
time sudo apt-get install -y gcc-8 g++-8
echo "CCOMPILERC=\"gcc-8\"" >> ./conf/config.sh
echo "CCOMPILERCXX=\"g++-8\"" >> ./conf/config.sh
;;
"gcc10" )
time sudo apt-get install -y gcc-10 g++-10
echo "CCOMPILERC=\"gcc-10\"" >> ./conf/config.sh
echo "CCOMPILERCXX=\"g++-10\"" >> ./conf/config.sh
;;
# this is in order to use the "default" clang version of the OS, without forcing a specific version
"clang" )
time sudo apt-get install -y clang
echo "CCOMPILERC=\"clang\"" >> ./conf/config.sh
echo "CCOMPILERCXX=\"clang++\"" >> ./conf/config.sh
;;
"clang10" )
time sudo apt-get install -y clang-10
echo "CCOMPILERC=\"clang-10\"" >> ./conf/config.sh
echo "CCOMPILERCXX=\"clang++-10\"" >> ./conf/config.sh
;;
"clang11" )
time sudo apt-get install -y clang-11
echo "CCOMPILERC=\"clang-11\"" >> ./conf/config.sh
echo "CCOMPILERCXX=\"clang++-11\"" >> ./conf/config.sh
;;
"clang12" )
time sudo apt-get install -y clang-12
echo "CCOMPILERC=\"clang-12\"" >> ./conf/config.sh
echo "CCOMPILERCXX=\"clang++-12\"" >> ./conf/config.sh
;;
* )
echo "Unknown compiler $COMPILER"
exit 1
;;
esac

28
apps/ci/ci-dry-run.sh Normal file
View File

@@ -0,0 +1,28 @@
#!/bin/bash
set -e
# Start mysql
sudo systemctl start mysql
APP_NAME=$1
echo "LoginDatabaseInfo = \"localhost;3306;root;root;acore_auth\"" >> ./env/dist/etc/$APP_NAME.conf
if [[ $APP_NAME != "authserver" ]]; then
{
echo "WorldDatabaseInfo = \"localhost;3306;root;root;acore_world\""
echo "CharacterDatabaseInfo = \"localhost;3306;root;root;acore_characters\""
} >> ./env/dist/etc/$APP_NAME.conf
fi
if [[ $APP_NAME == "worldserver" ]]; then
echo "DataDir = \"../data/\"" >> ./env/dist/etc/$APP_NAME.conf
git clone --depth=1 --branch=master --single-branch https://github.com/ac-data/ac-data.git ./env/dist/data
fi
(cd ./env/dist/bin/ && timeout 5m ./$APP_NAME -dry-run)
# Stop mysql
sudo systemctl stop mysql

View File

@@ -1,11 +0,0 @@
#!/bin/bash
set -e
echo "[worldserver]" >> ./env/dist/etc/worldserver.conf
echo "DataDir = \"../data/\"" >> ./env/dist/etc/worldserver.conf
echo "LoginDatabaseInfo = \"localhost;3306;root;root;acore_auth\"" >> ./env/dist/etc/worldserver.conf
echo "WorldDatabaseInfo = \"localhost;3306;root;root;acore_world\"" >> ./env/dist/etc/worldserver.conf
echo "CharacterDatabaseInfo = \"localhost;3306;root;root;acore_characters\"" >> ./env/dist/etc/worldserver.conf
git clone --depth=1 --branch=master --single-branch https://github.com/ac-data/ac-data.git ./env/dist/data
(cd ./env/dist/bin/ && timeout 5m ./worldserver --dry-run)

View File

@@ -70,27 +70,25 @@ function comp_configure() {
comp_ccacheEnable comp_ccacheEnable
cmake $SRCPATH -DCMAKE_INSTALL_PREFIX=$BINPATH $DCONF -DSERVERS=$CSERVERS \ cmake $SRCPATH -DCMAKE_INSTALL_PREFIX=$BINPATH $DCONF \
-DAPPS_BUILD=$CAPPS_BUILD \
-DTOOLS_BUILD=$CTOOLS_BUILD \
-DSCRIPTS=$CSCRIPTS \ -DSCRIPTS=$CSCRIPTS \
-DUSE_CPP_20=$CUSE_CPP_20 \ -DMODULES=$CMODULES \
-DBUILD_TESTING=$CBUILD_TESTING \ -DBUILD_TESTING=$CBUILD_TESTING \
-DTOOLS=$CTOOLS \
-DUSE_SCRIPTPCH=$CSCRIPTPCH \ -DUSE_SCRIPTPCH=$CSCRIPTPCH \
-DUSE_COREPCH=$CCOREPCH \ -DUSE_COREPCH=$CCOREPCH \
-DWITH_COREDEBUG=$CDEBUG \
-DCMAKE_BUILD_TYPE=$CTYPE \ -DCMAKE_BUILD_TYPE=$CTYPE \
-DWITH_WARNINGS=$CWARNINGS \ -DWITH_WARNINGS=$CWARNINGS \
-DCMAKE_C_COMPILER=$CCOMPILERC \ -DCMAKE_C_COMPILER=$CCOMPILERC \
-DCMAKE_CXX_COMPILER=$CCOMPILERCXX \ -DCMAKE_CXX_COMPILER=$CCOMPILERCXX \
"-DDISABLED_AC_MODULES=$CDISABLED_AC_MODULES" \ $CBUILD_APPS_LIST $CBUILD_TOOLS_LIST $CCUSTOMOPTIONS
$CCUSTOMOPTIONS
cd $CWD cd $CWD
runHooks "ON_AFTER_CONFIG" runHooks "ON_AFTER_CONFIG"
} }
function comp_compile() { function comp_compile() {
[ $MTHREADS == 0 ] && MTHREADS=$(grep -c ^processor /proc/cpuinfo) && MTHREADS=$(($MTHREADS + 2)) [ $MTHREADS == 0 ] && MTHREADS=$(grep -c ^processor /proc/cpuinfo) && MTHREADS=$(($MTHREADS + 2))
@@ -117,9 +115,9 @@ function comp_compile() {
runHooks "ON_AFTER_BUILD" runHooks "ON_AFTER_BUILD"
# set worldserver SUID bit # set all aplications SUID bit
sudo chown root:root "$AC_BINPATH_FULL/worldserver" sudo chown -R root:root "$AC_BINPATH_FULL"
sudo chmod u+s "$AC_BINPATH_FULL/worldserver" sudo chmod -R u+s "$AC_BINPATH_FULL"
} }
function comp_build() { function comp_build() {
@@ -128,6 +126,6 @@ function comp_build() {
} }
function comp_all() { function comp_all() {
comp_clean comp_clean
comp_build comp_build
} }

View File

@@ -189,7 +189,8 @@ ENV AC_CCACHE=true
ENV CCACHE_CPP2=true ENV CCACHE_CPP2=true
ENV CSCRIPTPCH=OFF ENV CSCRIPTPCH=OFF
ENV CCOREPCH=OFF ENV CCOREPCH=OFF
ENV CTOOLS=ON # ENV CTOOLS_BUILD=all
ENV CTOOLS_BUILD=maps-only
ENV CSCRIPTS=static ENV CSCRIPTS=static
RUN bash apps/docker/docker-build-prod.sh RUN bash apps/docker/docker-build-prod.sh
@@ -303,8 +304,9 @@ RUN mkdir -p /azerothcore/env/client/maps
RUN mkdir -p /azerothcore/env/client/mmaps RUN mkdir -p /azerothcore/env/client/mmaps
RUN mkdir -p /azerothcore/env/client/vmaps RUN mkdir -p /azerothcore/env/client/vmaps
COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mapextractor /azerothcore/env/client/mapextractor # Need fix
COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mmaps_generator /azerothcore/env/client/mmaps_generator # COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mapextractor /azerothcore/env/client/mapextractor
COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4assembler /azerothcore/env/client/vmap4assembler # COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/mmaps_generator /azerothcore/env/client/mmaps_generator
COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4extractor /azerothcore/env/client/vmap4extractor # COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4assembler /azerothcore/env/client/vmap4assembler
# COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build /azerothcore/env/dist/bin/vmap4extractor /azerothcore/env/client/vmap4extractor

View File

@@ -11,15 +11,21 @@
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# #
option(SERVERS "Build worldserver and authserver" 1)
set(SCRIPTS_AVAILABLE_OPTIONS none static dynamic minimal-static minimal-dynamic) set(SCRIPTS_AVAILABLE_OPTIONS none static dynamic minimal-static minimal-dynamic)
set(MODULES_AVAILABLE_OPTIONS none static dynamic) set(MODULES_AVAILABLE_OPTIONS none static dynamic)
set(BUILD_APPS_AVAILABLE_OPTIONS none all auth-only world-only)
# set(BUILD_TOOLS_AVAILABLE_OPTIONS none all db-only maps-only) # DB import PR
set(BUILD_TOOLS_AVAILABLE_OPTIONS none all maps-only)
set(SCRIPTS "static" CACHE STRING "Build core with scripts") set(SCRIPTS "static" CACHE STRING "Build core with scripts")
set(MODULES "static" CACHE STRING "Build core with modules") set(MODULES "static" CACHE STRING "Build core with modules")
set(APPS_BUILD "all" CACHE STRING "Build list for applications")
set(TOOLS_BUILD "none" CACHE STRING "Build list for tools")
set_property(CACHE SCRIPTS PROPERTY STRINGS ${SCRIPTS_AVAILABLE_OPTIONS}) set_property(CACHE SCRIPTS PROPERTY STRINGS ${SCRIPTS_AVAILABLE_OPTIONS})
set_property(CACHE MODULES PROPERTY STRINGS ${MODULES_AVAILABLE_OPTIONS}) set_property(CACHE MODULES PROPERTY STRINGS ${MODULES_AVAILABLE_OPTIONS})
set_property(CACHE APPS_BUILD PROPERTY STRINGS ${BUILD_APPS_AVAILABLE_OPTIONS})
set_property(CACHE TOOLS_BUILD PROPERTY STRINGS ${BUILD_TOOLS_AVAILABLE_OPTIONS})
# Log a error when the value of the SCRIPTS variable isn't a valid option. # Log a error when the value of the SCRIPTS variable isn't a valid option.
if(SCRIPTS) if(SCRIPTS)
@@ -30,7 +36,7 @@ if(SCRIPTS)
endif() endif()
endif() endif()
# Log a error when the value of the SCRIPTS variable isn't a valid option. # Log a error when the value of the MODULES variable isn't a valid option.
if(MODULES) if(MODULES)
list(FIND MODULES_AVAILABLE_OPTIONS "${MODULES}" MODULES_INDEX) list(FIND MODULES_AVAILABLE_OPTIONS "${MODULES}" MODULES_INDEX)
if(${MODULES_INDEX} EQUAL -1) if(${MODULES_INDEX} EQUAL -1)
@@ -39,6 +45,24 @@ if(MODULES)
endif() endif()
endif() endif()
# Log a fatal error when the value of the APPS_BUILD variable isn't a valid option.
if(APPS_BUILD)
list(FIND BUILD_APPS_AVAILABLE_OPTIONS "${APPS_BUILD}" BUILD_APPS_INDEX)
if(${BUILD_APPS_INDEX} EQUAL -1)
message(FATAL_ERROR "The value (${APPS_BUILD}) of your APPS_BUILD variable is invalid! "
"Allowed values are: ${BUILD_APPS_AVAILABLE_OPTIONS}. Set default")
endif()
endif()
# Log a fatal error when the value of the TOOLS_BUILD variable isn't a valid option.
if(TOOLS_BUILD)
list(FIND BUILD_TOOLS_AVAILABLE_OPTIONS "${TOOLS_BUILD}" BUILD_TOOLS_INDEX)
if(${BUILD_TOOLS_INDEX} EQUAL -1)
message(FATAL_ERROR "The value (${TOOLS_BUILD}) of your TOOLS_BUILD variable is invalid! "
"Allowed values are: ${BUILD_TOOLS_AVAILABLE_OPTIONS}. Set default")
endif()
endif()
# Build a list of all script modules when -DSCRIPT="custom" is selected # Build a list of all script modules when -DSCRIPT="custom" is selected
GetScriptModuleList(SCRIPT_MODULE_LIST) GetScriptModuleList(SCRIPT_MODULE_LIST)
foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST}) foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST})
@@ -47,7 +71,7 @@ foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST})
set_property(CACHE ${SCRIPT_MODULE_VARIABLE} PROPERTY STRINGS default disabled static dynamic) set_property(CACHE ${SCRIPT_MODULE_VARIABLE} PROPERTY STRINGS default disabled static dynamic)
endforeach() endforeach()
# Build a list of all modules script when -DSCRIPT="custom" is selected # Build a list of all modules script when -DMODULE="custom" is selected
GetModuleSourceList(SCRIPT_MODULE_LIST) GetModuleSourceList(SCRIPT_MODULE_LIST)
foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST}) foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST})
ModuleNameToVariable(${SCRIPT_MODULE} SCRIPT_MODULE_VARIABLE) ModuleNameToVariable(${SCRIPT_MODULE} SCRIPT_MODULE_VARIABLE)
@@ -55,8 +79,23 @@ foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST})
set_property(CACHE ${SCRIPT_MODULE_VARIABLE} PROPERTY STRINGS default disabled static dynamic) set_property(CACHE ${SCRIPT_MODULE_VARIABLE} PROPERTY STRINGS default disabled static dynamic)
endforeach() endforeach()
# Build a list of all applications when -DBUILD_APPS="custom" is selected
GetApplicationsList(APPLICATIONS_BUILD_LIST)
foreach(APPLICATION_BUILD_NAME ${APPLICATIONS_BUILD_LIST})
ApplicationNameToVariable(${APPLICATION_BUILD_NAME} APPLICATION_BUILD_VARIABLE)
set(${APPLICATION_BUILD_VARIABLE} "default" CACHE STRING "Enable build the ${APPLICATION_BUILD_NAME} application.")
set_property(CACHE ${APPLICATION_BUILD_VARIABLE} PROPERTY STRINGS default enabled disabled)
endforeach()
# Build a list of all applications when -DBUILD_TOOLS="custom" is selected
GetToolsList(TOOLS_BUILD_LIST)
foreach(TOOL_BUILD_NAME ${TOOLS_BUILD_LIST})
ToolNameToVariable(${TOOL_BUILD_NAME} TOOL_BUILD_VARIABLE)
set(${TOOL_BUILD_VARIABLE} "default" CACHE STRING "Enable build the ${TOOL_BUILD_NAME} tool.")
set_property(CACHE ${TOOL_BUILD_VARIABLE} PROPERTY STRINGS default enabled disabled)
endforeach()
option(BUILD_TESTING "Build unit tests" 0) option(BUILD_TESTING "Build unit tests" 0)
option(TOOLS "Build map/vmap/mmap extraction/assembler tools" 0)
option(USE_SCRIPTPCH "Use precompiled headers when compiling scripts" 1) option(USE_SCRIPTPCH "Use precompiled headers when compiling scripts" 1)
option(USE_COREPCH "Use precompiled headers when compiling servers" 1) option(USE_COREPCH "Use precompiled headers when compiling servers" 1)
option(WITH_WARNINGS "Show all warnings during compile" 0) option(WITH_WARNINGS "Show all warnings during compile" 0)
@@ -69,6 +108,8 @@ option(WITH_STRICT_DATABASE_TYPE_CHECKS "Enable strict checking of database fiel
option(WITHOUT_METRICS "Disable metrics reporting (i.e. InfluxDB and Grafana)" 0) option(WITHOUT_METRICS "Disable metrics reporting (i.e. InfluxDB and Grafana)" 0)
option(WITH_DETAILED_METRICS "Enable detailed metrics reporting (i.e. time each session takes to update)" 0) option(WITH_DETAILED_METRICS "Enable detailed metrics reporting (i.e. time each session takes to update)" 0)
CheckApplicationsBuildList()
CheckToolsBuildList()
IsDynamicLinkingRequired(WITH_DYNAMIC_LINKING_FORCED) IsDynamicLinkingRequired(WITH_DYNAMIC_LINKING_FORCED)
IsDynamicLinkingModulesRequired(WITH_DYNAMIC_LINKING_FORCED) IsDynamicLinkingModulesRequired(WITH_DYNAMIC_LINKING_FORCED)

35
conf/dist/config.sh vendored
View File

@@ -30,12 +30,12 @@ BINPATH="$AC_PATH_ROOT/env/dist"
# DATAPATH_ZIP="$DATAPATH/data.zip" # DATAPATH_ZIP="$DATAPATH/data.zip"
# azerothcore's official remote source address to pull from # azerothcore's official remote source address to pull from
# by default git will fetch form the azrothcore remote # by default git will fetch form the azrothcore remote
# You can change it to "origin" if you want to fetch/pull from the set remote # You can change it to "origin" if you want to fetch/pull from the set remote
ORIGIN_REMOTE="https://github.com/azerothcore/azerothcore-wotlk.git" ORIGIN_REMOTE="https://github.com/azerothcore/azerothcore-wotlk.git"
# Branch configuration for the installer to pull from. # Branch configuration for the installer to pull from.
# By default git will select the current working branch # By default git will select the current working branch
# You can set it to "master" if you want the latest updates # You can set it to "master" if you want the latest updates
INSTALLER_PULL_FROM= INSTALLER_PULL_FROM=
@@ -44,8 +44,6 @@ INSTALLER_PULL_FROM=
# COMPILER_CONFIGURATIONS # COMPILER_CONFIGURATIONS
# #
############################################## ##############################################
# Set preferred compilers. # Set preferred compilers.
# To use gcc (not suggested) instead of clang change in: # To use gcc (not suggested) instead of clang change in:
# CCOMPILERC="/usr/bin/gcc" # CCOMPILERC="/usr/bin/gcc"
@@ -54,7 +52,6 @@ INSTALLER_PULL_FROM=
CCOMPILERC="/usr/bin/clang" CCOMPILERC="/usr/bin/clang"
CCOMPILERCXX="/usr/bin/clang++" CCOMPILERCXX="/usr/bin/clang++"
# how many thread must be used for compilation ( leave zero to use all available ) # how many thread must be used for compilation ( leave zero to use all available )
MTHREADS=${MTHREADS:-0} MTHREADS=${MTHREADS:-0}
# enable/disable warnings during compilation # enable/disable warnings during compilation
@@ -69,23 +66,31 @@ CDEBUG=OFF
# * RelWithDebInfo: optimized, *with* debug info, but no debug (output) code or asserts. # * RelWithDebInfo: optimized, *with* debug info, but no debug (output) code or asserts.
# * MinSizeRel: same as Release but optimizing for size rather than speed. # * MinSizeRel: same as Release but optimizing for size rather than speed.
CTYPE=${CTYPE:-Release} CTYPE=${CTYPE:-Release}
# compile scripts # compile scripts
CSCRIPTS=${CSCRIPTS:-static} CSCRIPTS=${CSCRIPTS:-static}
# compile scripts
CMODULES=${CMODULES:-none}
# compile unit tests # compile unit tests
CBUILD_TESTING=OFF CBUILD_TESTING=OFF
# compile server
CSERVERS=${CSERVERS:-ON}
# compile tools
CTOOLS=${CTOOLS:-OFF}
# use precompiled headers ( fatest compilation but not optimized if you change headers often ) # use precompiled headers ( fatest compilation but not optimized if you change headers often )
CSCRIPTPCH=${CSCRIPTPCH:-ON} CSCRIPTPCH=${CSCRIPTPCH:-ON}
CCOREPCH=${CCOREPCH:-ON} CCOREPCH=${CCOREPCH:-ON}
# compile with C++20
CUSE_CPP_20=${CUSE_CPP_20:-OFF}
# Skip specific modules from compilation (cmake reconfigure needed) # build apps list variable
# use semicolon ; to separate modules CAPPS_BUILD=${CAPPS_BUILD:-all}
CDISABLED_AC_MODULES=""
# build tools list variable
CTOOLS_BUILD=${CTOOLS_BUILD:-none}
# build apps list
CBUILD_APPS_LIST=${CBUILD_APPS_LIST:-''}
# build tools list
CBUILD_TOOLS_LIST=${CBUILD_TOOLS_LIST:-''}
# you can add your custom definitions here ( -D ) # you can add your custom definitions here ( -D )
# example: CCUSTOMOPTIONS=" -DWITH_PERFTOOLS=ON # example: CCUSTOMOPTIONS=" -DWITH_PERFTOOLS=ON

28
deps/CMakeLists.txt vendored
View File

@@ -16,30 +16,34 @@ if(CMAKE_SYSTEM_NAME MATCHES "Windows")
endif() endif()
endif() endif()
add_subdirectory(SFMT)
add_subdirectory(argon2)
add_subdirectory(boost)
add_subdirectory(fmt)
add_subdirectory(jemalloc)
add_subdirectory(openssl)
add_subdirectory(stdfs)
add_subdirectory(threads) add_subdirectory(threads)
add_subdirectory(utf8cpp)
if(SERVERS OR TOOLS) # if ((APPS_BUILD AND (NOT APPS_BUILD STREQUAL "none")) OR BUILD_TOOLS_DB_IMPORT) #DB import PR
add_subdirectory(boost) if ((APPS_BUILD AND (NOT APPS_BUILD STREQUAL "none")))
add_subdirectory(mysql)
endif()
if (BUILD_APPLICATION_WORLDSERVER OR BUILD_TOOLS_MAPS)
add_subdirectory(zlib) add_subdirectory(zlib)
add_subdirectory(g3dlite) add_subdirectory(g3dlite)
add_subdirectory(recastnavigation) add_subdirectory(recastnavigation)
add_subdirectory(fmt)
add_subdirectory(SFMT)
add_subdirectory(utf8cpp)
add_subdirectory(openssl)
add_subdirectory(argon2)
add_subdirectory(jemalloc)
add_subdirectory(stdfs)
endif() endif()
if(SERVERS) if (BUILD_APPLICATION_WORLDSERVER)
add_subdirectory(mysql)
add_subdirectory(readline) add_subdirectory(readline)
add_subdirectory(gsoap) add_subdirectory(gsoap)
add_subdirectory(gperftools) add_subdirectory(gperftools)
endif() endif()
if(TOOLS) if (BUILD_TOOLS_MAPS)
add_subdirectory(bzip2) add_subdirectory(bzip2)
add_subdirectory(libmpq) add_subdirectory(libmpq)
endif() endif()

View File

@@ -14,12 +14,26 @@
# This to stop a few silly crashes that could have been avoided IF people # This to stop a few silly crashes that could have been avoided IF people
# weren't doing some -O3 psychooptimizations etc. # weren't doing some -O3 psychooptimizations etc.
# Specified files for Windows
if (WIN32)
# Crash logs
set(winDebugging
${CMAKE_SOURCE_DIR}/src/common/Debugging/WheatyExceptionReport.cpp
${CMAKE_SOURCE_DIR}/src/common/Debugging/WheatyExceptionReport.h)
# Service
set(winService
${CMAKE_SOURCE_DIR}/src/common/Platform/ServiceWin32.cpp
${CMAKE_SOURCE_DIR}/src/common/Platform/ServiceWin32.h)
endif()
if(CMAKE_COMPILER_IS_GNUCXX AND NOT MINGW) if(CMAKE_COMPILER_IS_GNUCXX AND NOT MINGW)
add_definitions(-fno-delete-null-pointer-checks) add_definitions(-fno-delete-null-pointer-checks)
endif() endif()
add_subdirectory(genrev) add_subdirectory(genrev)
add_subdirectory(server)
if( SERVERS ) if (TOOLS_BUILD AND NOT TOOLS_BUILD STREQUAL "none")
add_subdirectory(server) add_subdirectory(tools)
endif() endif()

View File

@@ -12,32 +12,62 @@
# #
# Use it like: # Use it like:
# CopyDefaultConfig(worldserver) # CopyApplicationConfig(${APP_PROJECT_NAME} ${APPLICATION_NAME})
# #
function(CopyDefaultConfig servertype) function(CopyApplicationConfig projectName appName)
GetPathToApplication(${appName} SOURCE_APP_PATH)
if(WIN32) if(WIN32)
if("${CMAKE_MAKE_PROGRAM}" MATCHES "MSBuild") if("${CMAKE_MAKE_PROGRAM}" MATCHES "MSBuild")
add_custom_command(TARGET ${servertype} add_custom_command(TARGET ${projectName}
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs") COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs")
add_custom_command(TARGET ${servertype} add_custom_command(TARGET ${projectName}
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${servertype}.conf.dist" "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs") COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_APP_PATH}/${appName}.conf.dist" "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs")
elseif(MINGW) elseif(MINGW)
add_custom_command(TARGET ${servertype} add_custom_command(TARGET ${servertype}
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin/configs") COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin/configs")
add_custom_command(TARGET ${servertype} add_custom_command(TARGET ${servertype}
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${servertype}.conf.dist ${CMAKE_BINARY_DIR}/bin/configs") COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_APP_PATH}/${appName}.conf.dist ${CMAKE_BINARY_DIR}/bin/configs")
endif() endif()
endif() endif()
if(UNIX) if(UNIX)
install(FILES "${servertype}.conf.dist" DESTINATION "${CONF_DIR}") install(FILES "${SOURCE_APP_PATH}/${appName}.conf.dist" DESTINATION "${CONF_DIR}")
elseif(WIN32) elseif(WIN32)
install(FILES "${servertype}.conf.dist" DESTINATION "${CMAKE_INSTALL_PREFIX}/configs") install(FILES "${SOURCE_APP_PATH}/${appName}.conf.dist" DESTINATION "${CMAKE_INSTALL_PREFIX}/configs")
endif()
endfunction()
function(CopyToolConfig projectName appName)
GetPathToTool(${appName} SOURCE_APP_PATH)
if(WIN32)
if("${CMAKE_MAKE_PROGRAM}" MATCHES "MSBuild")
add_custom_command(TARGET ${projectName}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs")
add_custom_command(TARGET ${projectName}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_APP_PATH}/${appName}.conf.dist" "${CMAKE_BINARY_DIR}/bin/$(ConfigurationName)/configs")
elseif(MINGW)
add_custom_command(TARGET ${servertype}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/bin/configs")
add_custom_command(TARGET ${servertype}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_APP_PATH}/${appName}.conf.dist ${CMAKE_BINARY_DIR}/bin/configs")
endif()
endif()
if(UNIX)
install(FILES "${SOURCE_APP_PATH}/${appName}.conf.dist" DESTINATION "${CONF_DIR}")
elseif(WIN32)
install(FILES "${SOURCE_APP_PATH}/${appName}.conf.dist" DESTINATION "${CMAKE_INSTALL_PREFIX}/configs")
endif() endif()
endfunction() endfunction()

View File

@@ -0,0 +1,108 @@
#
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
#
# 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(BUILD_APPLICATION_AUTHSERVER 0)
set(BUILD_APPLICATION_WORLDSERVER 0)
# Returns the base path to the apps directory in the source directory
function(GetApplicationsBasePath variable)
set(${variable} "${CMAKE_SOURCE_DIR}/src/server/apps" PARENT_SCOPE)
endfunction()
# Stores the absolut path of the given app in the variable
function(GetPathToApplication app variable)
GetApplicationsBasePath(APPS_BASE_PATH)
set(${variable} "${APPS_BASE_PATH}/${app}" PARENT_SCOPE)
endfunction()
# Stores the project name of the given app in the variable
function(GetProjectNameOfApplicationName app variable)
string(TOLOWER "${app}" GENERATED_NAME)
set(${variable} "${GENERATED_NAME}" PARENT_SCOPE)
endfunction()
# Creates a list of all applications and stores it in the given variable.
function(GetApplicationsList variable)
GetApplicationsBasePath(BASE_PATH)
file(GLOB LOCALE_SOURCE_APP_LIST RELATIVE
${BASE_PATH}
${BASE_PATH}/*)
set(${variable})
foreach(SOURCE_APP ${LOCALE_SOURCE_APP_LIST})
GetPathToApplication(${SOURCE_APP} SOURCE_APP_PATH)
if(IS_DIRECTORY ${SOURCE_APP_PATH})
list(APPEND ${variable} ${SOURCE_APP})
endif()
endforeach()
set(${variable} ${${variable}} PARENT_SCOPE)
endfunction()
# Converts the given application name into it's
# variable name which holds the build type.
function(ApplicationNameToVariable application variable)
string(TOUPPER ${application} ${variable})
set(${variable} "APP_${${variable}}")
set(${variable} ${${variable}} PARENT_SCOPE)
endfunction()
function(CheckApplicationsBuildList)
GetApplicationsList(APPLICATIONS_BUILD_LIST)
if (APPS_BUILD STREQUAL "none")
set(APPS_DEFAULT_BUILD "disabled")
else()
set(APPS_DEFAULT_BUILD "enabled")
endif()
# Sets BUILD_APPS_USE_WHITELIST
# Sets BUILD_APPS_WHITELIST
if (APPS_BUILD MATCHES "-only")
set(BUILD_APPS_USE_WHITELIST ON)
if (APPS_BUILD STREQUAL "servers-only")
list(APPEND BUILD_APPS_WHITELIST authserver worldserver)
endif()
if (APPS_BUILD STREQUAL "dbimport-only")
list(APPEND BUILD_APPS_WHITELIST dbimport)
endif()
endif()
foreach(APPLICATION_BUILD_NAME ${APPLICATIONS_BUILD_LIST})
ApplicationNameToVariable(${APPLICATION_BUILD_NAME} APPLICATION_BUILD_VARIABLE)
if(${APPLICATION_BUILD_VARIABLE} STREQUAL "default")
if(BUILD_APPS_USE_WHITELIST)
list(FIND BUILD_APPS_WHITELIST "${APPLICATION_BUILD_NAME}" INDEX)
if(${INDEX} GREATER -1)
set(${APPLICATION_BUILD_VARIABLE} ${APPS_DEFAULT_BUILD})
else()
set(${APPLICATION_BUILD_VARIABLE} "disabled")
endif()
else()
set(${APPLICATION_BUILD_VARIABLE} ${APPS_DEFAULT_BUILD})
endif()
endif()
# Build the Graph values
if(${APPLICATION_BUILD_VARIABLE} MATCHES "enabled")
if (${APPLICATION_BUILD_NAME} MATCHES "authserver")
set (BUILD_APPLICATION_AUTHSERVER 1 PARENT_SCOPE)
elseif(${APPLICATION_BUILD_NAME} MATCHES "worldserver")
set (BUILD_APPLICATION_WORLDSERVER 1 PARENT_SCOPE)
endif()
endif()
endforeach()
endfunction()

View File

@@ -0,0 +1,110 @@
#
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
#
# 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(BUILD_TOOLS_MAPS 0)
set(BUILD_TOOLS_DB_IMPORT 0)
# Returns the base path to the tools directory in the source directory
function(GetToolsBasePath variable)
set(${variable} "${CMAKE_SOURCE_DIR}/src/tools" PARENT_SCOPE)
endfunction()
# Stores the absolut path of the given tool in the variable
function(GetPathToTool tool variable)
GetToolsBasePath(TOOLS_BASE_PATH)
set(${variable} "${TOOLS_BASE_PATH}/${tool}" PARENT_SCOPE)
endfunction()
# Stores the project name of the given tool in the variable
function(GetProjectNameOfToolName tool variable)
string(TOLOWER "${tool}" GENERATED_NAME)
set(${variable} "${GENERATED_NAME}" PARENT_SCOPE)
endfunction()
# Creates a list of all applications and stores it in the given variable.
function(GetToolsList variable)
GetToolsBasePath(BASE_PATH)
file(GLOB LOCALE_SOURCE_TOOL_LIST RELATIVE
${BASE_PATH}
${BASE_PATH}/*)
set(${variable})
foreach(SOURCE_TOOL ${LOCALE_SOURCE_TOOL_LIST})
GetPathToTool(${SOURCE_TOOL} SOURCE_TOOL_PATH)
if(IS_DIRECTORY ${SOURCE_TOOL_PATH})
list(APPEND ${variable} ${SOURCE_TOOL})
endif()
endforeach()
set(${variable} ${${variable}} PARENT_SCOPE)
endfunction()
# Converts the given application name into it's
# variable name which holds the build type.
function(ToolNameToVariable application variable)
string(TOUPPER ${application} ${variable})
set(${variable} "TOOL_${${variable}}")
set(${variable} ${${variable}} PARENT_SCOPE)
endfunction()
function(CheckToolsBuildList)
GetToolsList(TOOLS_BUILD_LIST)
if (TOOLS_BUILD STREQUAL "none")
set(TOOLS_DEFAULT_BUILD "disabled")
else()
set(TOOLS_DEFAULT_BUILD "enabled")
endif()
# Sets BUILD_TOOLS_USE_WHITELIST
# Sets BUILD_TOOLS_WHITELIST
if (TOOLS_BUILD MATCHES "-only")
set(BUILD_TOOLS_USE_WHITELIST ON)
if (TOOLS_BUILD STREQUAL "maps-only")
list(APPEND BUILD_TOOLS_WHITELIST map_extractor mmaps_generator vmap4_assembler vmap4_extractor)
endif()
# if (TOOLS_BUILD STREQUAL "db-only")
# list(APPEND BUILD_TOOLS_WHITELIST dbimport)
# endif()
endif()
# Set the TOOL_${TOOL_BUILD_NAME} variables from the
# variables set above
foreach(TOOL_BUILD_NAME ${TOOLS_BUILD_LIST})
ToolNameToVariable(${TOOL_BUILD_NAME} TOOL_BUILD_VARIABLE)
if (${TOOL_BUILD_VARIABLE} STREQUAL "default")
if (BUILD_TOOLS_USE_WHITELIST)
list(FIND BUILD_TOOLS_WHITELIST "${TOOL_BUILD_NAME}" INDEX)
if (${INDEX} GREATER -1)
set(${TOOL_BUILD_VARIABLE} ${TOOLS_DEFAULT_BUILD})
else()
set(${TOOL_BUILD_VARIABLE} "disabled")
endif()
else()
set(${TOOL_BUILD_VARIABLE} ${TOOLS_DEFAULT_BUILD})
endif()
endif()
# Build the Graph values
if (${TOOL_BUILD_VARIABLE} MATCHES "enabled")
if (${TOOL_BUILD_NAME} MATCHES "dbimport")
set(BUILD_TOOLS_DB_IMPORT 1 PARENT_SCOPE)
else()
set(BUILD_TOOLS_MAPS 1 PARENT_SCOPE)
endif()
endif()
endforeach()
endfunction()

View File

@@ -32,31 +32,32 @@ message("")
# Show infomation about the options selected during configuration # Show infomation about the options selected during configuration
if( SERVERS ) if (APPS_BUILD AND (NOT APPS_BUILD STREQUAL "none"))
message("* Build world/auth : Yes (default)") message("* Build applications : Yes (${APPS_BUILD})")
else() else()
message("* Build world/authserver : No") message("* Build applications : No")
endif() endif()
if(SCRIPTS AND (NOT SCRIPTS STREQUAL "none")) if (TOOLS_BUILD AND (NOT TOOLS_BUILD STREQUAL "none"))
message("* Build tools : Yes (${TOOLS_BUILD})")
add_definitions(-DNO_CORE_FUNCS)
else()
message("* Build tools : No")
endif()
if (SCRIPTS AND (NOT SCRIPTS STREQUAL "none"))
message("* Build with scripts : Yes (${SCRIPTS})") message("* Build with scripts : Yes (${SCRIPTS})")
else() else()
message("* Build with scripts : No") message("* Build with scripts : No")
endif() endif()
if(MODULES AND (NOT MODULES STREQUAL "none")) if (MODULES AND (NOT MODULES STREQUAL "none"))
message("* Build with modules : Yes (${MODULES})") message("* Build with modules : Yes (${MODULES})")
else() else()
message("* Build with modules : No") message("* Build with modules : No")
endif() endif()
if( TOOLS )
message("* Build map/vmap tools : Yes")
add_definitions(-DNO_CORE_FUNCS)
else()
message("* Build map/vmap tools : No (default)")
endif()
if( BUILD_TESTING ) if( BUILD_TESTING )
message("* Build unit tests : Yes") message("* Build unit tests : Yes")
else() else()

View File

@@ -16,8 +16,21 @@ CollectSourceFiles(
# Exclude # Exclude
${CMAKE_CURRENT_SOURCE_DIR}/Debugging ${CMAKE_CURRENT_SOURCE_DIR}/Debugging
${CMAKE_CURRENT_SOURCE_DIR}/Platform ${CMAKE_CURRENT_SOURCE_DIR}/Platform
${CMAKE_CURRENT_SOURCE_DIR}/Collision
${CMAKE_CURRENT_SOURCE_DIR}/Navigation
${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders) ${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders)
if (BUILD_APPLICATION_WORLDSERVER OR BUILD_TOOLS_MAPS)
unset(PRIVATE_SOURCES)
CollectSourceFiles(
${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE_SOURCES
# Exclude
${CMAKE_CURRENT_SOURCE_DIR}/Debugging
${CMAKE_CURRENT_SOURCE_DIR}/Platform
${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders)
endif()
# Manually set sources for Debugging directory as we don't want to include WheatyExceptionReport in common project # Manually set sources for Debugging directory as we don't want to include WheatyExceptionReport in common project
# It needs to be included both in authserver and worldserver for the static global variable to be properly initialized # It needs to be included both in authserver and worldserver for the static global variable to be properly initialized
# and to handle crash logs on windows # and to handle crash logs on windows
@@ -55,8 +68,6 @@ target_link_libraries(common
PUBLIC PUBLIC
boost boost
argon2 argon2
g3dlib
Detour
sfmt sfmt
utf8cpp utf8cpp
openssl openssl
@@ -65,6 +76,13 @@ target_link_libraries(common
stdfs stdfs
fmt) fmt)
if (BUILD_APPLICATION_WORLDSERVER OR BUILD_TOOLS_MAPS)
target_link_libraries(common
PUBLIC
g3dlib
Detour)
endif()
set_target_properties(common set_target_properties(common
PROPERTIES PROPERTIES
FOLDER FOLDER

View File

@@ -60,7 +60,7 @@ private:
public: public:
static Log* instance(); static Log* instance();
void Initialize(Acore::Asio::IoContext* ioContext); void Initialize(Acore::Asio::IoContext* ioContext = nullptr);
void SetSynchronous(); // Not threadsafe - should only be called from main() after all threads are joined void SetSynchronous(); // Not threadsafe - should only be called from main() after all threads are joined
void LoadFromConfig(); void LoadFromConfig();
void Close(); void Close();

View File

@@ -10,22 +10,19 @@
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# #
# Specified files for Windows add_subdirectory(apps)
if (WIN32)
# Crash logs
set(winDebugging
${CMAKE_SOURCE_DIR}/src/common/Debugging/WheatyExceptionReport.cpp
${CMAKE_SOURCE_DIR}/src/common/Debugging/WheatyExceptionReport.h)
# Service # if ((APPS_BUILD AND NOT APPS_BUILD STREQUAL "none") OR BUILD_TOOLS_DB_IMPORT) # DB import PR
set(winService if ((APPS_BUILD AND NOT APPS_BUILD STREQUAL "none"))
${CMAKE_SOURCE_DIR}/src/common/Platform/ServiceWin32.cpp add_subdirectory(database)
${CMAKE_SOURCE_DIR}/src/common/Platform/ServiceWin32.h) endif()
if (BUILD_APPLICATION_AUTHSERVER OR BUILD_APPLICATION_WORLDSERVER)
add_subdirectory(shared)
endif()
if (BUILD_APPLICATION_WORLDSERVER)
add_subdirectory(game)
add_subdirectory(scripts)
endif() endif()
add_subdirectory(authserver)
add_subdirectory(database)
add_subdirectory(game)
add_subdirectory(shared)
add_subdirectory(scripts)
add_subdirectory(worldserver)

View File

@@ -0,0 +1,198 @@
#
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
#
# 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.
# Make the script module list available in the current scope
GetApplicationsList(APPLICATIONS_BUILD_LIST)
if (APPS_BUILD STREQUAL "none")
set(APPS_DEFAULT_BUILD "disabled")
else()
set(APPS_DEFAULT_BUILD "enabled")
endif()
# Sets BUILD_APPS_USE_WHITELIST
# Sets BUILD_APPS_WHITELIST
if (APPS_BUILD MATCHES "-only")
set(BUILD_APPS_USE_WHITELIST ON)
if (APPS_BUILD STREQUAL "auth-only")
list(APPEND BUILD_APPS_WHITELIST authserver)
endif()
if (APPS_BUILD STREQUAL "world-only")
list(APPEND BUILD_APPS_WHITELIST worldserver)
endif()
endif()
# Set the SCRIPTS_${BUILD_APP} variables from the
# variables set above
foreach(BUILD_APP ${APPLICATIONS_BUILD_LIST})
ApplicationNameToVariable(${BUILD_APP} BUILD_APP_VARIABLE)
if(${BUILD_APP_VARIABLE} STREQUAL "default")
if(BUILD_APPS_USE_WHITELIST)
list(FIND BUILD_APPS_WHITELIST "${BUILD_APP}" INDEX)
if(${INDEX} GREATER -1)
set(${BUILD_APP_VARIABLE} ${APPS_DEFAULT_BUILD})
else()
set(${BUILD_APP_VARIABLE} "disabled")
endif()
else()
set(${BUILD_APP_VARIABLE} ${APPS_DEFAULT_BUILD})
endif()
endif()
# Build the Graph values
if(${BUILD_APP_VARIABLE} MATCHES "enabled")
list(APPEND BUILD_APP_GRAPH_KEYS apps)
set(BUILD_APP_VALUE_DISPLAY_apps apps)
list(APPEND BUILD_APP_VALUE_CONTAINS_apps ${BUILD_APP})
if (${BUILD_APP} MATCHES "authserver")
set (BUILD_APPLICATION_AUTHSERVER 1)
elseif(${BUILD_APP} MATCHES "worldserver")
set (BUILD_APPLICATION_WORLDSERVER 1)
endif()
else()
list(APPEND BUILD_APP_GRAPH_KEYS disabled)
set(BUILD_APP_VALUE_DISPLAY_disabled disabled)
list(APPEND BUILD_APP_VALUE_CONTAINS_disabled ${BUILD_APP})
endif()
endforeach()
list(SORT BUILD_APP_GRAPH_KEYS)
list(REMOVE_DUPLICATES BUILD_APP_GRAPH_KEYS)
# Display the graphs
message("")
message("* Apps build list (${APPS_BUILD}):")
message(" |")
foreach(BUILD_APP_GRAPH_KEY ${BUILD_APP_GRAPH_KEYS})
if(NOT BUILD_APP_GRAPH_KEY STREQUAL "disabled")
message(" +- ${BUILD_APP_VALUE_DISPLAY_${BUILD_APP_GRAPH_KEY}}")
else()
message(" | ${BUILD_APP_VALUE_DISPLAY_${BUILD_APP_GRAPH_KEY}}")
endif()
foreach(BUILD_APP_GRAPH_ENTRY ${BUILD_APP_VALUE_CONTAINS_${BUILD_APP_GRAPH_KEY}})
message(" | +- ${BUILD_APP_GRAPH_ENTRY}")
endforeach()
message(" |")
endforeach()
message("")
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
# Generates the actual apps projects
foreach(APPLICATION_NAME ${APPLICATIONS_BUILD_LIST})
GetPathToApplication(${APPLICATION_NAME} SOURCE_APP_PATH)
ApplicationNameToVariable(${APPLICATION_NAME} BUILD_APP_VARIABLE)
if (${BUILD_APP_VARIABLE} STREQUAL "disabled")
continue()
endif()
unset(APP_PRIVATE_SOURCES)
CollectSourceFiles(
${SOURCE_APP_PATH}
APP_PRIVATE_SOURCES
# Exclude
${SOURCE_APP_PATH}/PrecompiledHeaders)
if (WIN32)
list(APPEND APP_PRIVATE_SOURCES ${winDebugging})
if (${APPLICATION_NAME} MATCHES "worldserver")
list(APPEND APP_PRIVATE_SOURCES ${winService})
endif()
if (MSVC)
list(APPEND APP_PRIVATE_SOURCES ${SOURCE_APP_PATH}/${APPLICATION_NAME}.rc)
endif()
endif()
GetProjectNameOfApplicationName(${APPLICATION_NAME} APP_PROJECT_NAME)
# Create the application project
add_executable(${APP_PROJECT_NAME}
${APP_PRIVATE_SOURCES})
add_dependencies(${APP_PROJECT_NAME} revision.h)
target_link_libraries(${APP_PROJECT_NAME}
PRIVATE
acore-core-interface)
if (${APP_PROJECT_NAME} MATCHES "authserver")
target_link_libraries(${APP_PROJECT_NAME}
PUBLIC
shared)
elseif(${APP_PROJECT_NAME} MATCHES "worldserver")
target_link_libraries(${APP_PROJECT_NAME}
PUBLIC
modules
scripts
game
gsoap
readline
gperftools)
if (UNIX AND NOT NOJEM)
set(${APP_PROJECT_NAME}_LINK_FLAGS "-pthread -lncurses ${${APP_PROJECT_NAME}_LINK_FLAGS}")
endif()
set_target_properties(${APP_PROJECT_NAME} PROPERTIES LINK_FLAGS "${${APP_PROJECT_NAME}_LINK_FLAGS}")
# Add all dynamic projects as dependency to the worldserver
if (WORLDSERVER_DYNAMIC_SCRIPT_MODULES_DEPENDENCIES)
add_dependencies(${APP_PROJECT_NAME} ${WORLDSERVER_DYNAMIC_SCRIPT_MODULES_DEPENDENCIES})
endif()
endif()
unset(APP_PUBLIC_INCLUDES)
CollectIncludeDirectories(
${SOURCE_APP_PATH}
APP_PUBLIC_INCLUDES
# Exclude
${SOURCE_APP_PATH}/PrecompiledHeaders)
target_include_directories(${APP_PROJECT_NAME}
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(${APP_PROJECT_NAME}
PUBLIC
${APP_PUBLIC_INCLUDES}
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME})
set_target_properties(${APP_PROJECT_NAME}
PROPERTIES
FOLDER
"server")
# Install config
CopyApplicationConfig(${APP_PROJECT_NAME} ${APPLICATION_NAME})
if (UNIX)
install(TARGETS ${APP_PROJECT_NAME} DESTINATION bin)
elseif (WIN32)
install(TARGETS ${APP_PROJECT_NAME} DESTINATION "${CMAKE_INSTALL_PREFIX}")
endif()
set(PATH_TO_PCH ${SOURCE_APP_PATH}/PrecompiledHeaders/${APPLICATION_NAME}PCH.h)
# Generate precompiled header
if (USE_COREPCH AND EXISTS ${PATH_TO_PCH})
add_cxx_pch(${APP_PROJECT_NAME} ${PATH_TO_PCH})
endif()
endforeach()

View File

@@ -41,8 +41,11 @@
#include "SharedDefines.h" #include "SharedDefines.h"
#include "Util.h" #include "Util.h"
#include <boost/asio/signal_set.hpp> #include <boost/asio/signal_set.hpp>
#include <boost/program_options.hpp>
#include <boost/version.hpp> #include <boost/version.hpp>
#include <csignal> #include <csignal>
#include <filesystem>
#include <iostream>
#include <openssl/crypto.h> #include <openssl/crypto.h>
#include <openssl/opensslv.h> #include <openssl/opensslv.h>
@@ -51,19 +54,15 @@
#endif #endif
using boost::asio::ip::tcp; using boost::asio::ip::tcp;
using namespace boost::program_options;
namespace fs = std::filesystem;
bool StartDB(); bool StartDB();
void StopDB(); void StopDB();
void SignalHandler(std::weak_ptr<Acore::Asio::IoContext> ioContextRef, boost::system::error_code const& error, int signalNumber); void SignalHandler(std::weak_ptr<Acore::Asio::IoContext> ioContextRef, boost::system::error_code const& error, int signalNumber);
void KeepDatabaseAliveHandler(std::weak_ptr<Acore::Asio::DeadlineTimer> dbPingTimerRef, int32 dbPingInterval, boost::system::error_code const& error); void KeepDatabaseAliveHandler(std::weak_ptr<Acore::Asio::DeadlineTimer> dbPingTimerRef, int32 dbPingInterval, boost::system::error_code const& error);
void BanExpiryHandler(std::weak_ptr<Acore::Asio::DeadlineTimer> banExpiryCheckTimerRef, int32 banExpiryCheckInterval, boost::system::error_code const& error); void BanExpiryHandler(std::weak_ptr<Acore::Asio::DeadlineTimer> banExpiryCheckTimerRef, int32 banExpiryCheckInterval, boost::system::error_code const& error);
variables_map GetConsoleArguments(int argc, char** argv, fs::path& configFile);
/// Print out the usage string for this program on the console.
void usage(const char* prog)
{
LOG_INFO("server.authserver", "Usage: \n {} [<options>]\n"
" -c config_file use config_file as configuration file\n\r", prog);
}
/// Launch the auth server /// Launch the auth server
int main(int argc, char** argv) int main(int argc, char** argv)
@@ -71,27 +70,16 @@ int main(int argc, char** argv)
Acore::Impl::CurrentServerProcessHolder::_type = SERVER_PROCESS_AUTHSERVER; Acore::Impl::CurrentServerProcessHolder::_type = SERVER_PROCESS_AUTHSERVER;
signal(SIGABRT, &Acore::AbortHandler); signal(SIGABRT, &Acore::AbortHandler);
// Command line parsing to get the configuration file name // Command line parsing
std::string configFile = sConfigMgr->GetConfigPath() + std::string(_ACORE_REALM_CONFIG); auto configFile = fs::path(sConfigMgr->GetConfigPath() + std::string(_ACORE_REALM_CONFIG));
int count = 1; auto vm = GetConsoleArguments(argc, argv, configFile);
while (count < argc)
{ // exit if help or version is enabled
if (strcmp(argv[count], "-c") == 0) if (vm.count("help"))
{ return 0;
if (++count >= argc)
{
printf("Runtime-Error: -c option requires an input argument\n");
usage(argv[0]);
return 1;
}
else
configFile = argv[count];
}
++count;
}
// Add file and args in config // Add file and args in config
sConfigMgr->Configure(configFile, std::vector<std::string>(argv, argv + argc)); sConfigMgr->Configure(configFile.generic_string(), std::vector<std::string>(argv, argv + argc));
if (!sConfigMgr->LoadAppConfigs()) if (!sConfigMgr->LoadAppConfigs())
return 1; return 1;
@@ -149,6 +137,13 @@ int main(int argc, char** argv)
return 1; return 1;
} }
// Stop auth server if dry run
if (sConfigMgr->isDryRun())
{
LOG_INFO("server.authserver", "Dry run completed, terminating.");
return 0;
}
// Start the listening port (acceptor) for auth connections // Start the listening port (acceptor) for auth connections
int32 port = sConfigMgr->GetOption<int32>("RealmServerPort", 3724); int32 port = sConfigMgr->GetOption<int32>("RealmServerPort", 3724);
if (port < 0 || port > 0xFFFF) if (port < 0 || port > 0xFFFF)
@@ -268,3 +263,36 @@ void BanExpiryHandler(std::weak_ptr<Acore::Asio::DeadlineTimer> banExpiryCheckTi
} }
} }
} }
variables_map GetConsoleArguments(int argc, char** argv, fs::path& configFile)
{
options_description all("Allowed options");
all.add_options()
("help,h", "print usage message")
("version,v", "print version build info")
("dry-run,d", "Dry run")
("config,c", value<fs::path>(&configFile)->default_value(fs::path(sConfigMgr->GetConfigPath() + std::string(_ACORE_REALM_CONFIG))), "use <arg> as configuration file");
variables_map variablesMap;
try
{
store(command_line_parser(argc, argv).options(all).allow_unregistered().run(), variablesMap);
notify(variablesMap);
}
catch (std::exception const& e)
{
std::cerr << e.what() << "\n";
}
if (variablesMap.count("help"))
{
std::cout << all << "\n";
}
else if (variablesMap.count("dry-run"))
{
sConfigMgr->setDryRun(true);
}
return variablesMap;
}

View File

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

@@ -36,6 +36,7 @@
#include "IoContext.h" #include "IoContext.h"
#include "MapMgr.h" #include "MapMgr.h"
#include "Metric.h" #include "Metric.h"
#include "ModuleMgr.h"
#include "ModulesScriptLoader.h" #include "ModulesScriptLoader.h"
#include "MySQLThreading.h" #include "MySQLThreading.h"
#include "OpenSSLCrypto.h" #include "OpenSSLCrypto.h"
@@ -54,12 +55,12 @@
#include <boost/asio/signal_set.hpp> #include <boost/asio/signal_set.hpp>
#include <boost/program_options.hpp> #include <boost/program_options.hpp>
#include <csignal> #include <csignal>
#include <filesystem>
#include <iostream>
#include <openssl/crypto.h> #include <openssl/crypto.h>
#include <openssl/opensslv.h> #include <openssl/opensslv.h>
#include "ModuleMgr.h" #if AC_PLATFORM == AC_PLATFORM_WINDOWS
#ifdef _WIN32
#include "ServiceWin32.h" #include "ServiceWin32.h"
char serviceName[] = "worldserver"; char serviceName[] = "worldserver";
char serviceLongName[] = "AzerothCore world service"; char serviceLongName[] = "AzerothCore world service";
@@ -78,6 +79,8 @@ int m_ServiceStatus = -1;
#endif #endif
#define WORLD_SLEEP_CONST 10 #define WORLD_SLEEP_CONST 10
using namespace boost::program_options;
namespace fs = std::filesystem;
class FreezeDetector class FreezeDetector
{ {
@@ -110,20 +113,7 @@ void ShutdownCLIThread(std::thread* cliThread);
void AuctionListingRunnable(); void AuctionListingRunnable();
void ShutdownAuctionListingThread(std::thread* thread); void ShutdownAuctionListingThread(std::thread* thread);
void WorldUpdateLoop(); void WorldUpdateLoop();
variables_map GetConsoleArguments(int argc, char** argv, fs::path& configFile, [[maybe_unused]] std::string& cfg_service);
/// Print out the usage string for this program on the console.
void usage(const char* prog)
{
printf("Usage:\n");
printf(" %s [<options>]\n", prog);
printf(" -c config_file use config_file as configuration file\n");
#ifdef _WIN32
printf(" Running as service functions:\n");
printf(" --service run as service\n");
printf(" -s install install service\n");
printf(" -s uninstall uninstall service\n");
#endif
}
/// Launch the Azeroth server /// Launch the Azeroth server
int main(int argc, char** argv) int main(int argc, char** argv)
@@ -131,66 +121,26 @@ int main(int argc, char** argv)
Acore::Impl::CurrentServerProcessHolder::_type = SERVER_PROCESS_WORLDSERVER; Acore::Impl::CurrentServerProcessHolder::_type = SERVER_PROCESS_WORLDSERVER;
signal(SIGABRT, &Acore::AbortHandler); signal(SIGABRT, &Acore::AbortHandler);
///- Command line parsing to get the configuration file name // Command line parsing
std::string configFile = sConfigMgr->GetConfigPath() + std::string(_ACORE_CORE_CONFIG); auto configFile = fs::path(sConfigMgr->GetConfigPath() + std::string(_ACORE_CORE_CONFIG));
int c = 1; std::string configService;
while (c < argc) auto vm = GetConsoleArguments(argc, argv, configFile, configService);
{
if (strcmp(argv[c], "--dry-run") == 0)
{
sConfigMgr->setDryRun(true);
}
if (!strcmp(argv[c], "-c")) // exit if help or version is enabled
{ if (vm.count("help"))
if (++c >= argc) return 0;
{
printf("Runtime-Error: -c option requires an input argument");
usage(argv[0]);
return 1;
}
else
configFile = argv[c];
}
#ifdef _WIN32 #if AC_PLATFORM == AC_PLATFORM_WINDOWS
if (strcmp(argv[c], "-s") == 0) // Services if (configService.compare("install") == 0)
{ return WinServiceInstall() == true ? 0 : 1;
if (++c >= argc) else if (configService.compare("uninstall") == 0)
{ return WinServiceUninstall() == true ? 0 : 1;
printf("Runtime-Error: -s option requires an input argument"); else if (configService.compare("run") == 0)
usage(argv[0]); WinServiceRun();
return 1;
}
if (strcmp(argv[c], "install") == 0)
{
if (WinServiceInstall())
printf("Installing service\n");
return 1;
}
else if (strcmp(argv[c], "uninstall") == 0)
{
if (WinServiceUninstall())
printf("Uninstalling service\n");
return 1;
}
else
{
printf("Runtime-Error: unsupported option %s", argv[c]);
usage(argv[0]);
return 1;
}
}
if (strcmp(argv[c], "--service") == 0)
WinServiceRun();
#endif #endif
++c;
}
// Add file and args in config // Add file and args in config
sConfigMgr->Configure(configFile, { argv, argv + argc }, CONFIG_FILE_LIST); sConfigMgr->Configure(configFile.generic_string(), {argv, argv + argc}, CONFIG_FILE_LIST);
if (!sConfigMgr->LoadAppConfigs()) if (!sConfigMgr->LoadAppConfigs())
return 1; return 1;
@@ -399,7 +349,7 @@ int main(int argc, char** argv)
// Launch CliRunnable thread // Launch CliRunnable thread
std::shared_ptr<std::thread> cliThread; std::shared_ptr<std::thread> cliThread;
#ifdef _WIN32 #if AC_PLATFORM == AC_PLATFORM_WINDOWS
if (sConfigMgr->GetOption<bool>("Console.Enable", true) && (m_ServiceStatus == -1)/* need disable console in service mode*/) if (sConfigMgr->GetOption<bool>("Console.Enable", true) && (m_ServiceStatus == -1)/* need disable console in service mode*/)
#else #else
if (sConfigMgr->GetOption<bool>("Console.Enable", true)) if (sConfigMgr->GetOption<bool>("Console.Enable", true))
@@ -768,3 +718,44 @@ void ShutdownAuctionListingThread(std::thread* thread)
delete thread; delete thread;
} }
} }
variables_map GetConsoleArguments(int argc, char** argv, fs::path& configFile, [[maybe_unused]] std::string& configService)
{
options_description all("Allowed options");
all.add_options()
("help,h", "print usage message")
("version,v", "print version build info")
("dry-run,d", "Dry run")
("config,c", value<fs::path>(&configFile)->default_value(fs::path(sConfigMgr->GetConfigPath() + std::string(_ACORE_CORE_CONFIG))), "use <arg> as configuration file");
#if AC_PLATFORM == WARHEAD_PLATFORM_WINDOWS
options_description win("Windows platform specific options");
win.add_options()
("service,s", value<std::string>(&configService)->default_value(""), "Windows service options: [install | uninstall]");
all.add(win);
#endif
variables_map vm;
try
{
store(command_line_parser(argc, argv).options(all).allow_unregistered().run(), vm);
notify(vm);
}
catch (std::exception const& e)
{
std::cerr << e.what() << "\n";
}
if (vm.count("help"))
{
std::cout << all << "\n";
}
else if (vm.count("dry-run"))
{
sConfigMgr->setDryRun(true);
}
return vm;
}

View File

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

@@ -1,77 +0,0 @@
#
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
#
# 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.
#
########### authserver ###############
CollectSourceFiles(
${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE_SOURCES
# Exclude
${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders)
if( WIN32 )
list(APPEND PRIVATE_SOURCES ${winDebugging})
if ( MSVC )
list(APPEND PRIVATE_SOURCES authserver.rc)
endif()
endif()
if (USE_COREPCH)
set(PRIVATE_PCH_HEADER PrecompiledHeaders/authPCH.h)
endif()
# Group sources
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
add_executable(authserver
${PRIVATE_SOURCES})
add_dependencies(authserver revision.h)
target_link_libraries(authserver
PRIVATE
acore-core-interface
PUBLIC
shared)
CollectIncludeDirectories(
${CMAKE_CURRENT_SOURCE_DIR}
PUBLIC_INCLUDES
# Exclude
${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders)
target_include_directories(authserver
PUBLIC
${PUBLIC_INCLUDES}
PRIVATE
${CMAKE_CURRENT_BINARY_DIR})
set_target_properties(authserver
PROPERTIES
FOLDER
"server")
# Install config
CopyDefaultConfig(authserver)
if ( UNIX )
install(TARGETS authserver DESTINATION bin)
elseif ( WIN32 )
install(TARGETS authserver DESTINATION "${CMAKE_INSTALL_PREFIX}")
endif()
# Generate precompiled header
if (USE_COREPCH)
add_cxx_pch(authserver ${PRIVATE_PCH_HEADER})
endif()
CU_RUN_HOOK("AFTER_AUTHSERVER_CMAKE")

View File

@@ -90,7 +90,7 @@ uint32 MySQLConnection::Open()
MYSQL* mysqlInit = mysql_init(nullptr); MYSQL* mysqlInit = mysql_init(nullptr);
if (!mysqlInit) if (!mysqlInit)
{ {
LOG_ERROR("sql.sql", "Could not initialize Mysql connection to database `{}`", m_connectionInfo.database); LOG_ERROR("sql.driver", "Could not initialize Mysql connection to database `{}`", m_connectionInfo.database);
return CR_UNKNOWN_ERROR; return CR_UNKNOWN_ERROR;
} }
@@ -170,7 +170,7 @@ uint32 MySQLConnection::Open()
} }
else else
{ {
LOG_ERROR("sql.sql", "Could not connect to MySQL database at {}: {}", m_connectionInfo.host, mysql_error(mysqlInit)); LOG_ERROR("sql.driver", "Could not connect to MySQL database at {}: {}", m_connectionInfo.host, mysql_error(mysqlInit));
uint32 errorCode = mysql_errno(mysqlInit); uint32 errorCode = mysql_errno(mysqlInit);
mysql_close(mysqlInit); mysql_close(mysqlInit);
return errorCode; return errorCode;

View File

@@ -12,11 +12,8 @@
CU_RUN_HOOK(BEFORE_SCRIPTS_LIBRARY) CU_RUN_HOOK(BEFORE_SCRIPTS_LIBRARY)
message("")
# Make the script module list available in the current scope # Make the script module list available in the current scope
GetScriptModuleList(SCRIPT_MODULE_LIST) GetScriptModuleList(SCRIPT_MODULE_LIST)
GetModuleSourceList(MODULES_MODULE_LIST)
# Make the native install offset available in this scope # Make the native install offset available in this scope
GetInstallOffset(INSTALL_OFFSET) GetInstallOffset(INSTALL_OFFSET)
@@ -33,18 +30,6 @@ else()
set(SCRIPTS_DEFAULT_LINKAGE "disabled") set(SCRIPTS_DEFAULT_LINKAGE "disabled")
endif() endif()
# Sets the MODULES_${SOURCE_MODULE} variables
# when using predefined templates for script building
# like dynamic, static
# Sets MODULES_DEFAULT_LINKAGE
if(MODULES MATCHES "dynamic")
set(MODULES_DEFAULT_LINKAGE "dynamic")
elseif(MODULES MATCHES "static")
set(MODULES_DEFAULT_LINKAGE "static")
else()
set(MODULES_DEFAULT_LINKAGE "disabled")
endif()
# Sets SCRIPTS_USE_WHITELIST # Sets SCRIPTS_USE_WHITELIST
# Sets SCRIPTS_WHITELIST # Sets SCRIPTS_WHITELIST
if(SCRIPTS MATCHES "minimal") if(SCRIPTS MATCHES "minimal")
@@ -93,8 +78,8 @@ list(SORT SCRIPT_GRAPH_KEYS)
list(REMOVE_DUPLICATES SCRIPT_GRAPH_KEYS) list(REMOVE_DUPLICATES SCRIPT_GRAPH_KEYS)
# Display the script graph # Display the script graph
message("* Script configuration (${SCRIPTS}): message("* Script configuration (${SCRIPTS}):")
|") message(" |")
foreach(SCRIPT_GRAPH_KEY ${SCRIPT_GRAPH_KEYS}) foreach(SCRIPT_GRAPH_KEY ${SCRIPT_GRAPH_KEYS})
if(NOT SCRIPT_GRAPH_KEY STREQUAL "disabled") if(NOT SCRIPT_GRAPH_KEY STREQUAL "disabled")
@@ -108,10 +93,8 @@ foreach(SCRIPT_GRAPH_KEY ${SCRIPT_GRAPH_KEYS})
message(" |") message(" |")
endforeach() endforeach()
message("")
# Base sources which are used by every script project # Base sources which are used by every script project
if(USE_SCRIPTPCH) if (USE_SCRIPTPCH)
set(PRIVATE_PCH_HEADER ScriptPCH.h) set(PRIVATE_PCH_HEADER ScriptPCH.h)
endif() endif()

View File

@@ -19,7 +19,6 @@
#define ACORE_SHAREDDEFINES_H #define ACORE_SHAREDDEFINES_H
#include "Define.h" #include "Define.h"
#include "DetourNavMesh.h"
#include "EnumFlag.h" #include "EnumFlag.h"
#include <cassert> #include <cassert>

View File

@@ -1,91 +0,0 @@
#
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
#
# 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.
#
CollectSourceFiles(
${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE_SOURCES
# Exclude
${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders)
if( WIN32 )
list(APPEND PRIVATE_SOURCES ${winDebugging} ${winService})
if ( MSVC )
list(APPEND PRIVATE_SOURCES worldserver.rc)
endif()
endif()
if (USE_COREPCH)
set(PRIVATE_PCH_HEADER PrecompiledHeaders/worldPCH.h)
endif()
# Group sources
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
add_executable(worldserver
${PRIVATE_SOURCES})
add_dependencies(worldserver revision.h)
if(UNIX AND NOT NOJEM)
set(worldserver_LINK_FLAGS "-pthread -lncurses ${worldserver_LINK_FLAGS}")
endif()
set_target_properties(worldserver PROPERTIES LINK_FLAGS "${worldserver_LINK_FLAGS}")
CollectIncludeDirectories(
${CMAKE_CURRENT_SOURCE_DIR}
PUBLIC_INCLUDES
# Exclude
${CMAKE_CURRENT_SOURCE_DIR}/PrecompiledHeaders)
target_include_directories(worldserver
PUBLIC
${PUBLIC_INCLUDES}
PRIVATE
${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries(worldserver
PRIVATE
acore-core-interface
PUBLIC
modules
scripts
game
gsoap
readline
gperftools)
set_target_properties(worldserver
PROPERTIES
FOLDER
"server")
# Add all dynamic projects as dependency to the worldserver
if(WORLDSERVER_DYNAMIC_SCRIPT_MODULES_DEPENDENCIES)
add_dependencies(worldserver ${WORLDSERVER_DYNAMIC_SCRIPT_MODULES_DEPENDENCIES})
endif()
# Install config
CopyDefaultConfig(worldserver)
if( UNIX )
install(TARGETS worldserver DESTINATION bin)
elseif( WIN32 )
install(TARGETS worldserver DESTINATION "${CMAKE_INSTALL_PREFIX}")
endif()
# Generate precompiled header
if( USE_COREPCH )
add_cxx_pch(worldserver ${PRIVATE_PCH_HEADER})
endif()
CU_RUN_HOOK("AFTER_WORLDSERVER_CMAKE")

View File

@@ -8,9 +8,155 @@
# This program is distributed in the hope that it will be useful, but # 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 # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
add_subdirectory(map_extractor) # Make the tools list available in the current scope
add_subdirectory(vmap4_assembler) GetToolsList(TOOLS_BUILD_LIST)
add_subdirectory(vmap4_extractor)
add_subdirectory(mmaps_generator) if (TOOLS_BUILD STREQUAL "none")
set(TOOLS_DEFAULT_BUILD "disabled")
else()
set(TOOLS_DEFAULT_BUILD "enabled")
endif()
# Sets BUILD_TOOLS_USE_WHITELIST
# Sets BUILD_TOOLS_WHITELIST
if (TOOLS_BUILD MATCHES "-only")
set(BUILD_TOOLS_USE_WHITELIST ON)
if (TOOLS_BUILD STREQUAL "maps-only")
list(APPEND BUILD_TOOLS_WHITELIST map_extractor mmaps_generator vmap4_assembler vmap4_extractor)
endif()
# if (TOOLS_BUILD STREQUAL "db-only")
# list(APPEND BUILD_TOOLS_WHITELIST dbimport)
# endif()
endif()
# Set the TOOL_${TOOL_BUILD_NAME} variables from the
# variables set above
foreach(TOOL_BUILD_NAME ${TOOLS_BUILD_LIST})
ToolNameToVariable(${TOOL_BUILD_NAME} TOOL_BUILD_VARIABLE)
if(${TOOL_BUILD_VARIABLE} STREQUAL "default")
if(BUILD_TOOLS_USE_WHITELIST)
list(FIND BUILD_TOOLS_WHITELIST "${TOOL_BUILD_NAME}" INDEX)
if(${INDEX} GREATER -1)
set(${TOOL_BUILD_VARIABLE} ${TOOLS_DEFAULT_BUILD})
else()
set(${TOOL_BUILD_VARIABLE} "disabled")
endif()
else()
set(${TOOL_BUILD_VARIABLE} ${TOOLS_DEFAULT_BUILD})
endif()
endif()
# Build the Graph values
if(${TOOL_BUILD_VARIABLE} MATCHES "enabled")
list(APPEND TOOL_BUILD_GRAPH_KEYS tools)
set(TOOL_BUILD_VALUE_DISPLAY_tools tools)
list(APPEND TOOL_BUILD_VALUE_CONTAINS_tools ${TOOL_BUILD_NAME})
else()
list(APPEND TOOL_BUILD_GRAPH_KEYS disabled)
set(TOOL_BUILD_VALUE_DISPLAY_disabled disabled)
list(APPEND TOOL_BUILD_VALUE_CONTAINS_disabled ${TOOL_BUILD_NAME})
endif()
endforeach()
list(SORT TOOL_BUILD_GRAPH_KEYS)
list(REMOVE_DUPLICATES TOOL_BUILD_GRAPH_KEYS)
# Display the graphs
# message("")
message("* Tools build list (${TOOLS_BUILD}):")
message(" |")
foreach(TOOL_BUILD_GRAPH_KEY ${TOOL_BUILD_GRAPH_KEYS})
if(NOT TOOL_BUILD_GRAPH_KEY STREQUAL "disabled")
message(" +- ${TOOL_BUILD_VALUE_DISPLAY_${TOOL_BUILD_GRAPH_KEY}}")
else()
message(" | ${TOOL_BUILD_VALUE_DISPLAY_${TOOL_BUILD_GRAPH_KEY}}")
endif()
foreach(TOOL_BUILD_GRAPH_ENTRY ${TOOL_BUILD_VALUE_CONTAINS_${TOOL_BUILD_GRAPH_KEY}})
message(" | +- ${TOOL_BUILD_GRAPH_ENTRY}")
endforeach()
message(" |")
endforeach()
message("")
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
# Generates the actual tools projects
foreach(TOOL_NAME ${TOOLS_BUILD_LIST})
GetPathToTool(${TOOL_NAME} SOURCE_TOOL_PATH)
ToolNameToVariable(${TOOL_NAME} TOOL_BUILD_VARIABLE)
if (${TOOL_BUILD_VARIABLE} STREQUAL "disabled")
continue()
endif()
unset(TOOL_PRIVATE_SOURCES)
CollectSourceFiles(
${SOURCE_TOOL_PATH}
TOOL_PRIVATE_SOURCES)
if (WIN32)
list(APPEND TOOL_PRIVATE_SOURCES ${winDebugging})
endif()
GetProjectNameOfToolName(${TOOL_NAME} TOOL_PROJECT_NAME)
# Create the application project
add_executable(${TOOL_PROJECT_NAME}
${TOOL_PRIVATE_SOURCES})
add_dependencies(${TOOL_PROJECT_NAME} revision.h)
# Need fix errors
# target_link_libraries(${TOOL_PROJECT_NAME}
# PRIVATE
# acore-core-interface)
# if (${TOOL_PROJECT_NAME} MATCHES "dbimport")
# target_link_libraries(${TOOL_PROJECT_NAME}
# PUBLIC
# database)
# # Install config
# CopyToolConfig(${TOOL_PROJECT_NAME} ${TOOL_NAME})
# else()
target_link_libraries(${TOOL_PROJECT_NAME}
PUBLIC
common
mpq
zlib
Recast
g3dlib)
# endif()
unset(TOOL_PUBLIC_INCLUDES)
CollectIncludeDirectories(
${SOURCE_TOOL_PATH}
TOOL_PUBLIC_INCLUDES)
target_include_directories(${TOOL_PROJECT_NAME}
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(${TOOL_PROJECT_NAME}
PUBLIC
${TOOL_PUBLIC_INCLUDES}
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/${TOOL_NAME})
set_target_properties(${TOOL_PROJECT_NAME}
PROPERTIES
FOLDER
"tools")
if (UNIX)
install(TARGETS ${TOOL_PROJECT_NAME} DESTINATION bin)
elseif (WIN32)
install(TARGETS ${TOOL_PROJECT_NAME} DESTINATION "${CMAKE_INSTALL_PREFIX}")
endif()
endforeach()

View File

@@ -1,55 +0,0 @@
#
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
#
# 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.
#
CollectSourceFiles(
${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE_SOURCES)
add_executable(mapextractor
${PRIVATE_SOURCES}
)
target_include_directories(mapextractor
PUBLIC
${CMAKE_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/loadlib)
target_link_libraries(mapextractor
PRIVATE
acore-core-interface
PUBLIC
common
mpq)
CollectIncludeDirectories(
${CMAKE_CURRENT_SOURCE_DIR}
PUBLIC_INCLUDES)
# Group sources
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(mapextractor
PUBLIC
${PUBLIC_INCLUDES}
PRIVATE
${CMAKE_CURRENT_BINARY_DIR})
set_target_properties(mapextractor
PROPERTIES
FOLDER
"tools")
if( UNIX )
install(TARGETS mapextractor DESTINATION bin)
elseif( WIN32 )
install(TARGETS mapextractor DESTINATION "${CMAKE_INSTALL_PREFIX}")
endif()

View File

@@ -1,50 +0,0 @@
#
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
#
# 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.
#
CollectSourceFiles(
${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE_SOURCES)
add_executable(mmaps_generator ${PRIVATE_SOURCES})
target_link_libraries(mmaps_generator
PRIVATE
acore-core-interface
PUBLIC
common
Recast
mpq)
# Group sources
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
CollectIncludeDirectories(
${CMAKE_CURRENT_SOURCE_DIR}
PUBLIC_INCLUDES)
target_include_directories(mmaps_generator
PUBLIC
${PUBLIC_INCLUDES}
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_SOURCE_DIR}/src/server/game/Conditions)
set_target_properties(mmaps_generator
PROPERTIES
FOLDER
"tools")
if( UNIX )
install(TARGETS mmaps_generator DESTINATION bin)
elseif( WIN32 )
install(TARGETS mmaps_generator DESTINATION "${CMAKE_INSTALL_PREFIX}")
endif()

View File

@@ -1,38 +0,0 @@
#
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
#
# 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.
#
add_executable(vmap4assembler VMapAssembler.cpp)
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
set_target_properties(vmap4assembler PROPERTIES LINK_FLAGS "-framework Carbon")
endif()
target_link_libraries(vmap4assembler
PRIVATE
acore-core-interface
PUBLIC
common
zlib)
# Group sources
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
set_target_properties(vmap4assembler
PROPERTIES
FOLDER
"tools")
if( UNIX )
install(TARGETS vmap4assembler DESTINATION bin)
elseif( WIN32 )
install(TARGETS vmap4assembler DESTINATION "${CMAKE_INSTALL_PREFIX}")
endif()

View File

@@ -1,46 +0,0 @@
#
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
#
# 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.
#
CollectSourceFiles(
${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE_SOURCES)
add_executable(vmap4extractor ${PRIVATE_SOURCES})
target_link_libraries(vmap4extractor
PUBLIC
g3dlib
mpq)
# Group sources
GroupSources(${CMAKE_CURRENT_SOURCE_DIR})
CollectIncludeDirectories(
${CMAKE_CURRENT_SOURCE_DIR}
PUBLIC_INCLUDES)
target_include_directories(vmap4extractor
PUBLIC
${PUBLIC_INCLUDES}
PRIVATE
${CMAKE_CURRENT_BINARY_DIR})
set_target_properties(vmap4extractor
PROPERTIES
FOLDER
"tools")
if( UNIX )
install(TARGETS vmap4extractor DESTINATION bin)
elseif( WIN32 )
install(TARGETS vmap4extractor DESTINATION "${CMAKE_INSTALL_PREFIX}")
endif()