Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 0 additions & 30 deletions .github/workflows/core_build.yml

This file was deleted.

74 changes: 74 additions & 0 deletions .github/workflows/core_linux_build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Linux Build (GCC + Clang)

on:
push:
branches: [ master, devel ]
pull_request:
branches: [ master ]

jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: gcc
cc: gcc
cxx: g++
pkg: g++
- name: clang
cc: clang
cxx: clang++
pkg: clang

name: Build (${{ matrix.name }})

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 1

- name: Cache CMake build
uses: actions/cache@v4
with:
path: _build
key: ${{ runner.os }}-${{ matrix.name }}-cmake-${{ hashFiles('**/CMakeLists.txt') }}
restore-keys: |
${{ runner.os }}-${{ matrix.name }}-cmake-

- name: Install build dependencies
run: |
sudo apt-get update -qq
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -qq \
git cmake make build-essential \
libssl-dev libbz2-dev default-libmysqlclient-dev \
libace-dev libreadline-dev \
${{ matrix.pkg }}

- name: Configure project
run: |
mkdir -p _build _install
cd _build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=../_install \
-DCMAKE_C_COMPILER=${{ matrix.cc }} \
-DCMAKE_CXX_COMPILER=${{ matrix.cxx }} \
-DBUILD_TOOLS=1 \
-DBUILD_MANGOSD=1 \
-DBUILD_REALMD=1 \
-DSOAP=1 \
-DSCRIPT_LIB_ELUNA=1 \
-DSCRIPT_LIB_SD3_GATE=1 \
-DPLAYERBOTS=0 \
-DUSE_STORMLIB=1 \
-DPCH=0

- name: Build and install
run: |
cd _build
make -j"$(nproc)"
make install -j"$(nproc)"
92 changes: 77 additions & 15 deletions .github/workflows/core_windows_build.yml
Original file line number Diff line number Diff line change
@@ -1,37 +1,99 @@
name: Windows Build
name: Windows Build (MSVC)

on:
push:
branches: [ master ]
branches: [ master , devel ]
pull_request:
branches: [ master ]
branches: [ master ]

jobs:
build:
runs-on: windows-latest
strategy:
fail-fast: false

runs-on: windows-latest

steps:

- uses: actions/checkout@v2
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 1


- name: Cache OpenSSL
id: cache-openssl
uses: actions/cache@v4
with:
path: |
C:\Program Files\OpenSSL
C:\Program Files\OpenSSL-Win64
key: ${{ runner.os }}-openssl-full


- name: Install full OpenSSL (developer)
if: steps.cache-openssl.outputs.cache-hit != 'true'
shell: powershell
run: |
Write-Host "Installing latest full OpenSSL for development..."
choco upgrade openssl -y --no-progress
$ver = & openssl version
Write-Host "Installed OpenSSL version: $ver"

- name: Setup Windows 10 SDK Action

- name: Setup Windows 10 SDK
uses: GuillaumeFalourd/setup-windows10-sdk-action@v2
with:
sdk-version: 22621

- name: Install OpenSSL
run: choco install --no-progress openssl --version=3.5.1

- name: Checkout Submodules
- name: Configure OpenSSL environment
shell: bash
run: |
git submodule init && git submodule update

- name: Build Project
if [ -d "C:/Program Files/OpenSSL/lib/VC" ]; then
echo "OPENSSL_ROOT_DIR=C:/Program Files/OpenSSL" >> $GITHUB_ENV
echo "OPENSSL_INCLUDE_DIR=C:/Program Files/OpenSSL/include" >> $GITHUB_ENV
echo "OPENSSL_CRYPTO_LIBRARY=C:/Program Files/OpenSSL/lib/VC/libcrypto64MT.lib" >> $GITHUB_ENV
echo "OPENSSL_SSL_LIBRARY=C:/Program Files/OpenSSL/lib/VC/libssl64MT.lib" >> $GITHUB_ENV
elif [ -d "C:/Program Files/OpenSSL-Win64/lib/VC" ]; then
echo "OPENSSL_ROOT_DIR=C:/Program Files/OpenSSL-Win64" >> $GITHUB_ENV
echo "OPENSSL_INCLUDE_DIR=C:/Program Files/OpenSSL-Win64/include" >> $GITHUB_ENV
echo "OPENSSL_CRYPTO_LIBRARY=C:/Program Files/OpenSSL-Win64/lib/VC/libcrypto64MT.lib" >> $GITHUB_ENV
echo "OPENSSL_SSL_LIBRARY=C:/Program Files/OpenSSL-Win64/lib/VC/libssl64MT.lib" >> $GITHUB_ENV
fi


- name: Cache CMake build
uses: actions/cache@v4
with:
path: build
key: ${{ runner.os }}-cmake-${{ hashFiles('**/CMakeLists.txt') }}
restore-keys: |
${{ runner.os }}-cmake-


- name: Configure CMake project
shell: bash
run: |
mkdir -p build && cd build
cmake .. -DCMAKE_SYSTEM_VERSION=10.0.22621.0 -DBUILD_TOOLS:BOOL=1 -DBUILD_MANGOSD:BOOL=1 -DBUILD_REALMD:BOOL=1 -DSOAP:BOOL=1 -DSCRIPT_LIB_ELUNA:BOOL=1 -DSCRIPT_LIB_SD3:BOOL=1 -DPLAYERBOTS:BOOL=0 -DUSE_STORMLIB:BOOL=1
cmake --build . --config Release --parallel 4
cmake .. \
-G "Visual Studio 17 2022" \
-A x64 \
-DCMAKE_BUILD_TYPE=Release \
-DOPENSSL_USE_STATIC_LIBS=TRUE \
-DBUILD_TOOLS=1 \
-DBUILD_MANGOSD=1 \
-DBUILD_REALMD=1 \
-DSOAP=1 \
-DSCRIPT_LIB_ELUNA=1 \
-DSCRIPT_LIB_SD3=1 \
-DPLAYERBOTS=0 \
-DUSE_STORMLIB=1 \
-DPCH=0


- name: Build project
shell: bash
run: |
cd build
cmake --build . --config Release --parallel
2 changes: 1 addition & 1 deletion .github/workflows/docker_build.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Docker Build
on:
push:
branches: [ master ]
branches: [ master , devel ]
pull_request:
branches: [ master ]

Expand Down
114 changes: 74 additions & 40 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,24 +19,36 @@

cmake_minimum_required(VERSION 3.18 FATAL_ERROR)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# =============================================================================
# Project setup
# =============================================================================
project(MaNGOS VERSION 0.22.0 LANGUAGES C CXX)

# Use modern CMake policies
cmake_policy(SET CMP0028 NEW)
cmake_policy(SET CMP0054 NEW)
cmake_policy(SET CMP0042 NEW)
cmake_policy(SET CMP0048 NEW)
cmake_policy(SET CMP0054 NEW)
cmake_policy(SET CMP0063 NEW)
# CMP0042 = MACOSX_RPATH (macOS only) — optional
if(APPLE)
cmake_policy(SET CMP0042 NEW)
endif()

set(CMAKE_CXX_STANDARD 17)
# =============================================================================
# C++ / C standard configuration
# =============================================================================
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

set_property(GLOBAL
PROPERTY USE_FOLDERS ON
)
# IDE folder organization
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

# Always export compile_commands.json for tooling
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

#==================================================================================
# Define available cmake options below
Expand All @@ -50,6 +62,7 @@ option(PLAYERBOTS "Enable Player Bots" OFF)
option(SOAP "Enable remote access via SOAP" OFF)
option(PCH "Enable precompiled headers" ON)
option(DEBUG "Enable debug build (only on non IDEs)" OFF)
option(WITHOUT_GIT "Disable Git revision detection" OFF)
#==================================================================================
message("")
message(
Expand All @@ -64,6 +77,7 @@ message(
SOAP Enable remote access via SOAP
PCH Enable use of precompiled headers
DEBUG Debug build, only for systems without IDE (Linux, *BSD)
WITHOUT_GIT Disable Git revision detection
Scripting engines:
SCRIPT_LIB_ELUNA Compile with support for Eluna scripts
SCRIPT_LIB_SD3 Compile with support for ScriptDev3 scripts
Expand All @@ -77,54 +91,74 @@ message(
message("")
#==================================================================================#

project(MaNGOS VERSION 0.22.0)

if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "Default install directory" FORCE)
# =============================================================================
# Build type logic
# =============================================================================
if(NOT CMAKE_CONFIGURATION_TYPES)
if(DEBUG)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "" FORCE)
else()
set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
endif()
endif()

if(DEBUG)
set(CMAKE_BUILD_TYPE Debug)
else()
set(CMAKE_BUILD_TYPE Release)
endif()
# =============================================================================
# Install paths
# =============================================================================
include(GNUInstallDirs)

if(UNIX)
set(BIN_DIR ${CMAKE_INSTALL_PREFIX}/bin)
if (NOT CONF_INSTALL_DIR)
set(CONF_INSTALL_DIR ../etc)
endif()
set(BIN_DIR "${CMAKE_INSTALL_FULL_BINDIR}")
set(CONF_INSTALL_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}")
else()
set(BIN_DIR ${CMAKE_INSTALL_PREFIX})
if (NOT CONF_INSTALL_DIR)
set(CONF_INSTALL_DIR .)
endif()
set(BIN_DIR "${CMAKE_INSTALL_PREFIX}")
set(CONF_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}")
endif()

# =============================================================================
# Dependencies
# =============================================================================

# =============================================================================
# Include project CMake modules safely (relative to current dir)
# =============================================================================
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

if(NOT WITHOUT_GIT)
find_package(Git)
find_package(Git QUIET)
endif()

find_package(Threads REQUIRED)
find_package(MySQL REQUIRED)
find_package(DL REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(MySQL REQUIRED)

find_package(ZLIB QUIET)
find_package(ZLIB QUIET)
find_package(BZip2 QUIET)

find_package(OpenSSL REQUIRED)

include(${CMAKE_SOURCE_DIR}/cmake/GenRevision.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/EnsureVersion.cmake)

include(${CMAKE_SOURCE_DIR}/cmake/MangosParams.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/SetDefinitions.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/GenRevision.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/EnsureVersion.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/MangosParams.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/SetDefinitions.cmake)

if(PCH)
include(${CMAKE_SOURCE_DIR}/cmake/PCHSupport.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/PCHSupport.cmake)
endif()

# =============================================================================
# Subdirectories
# =============================================================================
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/dep/CMakeLists.txt")
add_subdirectory(dep)
endif()

add_subdirectory(dep)
add_subdirectory(src)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/CMakeLists.txt")
add_subdirectory(src)
else()
message(WARNING "Source directory 'src' not found. Nothing to build.")
endif()

include(${CMAKE_SOURCE_DIR}/cmake/StatusInfo.cmake)
# =============================================================================
# Final info and summary
# =============================================================================
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/StatusInfo.cmake)
Loading