From e96a774f59305914af01bdd4b264e0fe37988463 Mon Sep 17 00:00:00 2001 From: madmaxoft Date: Tue, 24 Jun 2014 14:48:18 +0200 Subject: Added the Lua Proxy DLL. This builds the lua5.1.dll file on Windows, making it 64-bit if so required. --- lib/luaproxy/CMakeLists.txt | 58 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 lib/luaproxy/CMakeLists.txt (limited to 'lib/luaproxy/CMakeLists.txt') diff --git a/lib/luaproxy/CMakeLists.txt b/lib/luaproxy/CMakeLists.txt new file mode 100644 index 000000000..f115036e1 --- /dev/null +++ b/lib/luaproxy/CMakeLists.txt @@ -0,0 +1,58 @@ + +# This project adds a Lua Proxy DLL on Windows +# By an unfortunate choice in the popular LuaBinaries distribution, there are two names for the Lua DLL on Windows: lua51.dll and lua5.1.dll. +# Some binary Lua packages are built for one, the others for the other. Messy! +# In order to support both package flavors, we create a "proxy DLL": +# Basically the lua5.1.dll has its PE Exports section manipulated so that it points each exported function to its lua51.dll implementation. +# Effectively, this forwards all calls from lua5.1.dll to lua51.dll without any performance costs (the forwarding is done in the Windows PE loader on app start). + +# This project creates the proxy DLL by using a specially crafted .DEF file that is used to link the Proxy DLL. +# Note that it has been tested only on MSVC, it might not work with other compilers. +# The initial implementation was taken from http://lua-users.org/wiki/LuaProxyDllFour , but adapted to MSVC + + + + +if (WIN32) + + if (MSVC) + # Tell the linker to use the DEF file to generate the proxy: + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NOENTRY /DEF:lua5.1.def /MANIFEST:NO") + set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /NOENTRY /DEF:lua5.1.def /MANIFEST:NO") + set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /NOENTRY /DEF:lua5.1.def /MANIFEST:NO") + set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NOENTRY /DEF:lua5.1.def /MANIFEST:NO") + set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NOENTRY /DEF:lua5.1.def /MANIFEST:NO") + set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} /NOENTRY /DEF:lua5.1.def /MANIFEST:NO") + else() + message ("This code has not been tested on your compiler. Please report your success or failure in the forum.") + endif() + + add_library(luaproxy SHARED "lua5.1.def" "Dummy.c") + set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/MCServer) + set_target_properties(luaproxy PROPERTIES + OUTPUT_NAME "lua5.1" + ) + target_link_libraries(luaproxy lua) + + # Output the executable into the $/MCServer folder, so that MCServer can find it: + set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/MCServer) + SET_TARGET_PROPERTIES(luaproxy PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/MCServer + ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/MCServer + ARCHIVE_OUTPUT_DIRECTORY_DEBUGPROFILE ${CMAKE_SOURCE_DIR}/MCServer + ARCHIVE_OUTPUT_DIRECTORY_RELEASEPROFILE ${CMAKE_SOURCE_DIR}/MCServer + LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/MCServer + LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/MCServer + LIBRARY_OUTPUT_DIRECTORY_DEBUGPROFILE ${CMAKE_SOURCE_DIR}/MCServer + LIBRARY_OUTPUT_DIRECTORY_RELEASEPROFILE ${CMAKE_SOURCE_DIR}/MCServer + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/MCServer + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/MCServer + RUNTIME_OUTPUT_DIRECTORY_DEBUGPROFILE ${CMAKE_SOURCE_DIR}/MCServer + RUNTIME_OUTPUT_DIRECTORY_RELEASEPROFILE ${CMAKE_SOURCE_DIR}/MCServer + ) + +else() + + message (FATAL_ERROR "This project is needed only for Windows, modify your cmake file not to include it on Linux") + +endif() -- cgit v1.2.3 From decdbab2e68427914f3d284acc0f6184719306c0 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Tue, 1 Jul 2014 15:23:29 +0200 Subject: LuaProxy compilation under MinGW. --- lib/luaproxy/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/luaproxy/CMakeLists.txt') diff --git a/lib/luaproxy/CMakeLists.txt b/lib/luaproxy/CMakeLists.txt index f115036e1..58ca87cd3 100644 --- a/lib/luaproxy/CMakeLists.txt +++ b/lib/luaproxy/CMakeLists.txt @@ -23,14 +23,17 @@ if (WIN32) set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NOENTRY /DEF:lua5.1.def /MANIFEST:NO") set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NOENTRY /DEF:lua5.1.def /MANIFEST:NO") set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} /NOENTRY /DEF:lua5.1.def /MANIFEST:NO") + elseif (MINGW) + # MinGW requires no further flags and has been tested else() - message ("This code has not been tested on your compiler. Please report your success or failure in the forum.") + message ("LuaProxy: This cmake code has not been tested on your compiler. Please report your success or failure in the forum.") endif() add_library(luaproxy SHARED "lua5.1.def" "Dummy.c") set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/MCServer) set_target_properties(luaproxy PROPERTIES OUTPUT_NAME "lua5.1" + PREFIX "" ) target_link_libraries(luaproxy lua) -- cgit v1.2.3