Ocloc: Add -s to options string for non-spirv input with -g option passed

Automatically add "-s" (source path) option if -g flag is present.
This applies only to non-spirv input.
- Due to conflict, do not automatically append source path when
CMC compiler is used.

Related-To: NEO-7285
Signed-off-by: Kacper Nowak kacper.nowak@intel.com
This commit is contained in:
Kacper Nowak
2022-09-09 18:44:06 +00:00
committed by Compute-Runtime-Automation
parent ccdb5aaa2a
commit 963930925a
4 changed files with 131 additions and 0 deletions

View File

@ -1243,6 +1243,123 @@ TEST_F(OfflineCompilerTests, givenDebugOptionThenInternalOptionShouldContainKern
EXPECT_TRUE(hasSubstr(internalOptions, "-cl-kernel-debug-enable"));
}
TEST_F(OfflineCompilerTests, givenDebugOptionAndNonSpirvInputThenOptionsShouldContainDashSOptionAppendedAutomatically) {
auto mockOfflineCompiler = std::unique_ptr<MockOfflineCompiler>(new MockOfflineCompiler());
mockOfflineCompiler->uniqueHelper->callBaseFileExists = false;
mockOfflineCompiler->uniqueHelper->callBaseLoadDataFromFile = false;
mockOfflineCompiler->uniqueHelper->filesMap["some_input.cl"] = "";
std::vector<std::string> argv = {
"ocloc",
"-q",
"-options",
"-g",
"-file",
"some_input.cl",
"-device",
gEnvironment->devicePrefix.c_str()};
mockOfflineCompiler->initialize(argv.size(), argv);
const auto &options = mockOfflineCompiler->options;
std::string appendedOption{"-s \"some_input.cl\""};
EXPECT_TRUE(hasSubstr(options, appendedOption));
}
TEST_F(OfflineCompilerTests, givenDebugOptionAndNonSpirvInputWhenFilenameIsSeparatedWithSpacesThenAppendedSourcePathIsSetCorrectly) {
auto mockOfflineCompiler = std::unique_ptr<MockOfflineCompiler>(new MockOfflineCompiler());
mockOfflineCompiler->uniqueHelper->callBaseFileExists = false;
mockOfflineCompiler->uniqueHelper->callBaseLoadDataFromFile = false;
mockOfflineCompiler->uniqueHelper->filesMap["filename with spaces.cl"] = "";
std::vector<std::string> argv = {
"ocloc",
"-q",
"-options",
"-g",
"-file",
"filename with spaces.cl",
"-device",
gEnvironment->devicePrefix.c_str()};
const auto result = mockOfflineCompiler->initialize(argv.size(), argv);
EXPECT_EQ(OclocErrorCode::SUCCESS, result);
const auto &options = mockOfflineCompiler->options;
std::string appendedOption{"-s \"filename with spaces.cl\""};
EXPECT_TRUE(hasSubstr(options, appendedOption));
}
TEST_F(OfflineCompilerTests, givenDebugOptionAndSpirvInputThenDoNotAppendDashSOptionAutomatically) {
auto mockOfflineCompiler = std::unique_ptr<MockOfflineCompiler>(new MockOfflineCompiler());
mockOfflineCompiler->uniqueHelper->callBaseFileExists = false;
mockOfflineCompiler->uniqueHelper->callBaseLoadDataFromFile = false;
mockOfflineCompiler->uniqueHelper->filesMap["some_input.spirv"] = "";
std::vector<std::string> argvSpirvInput = {
"ocloc",
"-q",
"-spirv_input",
"-options",
"-g",
"-file",
"some_input.spirv",
"-device",
gEnvironment->devicePrefix.c_str()};
mockOfflineCompiler->initialize(argvSpirvInput.size(), argvSpirvInput);
const auto &options = mockOfflineCompiler->options;
std::string notAppendedOption{"-s \"some_input.spirv\""};
EXPECT_FALSE(hasSubstr(options, notAppendedOption));
}
TEST_F(OfflineCompilerTests, givenDebugOptionWhenCompilerIsCMCThenDoNotAppendDashSOptionAutomatically) {
auto mockOfflineCompiler = std::unique_ptr<MockOfflineCompiler>(new MockOfflineCompiler());
mockOfflineCompiler->uniqueHelper->callBaseFileExists = false;
mockOfflineCompiler->uniqueHelper->callBaseLoadDataFromFile = false;
mockOfflineCompiler->uniqueHelper->filesMap["some_input.cl"] = "";
std::vector<std::string> argvSpirvInput = {
"ocloc",
"-q",
"-options",
"-g cmc",
"-file",
"some_input.cl",
"-device",
gEnvironment->devicePrefix.c_str()};
mockOfflineCompiler->initialize(argvSpirvInput.size(), argvSpirvInput);
const auto &options = mockOfflineCompiler->options;
std::string notAppendedOption{"-s \"some_input.spirv\""};
EXPECT_FALSE(hasSubstr(options, notAppendedOption));
}
TEST_F(OfflineCompilerTests, givenDebugOptionAndDashSOptionPassedManuallyThenDoNotAppendDashSOptionAutomatically) {
auto mockOfflineCompiler = std::unique_ptr<MockOfflineCompiler>(new MockOfflineCompiler());
mockOfflineCompiler->uniqueHelper->callBaseFileExists = false;
mockOfflineCompiler->uniqueHelper->callBaseLoadDataFromFile = false;
mockOfflineCompiler->uniqueHelper->filesMap["some_input.cl"] = "";
std::vector<std::string> argvDashSPassed = {
"ocloc",
"-q",
"-options",
"-g -s \"mockPath/some_input.cl\"",
"-file",
"some_input.cl",
"-device",
gEnvironment->devicePrefix.c_str()};
mockOfflineCompiler->initialize(argvDashSPassed.size(), argvDashSPassed);
const auto &options = mockOfflineCompiler->options;
std::string appendedOption{"-s"};
auto occurrences = 0u;
size_t pos = 0u;
while ((pos = options.find(appendedOption, pos)) != std::string::npos) {
occurrences++;
pos++;
}
EXPECT_EQ(1u, occurrences);
}
TEST_F(OfflineCompilerTests, givenDashGInBiggerOptionStringWhenInitializingThenInternalOptionsShouldNotContainKernelDebugEnable) {
std::vector<std::string> argv = {