diff --git a/Makefile b/Makefile
index dcfca65e2d860936366fa3540198fe711b742822..9db5e8b7d292532936de83a8b260276941d2d91c 100644
--- a/Makefile
+++ b/Makefile
@@ -2397,7 +2397,12 @@ test_python: static_c
 	$(Q) tools/run_tests/run_tests.py -lpython -c$(CONFIG)
 
 
-tools: privatelibs $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/grpc_create_jwt $(BINDIR)/$(CONFIG)/grpc_fetch_oauth2 $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token
+tools: tools_c tools_cxx
+
+
+tools_c: privatelibs_c $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/grpc_create_jwt $(BINDIR)/$(CONFIG)/grpc_fetch_oauth2 $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token
+
+tools_cxx: privatelibs_cxx
 
 buildbenchmarks: privatelibs $(BINDIR)/$(CONFIG)/low_level_ping_pong_benchmark $(BINDIR)/$(CONFIG)/qps_driver $(BINDIR)/$(CONFIG)/qps_worker
 
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 6347ad8440f7dad0c5b1f99a79cb906dab633171..8513963e010dc77a0815f41ddea1856946efb0e9 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -812,9 +812,20 @@ test_python: static_c
 	$(Q) tools/run_tests/run_tests.py -lpython -c$(CONFIG)
 
 
-tools: privatelibs\
+tools: tools_c tools_cxx
+
+
+tools_c: privatelibs_c\
+% for tgt in targets:
+% if tgt.build == 'tool' and not tgt.language=='c++':
+ $(BINDIR)/$(CONFIG)/${tgt.name}\
+% endif
+% endfor
+
+
+tools_cxx: privatelibs_cxx\
 % for tgt in targets:
-% if tgt.build == 'tool':
+% if tgt.build == 'tool' and tgt.language=='c++':
  $(BINDIR)/$(CONFIG)/${tgt.name}\
 % endif
 % endfor
diff --git a/test/core/security/fetch_oauth2.c b/test/core/security/fetch_oauth2.c
index 3202df332890dfaf1e8e48d5e897f70965665d70..767f724b62face229ee5180cd42f46b6dba98157 100644
--- a/test/core/security/fetch_oauth2.c
+++ b/test/core/security/fetch_oauth2.c
@@ -46,8 +46,7 @@
 #include "src/core/support/file.h"
 
 typedef struct {
-  gpr_cv cv;
-  gpr_mu mu;
+  grpc_pollset pollset;
   int is_done;
 } synchronizer;
 
@@ -69,10 +68,10 @@ static void on_oauth2_response(void *user_data,
     printf("Got token: %s.\n", token);
     gpr_free(token);
   }
-  gpr_mu_lock(&sync->mu);
+  gpr_mu_lock(GRPC_POLLSET_MU(&sync->pollset));
   sync->is_done = 1;
-  gpr_mu_unlock(&sync->mu);
-  gpr_cv_signal(&sync->cv);
+  grpc_pollset_kick(&sync->pollset);
+  gpr_mu_unlock(GRPC_POLLSET_MU(&sync->pollset));
 }
 
 static grpc_credentials *create_service_account_creds(
@@ -176,18 +175,16 @@ int main(int argc, char **argv) {
   }
   GPR_ASSERT(creds != NULL);
 
-  gpr_mu_init(&sync.mu);
-  gpr_cv_init(&sync.cv);
+  grpc_pollset_init(&sync.pollset);
   sync.is_done = 0;
 
-  grpc_credentials_get_request_metadata(creds, "", on_oauth2_response, &sync);
+  grpc_credentials_get_request_metadata(creds, &sync.pollset, "", on_oauth2_response, &sync);
 
-  gpr_mu_lock(&sync.mu);
-  while (!sync.is_done) gpr_cv_wait(&sync.cv, &sync.mu, gpr_inf_future);
-  gpr_mu_unlock(&sync.mu);
+  gpr_mu_lock(GRPC_POLLSET_MU(&sync.pollset));
+  while (!sync.is_done) grpc_pollset_work(&sync.pollset, gpr_inf_future);
+  gpr_mu_unlock(GRPC_POLLSET_MU(&sync.pollset));
 
-  gpr_mu_destroy(&sync.mu);
-  gpr_cv_destroy(&sync.cv);
+  grpc_pollset_destroy(&sync.pollset);
   grpc_credentials_release(creds);
   gpr_cmdline_destroy(cl);
   grpc_shutdown();
diff --git a/test/core/security/print_google_default_creds_token.c b/test/core/security/print_google_default_creds_token.c
index 051e8607c409c8d975eb350369f0f35c7a17c3fc..a0da5b2d935372b8910a754ad3ae6557ee3028cc 100644
--- a/test/core/security/print_google_default_creds_token.c
+++ b/test/core/security/print_google_default_creds_token.c
@@ -44,8 +44,7 @@
 #include <grpc/support/sync.h>
 
 typedef struct {
-  gpr_cv cv;
-  gpr_mu mu;
+  grpc_pollset pollset;
   int is_done;
 } synchronizer;
 
@@ -61,10 +60,10 @@ static void on_metadata_response(void *user_data,
     printf("\nGot token: %s\n\n",
            (const char *)GPR_SLICE_START_PTR(md_elems[0].value));
   }
-  gpr_mu_lock(&sync->mu);
+  gpr_mu_lock(GRPC_POLLSET_MU(&sync->pollset));
   sync->is_done = 1;
-  gpr_mu_unlock(&sync->mu);
-  gpr_cv_signal(&sync->cv);
+  grpc_pollset_kick(&sync->pollset);
+  gpr_mu_unlock(GRPC_POLLSET_MU(&sync->pollset));
 }
 
 int main(int argc, char **argv) {
@@ -86,18 +85,16 @@ int main(int argc, char **argv) {
     goto end;
   }
 
-  gpr_mu_init(&sync.mu);
-  gpr_cv_init(&sync.cv);
+  grpc_pollset_init(&sync.pollset);
   sync.is_done = 0;
 
-  grpc_credentials_get_request_metadata(creds, "", on_metadata_response, &sync);
+  grpc_credentials_get_request_metadata(creds, &sync.pollset, "", on_metadata_response, &sync);
 
-  gpr_mu_lock(&sync.mu);
-  while (!sync.is_done) gpr_cv_wait(&sync.cv, &sync.mu, gpr_inf_future);
-  gpr_mu_unlock(&sync.mu);
+  gpr_mu_lock(GRPC_POLLSET_MU(&sync.pollset));
+  while (!sync.is_done) grpc_pollset_work(&sync.pollset, gpr_inf_future);
+  gpr_mu_unlock(GRPC_POLLSET_MU(&sync.pollset));
 
-  gpr_mu_destroy(&sync.mu);
-  gpr_cv_destroy(&sync.cv);
+  grpc_pollset_destroy(&sync.pollset);
   grpc_credentials_release(creds);
 
 end:
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 4235edc1a2f85a29f07170be8036e844a7566842..b17e1ecbc048e4e3a0f3d0f647c0a639aeff3674 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -133,7 +133,7 @@ class CLanguage(object):
     return sorted(out)
 
   def make_targets(self):
-    return ['buildtests_%s' % self.make_target]
+    return ['buildtests_%s' % self.make_target, 'tools_%s' % self.make_target]
 
   def build_steps(self):
     return []