Files
mercury/scripts/parse_grade_options.sh-subr
Julien Fischer f60caca91c Use trail segments by default in trailing grades.
Until now, we have supported two variants of trailing grades, those that use a
fixed-size trail (.tr) and those that use trail segments (.trseg).  This change
removes support for fixed sized trails, and renames the .trseg grade component
to .tr. The .trseg grade now acts a synonym for .tr; it is deprecated, since we
intend to eventually delete it.  Until then, the behavior of the old .tr grade
component should be available, though to developers only, by compiling the
whole system with EXTRA_CFLAGS = -DMR_USE_FIXED_SIZE_TRAIL.

runtime/mercury_conf_param.h:
    Delete the MR_TRAIL_SEGMENTS macro. Its effect is now implied by
    MR_USE_TRAIL, unless a new macro, MR_USE_FIXED_SIZE_TRAIL, is defined.
    Developers can use this new macro to disable trail segments, should the
    need for doing that arise.

runtime/mercury_grade.h:
    Add a new macro that defines a binary compatibility version number for
    trailing; use that in the grade part for trailing.

    Use "_trfix" or "_trseg" as the prefix of the trailing part of the
    MR_GRADE_VAR depending on if MR_USE_FIXED_SIZE_TRAIL is defined or
    not.

runtime/mercury_trail.[ch]:
runtime/mercury_context.h:
    Enable trail segments by default, only disabling them if
    MR_USE_FIXED_SIZE_TRAIL is enabled.

runtime/mercury_wrapper.c:
trace/mercury_trace_cmd_developer.c:
    Conform to the above changes.

compiler/compile_target_code.m:
    Do not pass options for trail segments to the C compiler.

compiler/compute_grade.m:
    Treat trseg as a synonym for tr.

compiler/options.m:
    Deprecate --trail-segments.

grade_lib/grade_spec.m:
grade_lib/grade_string.m:
grade_lib/grade_structure.m:
grade_lib/grade_vars.m:
grade_lib/try_all_grade_structs.m:
grade_lib/var_value_names.m:
    Remove the trseg component.

scripts/canonical_grade.sh-subr:
scripts/init_grade_options.sh-subr:
scripts/mgnuc.in:
scripts/parse_grade_options.sh-subr:
    Remove support for the --trail-segments option.

doc/user_guide.texi:
    Update the documentation for the --trail-segments.

    Comment out the documentation of the --trail-size and --trail-size-kwords
    runtime options; they are no longer useful to non-developers.

NEWS:
    Announce this change.
2020-02-18 13:07:24 +11:00

530 lines
14 KiB
Plaintext

#---------------------------------------------------------------------------#
# vim: ts=4 sw=4 expandtab
#---------------------------------------------------------------------------#
# Copyright (C) 1997-2007, 2010 The University of Melbourne.
# This file may only be copied under the terms of the GNU General
# Public License - see the file COPYING in the Mercury distribution.
#---------------------------------------------------------------------------#
#
# parse_grade_options.sh-subr:
# An `sh' subroutine for parsing grade-related options.
# Used by the `ml', `mgnuc' and `c2init' scripts.
#
# The code here should be inserted in the case statement in a script's
# option-parsing loop.
#
# IMPORTANT: any changes to the handling of grades here may also require
# changes to all the files indicated by runtime/mercury_grade.h.
#
# This file should handle the setting of all the shell variables defined by
# init_grade_options.sh-subr.
#
#---------------------------------------------------------------------------#
--target)
shift
case "$1" in
c|C)
target=c ;;
csharp|'C#')
target=csharp ;;
java|Java)
target=java ;;
erlang|Erlang)
target=erlang ;;
*)
echo "$0: invalid target \`$1'" 1>&2
exit 1
;;
esac
;;
--csharp|'--C#'|--csharp-only|'--C#-only')
target=csharp ;;
--java|--Java|--java-only|--Java-only)
target=java ;;
--erlang|--Erlang|--erlang-only|--Erlang-only)
target=erlang ;;
--high-level-code|-H)
highlevel_code=true ;;
--no-high-level-code|-H-)
highlevel_code=false ;;
--high-level-data)
highlevel_data=true ;;
--no-high-level-data)
highlevel_data=false ;;
--asm-labels)
asm_labels=true ;;
--no-asm-labels)
asm_labels=false ;;
--gcc-non-local-gotos)
non_local_gotos=true ;;
--no-gcc-non-local-gotos)
non_local_gotos=false ;;
--gcc-global-registers)
global_regs=true ;;
--no-gcc-global-registers)
global_regs=false ;;
--gc)
shift
case "$1" in
accurate|conservative|boehm|boehm_debug|hgc|none|automatic)
gc_method=$1 ;;
*)
echo "$0: invalid gc method \`$1'" 1>&2
exit 1
;;
esac
;;
--parallel)
thread_safe=true ;;
-p|--profiling|--time-profiling)
profile_time=true
profile_calls=true
profile_memory=false
profile_deep=false
;;
--memory-profiling)
profile_time=false
profile_calls=true
profile_memory=true
profile_deep=false
;;
--deep-profiling)
profile_time=false
profile_calls=false
profile_memory=false
profile_deep=true
;;
-p-|--no-profiling)
profile_time=false
profile_calls=false
profile_memory=false
profile_deep=false
;;
--profile-time)
profile_time=true ;;
--no-profile-time)
profile_time=false ;;
--profile-calls)
profile_calls=true ;;
--no-profile-calls)
profile_calls=false ;;
--profile-memory)
profile_memory=true ;;
--no-profile-memory)
profile_memory=false ;;
--profile-deep)
profile_deep=true ;;
--no-profile-deep)
profile_deep=false ;;
--record-term-sizes-as-words)
record_term_sizes_as_words=true ;;
--no-record-term-sizes-as-words)
record_term_sizes_as_words=false ;;
--record-term-sizes-as-cells)
record_term_sizes_as_cells=true ;;
--no-record-term-sizes-as-cells)
record_term_sizes_as_cells=false ;;
--use-trail)
use_trail=true ;;
--no-use-trail)
use_trail=false ;;
--use-minimal-model-stack-copy)
use_minimal_model_stack_copy=true ;;
--no-use-minimal-model-stack-copy)
use_minimal_model_stack_copy=false ;;
--use-minimal-model-own-stacks)
use_minimal_model_own_stacks=true ;;
--no-use-minimal-model-own-stacks)
use_minimal_model_own_stacks=false ;;
--minimal-model-debug)
minimal_model_debug=true ;;
--no-minimal-model-debug)
minimal_model_debug=false ;;
--pregenerated-dist)
pregenerated_dist=true ;;
--no-pregenerated-dist)
pregenerated_dist=false ;;
--single-prec-float)
single_prec_float=true ;;
--no-single-prec-float)
single_prec_float=false ;;
--debug)
debug=true ;;
--no-debug)
debug=false ;;
--decl-debug)
decl_debug=true ;;
--no-decl-debug)
decl_debug=false ;;
--ss-debug)
ss_debug=true ;;
--no-ss-debug)
ss_debug=false ;;
--low-level-debug)
ll_debug= true ;;
--no-low-level-debug)
ll_debug= false ;;
--extend-stacks-when-needed)
extend_stacks=true ;;
--no-extend-stacks-when-needed)
extend_stacks=false ;;
--stack-segments)
stack_segments=true ;;
--no-stack-segments)
stack_segments=false ;;
--use-regions)
use_regions=true;;
--no-use-regions)
use_regions=false ;;
--use-regions-debug)
use_regions_debug=true;;
--no-use-regions-debug)
use_regions_debug=false ;;
--use-regions-profiling)
use_regions_profiling=true;;
--no-use-regions-profiling)
use_regions_profiling=false ;;
-s|--grade)
shift
grade="$1";
# Convert a grade to a set of options.
#
# IMPORTANT: any changes to the handling of grades here
# may also require changes to all the files indicated by
# runtime/mercury_grade.h.
target=c
highlevel_code=false
highlevel_data=false
asm_labels=false
non_local_gotos=false
global_regs=false
thread_safe=false
gc_method=none
profile_time=false
profile_calls=false
profile_memory=false
profile_deep=false
record_term_sizes_as_words=false
record_term_sizes_as_cells=false
use_trail=false
use_minimal_model_stack_copy=false
use_minimal_model_own_stacks=false
minimal_model_debug=false
pregenerated_dist=false
single_prec_float=false
debug=false
decl_debug=false
ss_debug=false
ll_debug=false
extend_stacks=false
stack_segments=false
use_regions=false
use_regions_debug=false
use_regions_profiling=false
grade_pieces=`echo $grade | tr '.' ' '`
for grade_piece in $grade_pieces
do
case "$grade_piece" in
csharp)
target=csharp
asm_labels=false
non_local_gotos=false
global_regs=false
highlevel_code=true
highlevel_data=true
;;
java)
target=java
asm_labels=false
non_local_gotos=false
global_regs=false
highlevel_code=true
highlevel_data=true
;;
erlang)
target=erlang
asm_labels=false
non_local_gotos=false
global_regs=false
highlevel_code=true
highlevel_data=true
;;
hl)
asm_labels=false
non_local_gotos=false
global_regs=false
highlevel_code=true
highlevel_data=true
;;
hlc)
asm_labels=false
non_local_gotos=false
global_regs=false
highlevel_code=true
highlevel_data=false
;;
asm_fast)
target=c
asm_labels=true
non_local_gotos=true
global_regs=true
highlevel_code=false
highlevel_data=false
;;
asm_jump)
target=c
asm_labels=true
non_local_gotos=true
global_regs=false
highlevel_code=false
highlevel_data=false
;;
fast)
target=c
asm_labels=false
non_local_gotos=true
global_regs=true
highlevel_code=false
highlevel_data=false
;;
jump)
target=c
asm_labels=false
non_local_gotos=true
global_regs=false
highlevel_code=false
highlevel_data=false
;;
reg)
target=c
asm_labels=false
non_local_gotos=false
global_regs=true
highlevel_code=false
highlevel_data=false
;;
none)
target=c
asm_labels=false
non_local_gotos=false
global_regs=false
highlevel_code=false
highlevel_data=false
;;
par)
thread_safe=true
;;
threadscope)
threadscope=true
;;
agc)
gc_method=accurate
;;
gc)
gc_method=boehm
;;
hgc)
gc_method=hgc
;;
gcd)
gc_method=boehm_debug
;;
nogc)
gc_method=none
;;
memprof)
profile_time=false
profile_calls=true
profile_memory=true
profile_deep=false
;;
prof)
profile_time=true
profile_calls=true
profile_memory=false
profile_deep=false
;;
proftime)
profile_time=true
profile_calls=false
profile_memory=false
profile_deep=false
;;
profcalls)
profile_time=false
profile_calls=true
profile_memory=false
profile_deep=false
;;
profall)
profile_time=true
profile_calls=true
profile_memory=true
profile_deep=false
;;
profdeep)
profile_time=false
profile_calls=false
profile_memory=false
profile_deep=true
;;
tsw)
record_term_sizes_as_words=true
record_term_sizes_as_cells=false
;;
tsc)
record_term_sizes_as_words=false
record_term_sizes_as_cells=true
;;
tr)
use_trail=true
;;
trseg)
use_trail=true
;;
mm)
use_minimal_model_stack_copy=true
minimal_model_debug=false
;;
dmm)
use_minimal_model_stack_copy=true
minimal_model_debug=true
;;
mmsc)
use_minimal_model_stack_copy=true
minimal_model_debug=false
;;
dmmsc)
use_minimal_model_stack_copy=true
minimal_model_debug=true
;;
mmos)
use_minimal_model_own_stacks=true
minimal_model_debug=false
;;
dmmos)
use_minimal_model_own_stacks=true
minimal_model_debug=true
;;
pregen)
pregenerated_dist=true
;;
spf)
single_prec_float=true
;;
debug)
debug=true
;;
decldebug)
decl_debug=true
;;
ssdebug)
ss_debug=true
;;
ll_debug)
ll_debug=true
;;
exts)
extend_stacks=true
;;
stseg)
stack_segments=true
;;
rbmm)
use_regions=true
use_regions_debug=false
use_regions_profiling=false
;;
rbmmd)
use_regions=true
use_regions_debug=true
use_regions_profiling=false
;;
rbmmp)
use_regions=true
use_regions_debug=false
use_regions_profiling=true
;;
rbmmdp)
use_regions=true
use_regions_debug=true
use_regions_profiling=true
;;
*)
echo "$0: unknown grade component \`$grade_piece'" 1>&2
exit 1
;;
esac
done
;;
-s*)
grade="` expr $1 : '-s\(.*\)' `"
# just insert it as `--grade $grade' and then reparse it
shift
case $# in
0) set - x --grade "$grade" ;;
*) set - x --grade "$grade" "$@" ;;
esac
;;