Files
compute-runtime/shared/source/compiler_interface/linux/os_compiler_cache_helper.cpp
Fabian Zwoliński ea5b586c37 fix: move pathExists out of sys calls and do not mock it
Moved pathExists from SysCalls to path.h.
In ULTs, use unchanged pathExists and mock stat, getFileAttributesA instead.
Add Windows and Linux ULTs for pathExists.

Signed-off-by: Fabian Zwoliński <fabian.zwolinski@intel.com>
2024-09-10 19:24:45 +02:00

84 lines
2.2 KiB
C++

/*
* Copyright (C) 2023-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/compiler_interface/os_compiler_cache_helper.h"
#include "shared/source/helpers/path.h"
#include "shared/source/os_interface/debug_env_reader.h"
#include "shared/source/os_interface/linux/sys_calls.h"
#include "shared/source/utilities/io_functions.h"
#include "os_inc.h"
#include <dlfcn.h>
#include <link.h>
namespace NEO {
bool createCompilerCachePath(std::string &cacheDir) {
if (NEO::pathExists(cacheDir)) {
if (NEO::pathExists(joinPath(cacheDir, "neo_compiler_cache"))) {
cacheDir = joinPath(cacheDir, "neo_compiler_cache");
return true;
}
if (NEO::SysCalls::mkdir(joinPath(cacheDir, "neo_compiler_cache")) == 0) {
cacheDir = joinPath(cacheDir, "neo_compiler_cache");
return true;
} else {
if (errno == EEXIST) {
cacheDir = joinPath(cacheDir, "neo_compiler_cache");
return true;
}
}
}
cacheDir = "";
return false;
}
bool checkDefaultCacheDirSettings(std::string &cacheDir, NEO::EnvironmentVariableReader &reader) {
std::string emptyString = "";
cacheDir = reader.getSetting("XDG_CACHE_HOME", emptyString);
if (cacheDir.empty()) {
cacheDir = reader.getSetting("HOME", emptyString);
if (cacheDir.empty()) {
return false;
}
// .cache might not exist on fresh installation
cacheDir = joinPath(cacheDir, ".cache/");
if (!NEO::pathExists(cacheDir)) {
NEO::SysCalls::mkdir(cacheDir);
}
return createCompilerCachePath(cacheDir);
}
if (NEO::pathExists(cacheDir)) {
return createCompilerCachePath(cacheDir);
}
return false;
}
time_t getFileModificationTime(const std::string &path) {
struct stat st;
if (NEO::SysCalls::stat(path, &st) == 0) {
return st.st_mtime;
}
return 0;
}
size_t getFileSize(const std::string &path) {
struct stat st;
if (NEO::SysCalls::stat(path, &st) == 0) {
return static_cast<size_t>(st.st_size);
}
return 0u;
}
} // namespace NEO