[m-rev.] for review: add --show-make-times option
Julien Fischer
juliensf at csse.unimelb.edu.au
Tue Jul 29 14:45:55 AEST 2008
On Mon, 28 Jul 2008, Peter Wang wrote:
> Branches: main
>
> Add a `mmc --make --show-make-times' option which reports how long each
> module target took to build, e.g.
>
> Making Mercury/analysiss/hlds.make_hlds.make_hlds_error.analysis
> Making Mercury/analysiss/hlds.make_hlds.make_hlds_error.analysis took 20.09s
>
> compiler/options.m:
> Add the new option.
>
> compiler/make.util.m:
> Export MR_get_real_milliseconds() for use by Mercury code.
>
> compiler/make.module_target.m:
> Write a message if `--show-make-times' is enabled and a target took
> some time to execute.
>
> doc/user_guide.texi:
> Document the new option.
>
> diff --git a/compiler/make.module_target.m b/compiler/make.module_target.m
> index 38b2cd4..c1c4270 100644
> --- a/compiler/make.module_target.m
> +++ b/compiler/make.module_target.m
> @@ -81,6 +81,7 @@
> :- import_module transform_hlds.mmc_analysis.
>
> :- import_module dir.
> +:- import_module float.
> :- import_module svmap.
>
> %-----------------------------------------------------------------------------%
> @@ -376,13 +377,32 @@ build_target(CompilationTask, TargetFile, Imports, TouchedTargetFiles,
> MaybeArgFileName = no
> )
> ),
> +
> + get_real_milliseconds(Time0, !IO),
> build_with_check_for_interrupt(
> build_with_module_options_and_output_redirect(ModuleName,
> ExtraOptions ++ TaskOptions,
> build_target_2(ModuleName, Task, MaybeArgFileName, Imports)),
> Cleanup, Succeeded, !Info, !IO),
> record_made_target_2(Succeeded, TargetFile, TouchedTargetFiles,
> - TouchedFiles, !Info, !IO).
> + TouchedFiles, !Info, !IO),
> + get_real_milliseconds(Time, !IO),
> +
> + globals.io_lookup_bool_option(show_make_times, ShowMakeTimes, !IO),
> + (
> + ShowMakeTimes = yes,
> + DiffSecs = float(Time - Time0) / 1000.0,
> + % Avoid cluttering the screen with short running times.
> + ( DiffSecs >= 0.4 ->
> + io.write_string("Making ", !IO),
> + make_write_target_file(TargetFile, !IO),
> + io.format(" took %.2fs\n", [f(DiffSecs)], !IO)
> + ;
> + true
> + )
> + ;
> + ShowMakeTimes = no
> + ).
>
> :- pred build_target_2(module_name::in, compilation_task_type::in,
> maybe(file_name)::in, module_imports::in, list(string)::in,
> diff --git a/compiler/make.util.m b/compiler/make.util.m
> index 3f2c576..25e0426 100644
> --- a/compiler/make.util.m
> +++ b/compiler/make.util.m
> @@ -297,6 +297,13 @@
>
> %-----------------------------------------------------------------------------%
> %
> +% Timing
> +%
> +
> +:- pred get_real_milliseconds(int::out, io::di, io::uo) is det.
> +
> +%-----------------------------------------------------------------------------%
> +%
> % Hash functions
> %
>
> @@ -1584,6 +1591,19 @@ make_write_module_or_linked_target(ModuleName - FileType, !IO) :-
>
> %-----------------------------------------------------------------------------%
> %
> +% Timing
> +%
> +
> +:- pragma foreign_proc("C",
> + get_real_milliseconds(Time::out, IO0::di, IO::uo),
> + [will_not_call_mercury, promise_pure, thread_safe, tabled_for_io],
> +"
> + Time = MR_get_real_milliseconds();
> + IO = IO0;
> +").
> +
> +%-----------------------------------------------------------------------------%
> +%
> % Hash functions
> %
>
> diff --git a/compiler/options.m b/compiler/options.m
> index 27f9ef6..6598461 100644
> --- a/compiler/options.m
> +++ b/compiler/options.m
> @@ -860,6 +860,7 @@
> ; intermod_directories
> ; use_search_directories_for_intermod
> ; libgrade_install_check
> + ; show_make_times
>
> % Miscellaneous Options
> ; filenames_from_stdin
> @@ -1678,7 +1679,8 @@ option_defaults_2(build_system_option, [
> search_directories - accumulating(["."]),
> intermod_directories - accumulating([]),
> use_search_directories_for_intermod - bool(yes),
> - libgrade_install_check - bool(yes)
> + libgrade_install_check - bool(yes),
> + show_make_times - bool(no)
> ]).
> option_defaults_2(miscellaneous_option, [
> % Miscellaneous Options
> @@ -2534,7 +2536,7 @@ long_option("intermod-directory", intermod_directories).
> long_option("use-search-directories-for-intermod",
> use_search_directories_for_intermod).
> long_option("libgrade-install-check", libgrade_install_check).
> -
> +long_option("show-make-times", show_make_times).
>
> % misc options
> long_option("typecheck-ambiguity-warn-limit",
> @@ -5176,7 +5178,9 @@ options_help_build_system -->
> "--no-libgrade-install-check",
> "\tDo not check that libraries have been installed before",
> "\tattempting to use them. (This option is only meaningful with",
> - "\t`mmc --make'.)"
> + "\t`mmc --make'.)",
> + "--show-make-times",
> + "\tReport running times for commands executed by `mmc --make'."
> ]).
>
> :- pred options_help_misc(io::di, io::uo) is det.
> diff --git a/doc/user_guide.texi b/doc/user_guide.texi
> index d6f876f..51ada54 100644
> --- a/doc/user_guide.texi
> +++ b/doc/user_guide.texi
> @@ -8896,6 +8896,11 @@ current directory.
> @samp{--use-grade-subdirs} does not work with Mmake (it does
> work with @samp{mmc --make}).
>
> + at sp 1
> + at item --show-make-times
> + at findex --show-make-times
> +Report running times for commands executed by @samp{mmc --make}.
> +
s/running/run/ there and above.
Otherwise that's fine.
Julien.
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list