feature: add new environment variables for compiler cache on Windows

Changes:
- replaced registry keys with environment variables
for cl_cache in OCL
- added compiler cache helpers
- implemented support for new env vars on Windows
- added tests

New env vars mechanism works as follows:
If `PERSISTENT_CACHE` is set,
driver checks if `NEO_CACHE_DIR` is set.
If `NEO_CACHE_DIR` is not set,
driver uses `%LocalAppData%\NEO\neo_compiler_cache`
as `cl_cache` destination folder.
If `NEO_CACHE_DIR` is not set and `%LocalAppData%`
path could not be obtained,
compiler cache is disabled.

In the current Windows implementation,
special characters in the folder path are not supported.

Related-To: NEO-8092
Signed-off-by: Fabian Zwolinski <fabian.zwolinski@intel.com>
This commit is contained in:
Fabian Zwolinski
2023-09-08 11:22:54 +00:00
committed by Compute-Runtime-Automation
parent 5569dac6d0
commit e96dd344c3
12 changed files with 468 additions and 67 deletions

View File

@@ -13,7 +13,7 @@
#include "shared/source/helpers/hash.h"
#include "shared/source/helpers/hw_info.h"
#include "shared/source/helpers/string.h"
#include "shared/source/utilities/debug_settings_reader.h"
#include "shared/source/os_interface/debug_env_reader.h"
#include "shared/source/utilities/io_functions.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h"
#include "shared/test/common/helpers/default_hw_info.h"
@@ -603,7 +603,7 @@ bool pathExistsMock(const std::string &path) {
} // namespace NonExistingPathIsSet
TEST(CompilerCacheHelper, GivenNonExistingPathWhenCheckDefaultCacheDirSettingsThenFalseIsReturned) {
std::unique_ptr<SettingsReader> settingsReader(SettingsReader::createOsReader(false, ""));
NEO::EnvironmentVariableReader envReader;
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["NEO_CACHE_DIR"] = "ult/directory/";
@@ -612,7 +612,7 @@ TEST(CompilerCacheHelper, GivenNonExistingPathWhenCheckDefaultCacheDirSettingsTh
VariableBackup<decltype(NEO::SysCalls::sysCallsPathExists)> pathExistsBackup(&NEO::SysCalls::sysCallsPathExists, NonExistingPathIsSet::pathExistsMock);
std::string cacheDir = "";
EXPECT_FALSE(checkDefaultCacheDirSettings(cacheDir, settingsReader.get()));
EXPECT_FALSE(checkDefaultCacheDirSettings(cacheDir, envReader));
}
namespace XDGEnvPathIsSet {
@@ -628,7 +628,7 @@ bool pathExistsMock(const std::string &path) {
} // namespace XDGEnvPathIsSet
TEST(CompilerCacheHelper, GivenXdgCachePathSetWhenCheckDefaultCacheDirSettingsThenProperPathIsReturned) {
std::unique_ptr<SettingsReader> settingsReader(SettingsReader::createOsReader(false, ""));
NEO::EnvironmentVariableReader envReader;
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["XDG_CACHE_HOME"] = "xdg/directory/";
@@ -638,7 +638,7 @@ TEST(CompilerCacheHelper, GivenXdgCachePathSetWhenCheckDefaultCacheDirSettingsTh
std::string cacheDir = "";
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, settingsReader.get()));
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, envReader));
EXPECT_EQ(cacheDir, "xdg/directory/neo_compiler_cache");
}
@@ -655,7 +655,7 @@ bool pathExistsMock(const std::string &path) {
} // namespace HomeEnvPathIsSet
TEST(CompilerCacheHelper, GivenHomeCachePathSetWhenCheckDefaultCacheDirSettingsThenProperDirectoryIsSet) {
std::unique_ptr<SettingsReader> settingsReader(SettingsReader::createOsReader(false, ""));
NEO::EnvironmentVariableReader envReader;
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["HOME"] = "home/directory/";
@@ -664,7 +664,7 @@ TEST(CompilerCacheHelper, GivenHomeCachePathSetWhenCheckDefaultCacheDirSettingsT
VariableBackup<decltype(NEO::SysCalls::sysCallsPathExists)> pathExistsBackup(&NEO::SysCalls::sysCallsPathExists, HomeEnvPathIsSet::pathExistsMock);
std::string cacheDir = "";
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, settingsReader.get()));
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, envReader));
EXPECT_EQ(cacheDir, "home/directory/.cache/neo_compiler_cache");
}
@@ -691,7 +691,8 @@ int mkdirMock(const std::string &dir) {
} // namespace XdgPathIsSetAndOtherProcessCreatesPath
TEST(CompilerCacheHelper, GivenXdgEnvWhenOtherProcessCreatesNeoCompilerCacheFolderThenProperDirectoryIsReturned) {
std::unique_ptr<SettingsReader> settingsReader(SettingsReader::createOsReader(false, ""));
NEO::EnvironmentVariableReader envReader;
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["XDG_CACHE_HOME"] = "xdg/directory/";
bool mkdirCalledTemp = false;
@@ -702,7 +703,7 @@ TEST(CompilerCacheHelper, GivenXdgEnvWhenOtherProcessCreatesNeoCompilerCacheFold
VariableBackup<bool> mkdirCalledBackup(&XdgPathIsSetAndOtherProcessCreatesPath::mkdirCalled, mkdirCalledTemp);
std::string cacheDir = "";
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, settingsReader.get()));
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, envReader));
EXPECT_EQ(cacheDir, "xdg/directory/neo_compiler_cache");
EXPECT_TRUE(XdgPathIsSetAndOtherProcessCreatesPath::mkdirCalled);
}
@@ -723,7 +724,8 @@ int mkdirMock(const std::string &dir) {
} // namespace XdgPathIsSetAndNeedToCreate
TEST(CompilerCacheHelper, GivenXdgEnvWhenNeoCompilerCacheNotExistsThenCreateNeoCompilerCacheFolder) {
std::unique_ptr<SettingsReader> settingsReader(SettingsReader::createOsReader(false, ""));
NEO::EnvironmentVariableReader envReader;
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["XDG_CACHE_HOME"] = "xdg/directory/";
@@ -732,12 +734,13 @@ TEST(CompilerCacheHelper, GivenXdgEnvWhenNeoCompilerCacheNotExistsThenCreateNeoC
VariableBackup<decltype(NEO::SysCalls::sysCallsMkdir)> mkdirBackup(&NEO::SysCalls::sysCallsMkdir, XdgPathIsSetAndNeedToCreate::mkdirMock);
std::string cacheDir = "";
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, settingsReader.get()));
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, envReader));
EXPECT_EQ(cacheDir, "xdg/directory/neo_compiler_cache");
}
TEST(CompilerCacheHelper, GivenXdgEnvWithoutTrailingSlashWhenNeoCompilerCacheNotExistsThenCreateNeoCompilerCacheFolder) {
std::unique_ptr<SettingsReader> settingsReader(SettingsReader::createOsReader(false, ""));
NEO::EnvironmentVariableReader envReader;
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["XDG_CACHE_HOME"] = "xdg/directory";
@@ -746,7 +749,7 @@ TEST(CompilerCacheHelper, GivenXdgEnvWithoutTrailingSlashWhenNeoCompilerCacheNot
VariableBackup<decltype(NEO::SysCalls::sysCallsMkdir)> mkdirBackup(&NEO::SysCalls::sysCallsMkdir, XdgPathIsSetAndNeedToCreate::mkdirMock);
std::string cacheDir = "";
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, settingsReader.get()));
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, envReader));
EXPECT_EQ(cacheDir, "xdg/directory/neo_compiler_cache");
}
@@ -766,7 +769,7 @@ int mkdirMock(const std::string &dir) {
} // namespace HomePathIsSetAndNeedToCreate
TEST(CompilerCacheHelper, GivenHomeCachePathSetWithoutTrailingSlashWhenCheckDefaultCacheDirSettingsThenProperDirectoryIsCreated) {
std::unique_ptr<SettingsReader> settingsReader(SettingsReader::createOsReader(false, ""));
NEO::EnvironmentVariableReader envReader;
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["HOME"] = "home/directory";
@@ -776,12 +779,12 @@ TEST(CompilerCacheHelper, GivenHomeCachePathSetWithoutTrailingSlashWhenCheckDefa
VariableBackup<decltype(NEO::SysCalls::sysCallsMkdir)> mkdirBackup(&NEO::SysCalls::sysCallsMkdir, HomePathIsSetAndNeedToCreate::mkdirMock);
std::string cacheDir = "";
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, settingsReader.get()));
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, envReader));
EXPECT_EQ(cacheDir, "home/directory/.cache/neo_compiler_cache");
}
TEST(CompilerCacheHelper, GivenHomeCachePathSetWhenCheckDefaultCacheDirSettingsThenProperDirectoryIsCreated) {
std::unique_ptr<SettingsReader> settingsReader(SettingsReader::createOsReader(false, ""));
NEO::EnvironmentVariableReader envReader;
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["HOME"] = "home/directory/";
@@ -791,7 +794,7 @@ TEST(CompilerCacheHelper, GivenHomeCachePathSetWhenCheckDefaultCacheDirSettingsT
VariableBackup<decltype(NEO::SysCalls::sysCallsMkdir)> mkdirBackup(&NEO::SysCalls::sysCallsMkdir, HomePathIsSetAndNeedToCreate::mkdirMock);
std::string cacheDir = "";
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, settingsReader.get()));
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, envReader));
EXPECT_EQ(cacheDir, "home/directory/.cache/neo_compiler_cache");
}
@@ -818,7 +821,8 @@ int mkdirMock(const std::string &dir) {
} // namespace HomePathIsSetAndOtherProcessCreatesPath
TEST(CompilerCacheHelper, GivenHomeEnvWhenOtherProcessCreatesNeoCompilerCacheFolderThenProperDirectoryIsReturned) {
std::unique_ptr<SettingsReader> settingsReader(SettingsReader::createOsReader(false, ""));
NEO::EnvironmentVariableReader envReader;
std::unordered_map<std::string, std::string> mockableEnvs;
mockableEnvs["HOME"] = "home/directory/";
bool mkdirCalledTemp = false;
@@ -829,7 +833,7 @@ TEST(CompilerCacheHelper, GivenHomeEnvWhenOtherProcessCreatesNeoCompilerCacheFol
VariableBackup<bool> mkdirCalledBackup(&HomePathIsSetAndOtherProcessCreatesPath::mkdirCalled, mkdirCalledTemp);
std::string cacheDir = "";
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, settingsReader.get()));
EXPECT_TRUE(checkDefaultCacheDirSettings(cacheDir, envReader));
EXPECT_EQ(cacheDir, "home/directory/.cache/neo_compiler_cache");
EXPECT_TRUE(HomePathIsSetAndOtherProcessCreatesPath::mkdirCalled);
}

View File

@@ -9,8 +9,8 @@
#include "shared/source/compiler_interface/os_compiler_cache_helper.h"
#include "shared/source/helpers/constants.h"
#include "shared/source/helpers/string.h"
#include "shared/source/os_interface/debug_env_reader.h"
#include "shared/source/os_interface/windows/sys_calls.h"
#include "shared/source/utilities/debug_settings_reader.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h"
#include "shared/test/common/helpers/gtest_helpers.h"
#include "shared/test/common/helpers/variable_backup.h"
@@ -83,10 +83,9 @@ class CompilerCacheMockWindows : public CompilerCache {
};
TEST(CompilerCacheHelper, GivenHomeEnvWhenOtherProcessCreatesNeoCompilerCacheFolderThenProperDirectoryIsReturned) {
std::unique_ptr<SettingsReader> settingsReader(SettingsReader::createOsReader(false, ""));
NEO::EnvironmentVariableReader envReader;
std::string cacheDir = "";
EXPECT_FALSE(checkDefaultCacheDirSettings(cacheDir, settingsReader.get()));
EXPECT_FALSE(checkDefaultCacheDirSettings(cacheDir, envReader));
}
namespace SysCalls {