* [Build, libgfortran, Patch] Make libgfortran's configure more cross-compile friendly
@ 2011-11-02 20:36 Tobias Burnus
2011-11-02 21:10 ` Janne Blomqvist
0 siblings, 1 reply; 3+ messages in thread
From: Tobias Burnus @ 2011-11-02 20:36 UTC (permalink / raw)
To: gcc patches, gfortran, Ralf Wildenhues
[-- Attachment #1: Type: text/plain, Size: 396 bytes --]
Hi all,
at the GSoC Mentor summit, I had a chat with Joel, who asked me whether
he should try to crosscompile also Fortran. Well, at the end I created
the attached patch (based on what one had to do for libquadmath) and he
successfully build fortran to target RTEMS for i386, sparc64, powerpc,
mips, and m68k.
Additionally, I have bootstrapped it on x86-64-linux.
OK for the trunk?
Tobias
[-- Attachment #2: config_patch.diff --]
[-- Type: text/x-patch, Size: 3201 bytes --]
diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
index 74cfe44..2a5899a 100644
--- a/libgfortran/configure.ac
+++ b/libgfortran/configure.ac
@@ -51,7 +51,10 @@ AC_SUBST(onestep)
# Do not delete or change the following two lines. For why, see
# http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html
AC_CANONICAL_SYSTEM
+ACX_NONCANONICAL_TARGET
+
target_alias=${target_alias-$host_alias}
+AC_SUBST(target_alias)
# Sets up automake. Must come after AC_CANONICAL_SYSTEM. Each of the
# following is magically included in AUTOMAKE_OPTIONS in each Makefile.am.
@@ -117,6 +120,7 @@ AC_SUBST(toolexeclibdir)
# Create a spec file, so that compile/link tests don't fail
test -f libgfortran.spec || touch libgfortran.spec
+AC_LANG_C
# Check the compiler.
# The same as in boehm-gc and libstdc++. Have to borrow it from there.
# We must force CC to /not/ be precious variables; otherwise
@@ -128,6 +132,10 @@ m4_define([_AC_ARG_VAR_PRECIOUS],[])
AC_PROG_CC
m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
+AC_SUBST(CFLAGS)
+
+AM_PROG_CC_C_O
+
# Add -Wall -fno-repack-arrays -fno-underscoring if we are using GCC.
if test "x$GCC" = "xyes"; then
AM_FCFLAGS="-I . -Wall -Werror -fimplicit-none -fno-repack-arrays -fno-underscoring"
@@ -150,30 +158,36 @@ AS_HELP_STRING([--disable-symvers],
gfortran_use_symver=$enableval,
gfortran_use_symver=yes)
if test "x$gfortran_use_symver" = xyes; then
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
- cat > conftest.map <<EOF
+ if test x$gcc_no_link = xyes; then
+ # If we cannot link, we cannot build shared libraries, so do not use
+ # symbol versioning.
+ gfortran_use_symver=no
+ else
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
+ cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]],[[]])],[gfortran_use_symver=gnu],[gfortran_use_symver=no])
- if test x$gfortran_use_symver = xno; then
- case "$target_os" in
- solaris2*)
- LDFLAGS="$save_LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
- # Sun ld cannot handle wildcards and treats all entries as undefined.
- cat > conftest.map <<EOF
+ AC_TRY_LINK([int foo;],[],[gfortran_use_symver=gnu],[gfortran_use_symver=no])
+ if test x$gfortran_use_symver = xno; then
+ case "$target_os" in
+ solaris2*)
+ LDFLAGS="$save_LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
+ # Sun ld cannot handle wildcards and treats all entries as undefined.
+ cat > conftest.map <<EOF
FOO_1.0 {
global: foo; local: *;
};
EOF
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]],[[]])],[gfortran_use_symver=sun],[gfortran_use_symver=no])
- ;;
- esac
+ AC_TRY_LINK([int foo;],[],[gfortran_use_symver=sun],[gfortran_use_symver=no])
+ ;;
+ esac
+ fi
+ LDFLAGS="$save_LDFLAGS"
fi
- LDFLAGS="$save_LDFLAGS"
fi
AC_MSG_RESULT($gfortran_use_symver)
AM_CONDITIONAL(LIBGFOR_USE_SYMVER, [test "x$gfortran_use_symver" != xno])
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Build, libgfortran, Patch] Make libgfortran's configure more cross-compile friendly
2011-11-02 20:36 [Build, libgfortran, Patch] Make libgfortran's configure more cross-compile friendly Tobias Burnus
@ 2011-11-02 21:10 ` Janne Blomqvist
2011-11-09 20:07 ` Tobias Burnus
0 siblings, 1 reply; 3+ messages in thread
From: Janne Blomqvist @ 2011-11-02 21:10 UTC (permalink / raw)
To: Tobias Burnus; +Cc: gcc patches, gfortran, Ralf Wildenhues
On Wed, Nov 2, 2011 at 22:25, Tobias Burnus <burnus@net-b.de> wrote:
> Hi all,
>
> at the GSoC Mentor summit, I had a chat with Joel, who asked me whether he
> should try to crosscompile also Fortran. Well, at the end I created the
> attached patch (based on what one had to do for libquadmath) and he
> successfully build fortran to target RTEMS for i386, sparc64, powerpc, mips,
> and m68k.
>
> Additionally, I have bootstrapped it on x86-64-linux.
> OK for the trunk?
Looks good otherwise, however, I'm confused why you want to replace
AC_TRY_LINK with AC_LINK_IFELSE, since the former is deprecated and
the suggested replacement is, well, AC_LINK_IFELSE. In fact, this
issue was fixed not that long ago, see
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47883
--
Janne Blomqvist
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Build, libgfortran, Patch] Make libgfortran's configure more cross-compile friendly
2011-11-02 21:10 ` Janne Blomqvist
@ 2011-11-09 20:07 ` Tobias Burnus
0 siblings, 0 replies; 3+ messages in thread
From: Tobias Burnus @ 2011-11-09 20:07 UTC (permalink / raw)
To: Janne Blomqvist; +Cc: gcc patches, gfortran, Ralf Wildenhues
[-- Attachment #1: Type: text/plain, Size: 1065 bytes --]
On 02 Nov 2011 21:52, Janne Blomqvist wrote:
> On Wed, Nov 2, 2011 at 22:25, Tobias Burnus<burnus@net-b.de> wrote:
>> at the GSoC Mentor summit, I had a chat with Joel, who asked me whether he
>> should try to crosscompile also Fortran. Well, at the end I created the
>> attached patch (based on what one had to do for libquadmath) and he
>> successfully build fortran to target RTEMS for i386, sparc64, powerpc, mips,
>> and m68k.
>>
>> Additionally, I have bootstrapped it on x86-64-linux.
>> OK for the trunk?
I have now committed the attached patch after approval by Janne on IRC.
The patch consists of the upper part of previous patch and leaves out
the more disputed second part. I think Janne is right that that part is
better as it is now.
Tobias
> Looks good otherwise, however, I'm confused why you want to replace
> AC_TRY_LINK with AC_LINK_IFELSE, since the former is deprecated and
> the suggested replacement is, well, AC_LINK_IFELSE. In fact, this
> issue was fixed not that long ago, see
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47883
[-- Attachment #2: committed.diff --]
[-- Type: text/x-patch, Size: 11883 bytes --]
Committed as Rev. 181212
2011-11-09 Tobias Burnus <burnus@net-b.de>
* configure.ac: Make more cross-compile friendly.
* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* config.h.in: Regenerate.
* configure: Regenerate.
ChangeLog | 26 ++++++----
Makefile.in | 1
aclocal.m4 | 35 ++++++++++++++
config.h.in | 3 +
configure | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
configure.ac | 8 +++
6 files changed, 206 insertions(+), 11 deletions(-)
Index: libgfortran/configure
===================================================================
--- libgfortran/configure (revision 181211)
+++ libgfortran/configure (revision 181212)
@@ -691,6 +691,7 @@
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
+target_noncanonical
target_os
target_vendor
target_cpu
@@ -2840,8 +2841,12 @@
NONENONEs,x,x, &&
program_prefix=${target_alias}-
+
+
+
target_alias=${target_alias-$host_alias}
+
# Sets up automake. Must come after AC_CANONICAL_SYSTEM. Each of the
# following is magically included in AUTOMAKE_OPTIONS in each Makefile.am.
# 1.9.6: minimum required version
@@ -4874,6 +4879,12 @@
# Create a spec file, so that compile/link tests don't fail
test -f libgfortran.spec || touch libgfortran.spec
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
# Check the compiler.
# The same as in boehm-gc and libstdc++. Have to borrow it from there.
# We must force CC to /not/ be precious variables; otherwise
@@ -5551,6 +5562,135 @@
+
+
+if test "x$CC" != xcc; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+ sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
+ test -f conftest2.$ac_objext && { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; };
+then
+ eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+ if test "x$CC" != xcc; then
+ # Test first that cc exists at all.
+ if { ac_try='cc -c conftest.$ac_ext >&5'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+ rm -f conftest2.*
+ if { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
+ test -f conftest2.$ac_objext && { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; };
+ then
+ # cc works too.
+ :
+ else
+ # cc exists but doesn't like -o.
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ fi
+ fi
+else
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+
+
+
# Add -Wall -fno-repack-arrays -fno-underscoring if we are using GCC.
if test "x$GCC" = "xyes"; then
AM_FCFLAGS="-I . -Wall -Werror -fimplicit-none -fno-repack-arrays -fno-underscoring"
@@ -12114,7 +12254,7 @@
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12117 "configure"
+#line 12257 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12220,7 +12360,7 @@
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12223 "configure"
+#line 12363 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
Index: libgfortran/Makefile.in
===================================================================
--- libgfortran/Makefile.in (revision 181211)
+++ libgfortran/Makefile.in (revision 181212)
@@ -470,6 +470,7 @@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
+target_noncanonical = @target_noncanonical@
target_os = @target_os@
target_subdir = @target_subdir@
target_vendor = @target_vendor@
Index: libgfortran/configure.ac
===================================================================
--- libgfortran/configure.ac (revision 181211)
+++ libgfortran/configure.ac (revision 181212)
@@ -51,7 +51,10 @@
# Do not delete or change the following two lines. For why, see
# http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html
AC_CANONICAL_SYSTEM
+ACX_NONCANONICAL_TARGET
+
target_alias=${target_alias-$host_alias}
+AC_SUBST(target_alias)
# Sets up automake. Must come after AC_CANONICAL_SYSTEM. Each of the
# following is magically included in AUTOMAKE_OPTIONS in each Makefile.am.
@@ -117,6 +120,7 @@
# Create a spec file, so that compile/link tests don't fail
test -f libgfortran.spec || touch libgfortran.spec
+AC_LANG_C
# Check the compiler.
# The same as in boehm-gc and libstdc++. Have to borrow it from there.
# We must force CC to /not/ be precious variables; otherwise
@@ -128,6 +132,10 @@
AC_PROG_CC
m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
+AC_SUBST(CFLAGS)
+
+AM_PROG_CC_C_O
+
# Add -Wall -fno-repack-arrays -fno-underscoring if we are using GCC.
if test "x$GCC" = "xyes"; then
AM_FCFLAGS="-I . -Wall -Werror -fimplicit-none -fno-repack-arrays -fno-underscoring"
Index: libgfortran/ChangeLog
===================================================================
--- libgfortran/ChangeLog (revision 181211)
+++ libgfortran/ChangeLog (revision 181212)
@@ -1,3 +1,11 @@
+2011-11-09 Tobias Burnus <burnus@net-b.de>
+
+ * configure.ac: Make more cross-compile friendly.
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * config.h.in: Regenerate.
+ * configure: Regenerate.
+
2011-11-09 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/46686
@@ -20,9 +28,9 @@
2011-11-09 Janne Blomqvist <jb@gcc.gnu.org>
- PR libfortran/50016
- * io/inquire.c (inquire_via_unit): Flush the unit and use ssize.
- * io/unix.c (buf_flush): Don't call _commit.
+ PR libfortran/50016
+ * io/inquire.c (inquire_via_unit): Flush the unit and use ssize.
+ * io/unix.c (buf_flush): Don't call _commit.
2011-11-08 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
@@ -36,9 +44,9 @@
2011-11-07 Janne Blomqvist <jb@gcc.gnu.org>
- PR libfortran/45723
- * io/open.c (new_unit): Don't check file size before attempting
- seek.
+ PR libfortran/45723
+ * io/open.c (new_unit): Don't check file size before attempting
+ seek.
2011-11-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
@@ -538,9 +546,9 @@
2011-06-18 Janne Blomqvist <jb@gcc.gnu.org>
- PR libfortran/49296
- * io/list_read.c (read_character): Accept EOF as a separator when
- reading string.
+ PR libfortran/49296
+ * io/list_read.c (read_character): Accept EOF as a separator when
+ reading string.
2011-06-17 Daniel Carrera <dcarrera@gmail.com>
Index: libgfortran/config.h.in
===================================================================
--- libgfortran/config.h.in (revision 181211)
+++ libgfortran/config.h.in (revision 181212)
@@ -865,6 +865,9 @@
*/
#undef LT_OBJDIR
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
Index: libgfortran/aclocal.m4
===================================================================
--- libgfortran/aclocal.m4 (revision 181211)
+++ libgfortran/aclocal.m4 (revision 181212)
@@ -658,6 +658,41 @@
rm -f confinc confmf
])
+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+ [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-11-09 19:32 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-02 20:36 [Build, libgfortran, Patch] Make libgfortran's configure more cross-compile friendly Tobias Burnus
2011-11-02 21:10 ` Janne Blomqvist
2011-11-09 20:07 ` Tobias Burnus
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).