#---------------------------------------------------------------------------# # vim: ts=4 sw=4 expandtab #---------------------------------------------------------------------------# # Copyright (C) 1997-2007 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 asm) target=asm ;; c|C) target=c ;; il|IL) target=il ;; java|Java) target=java ;; erlang|Erlang) target=erlang ;; *) echo "$0: invalid target \`$1'" 1>&2 exit 1 ;; esac ;; --il|--IL|--il-only|--IL-only) target=il ;; --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 ;; --gcc-nested-functions) gcc_nested_functions=true ;; --no-gcc-nested-functions) gcc_nested_functions=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|mps|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 ;; --single-prec-float) single_prec_float=true ;; --no-single-prec-float) single_prec_float=false ;; --pic-reg) pic_reg=true ;; --no-pic-reg) pic_reg=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 gcc_nested_functions=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 single_prec_float=false pic_reg=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 il) target=il asm_labels=false non_local_gotos=false global_regs=false highlevel_code=true gcc_nested_functions=false highlevel_data=true ;; ilc) target=il asm_labels=false non_local_gotos=false global_regs=false highlevel_code=true gcc_nested_functions=false highlevel_data=false ;; java) target=java asm_labels=false non_local_gotos=false global_regs=false highlevel_code=true gcc_nested_functions=false highlevel_data=true ;; erlang) target=erlang ;; hl) asm_labels=false non_local_gotos=false global_regs=false highlevel_code=true gcc_nested_functions=false highlevel_data=true ;; hlc) asm_labels=false non_local_gotos=false global_regs=false highlevel_code=true gcc_nested_functions=false highlevel_data=false ;; hl_nest) asm_labels=false non_local_gotos=false global_regs=false highlevel_code=true gcc_nested_functions=true highlevel_data=true ;; hlc_nest) asm_labels=false non_local_gotos=false global_regs=false highlevel_code=true gcc_nested_functions=true highlevel_data=false ;; asm_fast) target=c asm_labels=true non_local_gotos=true global_regs=true highlevel_code=false gcc_nested_functions=false highlevel_data=false ;; asm_jump) target=c asm_labels=true non_local_gotos=true global_regs=false highlevel_code=false gcc_nested_functions=false highlevel_data=false ;; fast) target=c asm_labels=false non_local_gotos=true global_regs=true highlevel_code=false gcc_nested_functions=false highlevel_data=false ;; jump) target=c asm_labels=false non_local_gotos=true global_regs=false highlevel_code=false gcc_nested_functions=false highlevel_data=false ;; reg) target=c asm_labels=false non_local_gotos=false global_regs=true highlevel_code=false gcc_nested_functions=false highlevel_data=false ;; none) target=c asm_labels=false non_local_gotos=false global_regs=false highlevel_code=false gcc_nested_functions=false highlevel_data=false ;; par) thread_safe=true ;; agc) gc_method=accurate ;; mps) gc_method=mps ;; gc) gc_method=boehm ;; 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 ;; 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 ;; spf) single_prec_float=true ;; picreg) pic_reg=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 ;;