mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-19 03:45:43 +00:00
feat(Core/Modules): add separated lib for modules (#9281)
This commit is contained in:
@@ -53,26 +53,6 @@ if(SCRIPTS MATCHES "minimal")
|
||||
list(APPEND SCRIPTS_WHITELIST Commands Spells)
|
||||
endif()
|
||||
|
||||
# Add support old api modules
|
||||
CU_GET_GLOBAL("AC_ADD_SCRIPTS_LIST")
|
||||
CU_GET_GLOBAL("AC_ADD_SCRIPTS_INCLUDE")
|
||||
|
||||
set("AC_SCRIPTS_INCLUDES" "")
|
||||
set("AC_MODULE_LIST" "")
|
||||
set("AC_SCRIPTS_LIST" "")
|
||||
|
||||
foreach(include ${AC_ADD_SCRIPTS_INCLUDE})
|
||||
set("AC_SCRIPTS_INCLUDES" "#include \"${include}\"\n${AC_SCRIPTS_INCLUDES}")
|
||||
endforeach()
|
||||
|
||||
foreach(void ${AC_ADD_SCRIPTS_LIST})
|
||||
set("AC_MODULE_LIST" "void ${void};\n${AC_MODULE_LIST}")
|
||||
endforeach()
|
||||
|
||||
foreach(scriptName ${AC_ADD_SCRIPTS_LIST})
|
||||
set("AC_SCRIPTS_LIST" " ${scriptName};\n${AC_SCRIPTS_LIST}")
|
||||
endforeach()
|
||||
|
||||
# Set the SCRIPTS_${SCRIPT_MODULE} variables from the
|
||||
# variables set above
|
||||
foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST})
|
||||
@@ -109,47 +89,8 @@ foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Set the MODULES_${SOURCE_MODULE} variables from the
|
||||
# variables set above
|
||||
foreach(SOURCE_MODULE ${MODULES_MODULE_LIST})
|
||||
ModuleNameToVariable(${SOURCE_MODULE} MODULE_MODULE_VARIABLE)
|
||||
|
||||
if(${MODULE_MODULE_VARIABLE} STREQUAL "default")
|
||||
set(${MODULE_MODULE_VARIABLE} ${MODULES_DEFAULT_LINKAGE})
|
||||
endif()
|
||||
|
||||
# Use only static for deprecated api loaders
|
||||
if (AC_SCRIPTS_INCLUDES MATCHES "${SOURCE_MODULE}")
|
||||
set(${MODULE_MODULE_VARIABLE} "static")
|
||||
endif()
|
||||
|
||||
# Use only static for mod-eluna-lua-engine
|
||||
if (SOURCE_MODULE MATCHES "mod-eluna-lua-engine")
|
||||
set(${MODULE_MODULE_VARIABLE} "static")
|
||||
endif()
|
||||
|
||||
# Build the Graph values
|
||||
if(${MODULE_MODULE_VARIABLE} MATCHES "dynamic")
|
||||
GetProjectNameOfModuleName(${SOURCE_MODULE} MODULE_SOURCE_PROJECT_NAME)
|
||||
GetNativeSharedLibraryName(${MODULE_SOURCE_PROJECT_NAME} MODULE_PROJECT_LIBRARY)
|
||||
list(APPEND MODULE_GRAPH_KEYS ${MODULE_SOURCE_PROJECT_NAME})
|
||||
set(MODULE_GRAPH_VALUE_DISPLAY_${MODULE_SOURCE_PROJECT_NAME} ${MODULE_PROJECT_LIBRARY})
|
||||
list(APPEND MODULE_GRAPH_VALUE_CONTAINS_MODULES_${MODULE_SOURCE_PROJECT_NAME} ${SOURCE_MODULE})
|
||||
elseif(${MODULE_MODULE_VARIABLE} MATCHES "static")
|
||||
list(APPEND MODULE_GRAPH_KEYS worldserver)
|
||||
set(MODULE_GRAPH_VALUE_DISPLAY_worldserver worldserver)
|
||||
list(APPEND MODULE_GRAPH_VALUE_CONTAINS_MODULES_worldserver ${SOURCE_MODULE})
|
||||
else()
|
||||
list(APPEND MODULE_GRAPH_KEYS disabled)
|
||||
set(MODULE_GRAPH_VALUE_DISPLAY_disabled disabled)
|
||||
list(APPEND MODULE_GRAPH_VALUE_CONTAINS_MODULES_disabled ${SOURCE_MODULE})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
list(SORT SCRIPT_GRAPH_KEYS)
|
||||
list(SORT MODULE_GRAPH_KEYS)
|
||||
list(REMOVE_DUPLICATES SCRIPT_GRAPH_KEYS)
|
||||
list(REMOVE_DUPLICATES MODULE_GRAPH_KEYS)
|
||||
|
||||
# Display the script graph
|
||||
message("* Script configuration (${SCRIPTS}):
|
||||
@@ -169,24 +110,6 @@ endforeach()
|
||||
|
||||
message("")
|
||||
|
||||
# Display the module graph
|
||||
message("* Modules configuration (${MODULES}):
|
||||
|")
|
||||
|
||||
foreach(MODULE_GRAPH_KEY ${MODULE_GRAPH_KEYS})
|
||||
if(NOT MODULE_GRAPH_KEY STREQUAL "disabled")
|
||||
message(" +- ${MODULE_GRAPH_VALUE_DISPLAY_${MODULE_GRAPH_KEY}}")
|
||||
else()
|
||||
message(" | ${MODULE_GRAPH_VALUE_DISPLAY_${MODULE_GRAPH_KEY}}")
|
||||
endif()
|
||||
foreach(MODULE_GRAPH_PROJECT_ENTRY ${MODULE_GRAPH_VALUE_CONTAINS_MODULES_${MODULE_GRAPH_KEY}})
|
||||
message(" | +- ${MODULE_GRAPH_PROJECT_ENTRY}")
|
||||
endforeach()
|
||||
message(" |")
|
||||
endforeach()
|
||||
|
||||
message("")
|
||||
|
||||
# Base sources which are used by every script project
|
||||
if(USE_SCRIPTPCH)
|
||||
set(PRIVATE_PCH_HEADER ScriptPCH.h)
|
||||
@@ -310,98 +233,6 @@ foreach(SCRIPT_MODULE ${SCRIPT_MODULE_LIST})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Generates the actual module projects
|
||||
# Fills the STATIC_SCRIPT_MODULES and DYNAMIC_SCRIPT_MODULE_PROJECTS variables
|
||||
# which contain the names which scripts are linked statically/dynamically and
|
||||
# adds the sources of the static modules to the PRIVATE_SOURCES_MODULES variable.
|
||||
foreach(SOURCE_MODULE ${MODULES_MODULE_LIST})
|
||||
GetPathToModuleSource(${SOURCE_MODULE} MODULE_SOURCE_PATH)
|
||||
ModuleNameToVariable(${SOURCE_MODULE} MODULE_MODULE_VARIABLE)
|
||||
|
||||
if((${MODULE_MODULE_VARIABLE} STREQUAL "disabled") OR
|
||||
(${MODULE_MODULE_VARIABLE} STREQUAL "static"))
|
||||
|
||||
# Uninstall disabled modules
|
||||
GetProjectNameOfModuleName(${SOURCE_MODULE} MODULE_SOURCE_PROJECT_NAME)
|
||||
GetNativeSharedLibraryName(${MODULE_SOURCE_PROJECT_NAME} SCRIPT_MODULE_OUTPUT_NAME)
|
||||
list(APPEND DISABLED_SCRIPT_MODULE_PROJECTS ${INSTALL_OFFSET}/${SCRIPT_MODULE_OUTPUT_NAME})
|
||||
if(${MODULE_MODULE_VARIABLE} STREQUAL "static")
|
||||
|
||||
# Add the module content to the whole static module
|
||||
CollectSourceFiles(${MODULE_SOURCE_PATH} PRIVATE_SOURCES_MODULES)
|
||||
CollectIncludeDirectories(${MODULE_SOURCE_PATH} PUBLIC_INCLUDES)
|
||||
|
||||
# Skip deprecated api loaders
|
||||
if (AC_SCRIPTS_INCLUDES MATCHES "${SOURCE_MODULE}")
|
||||
message("> Module (${SOURCE_MODULE}) using deprecated loader api")
|
||||
continue()
|
||||
endif()
|
||||
|
||||
# Skip mod-eluna-lua-engine
|
||||
if (SOURCE_MODULE MATCHES "mod-eluna-lua-engine")
|
||||
continue()
|
||||
endif()
|
||||
|
||||
# Add the module name to STATIC_SCRIPT_MODULES
|
||||
list(APPEND STATIC_SCRIPT_MODULES ${SOURCE_MODULE})
|
||||
|
||||
endif()
|
||||
elseif(${MODULE_MODULE_VARIABLE} STREQUAL "dynamic")
|
||||
|
||||
# Generate an own dynamic module which is loadable on runtime
|
||||
# Add the module content to the whole static module
|
||||
unset(MODULE_SOURCE_PRIVATE_SOURCES)
|
||||
CollectSourceFiles(${MODULE_SOURCE_PATH} MODULE_SOURCE_PRIVATE_SOURCES)
|
||||
CollectIncludeDirectories(${MODULE_SOURCE_PATH} PUBLIC_INCLUDES)
|
||||
|
||||
# Configure the scriptloader
|
||||
ConfigureScriptLoader(${SOURCE_MODULE} SCRIPT_MODULE_PRIVATE_SCRIPTLOADER ON ${SOURCE_MODULE})
|
||||
GetProjectNameOfModuleName(${SOURCE_MODULE} MODULE_SOURCE_PROJECT_NAME)
|
||||
|
||||
# Add the module name to DYNAMIC_SCRIPT_MODULES
|
||||
list(APPEND DYNAMIC_SCRIPT_MODULE_PROJECTS ${MODULE_SOURCE_PROJECT_NAME})
|
||||
|
||||
# Create the script module project
|
||||
add_library(${MODULE_SOURCE_PROJECT_NAME} SHARED
|
||||
${MODULE_SOURCE_PRIVATE_SOURCES}
|
||||
${SCRIPT_MODULE_PRIVATE_SCRIPTLOADER})
|
||||
|
||||
target_link_libraries(${MODULE_SOURCE_PROJECT_NAME}
|
||||
PRIVATE
|
||||
acore-core-interface
|
||||
PUBLIC
|
||||
game)
|
||||
|
||||
target_include_directories(${MODULE_SOURCE_PROJECT_NAME}
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${PUBLIC_INCLUDES})
|
||||
|
||||
set_target_properties(${MODULE_SOURCE_PROJECT_NAME}
|
||||
PROPERTIES
|
||||
FOLDER
|
||||
"scripts")
|
||||
|
||||
if(UNIX)
|
||||
install(TARGETS ${MODULE_SOURCE_PROJECT_NAME}
|
||||
DESTINATION ${INSTALL_OFFSET} COMPONENT ${MODULE_SOURCE_PROJECT_NAME})
|
||||
elseif(WIN32)
|
||||
install(TARGETS ${MODULE_SOURCE_PROJECT_NAME}
|
||||
RUNTIME DESTINATION ${INSTALL_OFFSET} COMPONENT ${MODULE_SOURCE_PROJECT_NAME})
|
||||
if(MSVC)
|
||||
# Place the script modules in the script subdirectory
|
||||
set_target_properties(${MODULE_SOURCE_PROJECT_NAME} PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin/Debug/scripts
|
||||
RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin/Release/scripts
|
||||
RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR}/bin/RelWithDebInfo/scripts
|
||||
RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR}/bin/MinSizeRel/scripts)
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Unknown value \"${${MODULE_MODULE_VARIABLE}}\" for module (${SOURCE_MODULE})!")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Add the dynamic script modules to the worldserver as dependency
|
||||
set(WORLDSERVER_DYNAMIC_SCRIPT_MODULES_DEPENDENCIES ${DYNAMIC_SCRIPT_MODULE_PROJECTS} PARENT_SCOPE)
|
||||
|
||||
@@ -412,8 +243,7 @@ list(REMOVE_DUPLICATES SCRIPT_MODULE_PRIVATE_SCRIPTLOADER)
|
||||
add_library(scripts STATIC
|
||||
ScriptLoader.h
|
||||
${SCRIPT_MODULE_PRIVATE_SCRIPTLOADER}
|
||||
${PRIVATE_SOURCES_SCRIPTS}
|
||||
${PRIVATE_SOURCES_MODULES})
|
||||
${PRIVATE_SOURCES_SCRIPTS})
|
||||
|
||||
target_link_libraries(scripts
|
||||
PRIVATE
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "Config.h"
|
||||
#include "GitRevision.h"
|
||||
#include "Language.h"
|
||||
#include "ModuleMgr.h"
|
||||
#include "MySQLThreading.h"
|
||||
#include "Player.h"
|
||||
#include "Realm.h"
|
||||
@@ -219,6 +220,14 @@ public:
|
||||
handler->PSendSysMessage("LoginDatabase queue size: %zu", LoginDatabase.QueueSize());
|
||||
handler->PSendSysMessage("CharacterDatabase queue size: %zu", CharacterDatabase.QueueSize());
|
||||
handler->PSendSysMessage("WorldDatabase queue size: %zu", WorldDatabase.QueueSize());
|
||||
|
||||
handler->SendSysMessage("> List enable modules:");
|
||||
|
||||
for (auto const& modName : Acore::Module::GetEnableModulesList())
|
||||
{
|
||||
handler->SendSysMessage(Acore::StringFormatFmt("- {}", modName));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,10 +24,6 @@
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
// Add deprecated api loaders include
|
||||
@AC_SCRIPTS_INCLUDES@
|
||||
// Add module scripts define
|
||||
@AC_MODULE_LIST@
|
||||
// Add default scripts include
|
||||
@ACORE_SCRIPTS_FORWARD_DECL@
|
||||
#ifdef ACORE_IS_DYNAMIC_SCRIPTLOADER
|
||||
@@ -56,10 +52,8 @@ AC_SCRIPT_API char const* GetScriptModule()
|
||||
/// Exposed in script modules to register all scripts to the ScriptMgr.
|
||||
AC_SCRIPT_API void AddScripts()
|
||||
{
|
||||
// Default scripts and modules
|
||||
@ACORE_SCRIPTS_INVOKE@
|
||||
// Deprecated api modules
|
||||
@AC_SCRIPTS_LIST@}
|
||||
// Default scripts
|
||||
@ACORE_SCRIPTS_INVOKE@}
|
||||
|
||||
/// Exposed in script modules to get the build directive of the module.
|
||||
AC_SCRIPT_API char const* GetBuildDirective()
|
||||
|
||||
Reference in New Issue
Block a user