Skip to content

Commit 26f2cbf

Browse files
authored
We need to assume -Fc may be passed with output file name quoted together with "" - split it and do the same DXC executable does
1 parent d869c6b commit 26f2cbf

File tree

1 file changed

+50
-14
lines changed

1 file changed

+50
-14
lines changed

tools/nsc/main.cpp

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,23 +61,59 @@ class ShaderCompiler final : public system::IApplicationFramework
6161
m_arguments.erase(builtin_flag_pos);
6262
}
6363

64-
auto output_flag_pos = std::find(m_arguments.begin(), m_arguments.end(), "-Fo");
65-
if (output_flag_pos == m_arguments.end())
66-
output_flag_pos = std::find(m_arguments.begin(), m_arguments.end(), "-Fc");
67-
68-
if (output_flag_pos == m_arguments.end()) {
69-
m_logger->log("Missing arguments. Expecting `-Fo {filename}` or `-Fc {filename}`.", ILogger::ELL_ERROR);
64+
auto split = [&](const std::string& str, char delim)
65+
{
66+
std::vector<std::string> strings;
67+
size_t start, end = 0;
68+
69+
while ((start = str.find_first_not_of(delim, end)) != std::string::npos)
70+
{
71+
end = str.find(delim, start);
72+
strings.push_back(str.substr(start, end - start));
73+
}
74+
75+
return strings;
76+
};
77+
78+
auto findOutputFlag = [&](const std::string_view& outputFlag)
79+
{
80+
return std::find_if(m_arguments.begin(), m_arguments.end(), [&](const std::string& argument)
81+
{
82+
return argument.find(outputFlag.data()) != std::string::npos;
83+
});
84+
};
85+
86+
auto output_flag_pos = findOutputFlag("-Fc");
87+
88+
if (output_flag_pos == m_arguments.end())
89+
{
90+
m_logger->log("Missing arguments. Expecting `-Fc {filename}`.", ILogger::ELL_ERROR);
7091
return false;
7192
}
72-
73-
if (output_flag_pos + 1 != m_arguments.end()) {
74-
output_filepath = *(output_flag_pos + 1);
93+
else
94+
{
95+
// we need to assume -Fc may be passed with output file name quoted together with "", so we split it (DXC does it)
96+
const auto& outpufFlag = *output_flag_pos;
97+
auto outputFlagVector = split(outpufFlag, ' ');
98+
99+
if(outpufFlag == "-Fc")
100+
{
101+
if (output_flag_pos + 1 != m_arguments.end())
102+
{
103+
output_filepath = *(output_flag_pos + 1);
104+
}
105+
else
106+
{
107+
m_logger->log("Incorrect arguments. Expecting filename after -Fc.", ILogger::ELL_ERROR);
108+
return false;
109+
}
110+
}
111+
else
112+
{
113+
output_filepath = outputFlagVector[1];
114+
}
115+
75116
m_logger->log("Compiled shader code will be saved to " + output_filepath);
76-
m_arguments.erase(output_flag_pos, output_flag_pos+1);
77-
}
78-
else {
79-
m_logger->log("Incorrect arguments. Expecting filename after -Fo or -Fc.", ILogger::ELL_ERROR);
80-
return false;
81117
}
82118

83119
#ifndef NBL_EMBED_BUILTIN_RESOURCES

0 commit comments

Comments
 (0)