Commit | Line | Data |
a8a597b2 |
1 | C backend invocation |
2 | If there are any non-option arguments, they are taken to be |
3 | names of objects to be saved (probably doesn't work properly yet). |
4 | Without extra arguments, it saves the main program. |
5 | -ofilename Output to filename instead of STDOUT |
6 | -v Verbose (currently gives a few compilation statistics) |
7 | -- Force end of options |
8 | -uPackname Force apparently unused subs from package Packname to |
9 | be compiled. This allows programs to use eval "foo()" |
10 | even when sub foo is never seen to be used at compile |
11 | time. The down side is that any subs which really are |
12 | never used also have code generated. This option is |
13 | necessary, for example, if you have a signal handler |
14 | foo which you initialise with $SIG{BAR} = "foo". |
15 | A better fix, though, is just to change it to |
16 | $SIG{BAR} = \&foo. You can have multiple -u options. |
17 | -D Debug options (concat or separate flags like perl -D) |
18 | o OPs, prints each OP as it's processed |
19 | c COPs, prints COPs as processed (incl. file & line num) |
20 | A prints AV information on saving |
21 | C prints CV information on saving |
22 | M prints MAGIC information on saving |
23 | -f Force optimisations on or off one at a time. |
24 | cog Copy-on-grow: PVs declared and initialised statically |
25 | no-cog No copy-on-grow |
26 | -On Optimisation level (n = 0, 1, 2, ...). -O means -O1. |
27 | Currently, -O1 and higher set -fcog. |
28 | |
29 | Examples |
30 | perl -MO=C foo.pl > foo.c |
31 | perl cc_harness -o foo foo.c |
32 | |
33 | perl -MO=C,-v,-DcA bar.pl > /dev/null |
34 | |
35 | CC backend invocation |
36 | If there are any non-option arguments, they are taken to be names of |
37 | subs to be saved. Without extra arguments, it saves the main program. |
38 | -ofilename Output to filename instead of STDOUT |
39 | -- Force end of options |
40 | -uPackname Force apparently unused subs from package Packname to |
41 | be compiled. This allows programs to use eval "foo()" |
42 | even when sub foo is never seen to be used at compile |
43 | time. The down side is that any subs which really are |
44 | never used also have code generated. This option is |
45 | necessary, for example, if you have a signal handler |
46 | foo which you initialise with $SIG{BAR} = "foo". |
47 | A better fix, though, is just to change it to |
48 | $SIG{BAR} = \&foo. You can have multiple -u options. |
49 | -mModulename Instead of generating source for a runnable executable, |
50 | generate source for an XSUB module. The |
51 | boot_Modulename function (which DynaLoader can look |
52 | for) does the appropriate initialisation and runs the |
53 | main part of the Perl source that is being compiled. |
54 | -pn Generate code for perl patchlevel n (e.g. 3 or 4). |
55 | The default is to generate C code which will link |
56 | with the currently executing version of perl. |
57 | running the perl compiler. |
58 | -D Debug options (concat or separate flags like perl -D) |
59 | r Writes debugging output to STDERR just as it's about |
60 | to write to the program's runtime (otherwise writes |
61 | debugging info as comments in its C output). |
62 | O Outputs each OP as it's compiled |
63 | s Outputs the contents of the shadow stack at each OP |
64 | p Outputs the contents of the shadow pad of lexicals as |
65 | it's loaded for each sub or the main program. |
66 | q Outputs the name of each fake PP function in the queue |
67 | as it's about to processes. |
68 | l Output the filename and line number of each original |
69 | line of Perl code as it's processed (pp_nextstate). |
70 | t Outputs timing information of compilation stages |
71 | -f Force optimisations on or off one at a time. |
72 | [ |
73 | cog Copy-on-grow: PVs declared and initialised statically |
74 | no-cog No copy-on-grow |
75 | These two not in CC yet. |
76 | ] |
77 | freetmps-each-bblock Delays FREETMPS from the end of each |
78 | statement to the end of the each basic |
79 | block. |
80 | freetmps-each-loop Delays FREETMPS from the end of each |
81 | statement to the end of the group of |
82 | basic blocks forming a loop. At most |
83 | one of the freetmps-each-* options can |
84 | be used. |
85 | omit-taint Omits generating code for handling |
86 | perl's tainting mechanism. |
87 | -On Optimisation level (n = 0, 1, 2, ...). -O means -O1. |
88 | Currently, -O1 sets -ffreetmps-each-bblock and -O2 |
89 | sets -ffreetmps-each-loop. |
90 | |
91 | Example |
92 | perl -MO=CC,-O2,-ofoo.c foo.pl |
93 | perl cc_harness -o foo foo.c |
94 | |
95 | perl -MO=CC,-mFoo,-oFoo.c Foo.pm |
96 | perl cc_harness -shared -c -o Foo.so Foo.c |
97 | |
98 | |
99 | Bytecode backend invocation |
100 | |
101 | If there are any non-option arguments, they are taken to be |
102 | names of objects to be saved (probably doesn't work properly yet). |
103 | Without extra arguments, it saves the main program. |
104 | -ofilename Output to filename instead of STDOUT. |
105 | -- Force end of options. |
106 | -f Force optimisations on or off one at a time. |
107 | Each can be preceded by no- to turn the option off. |
108 | compress-nullops |
109 | Only fills in the necessary fields of ops which have |
110 | been optimised away by perl's internal compiler. |
111 | omit-sequence-numbers |
112 | Leaves out code to fill in the op_seq field of all ops |
113 | which is only used by perl's internal compiler. |
114 | bypass-nullops |
115 | If op->op_next ever points to a NULLOP, replaces the |
116 | op_next field with the first non-NULLOP in the path |
117 | of execution. |
118 | strip-syntax-tree |
119 | Leaves out code to fill in the pointers which link the |
120 | internal syntax tree together. They're not needed at |
121 | run-time but leaving them out will make it impossible |
122 | to recompile or disassemble the resulting program. |
123 | It will also stop "goto label" statements from working. |
124 | -On Optimisation level (n = 0, 1, 2, ...). -O means -O1. |
125 | -O1 sets -fcompress-nullops -fomit-sequence numbers. |
126 | -O6 adds -fstrip-syntax-tree. |
127 | -D Debug options (concat or separate flags like perl -D) |
128 | o OPs, prints each OP as it's processed. |
129 | b print debugging information about bytecompiler progress |
130 | a tells the assembler to include source assembler lines |
131 | in its output as bytecode comments. |
132 | C prints each CV taken from the final symbol tree walk. |
133 | -S Output assembler source rather than piping it |
134 | through the assembler and outputting bytecode. |
135 | -m Compile as a module rather than a standalone program. |
136 | Currently this just means that the bytecodes for |
137 | initialising main_start, main_root and curpad are |
138 | omitted. |
139 | |
140 | Example |
141 | perl -MO=Bytecode,-O6,-o,foo.plc foo.pl |
142 | |
143 | perl -MO=Bytecode,-S foo.pl > foo.S |
144 | assemble foo.S > foo.plc |
145 | byteperl foo.plc |
146 | |
147 | perl -MO=Bytecode,-m,-oFoo.pmc Foo.pm |
148 | |
149 | Backends for debugging |
150 | perl -MO=Terse,exec foo.pl |
151 | perl -MO=Debug bar.pl |
152 | |
153 | O module |
154 | Used with "perl -MO=Backend,foo,bar prog.pl" to invoke the backend |
155 | B::Backend with options foo and bar. O invokes the sub |
156 | B::Backend::compile() with arguments foo and bar at BEGIN time. |
157 | That compile() sub must do any inital argument processing replied. |
158 | If unsuccessful, it should return a string which O arranges to be |
159 | printed as an error message followed by a clean error exit. In the |
160 | normal case where any option processing in compile() is successful, |
161 | it should return a sub ref (usually a closure) to perform the |
162 | actual compilation. When O regains control, it ensures that the |
163 | "-c" option is forced (so that the program being compiled doesn't |
7d30b5c4 |
164 | end up running) and registers a CHECK block to call back the sub ref |
a8a597b2 |
165 | returned from the backend's compile(). Perl then continues by |
166 | parsing prog.pl (just as it would with "perl -c prog.pl") and after |
7d30b5c4 |
167 | doing so, assuming there are no parse-time errors, the CHECK block |
a8a597b2 |
168 | of O gets called and the actual backend compilation happens. Phew. |