CMAKE_MINIMUM_REQUIRED(VERSION 3.17.0) IF(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) MESSAGE(STATUS "Using vcpkg env variable") SET(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "") ELSEIF(NOT DEFINED CMAKE_TOOLCHAIN_FILE) MESSAGE(STATUS "Using vcpkg submodule") SET(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/submodules/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "") ENDIF() SET(CMAKE_CXX_STANDARD 20) SET(CMAKE_CXX_STANDARD_REQUIRED ON) SET(CMAKE_CXX_EXTENSIONS OFF) PROJECT(EQEmu) IF(NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE) ENDIF(NOT CMAKE_BUILD_TYPE) OPTION(EQEMU_BUILD_PCH "Build with precompiled headers (Windows)" ON) # Requires libgoogle-perftools-dev google-perftools packages for linux (debian) IF(EQEMU_ADD_PROFILER) SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-as-needed,-lprofiler,--as-needed") ENDIF(EQEMU_ADD_PROFILER) IF(USE_MAP_MMFS) ADD_DEFINITIONS(-DUSE_MAP_MMFS) ENDIF (USE_MAP_MMFS) IF(MSVC) add_compile_options(/bigobj) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) ADD_DEFINITIONS(-DNOMINMAX) ADD_DEFINITIONS(-DCRASH_LOGGING) ADD_DEFINITIONS(-D_HAS_AUTO_PTR_ETC) # for Luabind on C++17 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") OPTION(EQEMU_DISABLE_MSVC_WARNINGS "Disable MSVC compile warnings." ON) IF(EQEMU_DISABLE_MSVC_WARNINGS) ADD_DEFINITIONS( "/W0 /D_CRT_SECURE_NO_WARNINGS /wd4005 /wd4996 /nologo /Os") ENDIF(EQEMU_DISABLE_MSVC_WARNINGS) ELSE(MSVC) ADD_DEFINITIONS(-DHAS_UNION_SEMUN) ENDIF(MSVC) #FreeBSD support IF(UNIX) IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") ADD_DEFINITIONS(-DFREEBSD) ADD_DEFINITIONS(-D_GLIBCXX_USE_C99) SET(FREEBSD TRUE) ENDIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") IF(CMAKE_SYSTEM_NAME MATCHES "Darwin") ADD_DEFINITIONS(-DDARWIN) SET(DARWIN TRUE) ENDIF(CMAKE_SYSTEM_NAME MATCHES "Darwin") ENDIF(UNIX) find_package(PkgConfig) find_package(Boost REQUIRED COMPONENTS dynamic_bitset foreach tuple) find_package(cereal CONFIG REQUIRED) find_package(fmt CONFIG REQUIRED) find_package(glm CONFIG REQUIRED) find_package(unofficial-libmariadb CONFIG REQUIRED) find_package(libuv CONFIG REQUIRED) find_package(OpenSSL REQUIRED) find_package(recastnavigation CONFIG REQUIRED) find_package(zlib-ng CONFIG REQUIRED) pkg_check_modules(luajit REQUIRED luajit) find_package(PerlLibs) MESSAGE(STATUS "**************************************************") MESSAGE(STATUS "* Library Detection *") MESSAGE(STATUS "**************************************************") MESSAGE(STATUS "PERL_INCLUDE_PATH: ${PERL_INCLUDE_PATH}") MESSAGE(STATUS "PERL_LIBRARY: ${PERL_LIBRARY}") MESSAGE(STATUS "PERL_INCLUDE_DIR: ${PERL_INCLUDE_DIR}") MESSAGE(STATUS "PERL_INCLUDE_DIRS: ${PERL_INCLUDE_DIRS}") MESSAGE(STATUS "PERL_LIBRARIES: ${PERL_LIBRARIES}") MESSAGE(STATUS "PERL_VERSION: ${PERL_VERSION}") MESSAGE(STATUS "**************************************************") SET(EQEMU_LOG_LEVEL 0) IF(EQEMU_ENABLE_LOG_TRACE) MATH(EXPR EQEMU_LOG_LEVEL "${EQEMU_LOG_LEVEL} + 1") ENDIF(EQEMU_ENABLE_LOG_TRACE) IF(EQEMU_ENABLE_LOG_DEBUG) MATH(EXPR EQEMU_LOG_LEVEL "${EQEMU_LOG_LEVEL} + 2") ENDIF(EQEMU_ENABLE_LOG_DEBUG) IF(EQEMU_ENABLE_LOG_INFO) MATH(EXPR EQEMU_LOG_LEVEL "${EQEMU_LOG_LEVEL} + 4") ENDIF(EQEMU_ENABLE_LOG_INFO) IF(EQEMU_ENABLE_LOG_WARN) MATH(EXPR EQEMU_LOG_LEVEL "${EQEMU_LOG_LEVEL} + 8") ENDIF(EQEMU_ENABLE_LOG_WARN) IF(EQEMU_ENABLE_LOG_ERROR) MATH(EXPR EQEMU_LOG_LEVEL "${EQEMU_LOG_LEVEL} + 16") ENDIF(EQEMU_ENABLE_LOG_ERROR) IF(EQEMU_ENABLE_LOG_FATAL) MATH(EXPR EQEMU_LOG_LEVEL "${EQEMU_LOG_LEVEL} + 32") ENDIF(EQEMU_ENABLE_LOG_FATAL) ADD_DEFINITIONS(-DEQEMU_LOG_LEVEL=${EQEMU_LOG_LEVEL}) ADD_DEFINITIONS(-DGLM_FORCE_RADIANS) ADD_DEFINITIONS(-DGLM_FORCE_CTOR_INIT) ADD_DEFINITIONS(-DGLM_ENABLE_EXPERIMENTAL) #options OPTION(EQEMU_COMMANDS_LOGGING "Enable GM Command logs" ON) OPTION(EQEMU_BUILD_SERVER "Build the game server." ON) OPTION(EQEMU_BUILD_LOGIN "Build the login server." ON) OPTION(EQEMU_BUILD_HC "Build the headless client." OFF) OPTION(EQEMU_BUILD_TESTS "Build utility tests." OFF) OPTION(EQEMU_BUILD_CLIENT_FILES "Build Client Import/Export Data Programs." ON) OPTION(EQEMU_PREFER_LUA "Build with normal Lua even if LuaJIT is found." OFF) #PRNG options OPTION(EQEMU_ADDITIVE_LFIB_PRNG "Use Additive LFib for PRNG." OFF) MARK_AS_ADVANCED(EQEMU_ADDITIVE_LFIB_PRNG) OPTION(EQEMU_BIASED_INT_DIST "Use biased int dist instead of uniform." OFF) MARK_AS_ADVANCED(EQEMU_BIASED_INT_DIST) SET(EQEMU_CUSTOM_PRNG_ENGINE "" CACHE STRING "Custom random engine. (ex. std::default_random_engine)") MARK_AS_ADVANCED(EQEMU_CUSTOM_PRNG_ENGINE) IF(CMAKE_COMPILER_IS_GNUCXX) OPTION(EQEMU_SFMT19937 "Use GCC's extention for SIMD Fast MT19937." OFF) MARK_AS_ADVANCED(EQEMU_SFMT19937) ENDIF() IF(EQEMU_ADDITIVE_LFIB_PRNG) ADD_DEFINITIONS(-DUSE_ADDITIVE_LFIB_PRNG) IF(EQEMU_SFMT19937) MESSAGE(STATUS "SFMT19937 and ADDITITVE_LFIB_PRNG both set, SFMT19937 ignored.") SET(EQEMU_SFMT19937 OFF) ENDIF() IF(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "") MESSAGE(STATUS "CUSTOM_PRNG_ENGINE and ADDITITVE_LFIB_PRNG both set, CUSTOM_PRNG_ENGINE ignored.") SET(EQEMU_CUSTOM_PRNG_ENGINE "") ENDIF() ENDIF() IF(EQEMU_SFMT19937) ADD_DEFINITIONS(-DUSE_SFMT19937) IF(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "") MESSAGE(STATUS "CUSTOM_PRNG_ENGINE and SFMT19937 both set, CUSTOM_PRNG_ENGINE ignored.") SET(EQEMU_CUSTOM_PRNG_ENGINE "") ENDIF() ENDIF() IF(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "") ADD_DEFINITIONS(-DUSE_CUSTOM_PRNG_ENGINE=${EQEMU_CUSTOM_PRNG_ENGINE}) ENDIF() IF(EQEMU_BIASED_INT_DIST) ADD_DEFINITIONS(-DBIASED_INT_DIST) ENDIF() IF(EQEMU_COMMANDS_LOGGING) ADD_DEFINITIONS(-DCOMMANDS_LOGGING) ENDIF(EQEMU_COMMANDS_LOGGING) IF(PerlLibs_FOUND) SET(PERL_LIBRARY_TYPE " Perl") SET(PERL_LIBRARY_ENABLED ON) SET(PERL_LIBRARY_LIBS ${PERL_LIBRARY}) SET(PERL_LIBRARY_INCLUDE ${PERL_INCLUDE_PATH}) ELSE() SET(PERL_LIBRARY_TYPE "Disabled") SET(PERL_LIBRARY_ENABLED OFF) ENDIF() MESSAGE(STATUS "") MESSAGE(STATUS "**************************************************") MESSAGE(STATUS "* Library Usage *") MESSAGE(STATUS "**************************************************") MESSAGE(STATUS "* Perl: ${PERL_LIBRARY_TYPE} *") MESSAGE(STATUS "**************************************************") # silence obnoxious deprecation message ADD_DEFINITIONS(-DBOOST_BIND_GLOBAL_PLACEHOLDERS) IF(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS OR EQEMU_BUILD_HC) ADD_SUBDIRECTORY(common) ENDIF(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS OR EQEMU_BUILD_HC)