Version 8 (modified by elshar, 10 years ago) (diff) |
---|
Translation of RSF-Files into DIMACS Format
Translation of Tristate Variables
Tristate variables will be translated into 2 variables. This translation shall be equal to the translation of Undertaker or !KConfigReader:
- One variable declaring whether the related KConfig variable is permanentely selected
- One variable declaring whether the related KConfig variable is selected as a module.
- Only one of these variables can be selected at the same time.
The translation will be done as follows:
- In RSF:
Item VARIABLE tristate
- In DIMACS:
Not(VARIABLE) or Not(VARIABLE_MODULE)
- Meaning:
VARIABLE | VARIABLE_MODULE | Explanation |
0 | 0 | VARIABLE is permanentely deselected ('n' was selected) |
1 | 0 | VARIABLE is permanentely selected ('y' was selected) |
0 | 1 | VARIABLE is selected as a module ('m' was selected) |
1 | 1 | Illegal state |
Translation of depends Constraints
Each variable can have multiple depends statements, specifying when the variable can be configured. The variable must remain unconfigured (in case of a Boolean or Tristate variable, it must be set to n), if none of the depends statements is fulfilled. Conditions will be translated as follows:
- One Condition:
- In RSF:
depends Variable Condition
- In Boolean formula:
Not(Condition) implies Not(Variable)
- In DIMACS:
Condition or Not(Variable)
- In RSF:
- Multiple Conditions
- In RSF:
depends Variable Condition1 depends Variable Condition2
- In Boolean formula:
Not(Condition1) and Not(Condition2) implies Not(Variable)
- In DIMACS:
Condition1 or Condition2 or Not(Variable)
- In RSF:
Translation of ItemSelects Constraints
The KConfig specification defines select statements as follows:
reverse dependencies: "select" <symbol> ["if" <expr>]
While normal dependencies reduce the upper limit of a symbol (see below), reverse dependencies can be used to force a lower limit of another symbol. The value of the current menu symbol is used as the minimal value <symbol> can be set to. If <symbol> is selected multiple times, the limit is set to the largest selection. Reverse dependencies can only be used with boolean or tristate symbols.
- Translation of Boolean ItemSelect statements:
- In RSF:
ItemSelects BOOLEAN_VAR OTHER_VAR CONDITION
- In Boolean formula:
(BOOLEAN_VAR and CONDITION) implies OTHER_VAR
- In DIMACS:
Not(BOOLEAN_VAR) or Not(CONDITION) or OTHER_VAR
- In RSF:
- Translation of Tristate ItemSelect statements:
- In RSF:
ItemSelects TRISTATE_VAR OTHER_VAR CONDITION
- In Boolean formula:
(TRISTATE_VAR and CONDITION) implies OTHER_VAR (TRISTATE_VAR_MODULE and CONDITION) implies OTHER_VAR_MODULE
- In DIMACS:
Not(TRISTATE_VAR) or Not(CONDITION) or OTHER_VAR Not(TRISTATE_VAR_MODULE) or Not(CONDITION) or OTHER_VAR_MODULE
- In RSF:
Ranges
Ranges of Integers/Hex variables will not be considered. Since Kconfig supports only == and != comparisons, only values used inconstraints will be translated to DIMACS.