| 314 |
314 |
c = cc_speed;
|
| 315 |
315 |
int slot = AllocSlot();
|
| 316 |
316 |
if(slot < 0 || !Run(c + PdbPch(package, slot, !sContainsPchOptions(cc) && !sContainsPchOptions(soptions[i]))
|
| 317 |
|
+ soptions[i] + (ext == ".c" ? " -Tc " : " -Tp ")
|
|
317 |
+ " " + soptions[i] + (ext == ".c" ? " -Tc " : " -Tp ")
|
| 318 |
318 |
+ GetHostPathQ(fn) + " -Fo" + GetHostPathQ(objfile), slot, GetHostPath(objfile), 1))
|
| 319 |
319 |
execerr = true;
|
| 320 |
320 |
}
|
| ... | ... | |
| 373 |
373 |
Vector<Host::FileInfo> objinfo = host->GetFileInfo(obj);
|
| 374 |
374 |
for(int i = 0; i < obj.GetCount(); i++)
|
| 375 |
375 |
if(objinfo[i] > producttime) {
|
| 376 |
|
String lib;
|
|
376 |
String linker, lib;
|
| 377 |
377 |
if(is_shared) {
|
| 378 |
|
lib << LinkerName() << " -dll -nologo -machine:" << MachineName()
|
|
378 |
linker << LinkerName() << "-dll -nologo ";
|
|
379 |
lib << "-machine:" << MachineName()
|
| 379 |
380 |
<< " -pdb:" << GetHostPathQ(ForceExt(product, ".pdb"))
|
| 380 |
381 |
<< " -out:" << GetHostPathQ(product);
|
| 381 |
382 |
if(!HasFlag("MSC10") && !HasFlag("MSC10X64"))
|
| ... | ... | |
| 435 |
436 |
}
|
| 436 |
437 |
}
|
| 437 |
438 |
else{
|
| 438 |
|
lib << (HasFlag("INTEL") ? "xilib" : "link /lib") << " -nologo";
|
|
439 |
linker << (HasFlag("INTEL") ? "xilib" : "link /lib") << " -nologo ";
|
| 439 |
440 |
if(HasFlag("FORCE_SIZE")){
|
| 440 |
441 |
if(sContainsPchOptions(release_size_options))
|
| 441 |
442 |
lib << " -ltcg";
|
| ... | ... | |
| 451 |
452 |
PutConsole("Creating library...");
|
| 452 |
453 |
IdeConsoleEndGroup();
|
| 453 |
454 |
DeleteFile(product);
|
| 454 |
|
if(Execute(lib)) {
|
|
455 |
String tmpFileName;
|
|
456 |
if(linker.GetCount() + lib.GetCount() >= 8192)
|
|
457 |
{
|
|
458 |
tmpFileName = GetTempFileName();
|
|
459 |
// we can't simply put all data on a single line
|
|
460 |
// as it has a limit of around 130000 chars too, so we split
|
|
461 |
// in multiple lines
|
|
462 |
FileOut f(tmpFileName);
|
|
463 |
while(lib != "")
|
|
464 |
{
|
|
465 |
int found = 0;
|
|
466 |
bool quotes = false;
|
|
467 |
int lim = min(8192, lib.GetCount());
|
|
468 |
for(int i = 0; i < lim; i++)
|
|
469 |
{
|
|
470 |
char c = lib[i];
|
|
471 |
if(isspace(c) && !quotes)
|
|
472 |
found = i;
|
|
473 |
else if(c == '"')
|
|
474 |
quotes = !quotes;
|
|
475 |
}
|
|
476 |
if(!found)
|
|
477 |
found = lib.GetCount();
|
|
478 |
f.PutLine(lib.Left(found));
|
|
479 |
lib.Remove(0, found);
|
|
480 |
}
|
|
481 |
f.Close();
|
|
482 |
linker << "@" << tmpFileName;
|
|
483 |
}
|
|
484 |
else
|
|
485 |
linker << lib;
|
|
486 |
bool res = Execute(linker);
|
|
487 |
if(tmpFileName != "")
|
|
488 |
FileDelete(tmpFileName);
|
|
489 |
if(res) {
|
| 455 |
490 |
DeleteFile(product);
|
| 456 |
491 |
return false;
|
| 457 |
492 |
}
|