Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
96 lines (63 sloc) 2.8 KB
You're reading ./Cross/, describing Perl cross-compilation process.
NOTE: this file will replace ./Cross/README, after the cross-compilation scheme
is stabilized.
=head1 NAME - Cross-compilation for linux
This is second approach to linux cross-compilation, which should allow
building full perl and extensions for target platform. Cross-compilation
for linux uses similar approach and shares the same files as
cross-compilation for WinCE.
We refer to HOST as the platform where the build is performed, and to
TARGET as where final executables will run.
=head2 Basic ideas
=head3 common
Unlike WinCE, output files from GCC cross-compiler are produced in the same
directory where C files are. All TARGET binaries have different extensions
so to distinguish HOST and TARGET binaries. Namely, object files for C<arm>
cross-compilation will have extension C<.armo>, executable files will have
After typical cross-compilation the following files will be built, among
(this approach may be reconsidered, however.)
=head3 build process
C<miniperl> is built. This executable is intended to run on HOST, and it
will facilitate the remaining build process; all binaries built after it are
foreign (TARGET) and should not run locally (HOST).
Unlike HOST build, miniperl will not have C<> of HOST within reach;
it rather will use the C<> from the cross-compilation directories.
In fact, if the build process does have within reach, this is only
an indication of a mistake somewhere in the middle.
# following command is okay:
./miniperl -Ilib -MCross -MConfig -e 1
# following command should cluck, and it is bad if it does not:
./miniperl -Ilib -MConfig -e 1
After C<miniperl> is built, C<configpm> is invoked to create an
appropriate C<> in the right place and its corresponding
File C<> is dead simple: for given cross-architecture places in @INC
a path where perl modules are, and right C<> in that place.
That said, C<miniperl -Ilib -MConfig -we 1> should report an error, because
it cannot find C<>. If it does not give an error, a wrong C<>
is substituted, and resulting binaries will be a mess.
C<miniperl -MCross -MConfig -we 1> should run okay, and it will provide a
correct C<> for further compilations.
During extensions build phase, the script C<./ext/util/make_ext_cross> is
All invocations of C<Makefile.PL> are provided with C<-MCross> so to enable
=head2 BUILD
=head3 Tools & SDK
To compile, you need the following:
=over 4
=item * TODO
=head1 Things to be done
=over 4
=item * better distinguishing of config.h/xconfig.h, dependencies
=item * object files created in ./xlib/cross-name/ ?
Something went wrong with that request. Please try again.