summaryrefslogtreecommitdiff
path: root/erts/etc/common/erlc.c
diff options
context:
space:
mode:
Diffstat (limited to 'erts/etc/common/erlc.c')
-rw-r--r--erts/etc/common/erlc.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/erts/etc/common/erlc.c b/erts/etc/common/erlc.c
index b76f1bb3e0..2d2b463675 100644
--- a/erts/etc/common/erlc.c
+++ b/erts/etc/common/erlc.c
@@ -205,6 +205,7 @@ int wmain(int argc, wchar_t **wcargv)
int main(int argc, char** argv)
{
#endif
+ int single_scheduler;
int eargv_size;
int eargc_base; /* How many arguments in the base of eargv. */
char* emulator;
@@ -299,6 +300,8 @@ int main(int argc, char** argv)
* Parse all command line switches.
*/
+ single_scheduler = 1;
+
while (argc > 1) {
/*
@@ -308,6 +311,11 @@ int main(int argc, char** argv)
source_file = "<no source>";
switch (argv[1][0]) {
case '+':
+ if (strcmp(argv[1], "+native") == 0) {
+ /* HiPE makes good use of multiple schedulers, so we'll let it
+ * use the default number. */
+ single_scheduler = 0;
+ }
PUSH(argv[1]);
break;
case '-':
@@ -370,6 +378,16 @@ int main(int argc, char** argv)
argc--, argv++;
}
+ /* The compile server benefits from multiple schedulers. */
+ single_scheduler = single_scheduler && !use_server;
+
+ if (single_scheduler) {
+ /* Limit ourselves to a single scheduler to save memory and avoid
+ * starving the system of threads when used in parallel builds (e.g.
+ * make -j64 on a 64-core system). */
+ UNSHIFT("+S1");
+ }
+
/*
* Move up the commands for invoking the emulator and adjust eargv
* accordingly.