#---------------------------------------------------------------------------# # vim: ts=4 sw=4 expandtab ft=sh #---------------------------------------------------------------------------# # Copyright (C) 1997-2007, 2010 The University of Melbourne. # Copyright (C) 2013-2014, 2016-2017, 2020 The Mercury team. # 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 ;; --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 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 ;; java) target=java asm_labels=false non_local_gotos=false global_regs=false highlevel_code=true ;; erlang) target=erlang asm_labels=false non_local_gotos=false global_regs=false highlevel_code=true ;; hlc) asm_labels=false non_local_gotos=false global_regs=false highlevel_code=true ;; asm_fast) target=c asm_labels=true non_local_gotos=true global_regs=true highlevel_code=false ;; asm_jump) target=c asm_labels=true non_local_gotos=true global_regs=false highlevel_code=false ;; fast) target=c asm_labels=false non_local_gotos=true global_regs=true highlevel_code=false ;; jump) target=c asm_labels=false non_local_gotos=true global_regs=false highlevel_code=false ;; reg) target=c asm_labels=false non_local_gotos=false global_regs=true highlevel_code=false ;; none) target=c asm_labels=false non_local_gotos=false global_regs=false highlevel_code=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 ;;