mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-09 17:58:20 +00:00
eaa962f265
* added mariadb-connector-cpp submodule * raknet aarch64 support * fix compile errors * mariadb connector swap (in progress) * update CMakeLists, add preprocessor definition to switch between mysql and mariadb connectors * update types with missing aarch64 check * corrected adding extra flag to properly compile mariadbconn in CMakeLists * updated readme with arm builds section * fix build failure if test folder does not exist * Remove mysql connector from all builds, add mariadbconnector to windows build * readd Linux check for backtrace lib to CMakeLists.txt * Separate system specific mariadbconncpp extra compile flags * Copy dlls to exes directory once built * fetch prebuilt binaries on windows so that ClangCL can be used * Delay load dll so that plugin directory is set correctly * Fixed typo in glibcxx compile flag * whitespacing, spaces -> tabs * Updated README.md, included instructions to update * Updated README.md added libssl-dev requirement and removed mysql connector references from macOS builds section * apple compile fixes for zlib and shared library name * add windows arm64 checks to raknet * remove extra . in shared library location * Setup plugins directory for the connector to search in, pass openssl_root_dir on for apple * Fix copy paths for single config generators and non windows * change plugin folder location, another single config generator fix * GENERATOR_IS_MULTI_CONFIG is a property not a variable * Fixed a few errors after merge * Fix plugin directory path, force windows to look at the right folder * fixed directory name for make_directory command * Update README.md Updated MacOS, Windows build instructions. * set INSTALL_PLUGINDIR so that the right directory is used * Support for relative rpath for docker build * added mariadb-connector-cpp submodule * raknet aarch64 support * fix compile errors * mariadb connector swap (in progress) * update CMakeLists, add preprocessor definition to switch between mysql and mariadb connectors * update types with missing aarch64 check * corrected adding extra flag to properly compile mariadbconn in CMakeLists * updated readme with arm builds section * fix build failure if test folder does not exist * Remove mysql connector from all builds, add mariadbconnector to windows build * readd Linux check for backtrace lib to CMakeLists.txt * Separate system specific mariadbconncpp extra compile flags * Copy dlls to exes directory once built * fetch prebuilt binaries on windows so that ClangCL can be used * Delay load dll so that plugin directory is set correctly * Fixed typo in glibcxx compile flag * whitespacing, spaces -> tabs * Updated README.md, included instructions to update * Updated README.md added libssl-dev requirement and removed mysql connector references from macOS builds section * apple compile fixes for zlib and shared library name * add windows arm64 checks to raknet * Setup plugins directory for the connector to search in, pass openssl_root_dir on for apple * Fix copy paths for single config generators and non windows * change plugin folder location, another single config generator fix * GENERATOR_IS_MULTI_CONFIG is a property not a variable * Fixed a few errors after merge * Fix plugin directory path, force windows to look at the right folder * fixed directory name for make_directory command * Update README.md Updated MacOS, Windows build instructions. * set INSTALL_PLUGINDIR so that the right directory is used * Support for relative rpath for docker build * Rebase on main * Remove extra git submodule * Update CMakeLists.txt * Remove CMakeLists.txt file from mariadb Remove the CMakeLists.txt file from the mariaDBConnector so we dont build the tests. Also add a config option to the CMakeVariables.txt so you can build the connector with multiple jobs * Compile on windows Specify the mariadbcpp.dll file location with a defined absolute path so windows knows it actually exists. * default to 1 job Default mariadb jobs running in parallel to 1 instead of 4 * Move mariadbcpp.dll file to the expected directory on windows * Changed plugin Updated the plugin location from the project binary directory to the expected location, the mariadb binary directory. * Addressed windows dll issues by moving files to the expected directory instead of a directory that wouldnt get created * Update README Co-authored-by: Aaron Kimbrell <aronwk.aaron@gmail.com> Co-authored-by: EmosewaMC <39972741+EmosewaMC@users.noreply.github.com>
592 lines
20 KiB
CMake
592 lines
20 KiB
CMake
cmake_minimum_required(VERSION 3.14)
|
|
project(Darkflame)
|
|
include(CTest)
|
|
|
|
# Read variables from file
|
|
FILE(READ "${CMAKE_SOURCE_DIR}/CMakeVariables.txt" variables)
|
|
|
|
string(REPLACE "\\\n" "" variables ${variables})
|
|
string(REPLACE "\n" ";" variables ${variables})
|
|
|
|
# Set the cmake variables, formatted as "VARIABLE #" in variables
|
|
foreach(variable ${variables})
|
|
# If the string contains a #, skip it
|
|
if("${variable}" MATCHES "#")
|
|
continue()
|
|
endif()
|
|
|
|
# Split the variable into name and value
|
|
string(REPLACE "=" ";" variable ${variable})
|
|
|
|
# Check that the length of the variable is 2 (name and value)
|
|
list(LENGTH variable length)
|
|
if(NOT ${length} EQUAL 2)
|
|
continue()
|
|
endif()
|
|
|
|
list(GET variable 0 variable_name)
|
|
list(GET variable 1 variable_value)
|
|
|
|
# Set the variable
|
|
set(${variable_name} ${variable_value})
|
|
|
|
# Add compiler definition
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${variable_name}=${variable_value}")
|
|
|
|
message(STATUS "Variable: ${variable_name} = ${variable_value}")
|
|
endforeach()
|
|
|
|
# On windows it's better to build this from source, as there's no way FindZLIB is gonna find it
|
|
if(NOT WIN32)
|
|
find_package(ZLIB REQUIRED)
|
|
endif()
|
|
|
|
# Fetch External (Non-Submodule) Libraries
|
|
if(WIN32)
|
|
include(FetchContent)
|
|
|
|
FetchContent_Declare(
|
|
zlib
|
|
URL https://github.com/madler/zlib/archive/refs/tags/v1.2.11.zip
|
|
URL_HASH MD5=9d6a627693163bbbf3f26403a3a0b0b1
|
|
)
|
|
|
|
FetchContent_MakeAvailable(zlib)
|
|
|
|
set(ZLIB_INCLUDE_DIRS ${zlib_SOURCE_DIR} ${zlib_BINARY_DIR})
|
|
set_target_properties(zlib PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}") # Why?
|
|
add_library(ZLIB::ZLIB ALIAS zlib) # You're welcome
|
|
|
|
endif(WIN32)
|
|
|
|
if(UNIX AND NOT APPLE)
|
|
include(FetchContent)
|
|
if (__include_backtrace__ AND __compile_backtrace__)
|
|
FetchContent_Declare(
|
|
backtrace
|
|
GIT_REPOSITORY https://github.com/ianlancetaylor/libbacktrace.git
|
|
)
|
|
|
|
FetchContent_MakeAvailable(backtrace)
|
|
|
|
if (NOT EXISTS ${backtrace_SOURCE_DIR}/.libs)
|
|
set(backtrace_make_cmd "${backtrace_SOURCE_DIR}/configure --prefix=\"/usr\" --enable-shared --with-system-libunwind")
|
|
|
|
execute_process(
|
|
COMMAND bash -c "cd ${backtrace_SOURCE_DIR} && ${backtrace_make_cmd} && make && cd ${CMAKE_SOURCE_DIR}"
|
|
)
|
|
endif()
|
|
|
|
link_directories(${backtrace_SOURCE_DIR}/.libs/)
|
|
include_directories(${backtrace_SOURCE_DIR})
|
|
endif(__include_backtrace__)
|
|
endif()
|
|
|
|
# Set the version
|
|
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPROJECT_VERSION=${PROJECT_VERSION}")
|
|
|
|
# Echo the version
|
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
if(WIN32)
|
|
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
|
endif(WIN32)
|
|
|
|
# Our output dir
|
|
set(CMAKE_BINARY_DIR ${PROJECT_BINARY_DIR})
|
|
|
|
# Create a /res directory
|
|
make_directory(${CMAKE_BINARY_DIR}/res)
|
|
|
|
# Create a /locale directory
|
|
make_directory(${CMAKE_BINARY_DIR}/locale)
|
|
|
|
# Create a /logs directory
|
|
make_directory(${CMAKE_BINARY_DIR}/logs)
|
|
|
|
# Copy ini files on first build
|
|
if (NOT EXISTS ${PROJECT_BINARY_DIR}/authconfig.ini)
|
|
configure_file(
|
|
${CMAKE_SOURCE_DIR}/resources/authconfig.ini ${PROJECT_BINARY_DIR}/authconfig.ini
|
|
COPYONLY
|
|
)
|
|
endif()
|
|
if (NOT EXISTS ${PROJECT_BINARY_DIR}/chatconfig.ini)
|
|
configure_file(
|
|
${CMAKE_SOURCE_DIR}/resources/chatconfig.ini ${PROJECT_BINARY_DIR}/chatconfig.ini
|
|
COPYONLY
|
|
)
|
|
endif()
|
|
if (NOT EXISTS ${PROJECT_BINARY_DIR}/worldconfig.ini)
|
|
configure_file(
|
|
${CMAKE_SOURCE_DIR}/resources/worldconfig.ini ${PROJECT_BINARY_DIR}/worldconfig.ini
|
|
COPYONLY
|
|
)
|
|
endif()
|
|
if (NOT EXISTS ${PROJECT_BINARY_DIR}/masterconfig.ini)
|
|
configure_file(
|
|
${CMAKE_SOURCE_DIR}/resources/masterconfig.ini ${PROJECT_BINARY_DIR}/masterconfig.ini
|
|
COPYONLY
|
|
)
|
|
endif()
|
|
|
|
# Copy files to output
|
|
configure_file("${CMAKE_SOURCE_DIR}/vanity/CREDITS.md" "${CMAKE_BINARY_DIR}/vanity/CREDITS.md" COPYONLY)
|
|
configure_file("${CMAKE_SOURCE_DIR}/vanity/INFO.md" "${CMAKE_BINARY_DIR}/vanity/INFO.md" COPYONLY)
|
|
configure_file("${CMAKE_SOURCE_DIR}/vanity/TESTAMENT.md" "${CMAKE_BINARY_DIR}/vanity/TESTAMENT.md" COPYONLY)
|
|
configure_file("${CMAKE_SOURCE_DIR}/vanity/NPC.xml" "${CMAKE_BINARY_DIR}/vanity/NPC.xml" COPYONLY)
|
|
|
|
# 3rdparty includes
|
|
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/raknet/Source/)
|
|
if(APPLE)
|
|
include_directories(/usr/local/include/)
|
|
endif(APPLE)
|
|
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/tinyxml2/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/recastnavigation/Recast/Include)
|
|
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/recastnavigation/Detour/Include)
|
|
include_directories(${ZLIB_INCLUDE_DIRS})
|
|
|
|
# Bcrypt
|
|
if (NOT WIN32)
|
|
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/libbcrypt)
|
|
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/libbcrypt/include/bcrypt)
|
|
else ()
|
|
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/libbcrypt/include)
|
|
endif ()
|
|
|
|
# Our includes
|
|
include_directories(${PROJECT_BINARY_DIR})
|
|
include_directories(${PROJECT_SOURCE_DIR}/dChatFilter/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dCommon/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dGame/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dGame/dBehaviors)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dGame/dComponents)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dGame/dGameMessages)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dGame/dInventory)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dGame/dMission)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dGame/dEntity)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dGame/dUtilities)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dPhysics/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dZoneManager/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dDatabase/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dDatabase/Tables/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/SQLite/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/thirdparty/cpplinq/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dNet/)
|
|
include_directories(${PROJECT_SOURCE_DIR}/dScripts/)
|
|
|
|
# Lib folders:
|
|
link_directories(${PROJECT_BINARY_DIR})
|
|
|
|
# Source Code
|
|
file(
|
|
GLOB SOURCES
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dWorldServer/*.cpp
|
|
)
|
|
|
|
# Source Code for AuthServer
|
|
file(
|
|
GLOB SOURCES_AUTH
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dAuthServer/*.cpp
|
|
)
|
|
|
|
# Source Code for MasterServer
|
|
file(
|
|
GLOB SOURCES_MASTER
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dMasterServer/*.cpp
|
|
)
|
|
|
|
# Source Code for ChatServer
|
|
file(
|
|
GLOB SOURCES_CHAT
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dChatServer/*.cpp
|
|
)
|
|
|
|
# Source Code for raknet
|
|
file(
|
|
GLOB SOURCES_RAKNET
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/thirdparty/raknet/Source/*.cpp
|
|
)
|
|
|
|
# Source Code for recast
|
|
file(
|
|
GLOB SOURCES_RECAST
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/thirdparty/recastnavigation/Recast/Source/*.cpp
|
|
)
|
|
|
|
# Source Code for detour
|
|
file(
|
|
GLOB SOURCES_DETOUR
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/thirdparty/recastnavigation/Detour/Source/*.cpp
|
|
)
|
|
|
|
# Source Code for tinyxml2
|
|
file(
|
|
GLOB SOURCES_TINYXML2
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/thirdparty/tinyxml2/tinyxml2.cpp
|
|
)
|
|
|
|
# Source Code for libbcrypt
|
|
file(
|
|
GLOB SOURCES_LIBBCRYPT
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/thirdparty/libbcrypt/*.c
|
|
${PROJECT_SOURCE_DIR}/thirdparty/libbcrypt/src/*.c
|
|
)
|
|
|
|
# Source Code for dCommon
|
|
file(
|
|
GLOB SOURCES_DCOMMON
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dCommon/*.cpp
|
|
)
|
|
|
|
# Source Code for dChatFilter
|
|
file(
|
|
GLOB SOURCES_DCHATFILTER
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dChatFilter/*.cpp
|
|
)
|
|
|
|
# Source Code for dDatabase
|
|
file(
|
|
GLOB SOURCES_DDATABASE
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dDatabase/*.cpp
|
|
${PROJECT_SOURCE_DIR}/dDatabase/Tables/*.cpp
|
|
${PROJECT_SOURCE_DIR}/thirdparty/SQLite/*.cpp
|
|
${PROJECT_SOURCE_DIR}/thirdparty/SQLite/*.c
|
|
)
|
|
|
|
# Source Code for dNet
|
|
file(
|
|
GLOB SOURCES_DNET
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dNet/*.cpp
|
|
)
|
|
|
|
# Source Code for dGame
|
|
file(
|
|
GLOB SOURCES_DGAME
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dGame/*.cpp
|
|
${PROJECT_SOURCE_DIR}/dGame/dBehaviors/*.cpp
|
|
${PROJECT_SOURCE_DIR}/dGame/dComponents/*.cpp
|
|
${PROJECT_SOURCE_DIR}/dGame/dGameMessages/*.cpp
|
|
${PROJECT_SOURCE_DIR}/dGame/dInventory/*.cpp
|
|
${PROJECT_SOURCE_DIR}/dGame/dMission/*.cpp
|
|
${PROJECT_SOURCE_DIR}/dGame/dEntity/*.cpp
|
|
${PROJECT_SOURCE_DIR}/dGame/dUtilities/*.cpp
|
|
${PROJECT_SOURCE_DIR}/dScripts/*.cpp
|
|
)
|
|
|
|
# Source Code for dZoneManager
|
|
file(
|
|
GLOB SOURCES_DZM
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dZoneManager/*.cpp
|
|
)
|
|
|
|
# Source Code for dPhysics
|
|
file(
|
|
GLOB SOURCES_DPHYSICS
|
|
LIST_DIRECTORIES false
|
|
RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
${PROJECT_SOURCE_DIR}/dPhysics/*.cpp
|
|
)
|
|
|
|
if(MSVC)
|
|
# Skip warning for invalid conversion from size_t to uint32_t for all targets below for now
|
|
add_compile_options("/wd4267")
|
|
endif(MSVC)
|
|
|
|
# mariadb connector cpp
|
|
# On Windows ClangCL can't compile the connector from source but can link to an msvc compiled one,
|
|
# so prefer the prebuilt binaries unless MARIADB_BUILD_SOURCE is specified
|
|
if(WIN32 AND NOT MARIADB_BUILD_SOURCE)
|
|
set(MARIADB_MSI_DIR "${PROJECT_BINARY_DIR}/msi")
|
|
set(MARIADB_CONNECTOR_DIR "${PROJECT_BINARY_DIR}/mariadbcpp")
|
|
set(MARIADB_C_CONNECTOR_DIR "${MARIADB_CONNECTOR_DIR}/MariaDB/MariaDB Connector C 64-bit")
|
|
set(MARIADB_CPP_CONNECTOR_DIR "${MARIADB_CONNECTOR_DIR}/MariaDB/MariaDB C++ Connector 64-bit")
|
|
|
|
file(MAKE_DIRECTORY "${MARIADB_MSI_DIR}")
|
|
file(MAKE_DIRECTORY "${MARIADB_CONNECTOR_DIR}")
|
|
|
|
if(NOT EXISTS "${MARIADB_MSI_DIR}/mariadb-connector-c-3.2.5-win64.msi" )
|
|
message("Downloading mariadb connector/c")
|
|
file(DOWNLOAD https://dlm.mariadb.com/1936366/connectors/c/connector-c-3.2.5/mariadb-connector-c-3.2.5-win64.msi
|
|
"${MARIADB_MSI_DIR}/mariadb-connector-c-3.2.5-win64.msi"
|
|
EXPECTED_HASH MD5=09d418c290109068a5bea136dafca36b)
|
|
endif()
|
|
|
|
if(NOT EXISTS "${MARIADB_MSI_DIR}/mariadb-connector-cpp-1.0.1-win64.msi" )
|
|
message("Downloading mariadb connector/c++")
|
|
file(DOWNLOAD https://dlm.mariadb.com/1683453/connectors/cpp/connector-cpp-1.0.1/mariadb-connector-cpp-1.0.1-win64.msi
|
|
"${MARIADB_MSI_DIR}/mariadb-connector-cpp-1.0.1-win64.msi"
|
|
EXPECTED_HASH MD5=548e743fbf067d21d42b81d958bf4ed7)
|
|
endif()
|
|
|
|
|
|
file(TO_NATIVE_PATH "${MARIADB_CONNECTOR_DIR}" MSIEXEC_TARGETDIR)
|
|
# extract msi files without installing to users system
|
|
if(NOT EXISTS "${MARIADB_C_CONNECTOR_DIR}")
|
|
file(TO_NATIVE_PATH "${MARIADB_MSI_DIR}/mariadb-connector-c-3.2.5-win64.msi" MSI_DIR)
|
|
execute_process(COMMAND msiexec /a ${MSI_DIR} /qn TARGETDIR=${MSIEXEC_TARGETDIR})
|
|
endif()
|
|
|
|
if(NOT EXISTS "${MARIADB_CPP_CONNECTOR_DIR}")
|
|
file(TO_NATIVE_PATH "${MARIADB_MSI_DIR}/mariadb-connector-cpp-1.0.1-win64.msi" MSI_DIR)
|
|
execute_process(COMMAND msiexec /a ${MSI_DIR} /qn TARGETDIR=${MSIEXEC_TARGETDIR})
|
|
endif()
|
|
|
|
set(MARIADB_SHARED_LIBRARY_LOCATION "${MARIADB_CPP_CONNECTOR_DIR}/mariadbcpp.dll")
|
|
set(MARIADB_IMPLIB_LOCATION "${MARIADB_CPP_CONNECTOR_DIR}/mariadbcpp.lib")
|
|
set(MARIADB_INCLUDE_DIR "${MARIADB_CPP_CONNECTOR_DIR}/include/mariadb")
|
|
|
|
add_custom_target(mariadb_connector_cpp)
|
|
add_custom_command(TARGET mariadb_connector_cpp POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${MARIADB_CPP_CONNECTOR_DIR}/mariadbcpp.dll"
|
|
"${MARIADB_C_CONNECTOR_DIR}/lib/libmariadb.dll"
|
|
"${PROJECT_BINARY_DIR}")
|
|
|
|
# MariaDB uses plugins that the database needs to load, the prebuilt binaries by default will try to find the libraries in system directories,
|
|
# so set this define and the servers will set the MARIADB_PLUGIN_DIR environment variable to the appropriate directory.
|
|
# Plugin directory is determined at dll load time (this will happen before main()) so we need to delay the dll load so that we can set the environment variable
|
|
add_link_options(/DELAYLOAD:${MARIADB_SHARED_LIBRARY_LOCATION})
|
|
add_compile_definitions(MARIADB_PLUGIN_DIR_OVERRIDE="${MARIADB_CPP_CONNECTOR_DIR}/plugin")
|
|
else() # Build from source
|
|
|
|
include(ExternalProject)
|
|
if(WIN32)
|
|
set(MARIADB_EXTRA_COMPILE_FLAGS /EHsc)
|
|
set(MARIADB_EXTRA_CMAKE_ARGS -DWITH_MSI=OFF)
|
|
elseif(APPLE)
|
|
set(MARIADB_EXTRA_COMPILE_FLAGS -D_GLIBCXX_USE_CXX11_ABI=0)
|
|
set(MARIADB_EXTRA_CMAKE_ARGS -DWITH_EXTERNAL_ZLIB=ON -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR})
|
|
else()
|
|
set(MARIADB_EXTRA_COMPILE_FLAGS -D_GLIBCXX_USE_CXX11_ABI=0)
|
|
endif()
|
|
|
|
ExternalProject_Add(mariadb_connector_cpp
|
|
SOURCE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/mariadb-connector-cpp
|
|
CMAKE_ARGS "-DCMAKE_CXX_FLAGS:STRING= ${MARIADB_EXTRA_COMPILE_FLAGS}"
|
|
-DCMAKE_BUILD_RPATH_USE_ORIGIN=${CMAKE_BUILD_RPATH_USE_ORIGIN}
|
|
-DCMAKE_INSTALL_PREFIX=./mariadbcpp # Points the connector to the correct plugin directory
|
|
-DINSTALL_PLUGINDIR=plugin
|
|
${MARIADB_EXTRA_CMAKE_ARGS}
|
|
PREFIX "${PROJECT_BINARY_DIR}/mariadbcpp"
|
|
BUILD_COMMAND cmake --build . --config RelWithDebInfo -j${__maria_db_connector_compile_jobs__}
|
|
INSTALL_COMMAND "")
|
|
|
|
ExternalProject_Get_Property(mariadb_connector_cpp BINARY_DIR)
|
|
|
|
if(WIN32)
|
|
set(MARIADB_SHARED_LIBRARY_NAME mariadbcpp.dll)
|
|
set(MARIADB_PLUGIN_SUFFIX .dll)
|
|
set(MARIADB_IMPLIB_LOCATION "${BINARY_DIR}/RelWithDebInfo/mariadbcpp.lib")
|
|
|
|
# When built from source windows only seems to check same folder as exe instead specified folder, so use
|
|
# environment variable to force it
|
|
add_link_options(/DELAYLOAD:mariadbcpp.dll)
|
|
add_compile_definitions(MARIADB_PLUGIN_DIR_OVERRIDE="${PROJECT_BINARY_DIR}/mariadbcpp/plugin")
|
|
else()
|
|
set(MARIADB_SHARED_LIBRARY_NAME libmariadbcpp${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
set(MARIADB_PLUGIN_SUFFIX .so)
|
|
endif()
|
|
|
|
get_property(isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
|
if(isMultiConfig)
|
|
set(MARIADB_SHARED_LIBRARY_LOCATION "${BINARY_DIR}/RelWithDebInfo/${MARIADB_SHARED_LIBRARY_NAME}")
|
|
set(MARIADB_SHARED_LIBRARY_COPY_LOCATION "${PROJECT_BINARY_DIR}/$<CONFIG>")
|
|
set(MARIADB_PLUGINS_LOCATION "${BINARY_DIR}/libmariadb/RelWithDebInfo")
|
|
else()
|
|
set(MARIADB_SHARED_LIBRARY_LOCATION "${BINARY_DIR}/${MARIADB_SHARED_LIBRARY_NAME}")
|
|
set(MARIADB_SHARED_LIBRARY_COPY_LOCATION "${PROJECT_BINARY_DIR}")
|
|
set(MARIADB_PLUGINS_LOCATION "${BINARY_DIR}/libmariadb")
|
|
endif()
|
|
|
|
set(MARIADB_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/thirdparty/mariadb-connector-cpp/include/")
|
|
|
|
add_custom_command(TARGET mariadb_connector_cpp POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory
|
|
${BINARY_DIR}/mariadbcpp/plugin
|
|
${MARIADB_SHARED_LIBRARY_COPY_LOCATION}
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
${MARIADB_SHARED_LIBRARY_LOCATION}
|
|
${MARIADB_SHARED_LIBRARY_COPY_LOCATION}
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
${MARIADB_PLUGINS_LOCATION}/caching_sha2_password${MARIADB_PLUGIN_SUFFIX}
|
|
${MARIADB_PLUGINS_LOCATION}/client_ed25519${MARIADB_PLUGIN_SUFFIX}
|
|
${MARIADB_PLUGINS_LOCATION}/dialog${MARIADB_PLUGIN_SUFFIX}
|
|
${MARIADB_PLUGINS_LOCATION}/mysql_clear_password${MARIADB_PLUGIN_SUFFIX}
|
|
${MARIADB_PLUGINS_LOCATION}/sha256_password${MARIADB_PLUGIN_SUFFIX}
|
|
${BINARY_DIR}/mariadbcpp/plugin)
|
|
endif()
|
|
|
|
# Remove the CMakeLists.txt file from the tests folder for the maria-db-connector so we dont compile the tests.
|
|
if(EXISTS "${CMAKE_SOURCE_DIR}/thirdparty/mariadb-connector-cpp/test/CMakeLists.txt")
|
|
file(REMOVE "${CMAKE_SOURCE_DIR}/thirdparty/mariadb-connector-cpp/test/CMakeLists.txt")
|
|
endif()
|
|
|
|
add_library (mariadbConnCpp SHARED IMPORTED)
|
|
set_property(TARGET mariadbConnCpp PROPERTY IMPORTED_LOCATION ${MARIADB_SHARED_LIBRARY_LOCATION})
|
|
if(WIN32)
|
|
set_property(TARGET mariadbConnCpp PROPERTY IMPORTED_IMPLIB ${MARIADB_IMPLIB_LOCATION})
|
|
endif()
|
|
target_include_directories(mariadbConnCpp INTERFACE ${MARIADB_INCLUDE_DIR})
|
|
add_dependencies(mariadbConnCpp mariadb_connector_cpp)
|
|
|
|
# 3rdparty static libraries:
|
|
#add_library(zlib ${SOURCES_ZLIB})
|
|
add_library(raknet ${SOURCES_RAKNET})
|
|
add_library(tinyxml2 ${SOURCES_TINYXML2})
|
|
add_library(detour ${SOURCES_DETOUR})
|
|
add_library(recast ${SOURCES_RECAST})
|
|
add_library(libbcrypt ${SOURCES_LIBBCRYPT})
|
|
|
|
# Our static libraries:
|
|
add_library(dCommon ${SOURCES_DCOMMON})
|
|
add_library(dChatFilter ${SOURCES_DCHATFILTER})
|
|
add_library(dDatabase ${SOURCES_DDATABASE})
|
|
add_library(dNet ${SOURCES_DNET})
|
|
add_library(dGame ${SOURCES_DGAME})
|
|
add_library(dZoneManager ${SOURCES_DZM})
|
|
add_library(dPhysics ${SOURCES_DPHYSICS})
|
|
target_link_libraries(dNet dCommon) #Needed because otherwise linker errors occur.
|
|
target_link_libraries(dCommon ZLIB::ZLIB)
|
|
target_link_libraries(dCommon libbcrypt)
|
|
target_link_libraries(dDatabase mariadbConnCpp)
|
|
target_link_libraries(dNet dDatabase)
|
|
target_link_libraries(dGame dDatabase)
|
|
target_link_libraries(dChatFilter dDatabase)
|
|
|
|
if(WIN32)
|
|
target_link_libraries(raknet ws2_32)
|
|
endif(WIN32)
|
|
|
|
# Our executables:
|
|
add_executable(WorldServer ${SOURCES})
|
|
add_executable(AuthServer ${SOURCES_AUTH})
|
|
add_executable(MasterServer ${SOURCES_MASTER})
|
|
add_executable(ChatServer ${SOURCES_CHAT})
|
|
|
|
# Target libraries to link to:
|
|
target_link_libraries(WorldServer dCommon)
|
|
target_link_libraries(WorldServer dChatFilter)
|
|
target_link_libraries(WorldServer dDatabase)
|
|
target_link_libraries(WorldServer dNet)
|
|
target_link_libraries(WorldServer dGame)
|
|
target_link_libraries(WorldServer dZoneManager)
|
|
target_link_libraries(WorldServer dPhysics)
|
|
target_link_libraries(WorldServer detour)
|
|
target_link_libraries(WorldServer recast)
|
|
target_link_libraries(WorldServer raknet)
|
|
target_link_libraries(WorldServer mariadbConnCpp)
|
|
if(UNIX)
|
|
target_link_libraries(WorldServer pthread)
|
|
target_link_libraries(WorldServer dl)
|
|
|
|
if(NOT APPLE AND __include_backtrace__)
|
|
target_link_libraries(WorldServer backtrace)
|
|
target_link_libraries(MasterServer backtrace)
|
|
target_link_libraries(AuthServer backtrace)
|
|
target_link_libraries(ChatServer backtrace)
|
|
endif()
|
|
|
|
endif(UNIX)
|
|
target_link_libraries(WorldServer tinyxml2)
|
|
|
|
# Target libraries for Auth:
|
|
target_link_libraries(AuthServer dCommon)
|
|
target_link_libraries(AuthServer dDatabase)
|
|
target_link_libraries(AuthServer dNet)
|
|
target_link_libraries(AuthServer raknet)
|
|
target_link_libraries(AuthServer mariadbConnCpp)
|
|
if(UNIX)
|
|
target_link_libraries(AuthServer pthread)
|
|
target_link_libraries(AuthServer dl)
|
|
endif(UNIX)
|
|
|
|
# Target libraries for Master:
|
|
target_link_libraries(MasterServer dCommon)
|
|
target_link_libraries(MasterServer dDatabase)
|
|
target_link_libraries(MasterServer dNet)
|
|
target_link_libraries(MasterServer raknet)
|
|
target_link_libraries(MasterServer mariadbConnCpp)
|
|
if(UNIX)
|
|
target_link_libraries(MasterServer pthread)
|
|
target_link_libraries(MasterServer dl)
|
|
endif(UNIX)
|
|
|
|
# Target libraries for Chat:
|
|
target_link_libraries(ChatServer dCommon)
|
|
target_link_libraries(ChatServer dChatFilter)
|
|
target_link_libraries(ChatServer dDatabase)
|
|
target_link_libraries(ChatServer dNet)
|
|
target_link_libraries(ChatServer raknet)
|
|
target_link_libraries(ChatServer mariadbConnCpp)
|
|
if(UNIX)
|
|
target_link_libraries(ChatServer pthread)
|
|
target_link_libraries(ChatServer dl)
|
|
endif(UNIX)
|
|
|
|
# Compiler flags:
|
|
# Disabled deprecated warnings as the MySQL includes have deprecated code in them.
|
|
# Disabled misleading indentation as DL_LinkedList from RakNet has a weird indent.
|
|
# Disabled no-register
|
|
# Disabled unknown pragmas because Linux doesn't understand Windows pragmas.
|
|
if(UNIX)
|
|
if(APPLE)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++17 -O2 -Wuninitialized -Wno-unused-result -Wno-unknown-pragmas -fpermissive -D_GLIBCXX_USE_CXX11_ABI=0 -D_GLIBCXX_USE_CXX17_ABI=0 -fPIC")
|
|
else()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++17 -O2 -Wuninitialized -Wno-unused-result -Wno-unknown-pragmas -fpermissive -D_GLIBCXX_USE_CXX11_ABI=0 -D_GLIBCXX_USE_CXX17_ABI=0 -static-libgcc -fPIC")
|
|
endif()
|
|
if (__dynamic)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic")
|
|
endif()
|
|
if (__ggdb)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb")
|
|
endif()
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -O2 -fPIC")
|
|
endif(UNIX)
|
|
|
|
if(WIN32)
|
|
add_dependencies(MasterServer WorldServer)
|
|
add_dependencies(MasterServer AuthServer)
|
|
add_dependencies(MasterServer ChatServer)
|
|
endif()
|
|
|
|
# Finally, add the tests
|
|
add_subdirectory(tests)
|
|
|