From c9d88d5f48054d78727b587fef7567422cdc39a6 Mon Sep 17 00:00:00 2001 From: Roman Tsisyk <roman@tsisyk.com> Date: Tue, 18 Aug 2015 14:48:14 +0300 Subject: [PATCH] Fix #984: add jit.* library to the binary --- cmake/luajit.cmake | 4 ++-- cmake/utils.cmake | 2 +- src/CMakeLists.txt | 13 +++++++++++++ src/lua/init.cc | 35 ++++++++++++++++++++++++++++++++--- 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/cmake/luajit.cmake b/cmake/luajit.cmake index 24f57eb6b2..06ac79d6a1 100644 --- a/cmake/luajit.cmake +++ b/cmake/luajit.cmake @@ -178,7 +178,7 @@ macro(luajit_build) add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/third_party/luajit/src/libluajit.a WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/third_party/luajit COMMAND $(MAKE) ${luajit_buildoptions} clean - COMMAND $(MAKE) -C src ${luajit_buildoptions} libluajit.a + COMMAND $(MAKE) -C src ${luajit_buildoptions} DEPENDS ${CMAKE_SOURCE_DIR}/CMakeCache.txt ) else() @@ -189,7 +189,7 @@ macro(luajit_build) WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/third_party/luajit COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/third_party/luajit ${PROJECT_BINARY_DIR}/third_party/luajit COMMAND $(MAKE) ${luajit_buildoptions} clean - COMMAND $(MAKE) -C src ${luajit_buildoptions} libluajit.a + COMMAND $(MAKE) -C src ${luajit_buildoptions} DEPENDS ${PROJECT_BINARY_DIR}/CMakeCache.txt ${PROJECT_BINARY_DIR}/third_party/luajit ) endif() diff --git a/cmake/utils.cmake b/cmake/utils.cmake index d7cbc4a58d..3fee04483f 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -56,7 +56,7 @@ function(lua_source varname filename) COMMAND ${ECHO} '\;' >> ${tmpfile} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${tmpfile} ${dstfile} COMMAND ${CMAKE_COMMAND} -E remove ${tmpfile} - DEPENDS ${srcfile} txt2c) + DEPENDS ${srcfile} txt2c libluajit) set(var ${${varname}}) set(${varname} ${var} ${dstfile} PARENT_SCOPE) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ed9aa3d8e3..fc7bb5b64a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,6 +31,19 @@ lua_source(lua_sources lua/tap.lua) lua_source(lua_sources lua/fio.lua) lua_source(lua_sources lua/strict.lua) lua_source(lua_sources ../third_party/luafun/fun.lua) +# LuaJIT jit.* library +lua_source(lua_sources ../third_party/luajit/src/jit/bc.lua) +lua_source(lua_sources ../third_party/luajit/src/jit/bcsave.lua) +lua_source(lua_sources ../third_party/luajit/src/jit/dis_x86.lua) +lua_source(lua_sources ../third_party/luajit/src/jit/dis_x64.lua) +lua_source(lua_sources ../third_party/luajit/src/jit/dump.lua) +lua_source(lua_sources ../third_party/luajit/src/jit/vmdef.lua) +lua_source(lua_sources ../third_party/luajit/src/jit/v.lua) +if (EXISTS ../third_party/luajit/src/jit/p.lua) + # Profiler LuaJIT 2.1+ + lua_source(lua_sources ../third_party/luajit/src/jit/p.lua) + lua_source(lua_sources ../third_party/luajit/src/jit/zone.lua) +endif() add_custom_target(generate_lua_sources WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/box diff --git a/src/lua/init.cc b/src/lua/init.cc index 00f3a98852..230bf235ab 100644 --- a/src/lua/init.cc +++ b/src/lua/init.cc @@ -88,7 +88,18 @@ extern char strict_lua[], help_lua[], help_en_US_lua[], tap_lua[], - fio_lua[]; + fio_lua[], + /* jit.* library */ + vmdef_lua[], + bc_lua[], + bcsave_lua[], + dis_x86_lua[], + dis_x64_lua[], + dump_lua[], + v_lua[]; +#if LUAJIT_VERSION_NUM >= 20100 /* LuaJIT 2.1+ */ +extern char p_lua[], zone_lua[]; +#endif /* LuaJIT 2.1+ */ static const char *lua_modules[] = { /* Make it first to affect load of all other modules */ @@ -109,6 +120,19 @@ static const char *lua_modules[] = { "tap", tap_lua, "help.en_US", help_en_US_lua, "help", help_lua, + /* jit.* library */ + "jit.vmdef", vmdef_lua, + "jit.bc", bc_lua, + "jit.bcsave", bcsave_lua, + "jit.dis_x86", dis_x86_lua, + "jit.dis_x64", dis_x64_lua, + "jit.dump", dump_lua, + "jit.v", v_lua, +#if LUAJIT_VERSION_NUM >= 20100 /* LuaJIT 2.1+ */ + /* Profiler */ + "jit.p", p_lua, + "jit.zone", zone_lua, +#endif /* LuaJIT 2.1+ */ NULL }; @@ -366,8 +390,13 @@ tarantool_lua_init(const char *tarantool_bin, int argc, char **argv) if (luaL_loadbuffer(L, modsrc, strlen(modsrc), modfile)) panic("Error loading Lua module %s...: %s", modname, lua_tostring(L, -1)); - lua_call(L, 0, 1); - lua_setfield(L, -3, modname); /* package.loaded.modname = t */ + lua_pushstring(L, modname); + lua_call(L, 1, 1); + if (!lua_isnil(L, -1)) { + lua_setfield(L, -3, modname); /* package.loaded.modname = t */ + } else { + lua_pop(L, 1); /* nil */ + } lua_pop(L, 1); /* chunkname */ } lua_pop(L, 1); /* _LOADED */ -- GitLab