diff options
-rw-r--r-- | README | 5 | ||||
-rw-r--r-- | erts/aclocal.m4 | 132 | ||||
-rw-r--r-- | erts/configure.in | 200 | ||||
-rw-r--r-- | erts/emulator/beam/sys.h | 5 | ||||
-rw-r--r-- | lib/erl_interface/configure.in | 10 | ||||
-rwxr-xr-x | lib/wx/configure.in | 20 | ||||
-rwxr-xr-x | otp_build | 165 | ||||
-rw-r--r-- | xcomp/README | 218 | ||||
-rw-r--r-- | xcomp/README.xcomp | 25 | ||||
-rw-r--r-- | xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf | 166 | ||||
-rw-r--r-- | xcomp/erl-xcomp-vxworks_ppc32.conf | 172 | ||||
-rw-r--r-- | xcomp/erl-xcomp.conf.template | 174 |
12 files changed, 812 insertions, 480 deletions
@@ -243,6 +243,11 @@ if './otp_build remove_prebuilt_files' is invoked. If you or your system has special requirements please read the Makefile for additional configuration information. +Cross compiling Erlang/OTP +-------------------------- +The support for cross compiling Erlang/OTP is in its early stage of +development, and should be considered as experimental. For more +information see: $ERL_TOP/xcomp/README How to build a debug enabled Erlang runtime system -------------------------------------------------- diff --git a/erts/aclocal.m4 b/erts/aclocal.m4 index 0ad963db12..e9a0cc228f 100644 --- a/erts/aclocal.m4 +++ b/erts/aclocal.m4 @@ -1,4 +1,4 @@ - +dnl dnl %CopyrightBegin% dnl dnl Copyright Ericsson AB 1998-2009. All Rights Reserved. @@ -15,6 +15,7 @@ dnl the License for the specific language governing rights and limitations dnl under the License. dnl dnl %CopyrightEnd% +dnl dnl dnl aclocal.m4 @@ -519,46 +520,79 @@ dnl On ofs1 the '-pthread' switch should be used ETHR_DEFS="$ETHR_DEFS -D_POSIX_PTHREAD_SEMANTICS" ;; linux*) ETHR_DEFS="$ETHR_DEFS -D_POSIX_THREAD_SAFE_FUNCTIONS -D_GNU_SOURCE" - if test "x$erl_xcomp_linux_kernel" != "x"; then - linux_kernel_vsn_=$erl_xcomp_linux_kernel - else - linux_kernel_vsn_=`uname -r` - fi - usable_sigusrx=no - usable_sigaltstack=no - # FIXME: Test for actual problems instead of kernel versions. - case $linux_kernel_vsn_ in - [[0-1]].*|2.[[0-1]]|2.[[0-1]].*) - ;; - 2.[[2-3]]|2.[[2-3]].*) - usable_sigusrx=yes - ;; - *) + if test X$cross_compiling = Xyes; then + if test "X$erl_xcomp_linux_usable_sigusrx" = "X"; then usable_sigusrx=yes + usable_sigusrx_guessed=yes + else + usable_sigusrx=$erl_xcomp_linux_usable_sigusrx + usable_sigusrx_guessed=no + fi + if test "X$erl_xcomp_linux_usable_sigaltstack" = "X"; then usable_sigaltstack=yes - ;; - esac + usable_sigaltstack_guessed=yes + else + usable_sigaltstack=$erl_xcomp_linux_usable_sigaltstack + usable_sigaltstack_guessed=no + fi + else + # FIXME: Test for actual problems instead of kernel versions + linux_kernel_vsn_=`uname -r` + case $linux_kernel_vsn_ in + [[0-1]].*|2.[[0-1]]|2.[[0-1]].*) + usable_sigusrx=no + usable_sigaltstack=no;; + 2.[[2-3]]|2.[[2-3]].*) + usable_sigusrx=yes + usable_sigaltstack=no;; + *) + usable_sigusrx=yes + usable_sigaltstack=yes;; + esac + usable_sigusrx_guessed=no + usable_sigaltstack_guessed=no + fi AC_MSG_CHECKING(if SIGUSR1 and SIGUSR2 can be used) AC_MSG_RESULT($usable_sigusrx) + if test $usable_sigusrx_guessed = yes; then + AC_MSG_WARN([result $usable_sigusrx guessed because of cross compilation]) + fi if test $usable_sigusrx = no; then ETHR_DEFS="$ETHR_DEFS -DETHR_UNUSABLE_SIGUSRX" fi AC_MSG_CHECKING(if sigaltstack can be used) AC_MSG_RESULT($usable_sigaltstack) + if test $usable_sigaltstack_guessed = yes; then + AC_MSG_WARN([result $usable_sigaltstack guessed because of cross compilation]) + fi if test $usable_sigaltstack = no; then ETHR_DEFS="$ETHR_DEFS -DETHR_UNUSABLE_SIGALTSTACK" fi AC_MSG_CHECKING(for Native POSIX Thread Library) - case `getconf GNU_LIBPTHREAD_VERSION 2>/dev/null` in - nptl*) nptl=yes;; - NPTL*) nptl=yes;; - *) nptl=no;; - esac + if test X$cross_compiling = Xyes; then + if test "X$erl_xcomp_linux_nptl" = "X"; then + nptl=yes + nptl_guessed=yes + else + nptl=$erl_xcomp_linux_nptl + nptl_guessed=no + fi + else + case `getconf GNU_LIBPTHREAD_VERSION 2>/dev/null` in + nptl*) nptl=yes;; + NPTL*) nptl=yes;; + *) nptl=no;; + esac + nptl_guessed=no + fi AC_MSG_RESULT($nptl) + if test $nptl_guessed = yes; then + AC_MSG_WARN([result $nptl guessed because of cross compilation]) + fi if test $nptl = yes; then ETHR_THR_LIB_BASE_NAME=nptl fi @@ -567,7 +601,10 @@ dnl On ofs1 the '-pthread' switch should be used AC_CHECK_HEADER(nptl/pthread.h, need_nptl_incldir=yes) if test $need_nptl_incldir = yes; then # Ahh... - nptl_path="$C_INCLUDE_PATH:$CPATH:/usr/local/include:/usr/include" + nptl_path="$C_INCLUDE_PATH:$CPATH" + if test X$cross_compiling != Xyes; then + nptl_path="$nptl_path:/usr/local/include:/usr/include" + fi nptl_ws_path= save_ifs="$IFS"; IFS=":" for dir in $nptl_path; do @@ -683,7 +720,7 @@ if test "x$ETHR_THR_LIB_BASE" != "x"; then ETHR_LIB_NAME=$ethr_lib_name fi -AC_CHECK_SIZEOF(void *, 4) +AC_CHECK_SIZEOF(void *) AC_DEFINE_UNQUOTED(ETHR_SIZEOF_PTR, $ac_cv_sizeof_void_p, [Define to the size of pointers]) if test "X$disable_native_ethr_impls" = "Xyes"; then @@ -751,13 +788,21 @@ case $clock_gettime_correction in case $clock_gettime_correction in unknown) if test x$clock_gettime_compiles = xyes; then - linux_kernel_vsn_=`uname -r` - case $linux_kernel_vsn_ in - [[0-1]].*|2.[[0-5]]|2.[[0-5]].*) - erl_cv_time_correction=times ;; - *) - erl_cv_time_correction=clock_gettime;; - esac + if test X$cross_compiling != Xyes; then + if test "X$erl_xcomp_linux_clock_gettime_correction" = "Xno"; then + erl_cv_time_correction=times + else + erl_cv_time_correction=clock_gettime + fi + else + linux_kernel_vsn_=`uname -r` + case $linux_kernel_vsn_ in + [[0-1]].*|2.[[0-5]]|2.[[0-5]].*) + erl_cv_time_correction=times ;; + *) + erl_cv_time_correction=clock_gettime;; + esac + fi else erl_cv_time_correction=times fi @@ -774,6 +819,7 @@ case $clock_gettime_correction in ;; esac ]) + xrtlib="" case $erl_cv_time_correction in times) @@ -781,6 +827,9 @@ case $erl_cv_time_correction in [Define if you do not have a high-res. timer & want to use times() instead]) ;; clock_gettime) + if test X$cross_compiling = Xyes -a X$erl_xcomp_linux_clock_gettime_correction = X; then + AC_MSG_WARN([result clock_gettime guessed because of cross compilation]) + fi xrtlib="-lrt" AC_DEFINE(GETHRTIME_WITH_CLOCK_GETTIME,[1], [Define if you want to use clock_gettime to simulate gethrtime]) @@ -840,7 +889,15 @@ int main() { exit(5); exit(0); return 0; } -], erl_gethrvtime=procfs_ioctl, erl_gethrvtime=false, erl_gethrvtime=false) +], +erl_gethrvtime=procfs_ioctl, +erl_gethrvtime=false, +if test "x$erl_xcomp_gethrvtime_procfs_ioctl" = "xyes"; then + erl_gethrvtime=procfs_ioctl +else + erl_gethrvtime=false +fi) + case $erl_gethrvtime in procfs_ioctl) AC_DEFINE(HAVE_GETHRVTIME_PROCFS_IOCTL,[1], @@ -880,7 +937,14 @@ case $erl_gethrvtime in exit(5); exit(0); return 0; } - ], erl_clock_gettime=true, erl_clock_gettime=false, erl_clock_gettime=false) + ], + erl_clock_gettime=true, + erl_clock_gettime=false, + if test "x$erl_xcomp_clock_gettime" = "xyes"; then + erl_clock_gettime=true + else + erl_clock_gettime=false + fi) LIBS=$save_libs case $host_os in linux*) diff --git a/erts/configure.in b/erts/configure.in index 895a357023..faccf5f102 100644 --- a/erts/configure.in +++ b/erts/configure.in @@ -94,13 +94,6 @@ enable_child_waiter_thread=no ENABLE_ALLOC_TYPE_VARS= AC_SUBST(ENABLE_ALLOC_TYPE_VARS) -AC_ARG_WITH(xcomp-conf, -[ --with-xcompconf=PATH path to cross compilation configuration]) -if test "x$with_xcompconf" != "xno" -a "x$with_xcompconf" != "x" ; then - . $with_xcompconf -fi - - AC_ARG_ENABLE(threads, [ --enable-threads enable async thread support --disable-threads disable async thread support], @@ -464,22 +457,18 @@ AC_SUBST(DEBUG_CFLAGS) AC_SUBST(WFLAGS) AC_SUBST(CFLAG_RUNTIME_LIBRARY_PATH) -AC_CHECK_SIZEOF(void *, $erl_xcomp_void_p) # Needed for ARCH and smp checks below +AC_CHECK_SIZEOF(void *) # Needed for ARCH and smp checks below dnl dnl Figure out operating system and cpu architecture dnl -if test "x$erl_xcomp_os" != "x"; then - chk_opsys_=$erl_xcomp_os +if test "x$host_alias" != "x"; then + chk_opsys_=$host_os else - if test "x$host_os" = "xwin32"; then - chk_opsys_=win32 - else - chk_opsys_=`uname -s` - if test "x$chk_opsys_" = "xSunOS"; then - chk_opsys_=$chk_opsys_`uname -r` - fi + chk_opsys_=`uname -s` + if test "x$chk_opsys_" = "xSunOS"; then + chk_opsys_=$chk_opsys_`uname -r` fi fi case $chk_opsys_ in @@ -491,11 +480,12 @@ case $chk_opsys_ in *) OPSYS=noopsys esac -if test "x$erl_xcomp_hw" != "x"; then - chk_arch_=$erl_xcomp_hw +if test "x$host_alias" != "x" -a "x$host_cpu" != "x"; then + chk_arch_=$host_cpu else chk_arch_=`uname -m` fi + case $chk_arch_ in sun4u) ARCH=ultrasparc;; sparc64) ARCH=sparc64;; @@ -1296,11 +1286,11 @@ dnl Interactive UX needs <net/errno.h> for socket related error codes. dnl Some Linuxes needs <sys/socketio.h> instead of <sys/sockio.h> dnl AC_CHECK_HEADERS(fcntl.h limits.h unistd.h syslog.h dlfcn.h ieeefp.h \ - sys/stropts.h sys/sysctl.h \ + sys/types.h sys/stropts.h sys/sysctl.h \ sys/ioctl.h sys/time.h sys/uio.h \ sys/socket.h sys/sockio.h sys/socketio.h \ net/errno.h malloc.h mach-o/dyld.h arpa/nameser.h \ - pty.h util.h utmp.h langinfo.h) + pty.h util.h utmp.h langinfo.h poll.h) AC_CHECK_HEADER(sys/resource.h, [AC_DEFINE(HAVE_SYS_RESOURCE_H, 1, @@ -1389,11 +1379,13 @@ LM_STRUCT_SOCKADDR_SA_LEN LM_STRUCT_EXCEPTION AC_CHECK_SIZEOF(char, 1) -AC_CHECK_SIZEOF(short, $erl_xcomp_short) -AC_CHECK_SIZEOF(int, $erl_xcomp_int) -AC_CHECK_SIZEOF(long, $erl_xcomp_long) -AC_CHECK_SIZEOF(void *, $erl_xcomp_void_p) -AC_CHECK_SIZEOF(long long, $erl_xcomp_long_long) +AC_CHECK_SIZEOF(short) +AC_CHECK_SIZEOF(int) +AC_CHECK_SIZEOF(long) +AC_CHECK_SIZEOF(void *) +AC_CHECK_SIZEOF(long long) +AC_CHECK_SIZEOF(size_t) +AC_CHECK_SIZEOF(off_t) BITS64= @@ -1457,71 +1449,26 @@ int main(void) abort (); return 0; } -],AC_MSG_RESULT(no) -,AC_MSG_RESULT(yes) -AC_MSG_ERROR([This gcc miscompiles the Erlang runtime system; please use a different version]) -,AC_MSG_RESULT(no)) -fi - -dnl AC_CHECK_SIZEOF(size_t, 4)dnl Assumes all cross compiling is to 32bit uP -dnl -dnl The disabled one above does not include stddef.h, alas! -dnl -AC_CACHE_CHECK([size of size_t], ac_cv_sizeof_size_t, -AC_TRY_RUN([ -#include <sys/types.h> -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -int main(int argc, char **argv) { - FILE *f = fopen("conftestval", "w"); - if (! f) - exit(1); /* Failed */ - fprintf(f, "%d\n", (int) sizeof(size_t)); - exit(0); /* OK */ -} -], ac_cv_sizeof_size_t=`cat conftestval` -, ac_cv_sizeof_size_t=0 -, ac_cv_sizeof_size_t=$erl_xcomp_sizeof_size_t)) -AC_DEFINE_UNQUOTED(SIZEOF_SIZE_T, $ac_cv_sizeof_size_t, [The number of bytes in a size_t]) +], gcc_4_3_0_bug=no, gcc_4_3_0_bug=yes, gcc_4_3_0_bug=cross) + +case $gcc_4_3_0_bug in + yes|no) + gcc_4_3_0_bug_result=$gcc_4_3_0_bug;; + cross) + gcc_dumped_vsn=`$CC -dumpversion 2>/dev/null` + case gcc-$gcc_dumped_vsn in + gcc-4.3.0) gcc_4_3_0_bug=yes;; + *) gcc_4_3_0_bug=no;; + esac + gcc_4_3_0_bug_result="$gcc_4_3_0_bug; could not run test since cross compiling, checked version number ($gcc_dumped_vsn) instead";; +esac -dnl A standard size check does not include sys/types.h -dnl -AC_CACHE_CHECK([size of off_t], ac_cv_sizeof_off_t, -AC_TRY_RUN([ -#include <sys/types.h> -#include <stdio.h> -#include <stdlib.h> -#include <stddef.h> -int main(int argc, char **argv) { - FILE *f = fopen("conftestval", "w"); - if (! f) - exit(1); /* Failed */ - fprintf(f, "%d\n", (int) sizeof(off_t)); - exit(0); /* OK */ -} -], ac_cv_sizeof_off_t=`cat conftestval` -, ac_cv_sizeof_off_t=0 -, ac_cv_sizeof_off_t=$erl_xcomp_sizeof_off_t)) -AC_DEFINE_UNQUOTED(SIZEOF_OFF_T, $ac_cv_sizeof_off_t, - [The number of bytes in an off_t]) +AC_MSG_RESULT([$gcc_4_3_0_bug_result]) +if test $gcc_4_3_0_bug = yes; then + AC_MSG_ERROR([This gcc miscompiles the Erlang runtime system; please use a different version]) +fi -AC_MSG_CHECKING([int/long/void*/size_t sizes]) -AC_TRY_RUN([ -#include <stdlib.h> -#include <stddef.h> -int main(int argc, char **argv) { - if (sizeof(void *) >= 4 && - sizeof(void *) == sizeof(size_t) && - (sizeof(void *) == sizeof(int) || sizeof(void *) == sizeof(long))) { - exit(0); /* OK */ - } - exit(1); /* Failed */ -} -],AC_MSG_RESULT(ok) -,AC_MSG_RESULT(failed) -AC_MSG_ERROR([Cannot handle this combination of int/long/void*/size_t sizes]) -,AC_MSG_RESULT(ok)) +fi if test "x$erl_xcomp_bigendian" != "x"; then ac_cv_c_bigendian=$erl_xcomp_bigendian @@ -1582,7 +1529,7 @@ AC_CHECK_FUNCS([ieee_handler fpsetmask finite isnan isinf res_gethostbyname dlop pread pwrite writev memmove strerror strerror_r strncasecmp \ gethrtime localtime_r gmtime_r mremap memcpy mallopt \ sbrk _sbrk __sbrk brk _brk __brk \ - flockfile fstat strlcpy strlcat setsid posix2time setlocale nl_langinfo]) + flockfile fstat strlcpy strlcat setsid posix2time setlocale nl_langinfo poll]) if test "X$host" = "Xwin32"; then ac_cv_func_setvbuf_reversed=yes fi @@ -1858,9 +1805,11 @@ int main(void) erts_cv___after_morecore_hook_can_track_malloc=no, if test "x$erl_xcomp_after_morecore_hook" != "x"; then erts_cv___after_morecore_hook_can_track_malloc=$erl_xcomp_after_morecore_hook + else + erts_cv___after_morecore_hook_can_track_malloc=no fi)]) -if test "x$erts_cv___after_morecore_hook_can_track_malloc" = "xyes"; then +if test $erts_cv___after_morecore_hook_can_track_malloc = yes; then AC_DEFINE(ERTS___AFTER_MORECORE_HOOK_CAN_TRACK_MALLOC, 1, \ [Define if __after_morecore_hook can track malloc()s core memory use.]) fi @@ -2116,7 +2065,11 @@ int main(void) ], erts_cv_brk_wrappers_can_track_malloc=yes, erts_cv_brk_wrappers_can_track_malloc=no, - erts_cv_brk_wrappers_can_track_malloc=no)]) + if test "x$erl_xcomp_dlsym_brk_wrappers" != "x"; then + erts_cv_brk_wrappers_can_track_malloc=$erl_xcomp_dlsym_brk_wrappers + else + erts_cv_brk_wrappers_can_track_malloc=no + fi)]) if test $erts_cv_brk_wrappers_can_track_malloc = yes; then AC_DEFINE(ERTS_BRK_WRAPPERS_CAN_TRACK_MALLOC, 1, \ [Define if sbrk()/brk() wrappers can track malloc()s core memory use]) @@ -2643,7 +2596,14 @@ int main(int argc, const char **argv) do_fmul(); return do_check(); } -], erl_ok=reliable, erl_ok=unreliable, erl_ok=unreliable) +], +erl_ok=reliable, +erl_ok=unreliable, +if test "x$erl_xcomp_reliable_fpe" = "xyes"; then + erl_ok=reliable +else + erl_ok=unreliable +fi) if test $erl_ok = unreliable; then AC_DEFINE(NO_FPE_SIGNALS,[], [Define if floating points exceptions are non-existing/not reliable]) @@ -2826,9 +2786,12 @@ fi # Check for working poll(). # AC_MSG_CHECKING([for working poll()]) -if test "x$erl_xcomp_poll" != "x"; then - poll_works=$erl_xcomp_poll +if test "x$ac_cv_header_poll_h" != "xyes" -o "x$ac_cv_func_poll" != "xyes"; then + +poll_works=no + else + AC_TRY_RUN([ #include <poll.h> main() @@ -2848,23 +2811,43 @@ main() exit(0); #endif } -], poll_works=true, poll_works=false, poll_works=false) +], +poll_works=yes, +poll_works=no, +poll_works=$erl_xcomp_poll) + +if test "X$poll_works" != "X"; then + guessed_poll_works=no +else + guessed_poll_works=yes + case $host_os in + darwin*) poll_works=no;; + *) poll_works=yes;; + esac +fi + fi + case $poll_works in -true) +yes) AC_DEFINE(ERTS_USE_POLL, 1, [Define if poll() should be used instead of select()]) - AC_MSG_RESULT(ok) + AC_MSG_RESULT(yes) ;; *) # # The USE_SELECT define is used by the ssl application (should not # be used by erts). # + poll_works=no AC_DEFINE(USE_SELECT, 1, [Define if select() should be used instead of poll()]) - AC_MSG_RESULT(broken or based on select()) + AC_MSG_RESULT([no; non-existing, broken, or based on select()]) ;; esac +if test $guessed_poll_works = yes; then + AC_MSG_WARN([result $poll_works guessed based on OS ($host_os) because of cross compilation]) +fi + # # If kqueue() found, check that it can be selected or polled on... # @@ -2900,7 +2883,14 @@ int main(void) { } return 0; } - ], ok_kqueue=true, ok_kqueue=false, ok_kqueue=false) + ], + ok_kqueue=true, + ok_kqueue=false, + if test "x$erl_xcomp_kqueue" = "xyes"; then + ok_kqueue=true + else + ok_kqueue=false + fi) if test $ok_kqueue = true; then AC_MSG_RESULT(yes); else @@ -2990,7 +2980,15 @@ int main(void) { return 5; return 0; } -], copying_putenv=yes, copying_putenv=no, copying_putenv=no) +], +copying_putenv=yes, +copying_putenv=no, +if test "x$erl_xcomp_putenv_copy" != "x"; then + copying_putenv=$erl_xcomp_putenv_copy +else + copying_putenv=no +fi) + if test $copying_putenv = yes; then AC_DEFINE(HAVE_COPYING_PUTENV,[1],[Define if you have a putenv() that stores a copy of the key-value pair]) fi diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h index 71cb6a36cc..4b949523fa 100644 --- a/erts/emulator/beam/sys.h +++ b/erts/emulator/beam/sys.h @@ -239,6 +239,11 @@ EXTERN_FUNCTION(int, real_printf, (const char *fmt, ...)); ** Sint16: A signed integer of 16 bits exactly. */ +#if !((SIZEOF_VOID_P >= 4) && (SIZEOF_VOID_P == SIZEOF_SIZE_T) \ + && ((SIZEOF_VOID_P == SIZEOF_INT) || (SIZEOF_VOID_P == SIZEOF_LONG))) +#error Cannot handle this combination of int/long/void*/size_t sizes +#endif + #if SIZEOF_VOID_P == 8 #undef ARCH_32 #define ARCH_64 diff --git a/lib/erl_interface/configure.in b/lib/erl_interface/configure.in index 80b229c1c3..2f5b5673bb 100644 --- a/lib/erl_interface/configure.in +++ b/lib/erl_interface/configure.in @@ -100,11 +100,11 @@ if test "x$LD" = "x"; then fi AC_SUBST(LD) -AC_CHECK_SIZEOF(short, $erl_xcomp_short) -AC_CHECK_SIZEOF(int, $erl_xcomp_int) -AC_CHECK_SIZEOF(long, $erl_xcomp_long) -AC_CHECK_SIZEOF(void *, $erl_xcomp_void_p) -AC_CHECK_SIZEOF(long long, $erl_xcomp_long_long) +AC_CHECK_SIZEOF(short) +AC_CHECK_SIZEOF(int) +AC_CHECK_SIZEOF(long) +AC_CHECK_SIZEOF(void *) +AC_CHECK_SIZEOF(long long) if test $ac_cv_sizeof_void_p = 8; then CFLAGS="$CFLAGS -DEI_64BIT" diff --git a/lib/wx/configure.in b/lib/wx/configure.in index 7dc8d6e831..2b47f86baa 100755 --- a/lib/wx/configure.in +++ b/lib/wx/configure.in @@ -1,3 +1,21 @@ +dnl Process this file with autoconf to produce a configure script. -*-m4-*- + +dnl %CopyrightBegin% +dnl +dnl Copyright Ericsson AB 2008-2009. All Rights Reserved. +dnl +dnl The contents of this file are subject to the Erlang Public License, +dnl Version 1.1, (the "License"); you may not use this file except in +dnl compliance with the License. You should have received a copy of the +dnl Erlang Public License along with this software. If not, it can be +dnl retrieved online at http://www.erlang.org/. +dnl +dnl Software distributed under the License is distributed on an "AS IS" +dnl basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +dnl the License for the specific language governing rights and limitations +dnl under the License. +dnl +dnl %CopyrightEnd% AC_INIT() @@ -101,7 +119,7 @@ AC_SUBST(MIXED_CYGWIN) ## Check that we are in 32 bits mode on darwin ## (wxWidgets require that it currently uses 32-bits Carbon) ## Otherwise skip building wxErlang -AC_CHECK_SIZEOF(void *, 4) +AC_CHECK_SIZEOF(void *) case $ac_cv_sizeof_void_p-$host_os in 8-darwin*) @@ -1,4 +1,22 @@ #! /bin/sh +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 2002-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% +# # Expected autoconf version EXPECTED_AUTOCONF_VERSION=2.59 @@ -69,52 +87,83 @@ usage () echo " cancel_preloaded - uncheckout preloaded code (only in Clearcase)" } +export_cross_env () +{ + if [ "x$ERL_XCOMP_CONF" != "x" ]; then + export erl_xcomp_host + export erl_xcomp_configure_flags + export erl_xcomp_cc + export erl_xcomp_ld + export erl_xcomp_cflags + export erl_xcomp_cpp + export erl_xcomp_ldflags + export erl_xcomp_ranlib + export erl_xcomp_ar + export erl_xcomp_ded_ld + export erl_xcomp_ded_ldflags + export erl_xcomp_ded_ld_runtime_library_path + export erl_xcomp_bigendian + export erl_xcomp_linux_clock_gettime_correction + export erl_xcomp_linux_nptl + export erl_xcomp_linux_usable_sigusrx + export erl_xcomp_linux_usable_sigaltstack + export erl_xcomp_poll + export erl_xcomp_kqueue + export erl_xcomp_putenv_copy + export erl_xcomp_reliable_fpe + export erl_xcomp_getaddrinfo + export erl_xcomp_gethrvtime_procfs_ioctl + export erl_xcomp_clock_gettime + export erl_xcomp_after_morecore_hook + export erl_xcomp_dlsym_brk_wrappers + fi +} + xcomp_fail () { - echo "The mandatory cross compilation variable" $1 "is not set in" $2 ",aborting" >&2 + echo "The mandatory cross compilation variable '"$1"' is not set, aborting..." >&2 exit 1 } -check_xcomp_file () +source_xcomp_file () { - if test "x$erl_xcomp_os" = "x"; then - xcomp_fail erl_xcomp_os $1 - fi - if test "x$erl_xcomp_hw" = "x"; then - xcomp_fail erl_xcomp_hw $1 - fi - if test "x$erl_xcomp_man" = "x"; then - xcomp_fail erl_xcomp_man $1 - fi - if test "x$erl_xcomp_target_xtra" = "x"; then - xcomp_fail erl_xcomp_target_extra $1 - fi - if test "x$erl_xcomp_void_p" = "x"; then - xcomp_fail erl_xcomp_void_p $1 - fi - if test "x$erl_xcomp_short" = "x"; then - xcomp_fail erl_xcomp_short $1 - fi - if test "x$erl_xcomp_int" = "x"; then - xcomp_fail erl_xcomp_int $1 - fi - if test "x$erl_xcomp_long" = "x"; then - xcomp_fail erl_xcomp_long $1 - fi - if test "x$erl_xcomp_long_long" = "x"; then - xcomp_fail erl_xcomp_long_long $1 + case x$1 in + x/*) + ;; + x) + echo "env_cross requires path to cross compilation configuration" >&2 + exit 1;; + x*) + echo "An absoulute path to the cross compilation file is required: $1" >&2 + exit 1;; + esac + + if [ ! -f $1 ]; then + echo "No such file: $1" >&2 + exit 1 fi - if test "x$erl_xcomp_sizeof_size_t" = "x"; then - xcomp_fail erl_xcomp_sizeof_size_t $1 + + . $1 +} + +finalize_xcomp_conf () +{ + if test "x$erl_xcomp_host" = "x"; then + xcomp_fail erl_xcomp_host fi - if test "x$erl_xcomp_sizeof_off_t" = "x"; then - xcomp_fail erl_xcomp_sizeof_off_t $1 + + if test "x$erl_xcomp_target" != "x"; then + echo "The 'erl_xcomp_target' configuration variable should no longer be used." >&2 + echo "For more information see the xcomp/README file." >&2 + exit 1; fi - if test "x$erl_xcomp_os" = "xlinux"; then - if test "x$erl_xcomp_linux_kernel" = "x"; then - xcomp_fail erl_xcomp_linux_kernel $1 - fi + + OVERRIDE_TARGET=`$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host` + if test $? -ne 0; then + exit $? fi + TARGET=$OVERRIDE_TARGET + return 0 } @@ -342,17 +391,21 @@ do_configure () # compilers. It's a kludge, but a working one... # - crossdirs="erts lib/common_test lib/erl_interface lib/gs lib/megaco lib/odbc lib/snmp lib/wx" - if [ -z "$ONLY_ERTS" ]; then - for x in $crossdirs; do - if [ -f "$x/configure" ]; then - (cd $x;./configure --host=$erl_xcomp_hw --with-xcompconf=$ERL_XCOMP_CONF $CONFIG_FLAGS) || exit 1 - fi - done + crossdirs="erts lib/common_test lib/erl_interface lib/gs lib/megaco lib/odbc lib/snmp lib/wx" else - (cd $ERL_TOP/erts;./configure --host=$erl_xcomp_hw --with-xcompconf=$ERL_XCOMP_CONF $CONFIG_FLAGS) || exit 1 + crossdirs="erts" fi + + export_cross_env + + for d in $crossdirs; do + echo "== Entering $d ==" + echo "./configure --build=$BUILDSYS --host=$erl_xcomp_host $CONFIG_FLAGS" + (cd $ERL_TOP/$d; ./configure --build=$BUILDSYS --host=$erl_xcomp_host $CONFIG_FLAGS) || exit 1 + echo "== Leaving $d ==" + done + CC="$save_CC" LD="$save_LD" CFLAGS="$save_CFLAGS" @@ -551,20 +604,11 @@ echo_env_vxworks () echo_env_cross () { - if [ -z "$1" ]; then - echo "env_cross requires path to cross compilation configuration" >&2 - exit 1 - fi - - if [ ! -f $1 ]; then - echo "No such file: $1" >&2 - exit 1 - fi - . $1 - check_xcomp_file $1 + source_xcomp_file $1 + finalize_xcomp_conf echo_env_erltop echo_setenv ERL_XCOMP_CONF $1 ';' - echo_setenv OVERRIDE_TARGET $erl_xcomp_target + echo_setenv OVERRIDE_TARGET $OVERRIDE_TARGET echo_envinfo } @@ -863,7 +907,7 @@ do_prepare_prel () (cd $ERL_TOP/erts/preloaded/src && $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET prepare) || exit 1 echo '*****************************************************' echo "Prepared for new preloaded code build - " - echo "Directory ERL_TOP/erts/prelaoded/ebin completely" + echo "Directory ERL_TOP/erts/preloaded/ebin completely" echo "checked out." echo '*****************************************************' } @@ -941,9 +985,10 @@ do_boot_cross () TARGET=`$ERL_TOP/erts/autoconf/config.guess` $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET all_bootstraps || exit 1; - $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET local_setup || exit 1; + TARGET=$SAVE_TARGET OVERRIDE_TARGET=$SAVE_OVERRIDE_TARGET + $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET libs || exit 1; $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET depend || exit 1; $MAKE MAKE="$MAKE" BOOTSTRAP_ROOT=$BOOTSTRAP_ROOT TARGET=$TARGET emulator || exit 1; @@ -1131,6 +1176,10 @@ esac if [ ! -z "$OVERRIDE_TARGET" ]; then TARGET="$OVERRIDE_TARGET" +else + if [ "x$erl_xcomp_host" != "x" ]; then + finalize_xcomp_conf + fi fi # Setting a bootstrap root is inherently very dangerous now that the bootstrap 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. + +================================================================================ diff --git a/xcomp/README.xcomp b/xcomp/README.xcomp deleted file mode 100644 index 4df9226a96..0000000000 --- a/xcomp/README.xcomp +++ /dev/null @@ -1,25 +0,0 @@ -This directory contains configuration file templates and examples for -cross compiling Erlang/OTP. The configuration files should be supplied to -$ERl_TOP/otp_build in the ./otp_build env_cross command to set up an -appropriate environment for cross compiling. - -Copy the template file erl-xcomp.conf.template to an appropriate name -and fill in at least the mandatory parts before attempting cross -compilation. See the template file for details on configuration -parameters and see the example erl-xcomp-TileraMDE2.0-tilepro.conf for -an example of a working configuration file. - -The support for cross compiling is in it's early stage of development, -it works for cross compiling some gnu/linux systems, but has only been partly -tested for more esotheric platforms. The vxworks example file is highly -dependent on our environment and is here more or less for internal use. - -Please submit any patches for cross compiling in a way consistent with -this system. Variables should be added to the configuration file, -which is sourced both by $ERL_TOP/otp_build and each configure -script. If a new configuration variable is needed for your system, add -it to the template file, use it in otp_build and/or configure and -submit the patch to erlang-patches for further integration into the -main branch. All input is welcome as we cannot possibly have all cross -compiling environments out there to test with. - diff --git a/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf b/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf index e711f06a27..c8e7212e1f 100644 --- a/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf +++ b/xcomp/erl-xcomp-TileraMDE2.0-tilepro.conf @@ -16,73 +16,43 @@ ### ### %CopyrightEnd% ### -### File: erl-xcomp.conf +### File: erl-xcomp-TileraMDE2.0-tilepro.conf ### Author: Rickard Green ### ### ---------------------------------------------------------------------------- ### When cross compiling Erlang/OTP, copy this file and set the variables ### needed below. Then pass the path to the copy of this file as an argument -### to "eval `otp_build env_cross <path to erl-xcomp.conf file>`". +### to "eval `otp_build env_cross <absolute path to erl-xcomp.conf file>`". ### ---------------------------------------------------------------------------- ### ---------------------------------------------------------------------------- ### Variables in the following section *have* to be set. ### -## -## Operating system and hardware architecture. -## -# Operating system: linux|solaris<ver>|darwin|freebsd|win32|<...> -erl_xcomp_os=linux -# Hardware architecture: x86|x86_64|ultrasparc|sparc64|ppc|arm|tile|<...> -erl_xcomp_hw=tile -# Manufacturer: (unknown is ok) -erl_xcomp_man=tilera -# Extra target info (unknown is ok) -erl_xcomp_target_xtra=gnu - -# Target (change if default isn't satisfactory) -erl_xcomp_target=${erl_xcomp_hw}-${erl_xcomp_man}-${erl_xcomp_os}-${erl_xcomp_target_xtra} ## -## Sizes (in bytes) of some important types. +## 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 tripplet, but can be. The +## full CPU-VENDOR-OS tripplet will be created by: +## $ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host ## -# void * -erl_xcomp_void_p=4 -# short -erl_xcomp_short=2 -# int -erl_xcomp_int=4 -# long -erl_xcomp_long=4 -# long long (use 0 if no 'long long' type exist) -erl_xcomp_long_long=8 -# size_t -erl_xcomp_sizeof_size_t=4 -# off_t -erl_xcomp_sizeof_off_t=4 +erl_xcomp_host=tile ### ---------------------------------------------------------------------------- -### The variables in the following section have to be set for linux systems -### -# linux kernel version (as reported by "uname -r") -erl_xcomp_linux_kernel=2.6.26.7 - ### ---------------------------------------------------------------------------- -### --------------------------------------------------------------------------- ### 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. -### --------------------------------------------------------------------------- +### ---------------------------------------------------------------------------- erl_xcomp_configure_flags="--without-termcap" -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- ### You can specify a specific CC or LD for the build target (the cross ### compiler) here along with magic CFLAGS and/or LDFLAGS if needed ### ar and ranlib might also be specified if needed. -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- erl_xcomp_cc= @@ -98,7 +68,7 @@ erl_xcomp_ranlib= erl_xcomp_ar= -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- ### The ded_ls and ded_ldflags variables control linking of dynamically loaded ### erlang drivers. On i.e. Linux these are set to ### $(CC) and "-shared" respectively, but other OS'es might need other @@ -106,7 +76,7 @@ erl_xcomp_ar= ### erl_xcomp_ded_ld_runtime_library_path is the flag to set a ### specific runtime library path for the shared library at link time, ### usually this should be left empty. -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- erl_xcomp_ded_ld= @@ -114,83 +84,117 @@ erl_xcomp_ded_ldflags= erl_xcomp_ded_ld_runtime_library_path= -### The variables in the following section does not need to be set. Only -### set these if you really know what you are doing. +### +### 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. ### ## -## Big endian/little endian can usually be determined by configure correctly, -## but if not, set this variable -## +## 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_bigendian= ## -## If you have a working poll that can be used: yes|no +## 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_clock_gettime_correction=yes + +## +## 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_nptl=yes + +## +## 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_sigusrx=yes + +## +## 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_linux_usable_sigaltstack=yes + +## +## 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_poll=yes ## -## If you have a working kqueue() that can be used: yes|no +## 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_kqueue= ## -## If you have a putenv() that stores a copy of the key-value pair: yes|no +## 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_putenv_copy= ## -## If you have reliable floating point exeptions that can be -## used: yes|no +## erl_xcomp_reliable_fpe - yes|no (defaults to no) +## If yes, the target system must have reliable floating point exceptions. ## erl_xcomp_reliable_fpe= ## -## If you have getaddrinfo() usable for ipv6: yes|no +## 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_getaddrinfo=yes ## -## If you have a gethrvtime() that works and uses ioctl() -## to /proc/self: yes|no +## 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_gethrvtime_procfs_ioctl= ## -## If you have a working clock_gettime(): yes|no +## 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_clock_gettime= ## -## If you have a __after_morecore_hook that can track malloc()s -## core memory use: yes|no +## 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_after_morecore_hook= ## -## If you have brk, sbrk and end symbols: yes|no -## -# brk -erl_xcomp_have_brk= -# _brk -erl_xcomp_have__brk= -# __brk -erl_xcomp_have___brk= -# sbrk -erl_xcomp_have_sbrk= -# _sbrk -erl_xcomp_have__sbrk= -# __sbrk -erl_xcomp_have___sbrk= -# end -erl_xcomp_end= -# _end -erl_xcomp__end= - -## -## If sbrk/brk wrappers using dlsym(RTLD_NEXT, _) can track malloc()s -## core memory use: yes|no +## 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. ## -erl_xcomp_brk_wrappers= +erl_xcomp_dlsym_brk_wrappers= ### ---------------------------------------------------------------------------- diff --git a/xcomp/erl-xcomp-vxworks_ppc32.conf b/xcomp/erl-xcomp-vxworks_ppc32.conf index 544212233a..19a9327239 100644 --- a/xcomp/erl-xcomp-vxworks_ppc32.conf +++ b/xcomp/erl-xcomp-vxworks_ppc32.conf @@ -23,7 +23,7 @@ ### ---------------------------------------------------------------------------- ### When cross compiling Erlang/OTP, copy this file and set the variables ### needed below. Then pass the path to the copy of this file as an argument -### to "eval `otp_build env_cross <path to erl-xcomp.conf file>`". +### to "eval `otp_build env_cross <absolute path to erl-xcomp.conf file>`". ### ---------------------------------------------------------------------------- ### ---------------------------------------------------------------------------- @@ -31,60 +31,27 @@ ### ## -## Operating system and hardware architecture. -## -# Operating system: linux|solaris<ver>|darwin|freebsd|win32|<...> -erl_xcomp_os=vxworks -# Hardware architecture: x86|x86_64|ultrasparc|sparc64|ppc|arm|tile|<...> -# Note that this will be the host parameter to configure, so it -# should be both recognizable by config.sub and a valid prefix for -# i.e. gcc etc. -erl_xcomp_hw=ppc-wrs -# Manufacturer: (unknown is ok) -erl_xcomp_man=wrs -# Extra target info (unknown is ok) -erl_xcomp_target_xtra=unknown - -# Target (change if default isn't satisfactory) -erl_xcomp_target=powerpc-wrs-vxworks - -## -## Sizes (in bytes) of some important types. -## -# void * -erl_xcomp_void_p=4 -# short -erl_xcomp_short=2 -# int -erl_xcomp_int=4 -# long -erl_xcomp_long=4 -# long long (use 0 if no 'long long' type exist) -erl_xcomp_long_long=8 -# size_t -erl_xcomp_sizeof_size_t=4 -# off_t -erl_xcomp_sizeof_off_t=4 +## 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 tripplet, but can be. The +## full CPU-VENDOR-OS tripplet will be created by: +## $ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host +## +erl_xcomp_host=powerpc-wrs-vxworks ### ---------------------------------------------------------------------------- -### The variables in the following section have to be set for linux systems -### -# linux kernel version (as reported by "uname -r") -erl_xcomp_linux_kernel= - ### ---------------------------------------------------------------------------- -### --------------------------------------------------------------------------- ### 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. -### --------------------------------------------------------------------------- +### ---------------------------------------------------------------------------- erl_xcomp_configure_flags="--without-termcap" -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- ### You can specify a specific CC or LD for the build target (the cross ### compiler) here along with magic CFLAGS and/or LDFLAGS if needed -###---------------------------------------------------------------------------- +### ar and ranlib might also be specified if needed. +###----------------------------------------------------------------------------- erl_xcomp_cc="$WIND_BASE/gnu/3.4.4-vxworks-6.3/$WIND_HOST_TYPE/bin/ccppc" @@ -97,9 +64,10 @@ erl_xcomp_cpp="$erl_xcomp_cc $erl_xcomp_cflags -E" erl_xcomp_ldflags="-mlongcall" erl_xcomp_ranlib="$WIND_BASE/gnu/3.4.4-vxworks-6.3/$WIND_HOST_TYPE/bin/ranlibppc" + erl_xcomp_ar="$WIND_BASE/gnu/3.4.4-vxworks-6.3/$WIND_HOST_TYPE/bin/arppc" -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- ### The ded_ls and ded_ldflags variables control linking of dynamically loaded ### erlang drivers. On i.e. Linux these are set to ### $(CC) and "-shared" respectively, but other OS'es might need other @@ -107,7 +75,7 @@ erl_xcomp_ar="$WIND_BASE/gnu/3.4.4-vxworks-6.3/$WIND_HOST_TYPE/bin/arppc" ### erl_xcomp_ded_ld_runtime_library_path is the flag to set a ### specific runtime library path for the shared library at link time, ### usually this should be left empty. -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- erl_xcomp_ded_ld= @@ -115,83 +83,117 @@ erl_xcomp_ded_ldflags= erl_xcomp_ded_ld_runtime_library_path= -### The variables in the following section does not need to be set. Only -### set these if you really know what you are doing. +### +### 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. ### ## -## Big endian/little endian can usually be determined by configure correctly, -## but if not, set this variable -## +## 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_bigendian=yes ## -## If you have a working poll that can be used: yes|no +## 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_clock_gettime_correction= + +## +## 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_nptl= + +## +## 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_sigusrx= + +## +## 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_linux_usable_sigaltstack= + +## +## 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_poll= ## -## If you have a working kqueue() that can be used: yes|no +## 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_kqueue= ## -## If you have a putenv() that stores a copy of the key-value pair: yes|no +## 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_putenv_copy= ## -## If you have reliable floating point exeptions that can be -## used: yes|no +## erl_xcomp_reliable_fpe - yes|no (defaults to no) +## If yes, the target system must have reliable floating point exceptions. ## erl_xcomp_reliable_fpe= ## -## If you have getaddrinfo() usable for ipv6: yes|no +## 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_getaddrinfo= ## -## If you have a gethrvtime() that works and uses ioctl() -## to /proc/self: yes|no +## 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_gethrvtime_procfs_ioctl= ## -## If you have a working clock_gettime(): yes|no +## 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_clock_gettime= ## -## If you have a __after_morecore_hook that can track malloc()s -## core memory use: yes|no +## 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_after_morecore_hook= ## -## If you have brk, sbrk and end symbols: yes|no -## -# brk -erl_xcomp_have_brk= -# _brk -erl_xcomp_have__brk= -# __brk -erl_xcomp_have___brk= -# sbrk -erl_xcomp_have_sbrk= -# _sbrk -erl_xcomp_have__sbrk= -# __sbrk -erl_xcomp_have___sbrk= -# end -erl_xcomp_end= -# _end -erl_xcomp__end= - -## -## If sbrk/brk wrappers using dlsym(RTLD_NEXT, _) can track malloc()s -## core memory use: yes|no +## 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. ## -erl_xcomp_brk_wrappers= +erl_xcomp_dlsym_brk_wrappers= ### ---------------------------------------------------------------------------- diff --git a/xcomp/erl-xcomp.conf.template b/xcomp/erl-xcomp.conf.template index cc604a80e5..bed365e754 100644 --- a/xcomp/erl-xcomp.conf.template +++ b/xcomp/erl-xcomp.conf.template @@ -31,66 +31,26 @@ ### ## -## Operating system and hardware architecture. -## -# Operating system: linux|solaris<ver>|darwin|freebsd|win32|<...> -erl_xcomp_os= -# Hardware architecture: x86|x86_64|ultrasparc|sparc64|ppc|arm|tile|<...> -# Note that this will be the host parameter to configure, so it -# should be both recognizable by config.sub and a valid prefix for -# i.e. gcc etc if compiler is not specified further down. -erl_xcomp_hw= -# Manufacturer: (unknown is ok) -erl_xcomp_man= -# Extra target info (unknown is ok) -erl_xcomp_target_xtra= - -# Target (change if default isn't satisfactory) -# Note that this has to correspond to what config.sub thinks the machine is. -# Edit config.sub if not satisfactory, or set this explicitly -# to what output you will get from running -# $ERL_TOP/erts/autoconf/config.sub $erl_xcomp_hw - -erl_xcomp_target=${erl_xcomp_hw}-${erl_xcomp_man}-${erl_xcomp_os}-${erl_xcomp_target_xtra} - -## -## Sizes (in bytes) of some important types. -## -# void * -erl_xcomp_void_p= -# short -erl_xcomp_short= -# int -erl_xcomp_int= -# long -erl_xcomp_long= -# long long (use 0 if no 'long long' type exist) -erl_xcomp_long_long= -# size_t -erl_xcomp_sizeof_size_t= -# off_t -erl_xcomp_sizeof_off_t= - -### ---------------------------------------------------------------------------- -### The variables in the following section have to be set for linux systems -### -# linux kernel version (as reported by "uname -r") -erl_xcomp_linux_kernel= +## 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 tripplet, but can be. The +## full CPU-VENDOR-OS tripplet will be created by: +## $ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host +## +erl_xcomp_host= ### ---------------------------------------------------------------------------- -### --------------------------------------------------------------------------- ### 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. -### --------------------------------------------------------------------------- +### ---------------------------------------------------------------------------- erl_xcomp_configure_flags= -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- ### You can specify a specific CC or LD for the build target (the cross ### compiler) here along with magic CFLAGS and/or LDFLAGS if needed ### ar and ranlib might also be specified if needed. -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- erl_xcomp_cc= @@ -106,7 +66,7 @@ erl_xcomp_ranlib= erl_xcomp_ar= -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- ### The ded_ls and ded_ldflags variables control linking of dynamically loaded ### erlang drivers. On i.e. Linux these are set to ### $(CC) and "-shared" respectively, but other OS'es might need other @@ -114,7 +74,7 @@ erl_xcomp_ar= ### erl_xcomp_ded_ld_runtime_library_path is the flag to set a ### specific runtime library path for the shared library at link time, ### usually this should be left empty. -###---------------------------------------------------------------------------- +###----------------------------------------------------------------------------- erl_xcomp_ded_ld= @@ -122,83 +82,117 @@ erl_xcomp_ded_ldflags= erl_xcomp_ded_ld_runtime_library_path= -### The variables in the following section does not need to be set. Only -### set these if you really know what you are doing. +### +### 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. ### ## -## Big endian/little endian can usually be determined by configure correctly, -## but if not, set this variable -## +## 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_bigendian= ## -## If you have a working poll that can be used: yes|no +## 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_clock_gettime_correction= + +## +## 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_nptl= + +## +## 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_sigusrx= + +## +## 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_linux_usable_sigaltstack= + +## +## 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_poll= ## -## If you have a working kqueue() that can be used: yes|no +## 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_kqueue= ## -## If you have a putenv() that stores a copy of the key-value pair: yes|no +## 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_putenv_copy= ## -## If you have reliable floating point exeptions that can be -## used: yes|no +## erl_xcomp_reliable_fpe - yes|no (defaults to no) +## If yes, the target system must have reliable floating point exceptions. ## erl_xcomp_reliable_fpe= ## -## If you have getaddrinfo() usable for ipv6: yes|no +## 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_getaddrinfo= ## -## If you have a gethrvtime() that works and uses ioctl() -## to /proc/self: yes|no +## 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_gethrvtime_procfs_ioctl= ## -## If you have a working clock_gettime(): yes|no +## 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_clock_gettime= ## -## If you have a __after_morecore_hook that can track malloc()s -## core memory use: yes|no +## 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_after_morecore_hook= ## -## If you have brk, sbrk and end symbols: yes|no -## -# brk -erl_xcomp_have_brk= -# _brk -erl_xcomp_have__brk= -# __brk -erl_xcomp_have___brk= -# sbrk -erl_xcomp_have_sbrk= -# _sbrk -erl_xcomp_have__sbrk= -# __sbrk -erl_xcomp_have___sbrk= -# end -erl_xcomp_end= -# _end -erl_xcomp__end= - -## -## If sbrk/brk wrappers using dlsym(RTLD_NEXT, _) can track malloc()s -## core memory use: yes|no +## 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. ## -erl_xcomp_brk_wrappers= +erl_xcomp_dlsym_brk_wrappers= ### ---------------------------------------------------------------------------- |