1
0

Merge pull request #477 from mc-server/cmake-win

Cmake-win
This commit is contained in:
Mattes D 2013-12-27 04:54:42 -08:00
commit 194a1b208f
9 changed files with 157 additions and 79 deletions

37
.gitignore vendored
View File

@ -57,7 +57,44 @@ MCServer.dir/
#win32 cmake stuff #win32 cmake stuff
*.vcxproj *.vcxproj
*.vcproj
*.vcxproj.filters *.vcxproj.filters
*.opensdf *.opensdf
*.sdf *.sdf
*.sln *.sln
#cmake output folders
ZERO_CHECK.dir/
lib/cryptopp/Debug/
lib/cryptopp/Release/
lib/cryptopp/cryptopp.dir/
lib/expat/Debug/
lib/expat/Release/
lib/expat/expat.dir/
lib/inifile/Debug/
lib/inifile/Release/
lib/inifile/inifile.dir/
lib/jsoncpp/Debug/
lib/jsoncpp/Release/
lib/jsoncpp/jsoncpp.dir/
lib/lua/Debug/
lib/lua/Release/
lib/lua/lua.dir/
lib/luaexpat/Debug/
lib/luaexpat/Release/
lib/luaexpat/luaexpat.dir/
lib/md5/Debug/
lib/md5/Release/
lib/md5/md5.dir/
lib/sqlite/Debug/
lib/sqlite/Release/
lib/sqlite/sqlite.dir/
lib/tolua++/Debug/
lib/tolua++/Release/
lib/tolua++/tolua.dir/
lib/tolua++/tolualib.dir/
lib/zlib/Debug/
lib/zlib/Release/
lib/zlib/zlib.dir/
src/Debug/
src/Release/

View File

@ -83,7 +83,13 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_definitions(-DCRYPTOPP_DISABLE_ASM) add_definitions(-DCRYPTOPP_DISABLE_ASM)
endif() endif()
add_definitions(-DLUA_USE_DLOPEN) # Under Windows, we need Lua as DLL; on *nix we need it linked statically:
if (WIN32)
add_definitions(-DLUA_BUILD_AS_DLL)
endif()
# The Expat library is linked in statically, make the source files aware of that:
add_definitions(-DXML_STATIC)
add_subdirectory(lib/inifile/) add_subdirectory(lib/inifile/)
add_subdirectory(lib/jsoncpp/) add_subdirectory(lib/jsoncpp/)
@ -106,10 +112,13 @@ else()
add_flags("/Wall") add_flags("/Wall")
endif() endif()
set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE_BAK}") set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE_BAK}")
if (NOT WIN32)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rdynamic") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rdynamic")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -rdynamic") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -rdynamic")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -rdynamic") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -rdynamic")
set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_PROFILE} -rdynamic") set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_PROFILE} -rdynamic")
endif()
add_subdirectory (src) add_subdirectory (src)

View File

@ -2,10 +2,15 @@
cmake_minimum_required (VERSION 2.6) cmake_minimum_required (VERSION 2.6)
project (expat) project (expat)
include_directories ("${PROJECT_SOURCE_DIR}/../../src/")
file(GLOB SOURCE file(GLOB SOURCE
"*.c" "*.c"
) )
# add headers to MSVC project files:
if (WIN32)
file(GLOB HEADERS "*.h")
set(SOURCE ${SOURCE} ${HEADERS})
source_group("Sources" FILES ${SOURCE})
endif()
add_library(expat ${SOURCE}) add_library(expat ${SOURCE})

View File

@ -8,10 +8,21 @@ file(GLOB SOURCE
"src/*.c" "src/*.c"
) )
if(${STATIC_LUA}) list(REMOVE_ITEM SOURCE "${PROJECT_SOURCE_DIR}/src/lua.c" "${PROJECT_SOURCE_DIR}/src/luac.c")
add_library(lua ${SOURCE})
else() # add headers to MSVC project files:
if (WIN32)
file(GLOB HEADERS "src/*.h")
list(REMOVE_ITEM SOURCE "${PROJECT_SOURCE_DIR}/src/lua.h" "${PROJECT_SOURCE_DIR}/src/luac.h")
set(SOURCE ${SOURCE} ${HEADERS})
source_group("Sources" FILES ${SOURCE})
endif()
# Lua needs to be linked dynamically on Windows and statically on *nix, so that LuaRocks work
if (WIN32)
add_library(lua SHARED ${SOURCE}) add_library(lua SHARED ${SOURCE})
else()
add_library(lua ${SOURCE})
endif() endif()
if (UNIX) if (UNIX)

View File

@ -2,13 +2,24 @@
cmake_minimum_required (VERSION 2.6) cmake_minimum_required (VERSION 2.6)
project (sqlite) project (sqlite)
include_directories ("${PROJECT_SOURCE_DIR}/../../src/")
include_directories ("${PROJECT_SOURCE_DIR}/../") include_directories ("${PROJECT_SOURCE_DIR}/../")
file(GLOB SOURCE file(GLOB SOURCE
"*.c" "*.c"
) )
# add headers to MSVC project files:
if (WIN32)
file(GLOB HEADERS "src/*.h")
list(REMOVE_ITEM SOURCE "${PROJECT_SOURCE_DIR}/src/lua.h" "${PROJECT_SOURCE_DIR}/src/luac.h")
set(SOURCE ${SOURCE} ${HEADERS})
source_group("Sources" FILES ${SOURCE})
endif()
add_library(sqlite ${SOURCE}) add_library(sqlite ${SOURCE})
if (UNIX)
target_link_libraries(sqlite dl) target_link_libraries(sqlite dl)
endif()

View File

@ -18,7 +18,7 @@ extern "C"
// fwd: SQLite/lsqlite3.c // fwd: SQLite/lsqlite3.c
extern "C" extern "C"
{ {
LUALIB_API int luaopen_lsqlite3(lua_State * L); int luaopen_lsqlite3(lua_State * L);
} }
// fwd: LuaExpat/lxplib.c: // fwd: LuaExpat/lxplib.c:
@ -309,7 +309,7 @@ void cLuaState::Push(const AStringVector & a_Vector)
{ {
ASSERT(IsValid()); ASSERT(IsValid());
lua_createtable(m_LuaState, a_Vector.size(), 0); lua_createtable(m_LuaState, (int)a_Vector.size(), 0);
int newTable = lua_gettop(m_LuaState); int newTable = lua_gettop(m_LuaState);
int index = 1; int index = 1;
for (AStringVector::const_iterator itr = a_Vector.begin(), end = a_Vector.end(); itr != end; ++itr, ++index) for (AStringVector::const_iterator itr = a_Vector.begin(), end = a_Vector.end(); itr != end; ++itr, ++index)

View File

@ -12,8 +12,9 @@ include_directories (SYSTEM "${PROJECT_SOURCE_DIR}/../lib/jsoncpp/include")
set(FOLDERS OSSupport HTTPServer Bindings Items Blocks Protocol Generating) set(FOLDERS OSSupport HTTPServer Bindings Items Blocks Protocol Generating)
set(FOLDERS ${FOLDERS} WorldStorage Mobs Entities Simulator UI BlockEntities) set(FOLDERS ${FOLDERS} WorldStorage Mobs Entities Simulator UI BlockEntities)
if(NOT WIN32)
if (NOT WIN32)
foreach(folder ${FOLDERS}) foreach(folder ${FOLDERS})
add_subdirectory(${folder}) add_subdirectory(${folder})
endforeach(folder) endforeach(folder)
@ -21,6 +22,9 @@ endforeach(folder)
file(GLOB SOURCE file(GLOB SOURCE
"*.cpp" "*.cpp"
) )
list(REMOVE_ITEM SOURCE "${PROJECT_SOURCE_DIR}/StackWalker.cpp" "${PROJECT_SOURCE_DIR}/LeakFinder.cpp")
else () else ()
function(includefolder PATH) function(includefolder PATH)
@ -29,7 +33,6 @@ function(includefolder PATH)
"${PATH}/*.h" "${PATH}/*.h"
) )
source_group("${PATH}" FILES ${FOLDER_FILES}) source_group("${PATH}" FILES ${FOLDER_FILES})
endfunction(includefolder) endfunction(includefolder)
foreach(folder ${FOLDERS}) foreach(folder ${FOLDERS})
@ -45,27 +48,19 @@ include_directories("${PROJECT_SOURCE_DIR}")
source_group("" FILES ${SOURCE}) source_group("" FILES ${SOURCE})
#precompiledheaders # Precompiled headers (1st part)
SET_SOURCE_FILES_PROPERTIES(
file(GLOB_RECURSE HEADERS Globals.cpp PROPERTIES COMPILE_FLAGS "/Yc\"Globals.h\""
"*.h" )
# CMake cannot "remove" the precompiled header flags, so we use a dummy precompiled header compatible with just this one file:
SET_SOURCE_FILES_PROPERTIES(
Bindings/Bindings.cpp PROPERTIES COMPILE_FLAGS "/Yc\"string.h\" /Fp\"$(IntDir)/Bindings.pch\""
)
SET_SOURCE_FILES_PROPERTIES(
"StackWalker.cpp LeakFinder.h" PROPERTIES COMPILE_FLAGS "/Yc\"Globals.h\""
) )
foreach(header ${HEADERS})
set(FLAGS "/Yu ${header} /Yc ${header}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${FLAGS}")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${FLAGS}")
set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_PROFILE} ${FLAGS}")
set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_PROFILE} ${FLAGS}")
endforeach()
endif() endif()
list(REMOVE_ITEM SOURCE "${PROJECT_SOURCE_DIR}/StackWalker.cpp" "${PROJECT_SOURCE_DIR}/LeakFinder.cpp")
if (UNIX) if (UNIX)
set(EXECUTABLE ../MCServer/MCServer) set(EXECUTABLE ../MCServer/MCServer)
@ -73,11 +68,25 @@ else()
set(EXECUTABLE MCServer) set(EXECUTABLE MCServer)
endif () endif ()
add_executable(${EXECUTABLE} ${SOURCE}) add_executable(${EXECUTABLE} ${SOURCE})
# Precompiled headers (2nd part)
if (WIN32)
SET_TARGET_PROPERTIES(
${EXECUTABLE} PROPERTIES COMPILE_FLAGS "/Yu\"Globals.h\""
OBJECT_DEPENDS "$(IntDir)/$(TargetName.pch)"
)
endif ()
if (NOT WIN32) if (NOT WIN32)
target_link_libraries(${EXECUTABLE} OSSupport HTTPServer Bindings Items Blocks) target_link_libraries(${EXECUTABLE} OSSupport HTTPServer Bindings Items Blocks)
target_link_libraries(${EXECUTABLE} Protocol Generating WorldStorage) target_link_libraries(${EXECUTABLE} Protocol Generating WorldStorage)
target_link_libraries(${EXECUTABLE} Mobs Entities Simulator UI BlockEntities) target_link_libraries(${EXECUTABLE} Mobs Entities Simulator UI BlockEntities)
endif () endif ()
target_link_libraries(${EXECUTABLE} md5 luaexpat iniFile jsoncpp cryptopp zlib lua) if (WIN32)
target_link_libraries(${EXECUTABLE} expat tolualib ws2_32.lib Psapi.lib)
endif()
target_link_libraries(${EXECUTABLE} md5 luaexpat iniFile jsoncpp cryptopp zlib lua sqlite)

View File

@ -95,15 +95,11 @@
* *
**********************************************************************/ **********************************************************************/
#include <windows.h> #include "Globals.h"
#include <objidl.h> // Needed if compiled with "WIN32_LEAN_AND_MEAN"
#include <tchar.h> #include <tchar.h>
#include <objidl.h> // Needed if compiled with "WIN32_LEAN_AND_MEAN"
#include <crtdbg.h> #include <crtdbg.h>
#include <stdio.h>
#include <string>
#include <vector>
#include "LeakFinder.h" #include "LeakFinder.h"
@ -463,11 +459,11 @@ public:
pHashEntry->nDataSize = nDataSize; pHashEntry->nDataSize = nDataSize;
pHashEntry->Next = NULL; pHashEntry->Next = NULL;
#ifdef _M_IX86 #ifdef _M_IX86
pHashEntry->pCallstackOffset = (LPVOID) min(context.Ebp, context.Esp); pHashEntry->pCallstackOffset = (LPVOID) std::min(context.Ebp, context.Esp);
#elif _M_X64 #elif _M_X64
pHashEntry->pCallstackOffset = (LPVOID) min(context.Rdi, context.Rsp); pHashEntry->pCallstackOffset = (LPVOID) std::min(context.Rdi, context.Rsp);
#elif _M_IA64 #elif _M_IA64
pHashEntry->pCallstackOffset = (LPVOID) min(context.IntSp, context.RsBSP); pHashEntry->pCallstackOffset = (LPVOID) std::min(context.IntSp, context.RsBSP);
#else #else
#error "Platform not supported!" #error "Platform not supported!"
#endif #endif
@ -490,7 +486,7 @@ public:
if (pHashEntry->nMaxStackSize > 0) if (pHashEntry->nMaxStackSize > 0)
{ {
SIZE_T len = ((SIZE_T) pHashEntry->pStackBaseAddr + pHashEntry->nMaxStackSize) - (SIZE_T)pHashEntry->pCallstackOffset; SIZE_T len = ((SIZE_T) pHashEntry->pStackBaseAddr + pHashEntry->nMaxStackSize) - (SIZE_T)pHashEntry->pCallstackOffset;
bytesToRead = min(len, MAX_CALLSTACK_LEN_BUF); bytesToRead = std::min(len, (SIZE_T)MAX_CALLSTACK_LEN_BUF);
} }
// Now read the callstack: // Now read the callstack:
if (ReadProcessMemory(GetCurrentProcess(), (LPCVOID) pHashEntry->pCallstackOffset, &(pHashEntry->pcCallstackAddr), bytesToRead, &(pHashEntry->nCallstackLen)) == 0) if (ReadProcessMemory(GetCurrentProcess(), (LPCVOID) pHashEntry->pCallstackOffset, &(pHashEntry->pcCallstackAddr), bytesToRead, &(pHashEntry->nCallstackLen)) == 0)

View File

@ -73,10 +73,10 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
**********************************************************************/ **********************************************************************/
#include <windows.h>
#include "Globals.h"
#include <tchar.h> #include <tchar.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "version.lib") // for "VerQueryValue" #pragma comment(lib, "version.lib") // for "VerQueryValue"
#pragma warning(disable:4826) #pragma warning(disable:4826)