Skip to content

Commit dc27a8d

Browse files
build tool: support clang pch (#1299)
1 parent 51f1a6c commit dc27a8d

File tree

2 files changed

+36
-21
lines changed

2 files changed

+36
-21
lines changed

tools/hxcpp/BuildTool.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ class BuildTool
443443

444444
var to_be_compiled = new Array<File>();
445445

446-
var cached = useCache && mCompiler.createCompilerVersion(group);
446+
var cached = useCache && mCompiler.createCompilerVersion();
447447

448448
var inList = new Array<Bool>();
449449
var groupIsOutOfDate = mDirtyList.indexOf(group.mId)>=0 || mDirtyList.indexOf("all")>=0;

tools/hxcpp/Compiler.hx

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,6 @@ class Compiler
8585
mAsmExe = inExe;
8686
mID = inID;
8787
mExt = ".o";
88-
mPCHExt = ".pch";
89-
mPCHCreate = "-Yc";
90-
mPCHUse = "-Yu";
91-
mPCHFilename = "/Fp";
9288
mCached = false;
9389
mRcFlags = [];
9490
}
@@ -222,13 +218,16 @@ class Compiler
222218
if (inFile.mGroup.isPrecompiled() && allowPch)
223219
{
224220
var pchDir = getPchDir(inFile.mGroup);
225-
if (mPCHUse!="")
226-
{
227-
args.push(mPCHUse + inFile.mGroup.mPrecompiledHeader + ".h");
228-
args.push(mPCHFilename + pchDir + "/" + inFile.mGroup.getPchName() + mPCHExt);
221+
switch (mPCH) {
222+
case "msvc":
223+
args.push(mPCHUse + inFile.mGroup.mPrecompiledHeader + ".h");
224+
args.push(mPCHFilename + pchDir + "/" + inFile.mGroup.getPchName() + mPCHExt);
225+
case "gcc":
226+
args.unshift("-I"+pchDir);
227+
case "clang":
228+
args.push("-include-pch");
229+
args.push(pchDir + "/" + inFile.mGroup.getPchName() + mPCHExt);
229230
}
230-
else
231-
args.unshift("-I"+pchDir);
232231
}
233232

234233
return args;
@@ -442,7 +441,7 @@ class Compiler
442441
return obj_name;
443442
}
444443

445-
public function createCompilerVersion(inGroup:FileGroup)
444+
public function createCompilerVersion()
446445
{
447446
if ( mCompilerVersion==null)
448447
{
@@ -517,7 +516,7 @@ class Compiler
517516

518517
public function needsPchObj()
519518
{
520-
return mPCH!="gcc";
519+
return mPCH == "msvc";
521520
}
522521

523522
/*
@@ -568,7 +567,7 @@ class Compiler
568567
if (inGroup.isCached() || inReuseIfPossible)
569568
{
570569
// No obj needed for gcc
571-
var obj = mPCH=="gcc" ? null : PathManager.combine(dir, file + mExt);
570+
var obj = mPCH=="msvc" ? PathManager.combine(dir, file + mExt) : null;
572571
if (FileSystem.exists(pch_name) && (obj==null || FileSystem.exists(obj)) )
573572
return obj;
574573
}
@@ -579,7 +578,7 @@ class Compiler
579578
//Log.info("", "Make pch dir " + dir );
580579
PathManager.mkdir(dir);
581580

582-
if (mPCH!="gcc")
581+
if (mPCH == "msvc")
583582
{
584583
args.push( mPCHCreate + header + ".h" );
585584
var symbol = "link" + Md5.encode( PathManager.combine(dir, file + mExt) );
@@ -627,19 +626,35 @@ class Compiler
627626
//throw "Error creating pch: " + result + " - build cancelled";
628627
}
629628

630-
if (mPCH!="gcc")
629+
if (mPCH == "msvc")
631630
return PathManager.combine(dir, file + mExt);
632631
return null;
633632
}
634633

635634
public function setPCH(inPCH:String)
636635
{
637636
mPCH = inPCH;
638-
if (mPCH=="gcc")
639-
{
640-
mPCHExt = ".h.gch";
641-
mPCHUse = "";
642-
mPCHFilename = "";
637+
createCompilerVersion();
638+
static final regex = ~/clang/i;
639+
if (inPCH != null && regex.match(mCompilerVersionString)) {
640+
mPCH = "clang";
641+
}
642+
switch (mPCH) {
643+
case "gcc":
644+
mPCHExt = ".h.gch";
645+
mPCHUse = "";
646+
mPCHFilename = "";
647+
case "clang":
648+
mPCHExt = ".h.pch";
649+
mPCHUse = "";
650+
mPCHFilename = "";
651+
case "msvc":
652+
mPCHExt = ".pch";
653+
mPCHCreate = "-Yc";
654+
mPCHUse = "-Yu";
655+
mPCHFilename = "/Fp";
656+
default:
657+
mPCH = null;
643658
}
644659
}
645660

0 commit comments

Comments
 (0)