diff --git a/src/c/CudaMex.vcxproj b/src/c/CudaMex.vcxproj index 3860364c274dcf477f3cd48f6ad311501a84e641..d70e3a1cbcdea62a3af38757e39f226bf2855ada 100644 --- a/src/c/CudaMex.vcxproj +++ b/src/c/CudaMex.vcxproj @@ -127,6 +127,7 @@ copy $(OutDir)CudaMex.dll "$(ProjectDir)Mex.mexw64"</Command> <ClInclude Include="ScriptCmds\Commands\ScrCmdVarFilter.h" /> <ClInclude Include="ScriptCmds\Commands\ScrCmdWienerFilter.h" /> <ClInclude Include="ScriptCmds\GenCommands.h" /> + <ClInclude Include="ScriptCmds\HydraConfig.h" /> <ClInclude Include="ScriptCmds\ScopedProcessMutex.h" /> <ClInclude Include="ScriptCmds\ScriptCommand.h" /> <ClInclude Include="ScriptCmds\ScriptCommandDefines.h" /> diff --git a/src/c/CudaMex.vcxproj.filters b/src/c/CudaMex.vcxproj.filters index c2c47e840223cd7deffa8271faff20c01b8c16de..e7285431b74f8e2cb2a64ebd9a22dde046c94c46 100644 --- a/src/c/CudaMex.vcxproj.filters +++ b/src/c/CudaMex.vcxproj.filters @@ -156,6 +156,9 @@ <ClInclude Include="ScriptCmds\ScopedProcessMutex.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="ScriptCmds\HydraConfig.h"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="Mex\CudaMex.cpp"> diff --git a/src/c/CudaPy3DLL.vcxproj b/src/c/CudaPy3DLL.vcxproj index d1fb77e7d418063d65e5544060ccef899f0c0b0e..6801ec4411cf58bca4cff8b32bd8c7a9c4adc89d 100644 --- a/src/c/CudaPy3DLL.vcxproj +++ b/src/c/CudaPy3DLL.vcxproj @@ -57,6 +57,7 @@ <ClInclude Include="ScriptCmds\Commands\ScrCmdVarFilter.h" /> <ClInclude Include="ScriptCmds\Commands\ScrCmdWienerFilter.h" /> <ClInclude Include="ScriptCmds\GenCommands.h" /> + <ClInclude Include="ScriptCmds\HydraConfig.h" /> <ClInclude Include="ScriptCmds\ScopedProcessMutex.h" /> <ClInclude Include="ScriptCmds\ScriptCommand.h" /> <ClInclude Include="ScriptCmds\ScriptCommandDefines.h" /> diff --git a/src/c/CudaPy3DLL.vcxproj.filters b/src/c/CudaPy3DLL.vcxproj.filters index c691ca69c64de7c2a397e6f2b093802952813f4c..f8a085fc5cf566da22a556b93c94788dece66b23 100644 --- a/src/c/CudaPy3DLL.vcxproj.filters +++ b/src/c/CudaPy3DLL.vcxproj.filters @@ -167,5 +167,8 @@ <ClInclude Include="ScriptCmds\ScopedProcessMutex.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="ScriptCmds\HydraConfig.h"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> </Project> diff --git a/src/c/Mex/CudaMex.cpp b/src/c/Mex/CudaMex.cpp index b331b7b82edf46fa86399fd301025a2085373d17..062a57ae953041a413263e1f4096d3ad7c70a644 100644 --- a/src/c/Mex/CudaMex.cpp +++ b/src/c/Mex/CudaMex.cpp @@ -5,7 +5,9 @@ #define DLL_EXPORT_SYM __attribute__((visibility("default"))) #endif -#include "MexIncludes.h" +#include "ScriptCmds/ScriptIncludes.h" + +HYDRA_CONFIG_MODULE(); void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) { diff --git a/src/c/Mex/MexCommandModule.cpp b/src/c/Mex/MexCommandModule.cpp index 5a1d31501e540da44ba721f006ae867d1edf7ca9..09bc45e580a736e19c43775687f8cd9657ad8ae9 100644 --- a/src/c/Mex/MexCommandModule.cpp +++ b/src/c/Mex/MexCommandModule.cpp @@ -1 +1,2 @@ +#include "ScriptCmds/HydraConfig.h" #include "ScriptCmds/ScriptCommandModule.h" diff --git a/src/c/Python/PyCommandModule.cpp b/src/c/Python/PyCommandModule.cpp index 7f94d61083944d389c97f3e4cbf9a0c1ed1faf81..09bc45e580a736e19c43775687f8cd9657ad8ae9 100644 --- a/src/c/Python/PyCommandModule.cpp +++ b/src/c/Python/PyCommandModule.cpp @@ -1,2 +1,2 @@ - +#include "ScriptCmds/HydraConfig.h" #include "ScriptCmds/ScriptCommandModule.h" diff --git a/src/c/Python/hip_module.cpp b/src/c/Python/hip_module.cpp index eef11b2ba34c939cb86e0b92c99d90a742f294be..598e9396e2766555121c8144681db8faae592d46 100644 --- a/src/c/Python/hip_module.cpp +++ b/src/c/Python/hip_module.cpp @@ -4,6 +4,8 @@ #define NUMPY_IMPORT_MODULE #include "ScriptCmds/ScriptIncludes.h" +HYDRA_CONFIG_MODULE(); + // Make this a unique pointer just in case init can be run more than once static std::unique_ptr<PyMethodDef[]> hip_methods = nullptr; static std::unique_ptr<std::string[]> hip_docstrs = nullptr; diff --git a/src/c/ScriptCmds/HydraConfig.h b/src/c/ScriptCmds/HydraConfig.h new file mode 100644 index 0000000000000000000000000000000000000000..1f1784ed522b4ddec44736de30eac3f580a90fe6 --- /dev/null +++ b/src/c/ScriptCmds/HydraConfig.h @@ -0,0 +1,65 @@ +#pragma once +// HydraConfig - Provides a simple environment-variable based config loader to allow some +// configuration of the Hyrda library (e.g. enabling process-level mutex) + +#include <cstdlib> +#include <cstring> +#include <string> +#include <algorithm> + +class HydraConfig +{ +public: + static bool validConfig() + { + return m_staticInst; + } + + static bool useProcessMutex() + { + if (!m_staticInst) + return false; + + return m_staticInst->bUseProcessMutex; + } + +private: + HydraConfig() + { + defaultConfig(this); + } + + static void defaultConfig(HydraConfig* pInst) + { + pInst->bUseProcessMutex = false; + } + + // TODO: Use env-variable to find a config file instead of env-variables for direct configuration + static void loadConfig(HydraConfig* pInst) + { + char* envUPM = std::getenv("HYDRA_ENABLE_MUTEX"); + if ( envUPM ) + { + std::string envStr(envUPM); + std::transform(envStr.begin(), envStr.end(), envStr.begin(), ::toupper); + + if ( envStr == "TRUE" || envStr == "1" ) + pInst->bUseProcessMutex = true; + } + } + + static HydraConfig* initConfig() + { + HydraConfig* pInst = new HydraConfig(); + + HydraConfig::loadConfig(pInst); + return pInst; + } + +private: + bool bUseProcessMutex; + + static HydraConfig* m_staticInst; +}; + +#define HYDRA_CONFIG_MODULE() HydraConfig* HydraConfig::m_staticInst = HydraConfig::initConfig() diff --git a/src/c/ScriptCmds/ScriptIncludes.h b/src/c/ScriptCmds/ScriptIncludes.h index 724bcacc5ee73ad78d455732604ecf2cfb2e3c56..c4f9f6c8832c115808dbbcdcbcd7a781ddd76f26 100644 --- a/src/c/ScriptCmds/ScriptIncludes.h +++ b/src/c/ScriptCmds/ScriptIncludes.h @@ -11,5 +11,7 @@ #undef max #undef min +#include "ScriptCmds/HydraConfig.h" + #include "ScriptCmds/ScriptHelpers.h" #include "ScriptCmds/ScriptCommand.h"