diff options
Diffstat (limited to 'xcomp/README')
-rw-r--r-- | xcomp/README | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/xcomp/README b/xcomp/README new file mode 100644 index 0000000000..dfda81fc8e --- /dev/null +++ b/xcomp/README @@ -0,0 +1,218 @@ +================================================================================ + Cross compiling Erlang/OTP +================================================================================ + +%CopyrightBegin% + +Copyright Ericsson AB 2009. All Rights Reserved. + +The contents of this file are subject to the Erlang Public License, +Version 1.1, (the "License"); you may not use this file except in +compliance with the License. You should have received a copy of the +Erlang Public License along with this software. If not, it can be +retrieved online at http://www.erlang.org/. + +Software distributed under the License is distributed on an "AS IS" +basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +the License for the specific language governing rights and limitations +under the License. + +%CopyrightEnd% + +================================================================================ + +This directory contains a configuration file template and configuration examples +for cross compiling Erlang/OTP. The configuration files contain configuration +variables and should be supplied to the $ERL_TOP/otp_build when setting up an +appropriate environment for cross compiling. The currently used configuration +variables are described later in this document. + +The erl-xcomp.conf.template contains all available configuration variables +and can be used as a template when creating a configuration. See the +erl-xcomp-TileraMDE2.0-tilepro.conf for an example of a working configuration +file. + +Instead of using the configuration files one can export the configuration +variables as ordinary environment variables before calling otp_build. If +default behavior of a variable is satisfactory, the variable need not to +be set and exported. + +Note that the support for cross compiling is in its early stage of development, +and should be considered as experimental. The build system including cross +compilation configuration variables used may be subject to non backward +compatible changes without prior notice. It works for cross compiling some +Linux/GNU systems, but has only been partly tested for more esoteric platforms. +The VxWorks example file is highly dependent on our environment and is here +more or less only for internal use. + +Please submit any patches for cross compiling in a way consistent with this +system. If a new configuration variable is needed for your system, add it to the +template file, use it in otp_build, aclocal.m4 and/or configure.in. All input is +welcome as we cannot possibly have all cross compiling environments out there to +test with. + +General information on how to submit patches can be found at: + http://wiki.github.com/erlang/otp/submitting-patches + +== Build and Install =========================================================== + + [1] $ cd $ERL_TOP + +Either set up your cross compilation variables in the environment manually, +or set up the environment using a configuration file by executing: + [2] $ eval `./otp_build env_cross <ABSOLUTE_PATH_TO_XCONF_FILE>` + +Configure and build Erlang/OTP: + [3] $ ./otp_build configure + [4] $ ./otp_build boot -a + [5] $ ./otp_build release -a <ABSOLUTE_PATH_TO_RELEASE_ROOT> + +The Install script used when installing Erlang/OTP requires common Unix +tools such as 'sed' to be present in your PATH. If your target system +does not have such tools, you need to run the Install script on your +build machine before packing Erlang/OTP. If so, run the Install script +like follows; otherwise skip [6] and [7]: + [6] $ cd <ABSOLUTE_PATH_TO_RELEASE_ROOT> + [7] $ ./Install -cross <ABSOLUTE_INSTALL_ROOT_ON_TARGET> # answer questions + +Pack Erlang/OTP as follows (gnu tar is assumed): + [8] $ cd <ABSOLUTE_PATH_TO_RELEASE_ROOT> + [9] $ tar -zcf <WHERE_TO_SAVE_THE_RELEASE>/<RELEASE_NAME>.tar.gz * + +Install Erlang/OTP on the target system like follows. If you ran the Install +script before packing ([6] and [7]) you should skip [12]: + [10] $ cd <ABSOLUTE_INSTALL_ROOT_ON_TARGET> + [11] $ tar -zxf <WHERE_THE_PACKED_RELEASE_EXIST>/<RELEASE_NAME>.tar.gz + [12] $ ./Install <ABSOLUTE_INSTALL_ROOT_ON_TARGET> # answer questions + +<ABSOLUTE_INSTALL_ROOT_ON_TARGET> usually equals current working directory +when you run the Install script on the target system, but does not have to. +It can follow another path through the file system to the same directory. +<ABSOLUTE_INSTALL_ROOT_ON_TARGET> is the path that will be used when running +Erlang/OTP and is the path that have to be available at run time. + +== Currently used configuration variables ====================================== + +-- Mandatory ------------------------------------------------------------------- + +* erl_xcomp_host + Target system. The value will be passed as '--host' argument to the configure + script. It does not have to be a full CPU-VENDOR-OS triplet, but can be. The + full CPU-VENDOR-OS triplet will be created by: + $ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host + +-- Optional -------------------------------------------------------------------- + +* erl_xcomp_configure_flags + To override the configure flags for a special target system, you + can set this variable which overrides configure parameters on the + command line and instead uses the specified options. The variable + leaves the build-host system untouched. + +-- Optional build environment flags -- + +If the cross compilation tools aren't prefixed by '$erl_xcomp_host-', +you will have to use these configuration variables in order to use the +right cross compilation tools. + +* erl_xcomp_cc + C compiler. + +* erl_xcomp_ld + Linker. + +* erl_xcomp_cflags + C compiler flags. + +* erl_xcomp_cpp + C pre processor. + +* erl_xcomp_ldflags + Linker flags. + +* erl_xcomp_ranlib + Ranlib program. + +* erl_xcomp_ar + Ar program. + +* erl_xcomp_ded_ld + Dynamic Erlang Driver linker. + +* erl_xcomp_ded_ldflags + Dynamic Erlang Driver linker flags. + +* erl_xcomp_ded_ld_runtime_library_path + Dynamic Erlang Driver runtime linker path. + +-- Optional feature, or bug tests -- + +These tests cannot (always) be done automatically when cross compiling. You +usually does not need to set these variables. Only set these if you really +know what you are doing. + +* erl_xcomp_bigendian - yes|no + If yes, the target system must be big endian. If no, little endian. This can + often be automatically detected, but not always. If not automatically + detected, configure will fail unless this variable is set. No default value + is used, i.e., configure will try to figure this out automatically. + +* erl_xcomp_linux_clock_gettime_correction - yes|no (defaults to yes) + If yes, clock_gettime(CLOCK_MONOTONIC, _) on the target system must work. + This variable is recommended to be set to no on Linux systems with kernel + versions less than 2.6. + +* erl_xcomp_linux_nptl - yes|no (defaults to yes on Linux; otherwise, no) + If yes, the target system must have NPTL (Native POSIX Thread Library). + Older Linux systems have LinuxThreads instead of NPTL (Linux kernel + versions typically less than 2.6). + +* erl_xcomp_linux_usable_sigusrx - yes|no (defaults to yes) + If yes, the SIGUSR1 and SIGUSR2 must be usable by the ERTS. Old + LinuxThreads thread libraries (Linux kernel versions less than 2.2) used + these signals and made them unusable by the ERTS. + +* erl_xcomp_linux_usable_sigaltstack - yes|no (defaults to yes) + If yes, sigaltstack() must be usable on the target system. sigaltstack() + on Linux kernel versions less than 2.4 are broken. + +* erl_xcomp_poll - yes|no (defaults to no on Darwin/MacOSX; otherwise, yes) + If yes, the target system must have a working poll() implementation that also + can handle devices. If no, select() will be used instead of poll(). + +* erl_xcomp_kqueue - yes|no (defaults to no) + If yes, the target system must have a working kqueue() implementation that + returns a file descriptor which can be used by poll() and/or select(). + If no and the target system has not got epoll() or /dev/poll, the kernel-poll + feature will be disabled. + +* erl_xcomp_putenv_copy - yes|no (defaults to no) + If yes, the target system must have a putenv() implementation that stores a + copy of the key/value pair. + +* erl_xcomp_reliable_fpe - yes|no (defaults to no) + If yes, the target system must have reliable floating point exceptions. + +* erl_xcomp_getaddrinfo - yes|no (defaults to no) + If yes, the target system must have a working getaddrinfo() implementation + that can handle both IPv4 and IPv6. + +* erl_xcomp_gethrvtime_procfs_ioctl - yes|no (defaults to no) + If yes, the target system must have a working gethrvtime() implementation + and is used with procfs ioctl(). + +* erl_xcomp_clock_gettime - yes|no (defaults to no) + If yes, the target system must have a working clock_gettime() implementation + that can be used for retrieving process CPU time. + +* erl_xcomp_after_morecore_hook - yes|no (defaults to no) + If yes, the target system must have a working __after_morecore_hook that can + be used for tracking used malloc() implementations core memory usage. + +* erl_xcomp_dlsym_brk_wrappers - yes|no (defaults to no) + If yes, the target system must have a working dlsym(RTLD_NEXT, <S>) + implementation that can be used on 'brk' and 'sbrk' symbols used by the + malloc() implementation in use, and by this track the malloc() implementations + core memory usage. + +================================================================================ |