i370 port - constructing compile script
Paul Edwards
mutazilah@gmail.com
Mon Nov 2 14:45:00 GMT 2009
I've been having fantastic success building gcc. I have got it
to iterate through the entire build (as far as I can tell) now.
> Then finally I ran into an internal compiler error which I haven't seen
> before. One of the gcc options must have triggered something off.
> Perhaps it was -Wwrite-strings, or maybe the -O2 (I normally use
> -Os for a completely unrelated reason). Either way, I need to find
> out how to switch off those flags. I'll also try to fix the compiler
> internal error in i370.md.
This problem was due to the build being done with 64-bit
long long enabled - something i370.md can't cope with.
I forced it off with these two things:
configure:
main ()
{
! long long int i;
;
return 0;
}
--- 3196,3202 ----
int
main ()
{
! zlong long int i;
hwint.h:
#if !defined HAVE_LONG_LONG
! # if GCC_VERSION >= 3000 && !PUREISO && defined(WANT64)
# define HAVE_LONG_LONG 1
# define SIZEOF_LONG_LONG 8
Now at the end of the build, I can save the output, and do a
grep "^i370-mvspdp-gcc" to get all the source files that need to be
compiled. I could attempt to use the .o files (that are really .s)
directly, but that's not something I really need.
The auto-host.h looks fine, plus I have the generated files.
I still need to clean up the scripts further (the below is a work in
progress), and I need to write the programs that will generate the
compile JCL and then try it out!
Part of the cleanup will hopefully get around the multiple make failures ...
+ make
+ cp gcc/config/i370/dummy_config.h gcc/config.h
+ make
+ cp gcc/config/i370/i370-mvspdp-gcc2 ../mvscross/bin/i370-mvspdp-gcc
+ make
:-)
BFN. Paul.
Index: gccnew/gcc/configure
diff -c gccnew/gcc/configure:1.1.1.1 gccnew/gcc/configure:1.12
*** gccnew/gcc/configure:1.1.1.1 Thu Jul 9 10:25:05 2009
--- gccnew/gcc/configure Fri Oct 30 12:34:44 2009
***************
*** 2463,2470 ****
--- 2463,2472 ----
/* end confdefs.h. */
#include <stdarg.h>
#include <stdio.h>
+ #if !defined(__MVS__)
#include <sys/types.h>
#include <sys/stat.h>
+ #endif
/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
struct buf { int x; };
FILE * (*rcsopen) (struct buf *, struct stat *, int);
***************
*** 3194,3200 ****
int
main ()
{
! long long int i;
;
return 0;
}
--- 3196,3202 ----
int
main ()
{
! zlong long int i;
;
return 0;
}
***************
*** 3377,3383 ****
--- 3379,3387 ----
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include "confdefs.h"
+ #if !defined(__MVS__)
#include <sys/types.h>
+ #endif
int
***************
*** 3448,3454 ****
--- 3452,3460 ----
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include "confdefs.h"
+ #if !defined(__MVS__)
#include <sys/types.h>
+ #endif
int
***************
*** 3519,3525 ****
--- 3525,3533 ----
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include "confdefs.h"
+ #if !defined(__MVS__)
#include <sys/types.h>
+ #endif
int
***************
*** 3590,3596 ****
--- 3598,3606 ----
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include "confdefs.h"
+ #if !defined(__MVS__)
#include <sys/types.h>
+ #endif
int
***************
*** 3662,3668 ****
--- 3672,3680 ----
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include "confdefs.h"
+ #if !defined(__MVS__)
#include <sys/types.h>
+ #endif
int
***************
*** 3735,3741 ****
--- 3747,3755 ----
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include "confdefs.h"
+ #if !defined(__MVS__)
#include <sys/types.h>
+ #endif
int
***************
*** 5656,5662 ****
--- 5670,5678 ----
if test $ac_cv_header_time = yes; then
cat >>confdefs.h <<\_ACEOF
+ #if !defined(__MVS__)
#define TIME_WITH_SYS_TIME 1
+ #endif
_ACEOF
fi
***************
*** 6150,6157 ****
--- 6166,6180 ----
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+ #if !defined(__MVS__)
#include <sys/types.h>
#include <sys/param.h>
+ #endif
+ #if defined(__MVS__)
+ #define BIG_ENDIAN 1
+ #define LITTLE_ENDIAN 2
+ #define BYTE_ORDER 1
+ #endif
int
main ()
{
***************
*** 6192,6199 ****
--- 6215,6229 ----
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+ #if !defined(__MVS__)
#include <sys/types.h>
#include <sys/param.h>
+ #endif
+ #if defined(__MVS__)
+ #define BIG_ENDIAN 1
+ #define LITTLE_ENDIAN 2
+ #define BYTE_ORDER 1
+ #endif
int
main ()
{
***************
*** 6731,6738 ****
--- 6761,6770 ----
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+ #if !defined(__MVS__)
#include <sys/types.h>
#include <inttypes.h>
+ #endif
int
main ()
{
***************
*** 6851,6857 ****
--- 6883,6891 ----
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
+ #if !defined(__MVS__)
char $ac_func ();
+ #endif
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
***************
*** 7051,7057 ****
--- 7085,7093 ----
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+ #if !defined(__MVS__)
#include <sys/types.h>
+ #endif
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
***************
*** 7093,7099 ****
--- 7129,7137 ----
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Thanks to Mike Rendell for this test. */
+ #if !defined(__MVS__)
#include <sys/types.h>
+ #endif
#define NGID 256
#undef MAX
#define MAX(x, y) ((x) > (y) ? (x) : (y))
***************
*** 7303,7311 ****
--- 7341,7351 ----
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+ #if !defined(__MVS__)
#include <sys/types.h>
#include <sys/mman.h>
#include <unistd.h>
+ #endif
#ifndef MAP_ANONYMOUS
#define MAP_ANONYMOUS MAP_ANON
***************
*** 7570,7576 ****
--- 7610,7618 ----
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
+ #if !defined(__MVS__)
char $ac_func ();
+ #endif
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
***************
*** 7644,7650 ****
--- 7686,7694 ----
else
cat >conftest.$ac_ext <<_ACEOF
/* By Ruediger Kuhlmann. */
+ #if !defined(__MVS__)
#include <sys/types.h>
+ #endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
***************
*** 7717,7725 ****
--- 7761,7771 ----
/* Thanks to Paul Eggert for this test. */
#include <stdio.h>
#include <stdlib.h>
+ #if !defined(__MVS__)
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
+ #endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
***************
*** 8998,9004 ****
--- 9044,9052 ----
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+ #if !defined(__MVS__)
#include <sys/types.h>
+ #endif
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
Index: gccnew/gcc/hwint.h
diff -c gccnew/gcc/hwint.h:1.1.1.2 gccnew/gcc/hwint.h:1.3
*** gccnew/gcc/hwint.h:1.1.1.2 Thu Jul 9 10:27:21 2009
--- gccnew/gcc/hwint.h Mon Nov 2 20:50:44 2009
***************
*** 22,28 ****
but they're all cross-compile-only.) Just in case, force a
constraint violation if that assumption is incorrect. */
#if !defined HAVE_LONG_LONG
! # if GCC_VERSION >= 3000 && !PUREISO
# define HAVE_LONG_LONG 1
# define SIZEOF_LONG_LONG 8
extern char sizeof_long_long_must_be_8[sizeof(long long) == 8 ? 1 : -1];
--- 22,28 ----
but they're all cross-compile-only.) Just in case, force a
constraint violation if that assumption is incorrect. */
#if !defined HAVE_LONG_LONG
! # if GCC_VERSION >= 3000 && !PUREISO && defined(WANT64)
# define HAVE_LONG_LONG 1
# define SIZEOF_LONG_LONG 8
extern char sizeof_long_long_must_be_8[sizeof(long long) == 8 ? 1 : -1];
Index: gccnew/gcc/config/i370/build1
diff -c /dev/null gccnew/gcc/config/i370/build1:1.2
*** /dev/null Tue Nov 3 00:56:29 2009
--- gccnew/gcc/config/i370/build1 Tue Nov 3 00:43:52 2009
***************
*** 0 ****
--- 1,6 ----
+
./configure --target=i370-mvspdp --prefix=/devel/mvscross --with-sysroot=/devel/mvshead
--enable-languages=c
+ make
+ make install
+ mv ../mvscross/bin/i370-mvspdp-gcc ../mvscross/bin/i370-mvspdp-xxx
+ cp gcc/config/i370/i370-mvspdp-gcc1 ../mvscross/bin/i370-mvspdp-gcc
+ cp gcc/config/i370/i370-mvspdp-ar ../mvscross/bin
Index: gccnew/gcc/config/i370/build2
diff -c /dev/null gccnew/gcc/config/i370/build2:1.2
*** /dev/null Tue Nov 3 00:56:29 2009
--- gccnew/gcc/config/i370/build2 Mon Nov 2 23:11:38 2009
***************
*** 0 ****
--- 1,7 ----
+
./configure --build=i686-linux --host=i370-mvspdp --target=i370-mvspdp --prefix=/devel/mvshost
--enable-languages=c --disable-nls
+
+ make
+ cp gcc/config/i370/dummy_config.h gcc/config.h
+ make
+ cp gcc/config/i370/i370-mvspdp-gcc2 ../mvscross/bin/i370-mvspdp-gcc
+ make
Index: gccnew/gcc/config/i370/dummy_config.h
diff -c /dev/null gccnew/gcc/config/i370/dummy_config.h:1.1
*** /dev/null Tue Nov 3 00:56:29 2009
--- gccnew/gcc/config/i370/dummy_config.h Mon Nov 2 23:11:29 2009
***************
*** 0 ****
--- 1,12 ----
+ #ifndef GCC_CONFIG_H
+ #define GCC_CONFIG_H
+ #ifndef POSIX
+ # define POSIX
+ #endif
+ #include "unixio.h"
+ #include "config/i370/mvspdp.h"
+ #include "auto-host.h"
+ #ifdef IN_GCC
+ # include "ansidecl.h"
+ #endif
+ #endif /* GCC_CONFIG_H */
Index: gccnew/gcc/config/i370/i370-mvspdp-ar
diff -c /dev/null gccnew/gcc/config/i370/i370-mvspdp-ar:1.1
*** /dev/null Tue Nov 3 00:56:29 2009
--- gccnew/gcc/config/i370/i370-mvspdp-ar Tue Nov 3 00:42:23 2009
***************
*** 0 ****
--- 1,2 ----
+ echo ar $*
+ touch $2
Index: gccnew/gcc/config/i370/i370-mvspdp-gcc1
diff -c /dev/null gccnew/gcc/config/i370/i370-mvspdp-gcc1:1.1
*** /dev/null Tue Nov 3 00:56:29 2009
--- gccnew/gcc/config/i370/i370-mvspdp-gcc1 Mon Nov 2 23:08:46 2009
***************
*** 0 ****
--- 1,2 ----
+ i370-mvspdp-xxx -Werror-implicit-function-declaration -DPUREISO -S -I
/devel/mvshead/usr/include $*
+ #i370-mvspdp-xxx -DPUREISO -S -I /devel/mvshead/usr/include $*
Index: gccnew/gcc/config/i370/i370-mvspdp-gcc2
diff -c /dev/null gccnew/gcc/config/i370/i370-mvspdp-gcc2:1.1
*** /dev/null Tue Nov 3 00:56:29 2009
--- gccnew/gcc/config/i370/i370-mvspdp-gcc2 Mon Nov 2 23:08:46 2009
***************
*** 0 ****
--- 1,2 ----
+ #i370-mvspdp-xxx -Werror-implicit-function-declaration -DPUREISO -S -I
/devel/mvshead/usr/include $*
+ i370-mvspdp-xxx -DPUREISO -S -I /devel/mvshead/usr/include $*
Index: gccnew/gcc/config/i370/masterbuild
diff -c /dev/null gccnew/gcc/config/i370/masterbuild:1.1
*** /dev/null Tue Nov 3 00:56:29 2009
--- gccnew/gcc/config/i370/masterbuild Mon Nov 2 23:13:48 2009
***************
*** 0 ****
--- 1,11 ----
+ rm -fr gccnew
+ cvs get gccnew
+ cd gccnew
+ gcc/config/i370/build1
+ cd ..
+
+ rm -fr gccnew
+ cvs get gccnew
+ cd gccnew
+ gcc/config/i370/build2
+ cd ..
Index: gccnew/libiberty/configure
diff -c gccnew/libiberty/configure:1.1.1.1 gccnew/libiberty/configure:1.16
*** gccnew/libiberty/configure:1.1.1.1 Thu Jul 9 10:25:05 2009
--- gccnew/libiberty/configure Sat Oct 24 10:00:20 2009
***************
*** 274,279 ****
--- 274,284 ----
# Factoring default headers for most tests.
ac_includes_default="\
#include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <signal.h>
+ #include <stdarg.h>
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
***************
*** 3110,3117 ****
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
! #include <sys/types.h>
! #include <sys/param.h>
int
main ()
{
--- 3115,3125 ----
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
! /*#include <sys/types.h>
! #include <sys/param.h>*/
! #define BIG_ENDIAN 1
! #define LITTLE_ENDIAN 2
! #define BYTE_ORDER 1
int
main ()
{
***************
*** 3143,3150 ****
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
! #include <sys/types.h>
! #include <sys/param.h>
int
main ()
{
--- 3151,3161 ----
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
! /*#include <sys/types.h>
! #include <sys/param.h>*/
! #define BIG_ENDIAN 1
! #define LITTLE_ENDIAN 2
! #define BYTE_ORDER 1
int
main ()
{
***************
*** 4163,4169 ****
--- 4174,4189 ----
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
+ #if !defined(__MVS__)
char $ac_func ();
+ #else
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <signal.h>
+ #include <stdarg.h>
+ #endif
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
***************
*** 4424,4429 ****
--- 4444,4457 ----
libiberty_cv_var_sys_errlist=yes
;;
+ *-*-mvs*)
+ # MVS has no extensions
+ ac_cv_func_vfork_works=no
+ libiberty_cv_var_sys_nerr=no
+ libiberty_cv_var_sys_errlist=no
+ libiberty_cv_var_sys_siglist=no
+ ;;
+
*-*-*vms*)
# Under VMS, vfork works very different than on Unix. The standard
test
# won't work, and it isn't easily adaptable. It makes more sense to
***************
*** 4590,4596 ****
--- 4618,4633 ----
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
+ #if !defined(__MVS__)
char $ac_func ();
+ #else
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <signal.h>
+ #include <stdarg.h>
+ #endif
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
***************
*** 4926,4932 ****
--- 4963,4971 ----
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
+ #if !defined(__MVS__)
char $ac_func ();
+ #endif
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
***************
*** 5256,5262 ****
--- 5295,5303 ----
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
+ #if !defined(__MVS__)
char $ac_func ();
+ #endif
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
***************
*** 5555,5561 ****
--- 5596,5611 ----
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
+ #if !defined(__MVS__)
char $ac_func ();
+ #else
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <time.h>
+ #include <string.h>
+ #include <signal.h>
+ #include <stdarg.h>
+ #endif
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
More information about the Gcc
mailing list