Browse Source

[Minor] Allow to detect torch support from Lua

tags/1.7.0
Vsevolod Stakhov 6 years ago
parent
commit
be8b130d14
3 changed files with 38 additions and 0 deletions
  1. 1
    0
      CMakeLists.txt
  2. 1
    0
      config.h.in
  3. 36
    0
      src/lua/lua_config.c

+ 1
- 0
CMakeLists.txt View File

@@ -1267,6 +1267,7 @@ IF(ENABLE_TORCH MATCHES "ON")
ADD_SUBDIRECTORY(contrib/torch/paths)
ADD_SUBDIRECTORY(contrib/torch/torch7)
ADD_SUBDIRECTORY(contrib/torch/nn)
SET(WITH_TORCH 1)
ELSE()
MESSAGE(FATAL_ERROR "Cannot enable torch without luajit")
ENDIF()

+ 1
- 0
config.h.in View File

@@ -137,6 +137,7 @@
#cmakedefine WITH_SNOWBALL 1
#cmakedefine WITH_SQLITE 1
#cmakedefine WITH_SYSTEM_HIREDIS 1
#cmakedefine WITH_TORCH 1

#cmakedefine DISABLE_PTHREAD_MUTEX 1


+ 36
- 0
src/lua/lua_config.c View File

@@ -639,6 +639,14 @@ LUA_FUNCTION_DEF (config, set_peak_cb);
*/
LUA_FUNCTION_DEF (config, get_cpu_flags);

/***
* @method rspamd_config:has_torch()
* Returns true if Rspamd is compiled with torch support and the runtime CPU
* supports sse4.2 required for torch.
* @return {boolean} true if torch is compiled and supported
*/
LUA_FUNCTION_DEF (config, has_torch);

static const struct luaL_reg configlib_m[] = {
LUA_INTERFACE_DEF (config, get_module_opt),
LUA_INTERFACE_DEF (config, get_mempool),
@@ -686,6 +694,7 @@ static const struct luaL_reg configlib_m[] = {
LUA_INTERFACE_DEF (config, add_example),
LUA_INTERFACE_DEF (config, set_peak_cb),
LUA_INTERFACE_DEF (config, get_cpu_flags),
LUA_INTERFACE_DEF (config, get_cpu_flags),
{"__tostring", rspamd_lua_class_tostring},
{"__newindex", lua_config_newindex},
{NULL, NULL}
@@ -2869,6 +2878,33 @@ lua_config_get_cpu_flags (lua_State *L)
return 1;
}

static gint
lua_config_has_torch (lua_State *L)
{
struct rspamd_config *cfg = lua_check_config (L, 1);
struct rspamd_cryptobox_library_ctx *crypto_ctx;

if (cfg != NULL) {
crypto_ctx = cfg->libs_ctx->crypto_ctx;
#ifndef WITH_TORCH
lua_pushboolean (L, false);
(void)crypto_ctx;
#else
if (crypto_ctx->cpu_config & CPUID_SSE42) {
lua_pushboolean (L, true);
}
else {
lua_pushboolean (L, false);
}
#endif
}
else {
return luaL_error (L, "invalid arguments");
}

return 1;
}

static gint
lua_monitored_alive (lua_State *L)
{

Loading…
Cancel
Save