Browse Source

Speed up "erl" invocations

Use "+A0 -noinput -boot start_clean" as start argument.
Use halt/{1,2} to shutdown the VM faster.
Loïc Hoguin 10 years ago
parent
commit
abb11f81f5
7 changed files with 34 additions and 26 deletions
  1. 5 1
      core/core.mk
  2. 17 13
      erlang.mk
  3. 2 2
      plugins/c_src.mk
  4. 1 2
      plugins/edoc.mk
  5. 2 2
      plugins/erlydtl.mk
  6. 5 3
      plugins/escript.mk
  7. 2 3
      plugins/eunit.mk

+ 5 - 1
core/core.mk

@@ -28,6 +28,10 @@ V ?= 0
 gen_verbose_0 = @echo " GEN   " $@;
 gen_verbose = $(gen_verbose_$(V))
 
+# "erl" command.
+
+ERL = erl +A0 -noinput -boot start_clean
+
 # Core targets.
 
 ifneq ($(words $(MAKECMDGOALS)),1)
@@ -76,7 +80,7 @@ define core_http_get
 endef
 else
 define core_http_get
-	erl -noshell -eval 'ssl:start(), inets:start(), case httpc:request(get, {"$(2)", []}, [{autoredirect, true}], []) of {ok, {{_, 200, _}, _, Body}} -> case file:write_file("$(1)", Body) of ok -> ok; {error, R1} -> halt(R1) end; {error, R2} -> halt(R2) end, halt(0).'
+	$(ERL) -eval 'ssl:start(), inets:start(), case httpc:request(get, {"$(2)", []}, [{autoredirect, true}], []) of {ok, {{_, 200, _}, _, Body}} -> case file:write_file("$(1)", Body) of ok -> ok; {error, R1} -> halt(R1) end; {error, R2} -> halt(R2) end, halt(0).'
 endef
 endif
 

+ 17 - 13
erlang.mk

@@ -28,6 +28,10 @@ V ?= 0
 gen_verbose_0 = @echo " GEN   " $@;
 gen_verbose = $(gen_verbose_$(V))
 
+# "erl" command.
+
+ERL = erl +A0 -noinput -boot start_clean
+
 # Core targets.
 
 ifneq ($(words $(MAKECMDGOALS)),1)
@@ -76,7 +80,7 @@ define core_http_get
 endef
 else
 define core_http_get
-	erl -noshell -eval 'ssl:start(), inets:start(), case httpc:request(get, {"$(2)", []}, [{autoredirect, true}], []) of {ok, {{_, 200, _}, _, Body}} -> case file:write_file("$(1)", Body) of ok -> ok; {error, R1} -> halt(R1) end; {error, R2} -> halt(R2) end, halt(0).'
+	$(ERL) -eval 'ssl:start(), inets:start(), case httpc:request(get, {"$(2)", []}, [{autoredirect, true}], []) of {ok, {{_, 200, _}, _, Body}} -> case file:write_file("$(1)", Body) of ok -> ok; {error, R1} -> halt(R1) end; {error, R2} -> halt(R2) end, halt(0).'
 endef
 endif
 
@@ -718,7 +722,7 @@ $(C_SRC_OUTPUT): $(OBJECTS)
 	$(COMPILE_CPP) $(OUTPUT_OPTION) $<
 
 $(C_SRC_ENV):
-	@erl -noshell -noinput -eval "file:write_file(\"$(C_SRC_ENV)\", \
+	@$(ERL) -eval "file:write_file(\"$(C_SRC_ENV)\", \
 		io_lib:format( \
 			\"ERTS_INCLUDE_DIR ?= ~s/erts-~s/include/~n\" \
 			\"ERL_INTERFACE_INCLUDE_DIR ?= ~s~n\" \
@@ -726,7 +730,7 @@ $(C_SRC_ENV):
 			[code:root_dir(), erlang:system_info(version), \
 			code:lib_dir(erl_interface, include), \
 			code:lib_dir(erl_interface, lib)])), \
-		erlang:halt()."
+		halt()."
 
 clean:: clean-c_src
 
@@ -873,8 +877,7 @@ EDOC_OPTS ?=
 # Core targets.
 
 docs:: distclean-edoc
-	$(gen_verbose) erl -noshell \
-		-eval 'edoc:application($(PROJECT), ".", [$(EDOC_OPTS)]), init:stop().'
+	$(gen_verbose) $(ERL) -eval 'edoc:application($(PROJECT), ".", [$(EDOC_OPTS)]), halt().'
 
 distclean:: distclean-edoc
 
@@ -940,7 +943,7 @@ dtl_verbose = $(dtl_verbose_$(V))
 # Core targets.
 
 define compile_erlydtl
-	$(dtl_verbose) erl -noshell -pa ebin/ $(DEPS_DIR)/erlydtl/ebin/ -eval ' \
+	$(dtl_verbose) $(ERL) -pa ebin/ $(DEPS_DIR)/erlydtl/ebin/ -eval ' \
 		Compile = fun(F) -> \
 			S = fun (1) -> re:replace(filename:rootname(string:sub_string(F, 11), ".dtl"), "/",  "_",  [{return, list}, global]); \
 				(0) -> filename:basename(F, ".dtl") \
@@ -949,7 +952,7 @@ define compile_erlydtl
 			{ok, _} = erlydtl:compile(F, Module, [{out_dir, "ebin/"}, return_errors, {doc_root, "templates"}]) \
 		end, \
 		_ = [Compile(F) || F <- string:tokens("$(1)", " ")], \
-		init:stop()'
+		halt().'
 endef
 
 ifneq ($(wildcard src/),)
@@ -970,7 +973,6 @@ ESCRIPT_COMMENT ?= This is an -*- erlang -*- file
 ESCRIPT_BEAMS ?= "ebin/*", "deps/*/ebin/*"
 ESCRIPT_SYS_CONFIG ?= "rel/sys.config"
 ESCRIPT_EMU_ARGS ?= -pa . \
-	-noshell -noinput  \
 	-sasl errlog_type error \
 	-escript main $(ESCRIPT_NAME)
 ESCRIPT_SHEBANG ?= /usr/bin/env escript
@@ -992,6 +994,7 @@ help::
 # Modified MIT License, https://github.com/synrc/mad/blob/master/LICENSE :
 # Software may only be used for the great good and the true happiness of all
 # sentient beings.
+
 define ESCRIPT_RAW
 'Read = fun(F) -> {ok, B} = file:read_file(filename:absname(F)), B end,'\
 'Files = fun(L) -> A = lists:concat([filelib:wildcard(X)||X<- L ]),'\
@@ -1010,12 +1013,14 @@ define ESCRIPT_RAW
 '  ]),'\
 '  file:change_mode(Escript, 8#755)'\
 'end,'\
-'Ez("$(ESCRIPT_NAME)").'
+'Ez("$(ESCRIPT_NAME)"),'\
+'halt().'
 endef
+
 ESCRIPT_COMMAND = $(subst ' ',,$(ESCRIPT_RAW))
 
 escript:: distclean-escript deps app
-	$(gen_verbose) erl -noshell -eval $(ESCRIPT_COMMAND) -s init stop
+	$(gen_verbose) $(ERL) -eval $(ESCRIPT_COMMAND)
 
 distclean-escript:
 	$(gen_verbose) rm -f $(ESCRIPT_NAME)
@@ -1063,12 +1068,11 @@ clean:: clean-eunit
 
 # Plugin-specific targets.
 
-EUNIT_RUN = erl \
+EUNIT_RUN = $(ERL) \
 	-no_auto_compile \
-	-noshell \
 	-pa $(realpath $(EUNIT_DIR)) $(DEPS_DIR)/*/ebin \
 	-pz $(realpath ebin) \
-	-eval 'case eunit:test([$(call str-join,$(TAGGED_EUNIT_TESTS))], [$(EUNIT_OPTS)]) of ok -> erlang:halt(0); error -> erlang:halt(1) end.'
+	-eval 'case eunit:test([$(call str-join,$(TAGGED_EUNIT_TESTS))], [$(EUNIT_OPTS)]) of ok -> halt(0); error -> halt(1) end.'
 
 help-eunit:
 	@printf "%s\n" "" \

+ 2 - 2
plugins/c_src.mk

@@ -81,7 +81,7 @@ $(C_SRC_OUTPUT): $(OBJECTS)
 	$(COMPILE_CPP) $(OUTPUT_OPTION) $<
 
 $(C_SRC_ENV):
-	@erl -noshell -noinput -eval "file:write_file(\"$(C_SRC_ENV)\", \
+	@$(ERL) -eval "file:write_file(\"$(C_SRC_ENV)\", \
 		io_lib:format( \
 			\"ERTS_INCLUDE_DIR ?= ~s/erts-~s/include/~n\" \
 			\"ERL_INTERFACE_INCLUDE_DIR ?= ~s~n\" \
@@ -89,7 +89,7 @@ $(C_SRC_ENV):
 			[code:root_dir(), erlang:system_info(version), \
 			code:lib_dir(erl_interface, include), \
 			code:lib_dir(erl_interface, lib)])), \
-		erlang:halt()."
+		halt()."
 
 clean:: clean-c_src
 

+ 1 - 2
plugins/edoc.mk

@@ -10,8 +10,7 @@ EDOC_OPTS ?=
 # Core targets.
 
 docs:: distclean-edoc
-	$(gen_verbose) erl -noshell \
-		-eval 'edoc:application($(PROJECT), ".", [$(EDOC_OPTS)]), init:stop().'
+	$(gen_verbose) $(ERL) -eval 'edoc:application($(PROJECT), ".", [$(EDOC_OPTS)]), halt().'
 
 distclean:: distclean-edoc
 

+ 2 - 2
plugins/erlydtl.mk

@@ -13,7 +13,7 @@ dtl_verbose = $(dtl_verbose_$(V))
 # Core targets.
 
 define compile_erlydtl
-	$(dtl_verbose) erl -noshell -pa ebin/ $(DEPS_DIR)/erlydtl/ebin/ -eval ' \
+	$(dtl_verbose) $(ERL) -pa ebin/ $(DEPS_DIR)/erlydtl/ebin/ -eval ' \
 		Compile = fun(F) -> \
 			S = fun (1) -> re:replace(filename:rootname(string:sub_string(F, 11), ".dtl"), "/",  "_",  [{return, list}, global]); \
 				(0) -> filename:basename(F, ".dtl") \
@@ -22,7 +22,7 @@ define compile_erlydtl
 			{ok, _} = erlydtl:compile(F, Module, [{out_dir, "ebin/"}, return_errors, {doc_root, "templates"}]) \
 		end, \
 		_ = [Compile(F) || F <- string:tokens("$(1)", " ")], \
-		init:stop()'
+		halt().'
 endef
 
 ifneq ($(wildcard src/),)

+ 5 - 3
plugins/escript.mk

@@ -11,7 +11,6 @@ ESCRIPT_COMMENT ?= This is an -*- erlang -*- file
 ESCRIPT_BEAMS ?= "ebin/*", "deps/*/ebin/*"
 ESCRIPT_SYS_CONFIG ?= "rel/sys.config"
 ESCRIPT_EMU_ARGS ?= -pa . \
-	-noshell -noinput  \
 	-sasl errlog_type error \
 	-escript main $(ESCRIPT_NAME)
 ESCRIPT_SHEBANG ?= /usr/bin/env escript
@@ -33,6 +32,7 @@ help::
 # Modified MIT License, https://github.com/synrc/mad/blob/master/LICENSE :
 # Software may only be used for the great good and the true happiness of all
 # sentient beings.
+
 define ESCRIPT_RAW
 'Read = fun(F) -> {ok, B} = file:read_file(filename:absname(F)), B end,'\
 'Files = fun(L) -> A = lists:concat([filelib:wildcard(X)||X<- L ]),'\
@@ -51,12 +51,14 @@ define ESCRIPT_RAW
 '  ]),'\
 '  file:change_mode(Escript, 8#755)'\
 'end,'\
-'Ez("$(ESCRIPT_NAME)").'
+'Ez("$(ESCRIPT_NAME)"),'\
+'halt().'
 endef
+
 ESCRIPT_COMMAND = $(subst ' ',,$(ESCRIPT_RAW))
 
 escript:: distclean-escript deps app
-	$(gen_verbose) erl -noshell -eval $(ESCRIPT_COMMAND) -s init stop
+	$(gen_verbose) $(ERL) -eval $(ESCRIPT_COMMAND)
 
 distclean-escript:
 	$(gen_verbose) rm -f $(ESCRIPT_NAME)

+ 2 - 3
plugins/eunit.mk

@@ -41,12 +41,11 @@ clean:: clean-eunit
 
 # Plugin-specific targets.
 
-EUNIT_RUN = erl \
+EUNIT_RUN = $(ERL) \
 	-no_auto_compile \
-	-noshell \
 	-pa $(realpath $(EUNIT_DIR)) $(DEPS_DIR)/*/ebin \
 	-pz $(realpath ebin) \
-	-eval 'case eunit:test([$(call str-join,$(TAGGED_EUNIT_TESTS))], [$(EUNIT_OPTS)]) of ok -> erlang:halt(0); error -> erlang:halt(1) end.'
+	-eval 'case eunit:test([$(call str-join,$(TAGGED_EUNIT_TESTS))], [$(EUNIT_OPTS)]) of ok -> halt(0); error -> halt(1) end.'
 
 help-eunit:
 	@printf "%s\n" "" \