diff --git a/CMakeLists.txt b/CMakeLists.txt index 99094b2e..bf7130a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,144 +1,131 @@ -cmake_policy(SET CMP0003 OLD) # or cmake_policy(VERSION 2.4) - -cmake_minimum_required(VERSION 2.8) - -project(stellabellum C CXX) - -if (WIN32) - set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/win32") -elseif (UNIX) - set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/linux") -endif () - -set(SWG_ROOT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -set(SWG_ENGINE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/engine) -set(SWG_EXTERNALS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external) -set(SWG_EXTERNALS_FIND ${CMAKE_CURRENT_SOURCE_DIR}/external/3rd/library) -set(SWG_GAME_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/game) - -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) - -include_directories(/usr/include/i386-linux-gnu) - -find_package(BISON REQUIRED) -find_package(FLEX REQUIRED) -find_package(JNI REQUIRED) -find_package(LibXml2 REQUIRED) -find_package(Oracle REQUIRED) -find_package(PCRE REQUIRED) -find_package(Perl REQUIRED) -find_package(Threads) -find_package(ZLIB REQUIRED) -find_package(CURL REQUIRED) - -# c++14 yeah! -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -# shame on you cmake for auto-setting optimization flags! -set(CMAKE_CXX_FLAGS "") -set(CMAKE_CXX_FLAGS_DEBUG "") -set(CMAKE_CXX_FLAGS_RELEASE "") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "") -set(CMAKE_CXX_FLAGS_MINSIZEREL "") - -# I'll be honest, win32 is probably very very broken and won't build - it will need worked on so that MSVC uses -# the vs2013+ STL instead of stlport, and probably will thus need removal/modification/addition of TONS of the ifdef blocks for WIN32 -if (WIN32) - find_package(Iconv REQUIRED) - - # Dont-Build-PDB RELEASE build use the following (by either commenting---uncommenting the line as needed) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:libc.lib /SAFESEH:NO") - - # Do-Build-PDB RELEASE build use the following (by either commenting---uncommenting the line as needed) - #set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DWIN32 -Dwin32 -DUDP_LIBRARY -DDEBUG_LEVEL=0 \ - # -DPRODUCTION=1 /Oi /Ot /Oy /O2 /GF /Gy /Zi /MT -D_USE_32BIT_TIME_T=1 -D_MBCS \ - # -DPLATFORM_BASE_SINGLE_THREAD -D_CRT_SECURE_NO_WARNINGS /MP /wd4244 /wd4996 /wd4018 /wd4351 \ - # /Zc:wchar_t- /Ob1 /FC") - - # Dont-Build-PDB RELEASE build use the following (by either commenting---uncommenting the line as needed) - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DWIN32 -Dwin32 -DUDP_LIBRARY -DDEBUG_LEVEL=0 -DPRODUCTION=1 \ - /Oi /Ot /Oy /O2 /GF /Gy /MT -D_USE_32BIT_TIME_T=1 -D_MBCS -DPLATFORM_BASE_SINGLE_THREAD -D_CRT_SECURE_NO_WARNINGS \ - /MP /wd4244 /wd4996 /wd4018 /wd4351 /Zc:wchar_t- /Ob1 /FC") - - # Standard DEBUG build use the following (by either commenting---uncommenting the line as needed) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DWIN32 -Dwin32 -D_DEBUG -DUDP_LIBRARY -DDEBUG_LEVEL=2 -DPRODUCTION=0 /MTd \ - -D_USE_32BIT_TIME_T=1 -D_MBCS -DPLATFORM_BASE_SINGLE_THREAD -D_CRT_SECURE_NO_WARNINGS /MP /wd4244 /wd4996 /wd4018 /wd4351 \ - /Zc:wchar_t- /Ob1 /FC") -elseif (UNIX) - find_package(Curses REQUIRED) - - # linker flags - if (${CMAKE_BUILD_TYPE} STREQUAL "RELWITHDEBINFO" OR ${CMAKE_BUILD_TYPE} STREQUAL "MINSIZEREL") - set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-z,norelro,-O3,--sort-common,--as-needed,--relax,-z,combreloc,-z,global,--no-omagic") - else () - set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-z,norelro,-O3,--sort-common,--as-needed,--relax,-z,combreloc,-z,global,--no-omagic,-x,-s") - endif () - - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") - - # don't put anything too crazy in debug...and any common flags go into CMAKE_CXX_FLAGS - set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DDEBUG_LEVEL=2 -DPRODUCTION=0 -O0 -g3") - - # release specific cflags - optimizations beyond the default for both types is mostly just -O flags - set(CMAKE_CXX_FLAGS_RELEASE "-DDEBUG_LEVEL=0 -DPRODUCTION=1") - - # we use fewer, if any, crazy optimizations for profile generation, and likewise release flags for the minsizerel - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE}") - set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_RELEASE}") - - # New Clang compile method. Test to -O2 to see if its a cflag that is causing issue. - if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2") - - # Default Clang compile method comment out for now for reference - # Currently use of clang compiler is breaking some bins, miff & templateCompiler. - # set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast \ - # -fno-signed-zeros -freciprocal-math -ffp-contract=fast \ - # -fno-threadsafe-statics -fslp-vectorize-aggressive -fslp-vectorize \ - # -fno-stack-protector -fstrict-enums -fstrict-vtable-pointers \ - # -fno-coverage-mapping -fno-spell-checking -fshort-enums -finline-functions \ - # -finline-hint-functions -fno-unroll-loops") - - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb") - - # RELWITHDEBINFO is used for building bins that produce profdata files - # we only need the basics of our heavy optimizations here, i think - that and one of these flags - # breaks JNI when we profile - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Ofast -fno-unroll-loops -finline-functions \ - -finline-hint-functions -fprofile-instr-generate") - - # MINSIZEREL is used for profiled, flto builds - set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_RELEASE} -flto -fwhole-program-vtables") - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - # making changes for all bins to compile correctly with gcc5.4 or gcc6.4 we will test -O3 later - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -fno-signed-zeros -freciprocal-math") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og") - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") - endif () - - # our "always on" flags - build by default for the system we're on but include all instruction sets - set(CMAKE_CXX_FLAGS "-m32 -pipe -march=native -mtune=native \ - -msse -msse2 -msse3 -mmmx -m3dnow \ - -Wformat -Wno-overloaded-virtual -Wno-missing-braces -Wno-format \ - -Wno-write-strings -Wno-unknown-pragmas \ - -Wno-uninitialized -Wno-reorder -Wno-tautological-constant-out-of-range-compare") - - add_definitions(-DLINUX -D_REENTRANT -Dlinux -D_USING_STL -D_GNU_SOURCE -D_XOPEN_SOURCE=500 -U_FORTIFY_SOURCE) - - # release and debug are internal use only - if (${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "Release") - add_definitions(-DSTELLA_INTERNAL) - endif () - - # this is so some profile specific stuff is turned on in the code - if (${CMAKE_BUILD_TYPE} STREQUAL "RELWITHDEBINFO") - add_definitions(-DENABLE_PROFILING) - endif () -endif () - -add_subdirectory(external) -add_subdirectory(engine) -add_subdirectory(game) +cmake_minimum_required(VERSION 2.8) + +project(stellabellum C CXX) + +if (WIN32) + set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/win32") +elseif (UNIX) + set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/linux") +endif () + +set(SWG_ROOT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(SWG_ENGINE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/engine) +set(SWG_EXTERNALS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external) +set(SWG_EXTERNALS_FIND ${CMAKE_CURRENT_SOURCE_DIR}/external/3rd/library) +set(SWG_GAME_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/game) + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) + +include_directories(/usr/include/i386-linux-gnu) + +find_package(BISON REQUIRED) +find_package(FLEX REQUIRED) +find_package(JNI REQUIRED) +find_package(LibXml2 REQUIRED) +find_package(Oracle REQUIRED) +find_package(PCRE REQUIRED) +find_package(Perl REQUIRED) +find_package(Threads) +find_package(ZLIB REQUIRED) +find_package(CURL REQUIRED) + +# c++17 yeah! +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# shame on you cmake for auto-setting optimization flags! +set(CMAKE_CXX_FLAGS "") +set(CMAKE_CXX_FLAGS_DEBUG "") +set(CMAKE_CXX_FLAGS_RELEASE "") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "") +set(CMAKE_CXX_FLAGS_MINSIZEREL "") + +# I'll be honest, win32 is probably very very broken and won't build - it will need worked on so that MSVC uses +# the vs2013+ STL instead of stlport, and probably will thus need removal/modification/addition of TONS of the ifdef blocks for WIN32 +if (WIN32) + find_package(Iconv REQUIRED) + + # Dont-Build-PDB RELEASE build use the following (by either commenting---uncommenting the line as needed) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:libc.lib /SAFESEH:NO") + + # Do-Build-PDB RELEASE build use the following (by either commenting---uncommenting the line as needed) + #set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DWIN32 -Dwin32 -DUDP_LIBRARY -DDEBUG_LEVEL=0 \ + # -DPRODUCTION=1 /Oi /Ot /Oy /O2 /GF /Gy /Zi /MT -D_USE_32BIT_TIME_T=1 -D_MBCS \ + # -DPLATFORM_BASE_SINGLE_THREAD -D_CRT_SECURE_NO_WARNINGS /MP /wd4244 /wd4996 /wd4018 /wd4351 \ + # /Zc:wchar_t- /Ob1 /FC") + + # Dont-Build-PDB RELEASE build use the following (by either commenting---uncommenting the line as needed) + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DWIN32 -Dwin32 -DUDP_LIBRARY -DDEBUG_LEVEL=0 -DPRODUCTION=1 \ + /Oi /Ot /Oy /O2 /GF /Gy /MT -D_USE_32BIT_TIME_T=1 -D_MBCS -DPLATFORM_BASE_SINGLE_THREAD -D_CRT_SECURE_NO_WARNINGS \ + /MP /wd4244 /wd4996 /wd4018 /wd4351 /Zc:wchar_t- /Ob1 /FC") + + # Standard DEBUG build use the following (by either commenting---uncommenting the line as needed) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DWIN32 -Dwin32 -D_DEBUG -DUDP_LIBRARY -DDEBUG_LEVEL=2 -DPRODUCTION=0 /MTd \ + -D_USE_32BIT_TIME_T=1 -D_MBCS -DPLATFORM_BASE_SINGLE_THREAD -D_CRT_SECURE_NO_WARNINGS /MP /wd4244 /wd4996 /wd4018 /wd4351 \ + /Zc:wchar_t- /Ob1 /FC") +elseif (UNIX) + find_package(Curses REQUIRED) + + # linker flags + if (${CMAKE_BUILD_TYPE} STREQUAL "RELWITHDEBINFO" OR ${CMAKE_BUILD_TYPE} STREQUAL "MINSIZEREL") + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-z,norelro,-O3,--sort-common,--as-needed,--relax,-z,combreloc,-z,global,--no-omagic") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,norelro,-O3,--sort-common,--as-needed,--relax,-z,combreloc,-z,global,--no-omagic") + else () + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-z,norelro,-O3,--sort-common,--as-needed,--relax,-z,combreloc,-z,global,--no-omagic,-x,-s") + set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,norelro,-O3,--sort-common,--as-needed,--relax,-z,combreloc,-z,global,--no-omagic,-x,-s") + endif () + + # don't put anything too crazy in debug...and any common flags go into CMAKE_CXX_FLAGS + set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DDEBUG_LEVEL=2 -DPRODUCTION=0 -O0 -g3") + + # release specific cflags - optimizations beyond the default for both types is mostly just -O flags + set(CMAKE_CXX_FLAGS_RELEASE "-DDEBUG_LEVEL=0 -DPRODUCTION=1") + + # we use fewer, if any, crazy optimizations for profile generation, and likewise release flags for the minsizerel + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE}") + set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_RELEASE}") + + # Ofast doesn't work with gcc builds + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast \ + -fno-threadsafe-statics -fslp-vectorize \ + -fno-stack-protector -fstrict-enums -finline-hint-functions \ + -fno-coverage-mapping -fno-spell-checking \ + -mno-retpoline") + + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb") + + # RELWITHDEBINFO is used for building bins that produce profdata files + # we only need the basics of our heavy optimizations here, i think - that and one of these flags + # breaks JNI when we profile + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Ofast -finline-hint-functions -fprofile-instr-generate") + + # MINSIZEREL is used for profiled, flto builds + set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_RELEASE} -flto -fwhole-program-vtables") + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + # O3 and Ofast include one or more flags that cause java to crash when using gcc6 + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -fno-signed-zeros -freciprocal-math -fno-unroll-loops -fno-tree-loop-optimize -fno-plt") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og") + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") + endif () + + # our "always on" flags - build by default for the system we're on but include all instruction sets + set(CMAKE_CXX_FLAGS "-m32 -pipe -march=native -mtune=native \ + -Wformat -Wno-overloaded-virtual -Wno-missing-braces -Wno-format \ + -Wno-write-strings -Wno-unknown-pragmas \ + -Wno-uninitialized -Wno-reorder -Wno-tautological-constant-out-of-range-compare") + + # if you'd like to opt in to our statistics, remove "-DSTELLA_INTERNAL" and your server will send us a heartbeat at startup + add_definitions(-DLINUX -D_REENTRANT -Dlinux -D_USING_STL -D_GNU_SOURCE -D_XOPEN_SOURCE=500 -U_FORTIFY_SOURCE -DSTELLA_INTERNAL) + + # this is so some profile specific stuff is turned on in the code + if (${CMAKE_BUILD_TYPE} STREQUAL "RELWITHDEBINFO") + add_definitions(-DENABLE_PROFILING) + endif () +endif () + +add_subdirectory(external) +add_subdirectory(engine) +add_subdirectory(game) diff --git a/engine/server/library/serverGame/src/shared/object/GuildObject.cpp b/engine/server/library/serverGame/src/shared/object/GuildObject.cpp index 0ee903a1..b3b87ac4 100755 --- a/engine/server/library/serverGame/src/shared/object/GuildObject.cpp +++ b/engine/server/library/serverGame/src/shared/object/GuildObject.cpp @@ -398,7 +398,7 @@ GuildInfo const * GuildObject::getGuildInfo(int guildId) const GuildMemberInfo const * GuildObject::getGuildMemberInfo(int guildId, NetworkId const &memberId) const { - std::map, GuildMemberInfo, GuildObject>::const_iterator const iterFind = m_membersInfo.find(std::make_pair(guildId, memberId)); + const auto iterFind = m_membersInfo.find(std::make_pair(guildId, memberId)); if (iterFind != m_membersInfo.end()) return &(iterFind->second); @@ -486,7 +486,7 @@ void GuildObject::getGuildMemberIds(int guildId, std::vector &results { results.clear(); - for (std::map, GuildMemberInfo, GuildObject>::const_iterator iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) + for (auto iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) { if (iter->first.first != guildId) break; @@ -501,7 +501,7 @@ void GuildObject::getMemberIdsWithPermissions(int guildId, int permissions, std: { results.clear(); - for (std::map, GuildMemberInfo, GuildObject>::const_iterator iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) + for (auto iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) { if (iter->first.first != guildId) break; @@ -635,7 +635,7 @@ void GuildObject::disbandGuild(int guildId) // remove all members { std::vector memberIds; - for (std::map, GuildMemberInfo, GuildObject>::const_iterator iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) + for (auto iter = m_membersInfo.lower_bound(std::make_pair(guildId, NetworkId::cms_invalid)); iter != m_membersInfo.end(); ++iter) { if (iter->first.first != guildId) break; @@ -647,7 +647,7 @@ void GuildObject::disbandGuild(int guildId) m_members.erase(memberSpec); } - for (std::vector::const_iterator iterMemberId = memberIds.begin(); iterMemberId != memberIds.end(); ++iterMemberId) + for (auto iterMemberId = memberIds.begin(); iterMemberId != memberIds.end(); ++iterMemberId) { std::map::const_iterator iterFind = m_fullMembers.find(*iterMemberId); if ((iterFind != m_fullMembers.end()) && (iterFind->second == guildId)) diff --git a/engine/shared/library/sharedDebug/src/linux/DebugHelp.cpp b/engine/shared/library/sharedDebug/src/linux/DebugHelp.cpp index 8e3ba4bc..c1639ebd 100755 --- a/engine/shared/library/sharedDebug/src/linux/DebugHelp.cpp +++ b/engine/shared/library/sharedDebug/src/linux/DebugHelp.cpp @@ -81,7 +81,13 @@ char SymbolCache::ms_memPool[SymbolCache::cms_memPoolMaxBytes]; char *SymbolCache::ms_memPoolFreeList; Mutex SymbolCache::ms_memPoolMutex; SymbolCache::SymbolInfo SymbolCache::ms_nullSym; -typedef std::map, SymbolCacheAllocator > > SymbolMap; + +typedef std::map< + void const *, + SymbolCache::SymbolInfo +> SymbolMap; + + typedef std::vector > UniqueStringVector; static SymbolMap ms_cacheMap; static UniqueStringVector ms_uniqueStringVector; @@ -567,7 +573,7 @@ static bool stabsFind(void const *addr, Dl_info const &info, char const *& retSr SymbolCache::SymbolInfo const &SymbolCache::lookup(void const *addr) { - SymbolMap::const_iterator i = ms_cacheMap.find(addr); + auto i = ms_cacheMap.find(addr); if (i != ms_cacheMap.end()) return (*i).second;