diff --git a/shared/source/compiler_interface/default_cache_config.cpp b/shared/source/compiler_interface/default_cache_config.cpp index 74587769ff..4bf843996d 100644 --- a/shared/source/compiler_interface/default_cache_config.cpp +++ b/shared/source/compiler_interface/default_cache_config.cpp @@ -34,6 +34,7 @@ CompilerCacheConfig getDefaultCompilerCacheConfig() { if (isAnyIgcEnvVarSet()) { ret.enabled = false; + PRINT_DEBUG_STRING(NEO::debugManager.flags.PrintDebugMessages.get(), stdout, "WARNING: Detected IGC_* environment variable(s). Compiler cache is disabled.\n"); return ret; } diff --git a/shared/test/unit_test/compiler_interface/linux/default_cl_cache_config_tests.cpp b/shared/test/unit_test/compiler_interface/linux/default_cl_cache_config_tests.cpp index 0aa4eb89b3..942df42f08 100644 --- a/shared/test/unit_test/compiler_interface/linux/default_cl_cache_config_tests.cpp +++ b/shared/test/unit_test/compiler_interface/linux/default_cl_cache_config_tests.cpp @@ -391,7 +391,7 @@ TEST(ClCacheDefaultConfigLinuxTest, GivenNeoCachePersistentSetToZeroWhenGetDefau TEST(ClCacheDefaultConfigLinuxTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigIsEnabledOrDisabledAsExpected) { DebugManagerStateRestore restorer; - debugManager.flags.PrintDebugMessages.set(true); + debugManager.flags.PrintDebugMessages.set(false); std::unordered_map mockableEnvs; mockableEnvs["NEO_CACHE_PERSISTENT"] = "1"; @@ -423,15 +423,9 @@ TEST(ClCacheDefaultConfigLinuxTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigIsEna VariableBackup *> mockableEnvValuesBackup(&NEO::IoFunctions::mockableEnvValues, &mockableEnvs); VariableBackup statBackup(&NEO::SysCalls::sysCallsStat, statMock); - StreamCapture capture; - capture.captureStdout(); - auto cacheConfig = NEO::getDefaultCompilerCacheConfig(); - std::string output = capture.getCapturedStdout(); - EXPECT_TRUE(cacheConfig.enabled); EXPECT_EQ(cacheConfig.cacheDir, "ult/directory/"); - EXPECT_STREQ(output.c_str(), "NEO_CACHE_PERSISTENT is enabled. Cache is located in: ult/directory/\n\n"); mockableEnvs["IGC_DEBUG"] = "1"; environVec = buildEnviron(mockableEnvs, envStorage); @@ -442,14 +436,57 @@ TEST(ClCacheDefaultConfigLinuxTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigIsEna mockableEnvs.erase("IGC_DEBUG"); environVec = buildEnviron(mockableEnvs, envStorage); NEO::ULT::setMockEnviron(environVec.data()); - capture.captureStdout(); cacheConfig = NEO::getDefaultCompilerCacheConfig(); - output = capture.getCapturedStdout(); - EXPECT_TRUE(cacheConfig.enabled); EXPECT_EQ(cacheConfig.cacheDir, "ult/directory/"); - EXPECT_STREQ(output.c_str(), "NEO_CACHE_PERSISTENT is enabled. Cache is located in: ult/directory/\n\n"); NEO::ULT::setMockEnviron(nullptr); } + +TEST(ClCacheDefaultConfigLinuxTest, GivenIgcEnvVarSetWhenGetDefaultCacheConfigThenWarningIsPrinted) { + DebugManagerStateRestore restorer; + debugManager.flags.PrintDebugMessages.set(true); + + std::unordered_map mockableEnvs; + mockableEnvs["NEO_CACHE_PERSISTENT"] = "1"; + mockableEnvs["NEO_CACHE_MAX_SIZE"] = "22"; + mockableEnvs["NEO_CACHE_DIR"] = "ult/directory/"; + mockableEnvs["IGC_DEBUG"] = "1"; + + auto statMock = [](const std::string &filePath, struct stat *statbuf) noexcept { + statbuf->st_mode = S_IFDIR; + return 0; + }; + + auto buildEnviron = [](const std::unordered_map &envs, std::vector &storage) { + storage.clear(); + for (const auto &kv : envs) { + storage.push_back(kv.first + "=" + kv.second); + } + std::vector result; + for (auto &str : storage) { + result.push_back(const_cast(str.c_str())); + } + result.push_back(nullptr); + return result; + }; + + std::vector envStorage; + auto environVec = buildEnviron(mockableEnvs, envStorage); + NEO::ULT::setMockEnviron(environVec.data()); + + VariableBackup *> mockableEnvValuesBackup(&NEO::IoFunctions::mockableEnvValues, &mockableEnvs); + VariableBackup statBackup(&NEO::SysCalls::sysCallsStat, statMock); + + StreamCapture capture; + capture.captureStdout(); + auto cacheConfig = NEO::getDefaultCompilerCacheConfig(); + std::string output = capture.getCapturedStdout(); + + EXPECT_FALSE(cacheConfig.enabled); + EXPECT_STREQ(output.c_str(), "WARNING: Detected IGC_* environment variable(s). Compiler cache is disabled.\n"); + + NEO::ULT::setMockEnviron(nullptr); +} + } // namespace NEO diff --git a/shared/test/unit_test/compiler_interface/windows/default_cl_cache_config_tests.cpp b/shared/test/unit_test/compiler_interface/windows/default_cl_cache_config_tests.cpp index 227a1424d1..83e240a9e6 100644 --- a/shared/test/unit_test/compiler_interface/windows/default_cl_cache_config_tests.cpp +++ b/shared/test/unit_test/compiler_interface/windows/default_cl_cache_config_tests.cpp @@ -293,7 +293,7 @@ TEST_F(ClCacheDefaultConfigWindowsTest, GivenPrintDebugMessagesWhenCacheIsEnable TEST_F(ClCacheDefaultConfigWindowsTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigIsEnabledOrDisabledAsExpected) { DebugManagerStateRestore restorer; - debugManager.flags.PrintDebugMessages.set(true); + debugManager.flags.PrintDebugMessages.set(false); mockableEnvs["NEO_CACHE_PERSISTENT"] = "1"; mockableEnvs["NEO_CACHE_MAX_SIZE"] = "22"; @@ -303,15 +303,10 @@ TEST_F(ClCacheDefaultConfigWindowsTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigI wchar_t envBlockNoIgc[] = L"NEO_CACHE_PERSISTENT=1\0NEO_CACHE_MAX_SIZE=22\0NEO_CACHE_DIR=ult\\directory\\\0\0"; SysCalls::mockEnvStringsW = envBlockNoIgc; - StreamCapture capture; - capture.captureStdout(); - auto cacheConfig = getDefaultCompilerCacheConfig(); - std::string output = capture.getCapturedStdout(); EXPECT_TRUE(cacheConfig.enabled); EXPECT_EQ(cacheConfig.cacheDir, "ult\\directory\\"); - EXPECT_STREQ(output.c_str(), "NEO_CACHE_PERSISTENT is enabled. Cache is located in: ult\\directory\\\n\n"); wchar_t envBlockWithIgc[] = L"IGC_DEBUG=1\0NEO_CACHE_PERSISTENT=1\0NEO_CACHE_MAX_SIZE=22\0NEO_CACHE_DIR=ult\\directory\\\0\0"; SysCalls::mockEnvStringsW = envBlockWithIgc; @@ -320,14 +315,32 @@ TEST_F(ClCacheDefaultConfigWindowsTest, GivenIgcEnvVarSetOrUnsetThenCacheConfigI EXPECT_FALSE(cacheConfig.enabled); SysCalls::mockEnvStringsW = envBlockNoIgc; - StreamCapture capture2; - capture2.captureStdout(); cacheConfig = getDefaultCompilerCacheConfig(); - output = capture2.getCapturedStdout(); EXPECT_TRUE(cacheConfig.enabled); EXPECT_EQ(cacheConfig.cacheDir, "ult\\directory\\"); - EXPECT_STREQ(output.c_str(), "NEO_CACHE_PERSISTENT is enabled. Cache is located in: ult\\directory\\\n\n"); +} + +TEST_F(ClCacheDefaultConfigWindowsTest, GivenIgcEnvVarSetWhenGetDefaultCacheConfigThenWarningIsPrinted) { + DebugManagerStateRestore restorer; + debugManager.flags.PrintDebugMessages.set(true); + + mockableEnvs["NEO_CACHE_PERSISTENT"] = "1"; + mockableEnvs["NEO_CACHE_MAX_SIZE"] = "22"; + mockableEnvs["NEO_CACHE_DIR"] = "ult\\directory\\"; + DWORD getFileAttributesResultMock = FILE_ATTRIBUTE_DIRECTORY; + VariableBackup pathExistsMockBackup(&SysCalls::getFileAttributesResult, getFileAttributesResultMock); + + wchar_t envBlockWithIgc[] = L"IGC_DEBUG=1\0NEO_CACHE_PERSISTENT=1\0NEO_CACHE_MAX_SIZE=22\0NEO_CACHE_DIR=ult\\directory\\\0\0"; + SysCalls::mockEnvStringsW = envBlockWithIgc; + + StreamCapture capture; + capture.captureStdout(); + auto cacheConfig = getDefaultCompilerCacheConfig(); + std::string output = capture.getCapturedStdout(); + + EXPECT_FALSE(cacheConfig.enabled); + EXPECT_STREQ(output.c_str(), "WARNING: Detected IGC_* environment variable(s). Compiler cache is disabled.\n"); } } // namespace NEO