@@ -32,28 +32,53 @@ namespace
3232 }
3333
3434 // Override the compile flags from the script info
35- if (scriptInfo.OverrideCompileFlags .find (profile.Name ) != scriptInfo.OverrideCompileFlags .end ())
3635 {
37- std::vector<std::string> compileArgsToRemove;
38- runcpp2::SplitString ( scriptInfo.OverrideCompileFlags .at (profile.Name ).Remove ,
39- " " ,
40- compileArgsToRemove);
36+ int foundPlatformIndex = -1 ;
37+ for (int i = 0 ; i < platformNames.size (); ++i)
38+ {
39+ if ( scriptInfo.RequiredProfiles .find (platformNames.at (i)) !=
40+ scriptInfo.RequiredProfiles .end ())
41+ {
42+ foundPlatformIndex = i;
43+ break ;
44+ }
45+ }
4146
42- for ( int i = 0 ; i < compileArgsToRemove. size (); ++i )
47+ if (foundPlatformIndex != - 1 )
4348 {
44- std:: size_t foundIndex = compileArgs. find (compileArgsToRemove. at (i)) ;
49+ using namespace runcpp2 ::Data ;
4550
46- if (foundIndex != std::string::npos)
51+ const std::unordered_map<ProfileName, FlagsOverrideInfo>&
52+ currentOverrideCompileFlags = scriptInfo.OverrideCompileFlags
53+ .at (platformNames.at (foundPlatformIndex))
54+ .FlagsOverrides ;
55+
56+ if ( currentOverrideCompileFlags.find (profile.Name ) !=
57+ currentOverrideCompileFlags.end ())
4758 {
48- compileArgs.erase (foundIndex, compileArgsToRemove.at (i).size () + 1 );
49- continue ;
59+ std::vector<std::string> compileArgsToRemove;
60+ runcpp2::SplitString ( currentOverrideCompileFlags.at (profile.Name ).Remove ,
61+ " " ,
62+ compileArgsToRemove);
63+
64+ for (int i = 0 ; i < compileArgsToRemove.size (); ++i)
65+ {
66+ std::size_t foundIndex = compileArgs.find (compileArgsToRemove.at (i));
67+
68+ if (foundIndex != std::string::npos)
69+ {
70+ compileArgs.erase (foundIndex, compileArgsToRemove.at (i).size () + 1 );
71+ continue ;
72+ }
73+
74+ ssLOG_WARNING ( " Compile flag to remove not found: " <<
75+ compileArgsToRemove.at (i));
76+ }
77+
78+ runcpp2::TrimRight (compileArgs);
79+ compileArgs += " " + currentOverrideCompileFlags.at (profile.Name ).Append ;
5080 }
51-
52- ssLOG_WARNING (" Compile flag to remove not found: " << compileArgsToRemove.at (i));
5381 }
54-
55- runcpp2::TrimRight (compileArgs);
56- compileArgs += " " + scriptInfo.OverrideCompileFlags .at (profile.Name ).Append ;
5782 }
5883
5984 compileCommand.replace ( foundIndex,
@@ -187,6 +212,7 @@ namespace
187212 const std::vector<std::string>& copiedDependenciesBinariesPaths)
188213 {
189214 std::string scriptName = ghc::filesystem::path (scriptPath).stem ().string ();
215+ std::vector<std::string> platformNames = runcpp2::GetPlatformNames ();
190216
191217 // Link the script to the dependencies
192218 std::string linkCommand = profile.Linker .Executable + " " ;
@@ -199,29 +225,52 @@ namespace
199225 std::string outputName = scriptName;
200226
201227 // Override the default link flags from the script info
202- if (scriptInfo.OverrideLinkFlags .find (profile.Name ) != scriptInfo.OverrideLinkFlags .end ())
203228 {
204- std::vector<std::string> linkFlagsToRemove;
205-
206- runcpp2::SplitString ( scriptInfo.OverrideLinkFlags .at (profile.Name ).Remove ,
207- " " ,
208- linkFlagsToRemove);
229+ int foundPlatformIndex = -1 ;
230+ for (int i = 0 ; i < platformNames.size (); ++i)
231+ {
232+ if ( scriptInfo.RequiredProfiles .find (platformNames.at (i)) !=
233+ scriptInfo.RequiredProfiles .end ())
234+ {
235+ foundPlatformIndex = i;
236+ break ;
237+ }
238+ }
209239
210- for ( int i = 0 ; i < linkFlagsToRemove. size (); ++i )
240+ if (foundPlatformIndex != - 1 )
211241 {
212- std:: size_t foundIndex = linkFlags. find (linkFlagsToRemove. at (i)) ;
242+ using namespace runcpp2 ::Data ;
213243
214- if (foundIndex != std::string::npos)
244+ const std::unordered_map<ProfileName, FlagsOverrideInfo>&
245+ currentOverrideLinkFlags = scriptInfo .OverrideLinkFlags
246+ .at (platformNames.at (foundPlatformIndex))
247+ .FlagsOverrides ;
248+
249+ if (currentOverrideLinkFlags.find (profile.Name ) != currentOverrideLinkFlags.end ())
215250 {
216- linkFlags.erase (foundIndex, linkFlagsToRemove.at (i).size () + 1 );
217- continue ;
251+ std::vector<std::string> linkFlagsToRemove;
252+
253+ runcpp2::SplitString ( currentOverrideLinkFlags.at (profile.Name ).Remove ,
254+ " " ,
255+ linkFlagsToRemove);
256+
257+ for (int i = 0 ; i < linkFlagsToRemove.size (); ++i)
258+ {
259+ std::size_t foundIndex = linkFlags.find (linkFlagsToRemove.at (i));
260+
261+ if (foundIndex != std::string::npos)
262+ {
263+ linkFlags.erase (foundIndex, linkFlagsToRemove.at (i).size () + 1 );
264+ continue ;
265+ }
266+
267+ ssLOG_WARNING (" Link flag to remove not found: " << linkFlagsToRemove.at (i));
268+ }
269+
270+ runcpp2::TrimRight (linkFlags);
271+ linkFlags += " " + currentOverrideLinkFlags.at (profile.Name ).Append ;
218272 }
219-
220- ssLOG_WARNING (" Link flag to remove not found: " << linkFlagsToRemove.at (i));
221273 }
222-
223- runcpp2::TrimRight (linkFlags);
224- linkFlags += " " + scriptInfo.OverrideLinkFlags .at (profile.Name ).Append ;
225274 }
226275
227276 // Add linker flags for the dependencies
0 commit comments