From be8b130d14166145787f4e8e9b194b98c98c873d Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 7 Aug 2017 08:14:04 +0100 Subject: [Minor] Allow to detect torch support from Lua --- CMakeLists.txt | 1 + config.h.in | 1 + src/lua/lua_config.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c5f874375..82498acdf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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() diff --git a/config.h.in b/config.h.in index 8e89c04ff..29a2a4581 100644 --- a/config.h.in +++ b/config.h.in @@ -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 diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c index b01b0c5a0..79dd11e76 100644 --- a/src/lua/lua_config.c +++ b/src/lua/lua_config.c @@ -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) { -- cgit v1.2.3