Compile bit on darwin, use -j when invoking make

Test: ran the host tool and checked the output
Change-Id: Idd561139348779982b8c01977fcc18fdfbd0134d
diff --git a/tools/bit/make.cpp b/tools/bit/make.cpp
index 60b5687..a800241 100644
--- a/tools/bit/make.cpp
+++ b/tools/bit/make.cpp
@@ -26,6 +26,7 @@
 #include <fstream>
 #include <string>
 #include <map>
+#include <thread>
 
 #include <sys/types.h>
 #include <dirent.h>
@@ -35,6 +36,14 @@
 
 map<string,string> g_buildVars;
 
+static unsigned int
+get_thread_count()
+{
+    unsigned int threads = std::thread::hardware_concurrency();
+    // Guess if the value cannot be computed
+    return threads == 0 ? 4 : static_cast<unsigned int>(threads * 1.3f);
+}
+
 string
 get_build_var(const string& buildTop, const string& name, bool quiet)
 {
@@ -44,6 +53,7 @@
     if (it == g_buildVars.end()) {
         Command cmd("make");
         cmd.AddArg("--no-print-directory");
+        cmd.AddArg(string("-j") + std::to_string(get_thread_count()));
         cmd.AddArg("-C");
         cmd.AddArg(buildTop);
         cmd.AddArg("-f");
@@ -199,6 +209,7 @@
 build_goals(const vector<string>& goals)
 {
     Command cmd("make");
+    cmd.AddArg(string("-j") + std::to_string(get_thread_count()));
     cmd.AddArg("-f");
     cmd.AddArg("build/core/main.mk");
     for (size_t i=0; i<goals.size(); i++) {