| # SystemVerilog (Pseudo) Preprocessor | |
| <!--* | |
| freshness: { owner: 'hzeller' reviewed: '2022-11-16' } | |
| *--> | |
| `verible-verilog-preprocessor` is a collection of preprocessor-like tools, (but | |
| does not include a fully-featured Verilog preprocessor yet.) | |
| ```shell | |
| $ verible-verilog-preprocessor help | |
| available commands: | |
| generate-variants | |
| preprocess | |
| strip-comments | |
| ``` | |
| ## Preprocess | |
| Preprocess the given file(s) and expand macros and includes. | |
| #### Synopsis | |
| ``` | |
| verible-verilog-preprocessor preprocess [define-include-flags] file [file...] | |
| ``` | |
| #### Inputs | |
| Accepts one or more Verilog or SystemVerilog source files to preprocess. | |
| Each one of them will be prepropcessed independently which means that | |
| declaration scopes will end by the end of each file, and won't be seen from | |
| other files (so multiple files will _not_ be treated as compilation unit). | |
| The `+define+` and `+include+` directives on the commandline are honored by | |
| the preprocessor. | |
| #### Output | |
| The preprocessed files content (same contents with directives interpreted) | |
| will be written to stdout, concatenated. | |
| ## Strip Comments | |
| Removing comments can be useful for preparing to obfuscate code for sharing with | |
| EDA tool vendors. | |
| The `strip-comments` command strips comments from a Verilog/SystemVerilog | |
| source file, _including_ comments nested inside macro definition bodies and | |
| macro call arguments. | |
| Comments are actually replaced by an equal number of spaces (and newlines) to | |
| preserve the byte offsets and line ranges of the original text. This makes it | |
| easier to trace back diagnostics on obfuscated code back to the original code. | |
| #### Synopsis | |
| ``` | |
| verible-verilog-preprocessor strip-comments file [replacement-char] | |
| ``` | |
| #### Inputs | |
| `file` is a Verilog or SystemVerilog source file (Use `-` to read from stdin). | |
| The optional `replacement-char` is a character to replace comments with. | |
| If not given, or given as a single space character, the comment contents and | |
| delimiters are replaced with spaces. | |
| If an empty string, the comment contents and delimiters are deleted. Newlines | |
| are not deleted. | |
| If a single character, the comment contents are replaced with the character. | |
| #### Output | |
| Writes to stdout with contents of original file with `//` and `/**/` | |
| comments removed. | |
| ## Generate Variants | |
| Generates a number of variants of the input file by selectively switching | |
| on/off available macros. | |
| #### Synopsis | |
| ``` | |
| verible-verilog-preprocessor generate-variants file [-limit_variants number] | |
| ``` | |
| #### Inputs | |
| `file` is a Verilog or SystemVerilog source file. | |
| `-limit_variants` flag limits variants to 'number' (20 by default). | |
| #### Output | |
| Output to stdout. Generates every possible variant of `ifdef | |
| blocks considering the conditional directives. |