| 1 | % (c) 2009-2024 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, | |
| 2 | % Heinrich Heine Universitaet Duesseldorf | |
| 3 | % This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) | |
| 4 | ||
| 5 | :- module(compile_time_flags, | |
| 6 | [compile_time_flag/1, | |
| 7 | compile_time_flags/1, | |
| 8 | relevant_prolog_flags/1 | |
| 9 | ]). | |
| 10 | ||
| 11 | % compile time flags can be set from the command line for SICStus Prolog | |
| 12 | % e.g., -Dprob_safe_mode=true when starting ProB from source or when generating the .sav file in the Makefile | |
| 13 | ||
| 14 | :- use_module(module_information,[module_info/2]). | |
| 15 | ||
| 16 | :- module_info(group,infrastructure). | |
| 17 | :- module_info(description,'This module describes the possible compile-time flags of ProB.'). | |
| 18 | ||
| 19 | compile_time_flags(list(Flags)) :- % list wrapper for Tcl | |
| 20 | findall(Flag, compile_time_flag(Flag), Flags). | |
| 21 | ||
| 22 | ||
| 23 | :- load_files(library(system), [when(compile_time), imports([environ/2])]). | |
| 24 | :- if(environ(prob_release,true)). | |
| 25 | compile_time_flag(prob_release). | |
| 26 | % set when building an official build of probcli or ProB Tcl/Tk | |
| 27 | % excludes Tcl benchmarks, unit tests | |
| 28 | :- endif. | |
| 29 | :- if(environ(prob_safe_mode,true)). | |
| 30 | compile_time_flag(prob_safe_mode). | |
| 31 | % perform additional checks | |
| 32 | % check_ast: check AST ground, check used_id infos for quantifiers...) | |
| 33 | % check typing in equal_object, variable clashes in comprehension_set, call_residue check in my_findall,... | |
| 34 | :- endif. | |
| 35 | :- if(environ(prob_core_only,true)). | |
| 36 | compile_time_flag(prob_core_only). | |
| 37 | % probcli only contains core modules, many extensions are not included | |
| 38 | :- endif. | |
| 39 | :- if(environ(plspec_patch_libraries,true)). | |
| 40 | compile_time_flag(plspec_patch_libraries). | |
| 41 | % use plspec to check calls to ordsets, avl and lists libraries | |
| 42 | :- endif. | |
| 43 | :- if(environ(prob_data_validation_mode,true)). | |
| 44 | compile_time_flag(prob_data_validation_mode). | |
| 45 | % prevent certain instantiations of sets on the assumption that we do not need powerful constraint solving | |
| 46 | :- endif. | |
| 47 | :- if(environ(no_wd_checking,true)). | |
| 48 | compile_time_flag(no_wd_checking). | |
| 49 | % disable Well-Definedness checking for function applications | |
| 50 | :- endif. | |
| 51 | :- if(environ(prob_profile,true)). | |
| 52 | compile_time_flag(prob_profile). | |
| 53 | % store profile information for operations and invariant checking; is now controlled by prob_profiling_on preference | |
| 54 | % but can be completely turned off by setting prob_profile to false | |
| 55 | :- endif. | |
| 56 | :- if(environ(prob_logging_mode,true)). | |
| 57 | compile_time_flag(prob_logging_mode). | |
| 58 | % automatically log probcli (add -ll command-line switch) | |
| 59 | :- endif. | |
| 60 | :- if(environ(no_terminal_colors,true)). | |
| 61 | compile_time_flag(no_terminal_colors). | |
| 62 | % disable terminal colors, can also be influence by setting NO_COLOR environment variable | |
| 63 | :- endif. | |
| 64 | :- if(environ(partially_evaluate,true)). | |
| 65 | compile_time_flag(partially_evaluate). | |
| 66 | :- endif. | |
| 67 | :- if(environ(partially_evaluate_compile,true)). | |
| 68 | compile_time_flag(partially_evaluate_compile). | |
| 69 | :- endif. | |
| 70 | :- if(environ(no_interrupts,true)). | |
| 71 | compile_time_flag(no_interrupts). | |
| 72 | % do not treat CTRL-C user_interrupts | |
| 73 | :- endif. | |
| 74 | :- if(environ(prob_noopt_mode,true)). | |
| 75 | compile_time_flag(prob_noopt_mode). | |
| 76 | % now While Loop optimisation | |
| 77 | :- endif. | |
| 78 | :- if(environ(prob_debug_flag,true)). | |
| 79 | compile_time_flag(prob_debug_flag). | |
| 80 | % additional debugging performed/enabled and checking of performance issues at the B Level | |
| 81 | :- endif. | |
| 82 | :- if(environ(prob_debug_watch_flag,true)). | |
| 83 | compile_time_flag(prob_debug_watch_flag). | |
| 84 | % watch certain predicate/expression computations precisely and report if they take too long | |
| 85 | % performs monitoring at a lower level closer to Prolog than prob_debug_flag | |
| 86 | :- endif. | |
| 87 | :- if(environ(prob_enter_debugger_upon_error,true)). | |
| 88 | compile_time_flag(prob_enter_debugger_upon_error). | |
| 89 | % enter SICStus debugger when exception/error occurs | |
| 90 | :- endif. | |
| 91 | :- if(environ(prob_use_timer,true)). | |
| 92 | compile_time_flag(prob_use_timer). | |
| 93 | % use microsecond timer | |
| 94 | :- endif. | |
| 95 | :- if(environ(prob_src_profile,true)). | |
| 96 | compile_time_flag(prob_src_profile). | |
| 97 | % perform profiling at B source level in source_profiler.pl, | |
| 98 | % now controlled by preference prob_source_profiling_on, but -Dprob_src_profile=false can disable it | |
| 99 | :- endif. | |
| 100 | :- if(environ(prob_myheap,false)). | |
| 101 | compile_time_flag(prob_myheap_false). | |
| 102 | % do not use C++ priority queue | |
| 103 | :- endif. | |
| 104 | :- if(environ(prob_c_counter,false)). | |
| 105 | compile_time_flag(prob_c_counter_false). | |
| 106 | % do not use C++ counter | |
| 107 | :- endif. | |
| 108 | :- if(environ(disable_chr,true)). | |
| 109 | compile_time_flag(disable_chr). % do not include CHR library at all | |
| 110 | :- endif. | |
| 111 | :- if(environ(enable_time_out_for_constraints,true)). | |
| 112 | compile_time_flag(enable_time_out_for_constraints). % use time_out for posting constraints | |
| 113 | :- endif. | |
| 114 | :- if(environ('SP_JIT',disabled)). | |
| 115 | compile_time_flag('SP_JIT=disabled'). | |
| 116 | :- endif. | |
| 117 | :- if(environ('SP_JIT',yes)). | |
| 118 | compile_time_flag('SP_JIT=yes'). % this is the default | |
| 119 | :- endif. | |
| 120 | :- if(environ('SP_JIT',no)). | |
| 121 | compile_time_flag('SP_JIT=no'). | |
| 122 | :- endif. | |
| 123 | :- if(environ('SP_JIT_COUNTER_LIMIT',_)). | |
| 124 | compile_time_flag('SP_JIT_COUNTER_LIMIT_SET'). % default is 0 | |
| 125 | :- endif. | |
| 126 | :- if(environ('SP_JIT_CLAUSE_LIMIT',_)). | |
| 127 | compile_time_flag('SP_JIT_CLAUSE_LIMIT_SET'). % default is 1024 | |
| 128 | :- endif. | |
| 129 | :- if(environ('SP_SPTI_PATH',verbose)). | |
| 130 | compile_time_flag('SP_SPTI_PATH=verbose'). % can be set to verbose | |
| 131 | :- endif. | |
| 132 | :- if(environ('SP_TIMEOUT_IMPLEMENTATON',legacy)). | |
| 133 | % Needed with SICStus 4.4.0 to work around an issue with nested timeouts. | |
| 134 | % Should have no effect on any other SICStus version. | |
| 135 | % This is not actually a compile-time flag - it only takes effect when set at runtime. | |
| 136 | compile_time_flag('SP_TIMEOUT_IMPLEMENTATON=legacy'). | |
| 137 | :- endif. | |
| 138 | ||
| 139 | compile_time_flag(_) :- fail. | |
| 140 | ||
| 141 | ||
| 142 | relevant_prolog_flags(Flags) :- | |
| 143 | findall(Flag/Val, (relevant_flag(Flag),current_prolog_flag(Flag,Val)), Flags). | |
| 144 | ||
| 145 | relevant_flag(dialect). | |
| 146 | relevant_flag(version_data). | |
| 147 | relevant_flag(platform_data). | |
| 148 | relevant_flag(profiling). | |
| 149 | relevant_flag(system_type). | |
| 150 | relevant_flag(host_type). | |
| 151 |