| # configure.host |
| |
| # This shell script handles all host based configuration for libgcj. |
| # It sets various shell variables based on the the host and the |
| # configuration options. You can modify this shell script without |
| # needing to rerun autoconf. |
| |
| # This shell script should be invoked as |
| # . configure.host |
| # If it encounters an error, it will exit with a message. |
| |
| # It uses the following shell variables: |
| # host The configuration host |
| # host_cpu The configuration host CPU |
| # target_optspace --enable-target-optspace ("yes", "no", "") |
| |
| # It sets the following shell variables: |
| # libgcj_cflags Special CFLAGS to use when building |
| # libgcj_cxxflags Special CXXFLAGS to use when building |
| # libgcj_javaflags Special JAVAFLAGS to use when building |
| # libgcj_sublib_ltflags Special Libtool flags to use when building sublibs |
| # libgcj_sublib_core_extra_deps Extra dependencies to add to core sublib |
| # libgcj_interpreter If the bytecode interpreter supports this platform. |
| # enable_java_net_default If java.net native code should be enabled by |
| # default. |
| # enable_hash_synchronization_default If hash synchronization should be |
| # enabled by default. |
| # enable_libgcj_sublibs_default Whether to build libgcj as a bunch of |
| # separate shared libraries or in one |
| # monolithic one. |
| # sysdeps_dir Directory containing system-dependent headers |
| # slow_pthread_self The synchronization code should try to avoid |
| # pthread_self calls by caching thread IDs in a hashtable |
| # can_unwind_signal Set to "yes" if the EH unwinder supports throwing |
| # from a signal handler. |
| # fallback_backtrace_h Header to use for fallback backtrace implementation |
| # (only for targets that don't support DWARF2 unwind) |
| # descriptor_h Header to use for looking past function descriptors |
| # use_libgcj_bc Whether to build a "libgcj-bc" library for BC-ABI |
| # binaries to link against. |
| |
| libgcj_flags= |
| libgcj_cflags= |
| libgcj_cxxflags= |
| libgcj_javaflags= |
| libgcj_sublib_ltflags= |
| libgcj_sublib_core_extra_deps= |
| libgcj_interpreter= |
| enable_java_net_default=yes |
| enable_hash_synchronization_default=no |
| enable_libgcj_sublibs_default=no |
| sysdeps_dir=generic |
| slow_pthread_self= |
| can_unwind_signal=no |
| fallback_backtrace_h=sysdep/generic/backtrace.h |
| |
| case "${target_optspace}:${host}" in |
| yes:*) |
| libgcj_flags="${libgcj_flags} -Os" |
| ;; |
| :m32r-* | :d10v-* | :d30v-*) |
| libgcj_flags="${libgcj_flags} -Os" |
| ;; |
| no:* | :*) |
| # Nothing. |
| ;; |
| esac |
| |
| AM_RUNTESTFLAGS= |
| |
| # Set any host dependent compiler flags. |
| # THIS TABLE IS SORTED. KEEP IT THAT WAY. |
| |
| echo "$target" |
| |
| DIVIDESPEC=-fuse-divide-subroutine |
| EXCEPTIONSPEC=-fnon-call-exceptions |
| CHECKREFSPEC= |
| BACKTRACESPEC= |
| ATOMICSPEC= |
| |
| # This case statement supports per-CPU defaults. |
| case "${host}" in |
| arm*-elf) |
| with_libffi_default=no |
| PROCESS=Ecos |
| FILE=Posix |
| CHECKREFSPEC=-fcheck-references |
| EXCEPTIONSPEC= |
| enable_java_net_default=no |
| enable_getenv_properties_default=no |
| enable_main_args_default=no |
| sysdeps_dir=arm |
| ;; |
| arm*-linux*) |
| libgcj_interpreter=yes |
| sysdeps_dir=arm |
| fallback_backtrace_h=sysdep/arm/backtrace.h |
| libgcj_cxxflags=-Wno-abi |
| ATOMICSPEC=-fuse-atomic-builtins |
| # Work around a strange libtool feature that causes libraries |
| # to be linked with libgcc_s but not libgcc. |
| LDFLAGS="${LDFLAGS} -Wl,-lgcc" |
| ;; |
| mips-tx39-*|mipstx39-unknown-*) |
| libgcj_flags="${libgcj_flags} -G 0" |
| LDFLAGS="$LDFLAGS -Tjmr3904dram.ld" |
| AM_RUNTESTFLAGS="--target_board=jmr3904-sim" |
| # Use "Ecos" processes since they are a no-op. |
| PROCESS=Ecos |
| FILE=Posix |
| enable_java_net_default=no |
| enable_getenv_properties_default=no |
| ;; |
| mips*-*) |
| libgcj_interpreter=yes |
| ;; |
| i686-*|i586-*|i486-*|i386-*) |
| sysdeps_dir=i386 |
| # With -fomit-frame-pointer -maccumulate-outgoing-args (implied), |
| # the .text section of libgcj.so is 30k larger, and the .eh_frame |
| # section is 1.4M smaller. |
| libgcj_flags="${libgcj_flags} -ffloat-store -fomit-frame-pointer" |
| # On Solaris we have defined 'sun' which later conflicts with |
| # namespace usage. So to work this away we use the below undefine. |
| libgcj_flags="${libgcj_flags} -Usun" |
| libgcj_interpreter=yes |
| libgcj_cxxflags= |
| libgcj_cflags= |
| DIVIDESPEC=-fno-use-divide-subroutine |
| enable_hash_synchronization_default=yes |
| slow_pthread_self=yes |
| ;; |
| x86_64-*) |
| sysdeps_dir=x86-64 |
| # For 64-bit we always use SSE registers for arithmetic, |
| # which doesn't have the extra precision problems of the fpu. |
| # But be careful about 32-bit multilibs. |
| case " $CC " in |
| *" -m32 "*) |
| libgcj_flags="${libgcj_flags} -ffloat-store" ;; |
| esac |
| libgcj_flags="${libgcj_flags} -fomit-frame-pointer" |
| libgcj_cxxflags= |
| libgcj_cflags= |
| DIVIDESPEC=-fno-use-divide-subroutine |
| enable_hash_synchronization_default=yes |
| slow_pthread_self=yes |
| libgcj_interpreter=yes |
| ;; |
| alpha*-*) |
| sysdeps_dir=alpha |
| libgcj_flags="${libgcj_flags} -mieee" |
| libgcj_interpreter=yes |
| enable_hash_synchronization_default=yes |
| IEEESPEC=-mieee |
| ;; |
| hppa*-*) |
| sysdeps_dir=pa |
| libgcj_interpreter=yes |
| enable_hash_synchronization_default=no |
| ;; |
| m68k-*) |
| sysdeps_dir=m68k |
| libgcj_interpreter=yes |
| ;; |
| powerpc64*-*) |
| sysdeps_dir=powerpc |
| libgcj_interpreter=yes |
| if [ x`$CC -print-multi-os-directory` = x../lib64 ]; then |
| libgcj_flags="${libgcj_flags} -mminimal-toc" |
| fi |
| enable_hash_synchronization_default=yes |
| slow_pthread_self=yes |
| ;; |
| powerpc*-*) |
| sysdeps_dir=powerpc |
| libgcj_interpreter=yes |
| enable_hash_synchronization_default=yes |
| slow_pthread_self=yes |
| ;; |
| s390*-*) |
| sysdeps_dir=s390 |
| libgcj_interpreter=yes |
| DIVIDESPEC=-fno-use-divide-subroutine |
| enable_hash_synchronization_default=yes |
| ;; |
| sparc*-*) |
| sysdeps_dir=sparc |
| # On Solaris we have defined 'sun' which later conflicts with |
| # namespace usage. So to work this away we use the below undefine. |
| libgcj_flags="${libgcj_flags} -Usun" |
| libgcj_interpreter=yes |
| ;; |
| ia64-*) |
| sysdeps_dir=ia64 |
| libgcj_flags="${libgcj_flags} -funwind-tables" |
| libgcj_interpreter=yes |
| enable_hash_synchronization_default=yes |
| ;; |
| sh-* | sh[34]*-*) |
| sysdeps_dir=sh |
| libgcj_flags="${libgcj_flags} -mieee" |
| libgcj_interpreter=yes |
| enable_hash_synchronization_default=yes |
| IEEESPEC=-mieee |
| ;; |
| esac |
| |
| # This case statement supports generic port properties and may refine |
| # the above per-CPU defaults. Note: If your OS implements |
| # MD_FALLBACK_FRAME_STATE_FOR, then you want to set can_unwind_signal |
| # here. |
| case "${host}" in |
| i[34567]86*-linux* | \ |
| powerpc*-linux* | \ |
| alpha*-linux* | \ |
| s390*-linux* | \ |
| sparc*-linux* | \ |
| ia64-* | \ |
| x86_64*-linux* | \ |
| hppa*-linux* | \ |
| m68k*-linux* | \ |
| sh-linux* | sh[34]*-linux*) |
| can_unwind_signal=yes |
| libgcj_ld_symbolic='-Wl,-Bsymbolic' |
| if test x$slow_pthread_self = xyes \ |
| && test x$cross_compiling != xyes; then |
| cat > conftest.c <<EOF |
| #define _GNU_SOURCE 1 |
| #include <pthread.h> |
| #include <stdlib.h> |
| #include <sys/resource.h> |
| #include <limits.h> |
| |
| void * |
| tf (void *arg __attribute__ ((unused))) |
| { |
| pthread_attr_t a; |
| size_t s; |
| |
| if (pthread_getattr_np (pthread_self (), &a) |
| || pthread_attr_getstacksize (&a, &s) |
| || s > 2 * PTHREAD_STACK_MIN) |
| exit (1); |
| exit (0); |
| } |
| |
| int |
| main (int argc, char **argv) |
| { |
| pthread_t p; |
| void *ret; |
| struct rlimit r; |
| |
| if (argc == 2) |
| { |
| r.rlim_cur = 2 * PTHREAD_STACK_MIN; |
| r.rlim_max = 2 * PTHREAD_STACK_MIN; |
| if (setrlimit (RLIMIT_STACK, &r)) |
| exit (1); |
| execl (argv[1], argv[0], NULL); |
| exit (1); |
| } |
| |
| if (pthread_create (&p, NULL, tf, NULL) |
| || pthread_join (p, &ret)) |
| exit (1); |
| exit (1); |
| } |
| EOF |
| $CC -o conftest conftest.c -lpthread > /dev/null 2>&1 && \ |
| ./conftest ./conftest && slow_pthread_self= |
| rm -f conftest conftest.c |
| fi |
| ;; |
| i[34567]86*-kfreebsd*-gnu | x86_64*-kfreebsd*-gnu) |
| libgcj_ld_symbolic='-Wl,-Bsymbolic' |
| slow_pthread_self= |
| ;; |
| i[34567]86-*-solaris2.1[0-9]* ) |
| sysdeps_dir=x86-64 |
| DIVIDESPEC=-f%{m32:no-}%{!m32:%{!m64:no-}}%{m64:}use-divide-subroutine |
| ;; |
| mips-sgi-irix6* ) |
| sysdeps_dir=mips |
| ;; |
| arm*-linux* ) |
| slow_pthread_self=no |
| can_unwind_signal=no |
| CHECKREFSPEC=-fcheck-references |
| DIVIDESPEC=-fuse-divide-subroutine |
| ;; |
| mips*-*-linux* ) |
| sysdeps_dir=mips |
| can_unwind_signal=yes |
| DIVIDESPEC=-fno-use-divide-subroutine |
| enable_hash_synchronization_default=yes |
| ;; |
| powerpc*-*-darwin*) |
| enable_hash_synchronization_default=yes |
| slow_pthread_self= |
| can_unwind_signal=yes |
| ;; |
| i?86-*-darwin*) |
| enable_hash_synchronization_default=yes |
| slow_pthread_self= |
| can_unwind_signal=no |
| ;; |
| i?86-*-darwin[912]*) |
| can_unwind_signal=yes |
| DIVIDESPEC=-f%{m32:no-}%{!m32:%{!m64:no-}}%{m64:}use-divide-subroutine |
| ;; |
| x86_64-*-darwin[912]*) |
| enable_hash_synchronization_default=yes |
| slow_pthread_self= |
| can_unwind_signal=yes |
| DIVIDESPEC=-fuse-divide-subroutine |
| CHECKREFSPEC=-fcheck-references |
| ;; |
| i?86-*-solaris2*) |
| can_unwind_signal=yes |
| ;; |
| *-*-freebsd*) |
| slow_pthread_self= |
| ;; |
| *-mingw*) |
| libgcj_flags="${libgcj_flags} -fno-omit-frame-pointer" |
| # FIXME: win32_exception_handler( ) in win32.cc does not do the |
| # right stuff yet w.r.t. SEH. Live with the following for now. |
| can_unwind_signal=no |
| CHECKREFSPEC=-fcheck-references |
| DIVIDESPEC=-fuse-divide-subroutine |
| ;; |
| *-cygwin*) |
| # The cygwin linker doesn't do 8-byte alignment by default, so |
| # disable hash synchronization for now. |
| enable_hash_synchronization_default=no |
| slow_pthread_self= |
| ;; |
| hppa*-hp-hpux11.*) |
| slow_pthread_self=no |
| can_unwind_signal=yes |
| DIVIDESPEC=-fuse-divide-subroutine |
| ;; |
| sparc*-sun-solaris2.*) |
| slow_pthread_self= |
| can_unwind_signal=yes |
| ;; |
| esac |
| |
| case "${host}" in |
| *-cygwin* | *-mingw*) |
| fallback_backtrace_h=sysdep/i386/backtrace.h |
| # We need a frame pointer on Windows, so override BACKTRACESPEC |
| BACKTRACESPEC= |
| # Win32 DLLs are limited to 64k exported symbols each. |
| enable_libgcj_sublibs_default=yes |
| libgcj_sublib_ltflags='$(lt_host_flags) \ |
| -Wl,-u,__ZN3org4ietf4jgss10GSSManagerC1Ev,-L..,-lgcj-noncore-dummy' |
| libgcj_sublib_core_extra_deps=libgcj-noncore-dummy.dll.a |
| ;; |
| esac |
| |
| case "${host}" in |
| ia64-*) |
| descriptor_h=sysdep/descriptor-y.h |
| ;; |
| |
| hppa*64*-*-hpux*) |
| descriptor_h=sysdep/pa/descriptor-pa64-hpux.h |
| ;; |
| |
| hppa*-*-hpux*) |
| descriptor_h=sysdep/pa/descriptor-pa32-hpux.h |
| ;; |
| |
| hppa*-*) |
| descriptor_h=sysdep/pa/descriptor.h |
| ;; |
| |
| rs6000-* | powerpc*-*) |
| descriptor_h=sysdep/powerpc/descriptor.h |
| ;; |
| |
| *) |
| descriptor_h=sysdep/descriptor-n.h |
| ;; |
| esac |
| |
| case "${host}" in |
| *linux*|*-kfreebsd*-gnu|*-gnu*) |
| use_libgcj_bc=yes |
| ;; |
| *) |
| use_libgcj_bc=no |
| ;; |
| esac |
| |
| libgcj_cflags="${libgcj_cflags} ${libgcj_flags}" |
| libgcj_cxxflags="${libgcj_cxxflags} ${libgcj_flags}" |
| libgcj_javaflags="${libgcj_javaflags} ${libgcj_flags}" |