swr/rast: add CreateDirectoryPath to recursively create directories
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
This commit is contained in:
parent
f094d582ec
commit
7e35777624
|
@ -22,8 +22,14 @@
|
|||
****************************************************************************/
|
||||
|
||||
#include "common/os.h"
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
|
||||
#if defined(FORCE_LINUX) || defined(__linux__) || defined(__gnu_linux__)
|
||||
#if defined(_WIN32)
|
||||
#include <shlobj.h>
|
||||
#endif // Windows
|
||||
|
||||
#if defined(__APPLE__) || defined(FORCE_LINUX) || defined(__linux__) || defined(__gnu_linux__)
|
||||
#include <pthread.h>
|
||||
#endif // Linux
|
||||
|
||||
|
@ -105,3 +111,43 @@ void SWR_API SetCurrentThreadName(const char* pThreadName)
|
|||
pthread_setname_np(pthread_self(), pThreadName);
|
||||
#endif // Linux
|
||||
}
|
||||
|
||||
static void SplitString(std::vector<std::string>& out_segments, const std::string& input, char splitToken)
|
||||
{
|
||||
out_segments.clear();
|
||||
|
||||
std::istringstream f(input);
|
||||
std::string s;
|
||||
while (std::getline(f, s, splitToken))
|
||||
{
|
||||
if (s.size())
|
||||
{
|
||||
out_segments.push_back(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SWR_API CreateDirectoryPath(const std::string& path)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
SHCreateDirectoryExA(nullptr, path.c_str(), nullptr);
|
||||
#endif // Windows
|
||||
|
||||
#if defined(__APPLE__) || defined(FORCE_LINUX) || defined(__linux__) || defined(__gnu_linux__)
|
||||
std::vector<std::string> pathSegments;
|
||||
SplitString(pathSegments, path, '/');
|
||||
|
||||
std::string tmpPath;
|
||||
for (auto const& segment : pathSegments)
|
||||
{
|
||||
tmpPath.push_back('/');
|
||||
tmpPath += segment;
|
||||
|
||||
int result = mkdir(tmpPath.c_str(), 0777);
|
||||
if (result == -1 && errno != EEXIST)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif // Unix
|
||||
}
|
||||
|
|
|
@ -234,8 +234,6 @@ void AlignedFree(void* p)
|
|||
pid_t gettid(void);
|
||||
#define GetCurrentThreadId gettid
|
||||
|
||||
#define CreateDirectory(name, pSecurity) mkdir(name, 0777)
|
||||
|
||||
#define InterlockedCompareExchange(Dest, Exchange, Comparand) __sync_val_compare_and_swap(Dest, Comparand, Exchange)
|
||||
#define InterlockedExchangeAdd(Addend, Value) __sync_fetch_and_add(Addend, Value)
|
||||
#define InterlockedDecrement(Append) __sync_sub_and_fetch(Append, 1)
|
||||
|
@ -281,5 +279,6 @@ typedef MEGABYTE GIGABYTE[1024];
|
|||
|
||||
// Defined in os.cpp
|
||||
void SWR_API SetCurrentThreadName(const char* pThreadName);
|
||||
void SWR_API CreateDirectoryPath(const std::string& path);
|
||||
|
||||
#endif//__SWR_OS_H__
|
||||
|
|
|
@ -159,9 +159,9 @@ JitManager::JitManager(uint32_t simdWidth, const char *arch, const char* core)
|
|||
#if defined(_WIN32)
|
||||
if (KNOB_DUMP_SHADER_IR)
|
||||
{
|
||||
CreateDirectory(INTEL_OUTPUT_DIR, NULL);
|
||||
CreateDirectory(SWR_OUTPUT_DIR, NULL);
|
||||
CreateDirectory(JITTER_OUTPUT_DIR, NULL);
|
||||
CreateDirectoryPath(INTEL_OUTPUT_DIR);
|
||||
CreateDirectoryPath(SWR_OUTPUT_DIR);
|
||||
CreateDirectoryPath(JITTER_OUTPUT_DIR);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -204,7 +204,7 @@ void JitManager::DumpAsm(Function* pFunction, const char* fileName)
|
|||
const char* pBaseName = strrchr(procname, '\\');
|
||||
std::stringstream outDir;
|
||||
outDir << JITTER_OUTPUT_DIR << pBaseName << "_" << pid << std::ends;
|
||||
CreateDirectory(outDir.str().c_str(), NULL);
|
||||
CreateDirectoryPath(outDir.str().c_str());
|
||||
#endif
|
||||
|
||||
std::error_code EC;
|
||||
|
@ -242,7 +242,7 @@ void JitManager::DumpToFile(Function *f, const char *fileName)
|
|||
const char* pBaseName = strrchr(procname, '\\');
|
||||
std::stringstream outDir;
|
||||
outDir << JITTER_OUTPUT_DIR << pBaseName << "_" << pid << std::ends;
|
||||
CreateDirectory(outDir.str().c_str(), NULL);
|
||||
CreateDirectoryPath(outDir.str().c_str());
|
||||
#endif
|
||||
|
||||
std::error_code EC;
|
||||
|
|
Loading…
Reference in New Issue