diff --git a/tools/hxcpp/BuildTool.hx b/tools/hxcpp/BuildTool.hx index 22f85d898..259545425 100644 --- a/tools/hxcpp/BuildTool.hx +++ b/tools/hxcpp/BuildTool.hx @@ -576,7 +576,7 @@ class BuildTool first = false; Log.lock(); Log.println(""); - Log.info("\x1b[33;1mCompiling group: " + group.mId + "\x1b[0m"); + Log.info("\x1b[33;1mCompiling group: " + group.mId + " (" + to_be_compiled.length + " file" + (to_be_compiled.length==1 ? "" : "s") + ")\x1b[0m"); var message = "\x1b[1m" + (nvcc ? getNvcc() : mCompiler.mExe) + "\x1b[0m"; var flags = group.mCompilerFlags; if (!nvcc) @@ -612,10 +612,15 @@ class BuildTool } : null; Profile.push("compile"); + + var compile_progress = null; + if (!Log.verbose) + compile_progress = new Progress(0,to_be_compiled.length); + if (threadPool==null) { for(file in to_be_compiled) - mCompiler.compile(file,-1,groupHeader,pchStamp); + mCompiler.compile(file,-1,groupHeader,pchStamp,compile_progress); } else { @@ -631,7 +636,7 @@ class BuildTool break; var file = to_be_compiled[index]; - compiler.compile(file,threadId,groupHeader,pchStamp); + compiler.compile(file,threadId,groupHeader,pchStamp,compile_progress); } }); } diff --git a/tools/hxcpp/Compiler.hx b/tools/hxcpp/Compiler.hx index 277fed341..6ea36a832 100644 --- a/tools/hxcpp/Compiler.hx +++ b/tools/hxcpp/Compiler.hx @@ -1,6 +1,14 @@ import haxe.crypto.Md5; import haxe.io.Path; import sys.FileSystem; +#if haxe4 +import sys.thread.Mutex; +#elseif cpp +import cpp.vm.Mutex; +#else +import neko.vm.Mutex; +#end + using StringTools; private class FlagInfo @@ -301,7 +309,9 @@ class Compiler catch(e:Dynamic) { } } - public function compile(inFile:File,inTid:Int,headerFunc:Void->Void,pchTimeStamp:Null) + static public var printMutex = new Mutex(); + + public function compile(inFile:File,inTid:Int,headerFunc:Void->Void,pchTimeStamp:Null,inProgess:Null) { var obj_name = getObjName(inFile); var args = getArgs(inFile); @@ -382,29 +392,41 @@ class Compiler if (delayedFilename!=null) args.push(delayedFilename); - var tagInfo = inFile.mTags==null ? "" : " " + inFile.mTags.split(","); - - var fileName = inFile.mName; - var split = fileName.split ("/"); - if (split.length > 1) + if (!Log.verbose) { - fileName = " \x1b[2m-\x1b[0m \x1b[33m" + split.slice(0, split.length - 1).join("/") + "/\x1b[33;1m" + split[split.length - 1] + "\x1b[0m"; - } - else - { - fileName = " \x1b[2m-\x1b[0m \x1b[33;1m" + fileName + "\x1b[0m"; - } - fileName += " \x1b[3m" + tagInfo + "\x1b[0m"; + var tagInfo = inFile.mTags==null ? "" : " " + inFile.mTags.split(","); + + var fileName = inFile.mName; + var split = fileName.split ("/"); + if (split.length > 1) + { + fileName = " \x1b[2m-\x1b[0m \x1b[33m" + split.slice(0, split.length - 1).join("/") + "/\x1b[33;1m" + split[split.length - 1] + "\x1b[0m"; + } + else + { + fileName = " \x1b[2m-\x1b[0m \x1b[33;1m" + fileName + "\x1b[0m"; + } + fileName += " \x1b[3m" + tagInfo + "\x1b[0m"; + printMutex.acquire(); + + if (inProgess != null) + { + inProgess.progress(1); + fileName = inProgess.getProgress() + fileName; + } + + if((inTid >= 0 && BuildTool.threadExitCode == 0) || inTid < 0) + { + Log.info(fileName); + } + printMutex.release(); + } if (inTid >= 0) { if (BuildTool.threadExitCode == 0) { - if (!Log.verbose) - { - Log.info(fileName); - } var err = ProcessManager.runProcessThreaded(exe, args, null); cleanTmp(tmpFile); if (err!=0) @@ -417,10 +439,6 @@ class Compiler } else { - if (!Log.verbose) - { - Log.info(fileName); - } var result = ProcessManager.runProcessThreaded(exe, args, null); cleanTmp(tmpFile); if (result!=0) diff --git a/tools/hxcpp/Progress.hx b/tools/hxcpp/Progress.hx new file mode 100644 index 000000000..750d9ca24 --- /dev/null +++ b/tools/hxcpp/Progress.hx @@ -0,0 +1,27 @@ +package; + +class Progress { + public var current:Int; + public var total:Int; + + public function new(inCurrent:Int, inTotal:Int) { + current = inCurrent; + total = inTotal; + } + + public function progress(inCurrent:Int) { + current += inCurrent; + } + + public function getProgress() { + var percent = current / total; + var pct = Std.int(percent * 1000) / 10; + var str = Std.string(pct); + if (Std.int(pct) == pct) { + str += ".0"; + } + while (str.length < 4) + str = " " + str; + return "[" + str + "%]"; + } +}