1C 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
29Examples
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
35CC 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
91Example
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
99Bytecode 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
140Example
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
149Backends for debugging
150	perl -MO=Terse,exec foo.pl
151	perl -MO=Debug bar.pl
152
153O 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
164	end up running) and registers a CHECK block to call back the sub ref
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
167	doing so, assuming there are no parse-time errors, the CHECK block
168	of O gets called and the actual backend compilation happens. Phew.
169