@@ -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