config.gcc (powerpc*-*-*): Add support for a new configure option --with-advance...
authorMichael Meissner <meissner@linux.vnet.ibm.com>
Wed, 3 Jun 2015 16:38:10 +0000 (16:38 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Wed, 3 Jun 2015 16:38:10 +0000 (16:38 +0000)
2015-06-03  Michael Meissner  <meissner@linux.vnet.ibm.com>

* config.gcc (powerpc*-*-*): Add support for a new configure
option --with-advance-toolchain=<xxx> which overrides using the
default header files, libraries and dynamic linker.

* config/rs6000/linux64.h (SUBSUBTARGET_EXTRA_SPECS): Add new
specs to support the configure --with-advance-toolchain=<xxx>
option.
(INCLUDE_EXTRA_SPEC): Likewise.
(LINK_OS_EXTRA_SPEC32): Likewise.
(LINK_OK_EXTRA_SPEC64): Likewise.
(LINK_OS_NEW_DTAGS_SPEC): Likewise.
(DYNAMIC_LINKER_PREFIX): Likewise.
(CPP_OS_DEFAULT_SPEC): Use the new specs for providing advance
toolchain support.
(GLIBC_DYNAMIC_LINKER32): Likewise.
(GLIBC_DYNAMIC_LINKER64): Likewise.
(LINK_OS_LINUX_SPEC32): Likewise.
(LINK_OS_LINUX_SPEC64): Likewise.

* doc/install.texi (--enable-advance-toolchain=<xx>): Document new
configuration option.

From-SVN: r224095

gcc/ChangeLog
gcc/config.gcc
gcc/config/rs6000/linux64.h
gcc/doc/install.texi

index 3951a8e4942f20122f551222c35013d55fc2c543..2124e52439bab6221a232a23a9e4b55b3d28efa8 100644 (file)
@@ -1,3 +1,27 @@
+2015-06-03  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       * config.gcc (powerpc*-*-*): Add support for a new configure
+       option --with-advance-toolchain=<xxx> which overrides using the
+       default header files, libraries and dynamic linker.
+
+       * config/rs6000/linux64.h (SUBSUBTARGET_EXTRA_SPECS): Add new
+       specs to support the configure --with-advance-toolchain=<xxx>
+       option.
+       (INCLUDE_EXTRA_SPEC): Likewise.
+       (LINK_OS_EXTRA_SPEC32): Likewise.
+       (LINK_OK_EXTRA_SPEC64): Likewise.
+       (LINK_OS_NEW_DTAGS_SPEC): Likewise.
+       (DYNAMIC_LINKER_PREFIX): Likewise.
+       (CPP_OS_DEFAULT_SPEC): Use the new specs for providing advance
+       toolchain support.
+       (GLIBC_DYNAMIC_LINKER32): Likewise.
+       (GLIBC_DYNAMIC_LINKER64): Likewise.
+       (LINK_OS_LINUX_SPEC32): Likewise.
+       (LINK_OS_LINUX_SPEC64): Likewise.
+
+       * doc/install.texi (--enable-advance-toolchain=<xx>): Document new
+       configuration option.
+
 2015-06-03  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/66275
index e23a34c2528911d9be6a4ee5cedfad08f38e28d3..13a567fadbfab7508936ad0681ff9e5f98fd42f8 100644 (file)
@@ -4044,7 +4044,7 @@ case "${target}" in
                ;;
 
        powerpc*-*-* | rs6000-*-*)
-               supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64"
+               supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain"
 
                for which in cpu cpu_32 cpu_64 tune tune_32 tune_64; do
                        eval "val=\$with_$which"
@@ -4091,6 +4091,56 @@ case "${target}" in
                        exit 1
                        ;;
                esac
+
+               if test "x$with_advance_toolchain" != x; then
+                   if test -d "/opt/$with_advance_toolchain/." -a \
+                       -d "/opt/$with_advance_toolchain/bin/." -a \
+                       -d "/opt/$with_advance_toolchain/include/."; then
+
+                       tm_file="$tm_file ./advance-toolchain.h"
+                       (at="/opt/$with_advance_toolchain"
+                        echo "/* Use Advance Toolchain $at */"
+                        echo
+                        echo "#ifndef USE_AT_INCLUDE_FILES"
+                        echo "#define USE_AT_INCLUDE_FILES 1"
+                        echo "#endif"
+                        echo
+                        echo "#if USE_AT_INCLUDE_FILES"
+                        echo "#undef  INCLUDE_EXTRA_SPEC"
+                        echo "#define INCLUDE_EXTRA_SPEC" \
+                             "\"-isystem $at/include\""
+                        echo "#endif"
+                        echo
+                        echo "#undef  LINK_OS_EXTRA_SPEC32"
+                        echo "#define LINK_OS_EXTRA_SPEC32" \
+                             "\"%(link_os_new_dtags)" \
+                             "-rpath $prefix/lib -rpath $at/lib" \
+                             "-L $prefix/lib -L $at/lib\""
+                        echo
+                        echo "#undef  LINK_OS_EXTRA_SPEC64"
+                        echo "#define LINK_OS_EXTRA_SPEC64" \
+                             "\"%(link_os_new_dtags)" \
+                             "-rpath $prefix/lib64 -rpath $at/lib64" \
+                             "-L $prefix/lib64 -L $at/lib64\""
+                        echo
+                        echo "#undef  LINK_OS_NEW_DTAGS_SPEC"
+                        echo "#define LINK_OS_NEW_DTAGS_SPEC" \
+                             "\"--enable-new-dtags\""
+                        echo
+                        echo "#undef  DYNAMIC_LINKER_PREFIX"
+                        echo "#define DYNAMIC_LINKER_PREFIX \"$at\""
+                        echo
+                        echo "#undef  MD_EXEC_PREFIX"
+                        echo "#define MD_EXEC_PREFIX \"$at/bin/\""
+                        echo
+                        echo "#undef  MD_STARTFILE_PREFIX"
+                        echo "#define MD_STARTFILE_PREFIX \"$at/lib/\"") \
+                           > advance-toolchain.h
+                   else
+                       echo "Unknown advance-toolchain $with_advance_toolchain"
+                       exit 1
+                   fi
+               fi
                ;;
 
        s390*-*-*)
index bec0fd9c84210f7c786d1deaea8e924dea123861..95997357579ce6c95e7587c7145ac6e79f78f2be 100644 (file)
@@ -207,7 +207,36 @@ extern int dot_symbols;
   { "asm_spec32",              ASM_SPEC32 },                           \
   { "asm_spec64",              ASM_SPEC64 },                           \
   { "link_os_linux_spec32",    LINK_OS_LINUX_SPEC32 },                 \
-  { "link_os_linux_spec64",    LINK_OS_LINUX_SPEC64 },
+  { "link_os_linux_spec64",    LINK_OS_LINUX_SPEC64 },                 \
+  { "link_os_extra_spec32",    LINK_OS_EXTRA_SPEC32 },                 \
+  { "link_os_extra_spec64",    LINK_OS_EXTRA_SPEC64 },                 \
+  { "link_os_new_dtags",       LINK_OS_NEW_DTAGS_SPEC },               \
+  { "include_extra",           INCLUDE_EXTRA_SPEC },                   \
+  { "dynamic_linker_prefix",   DYNAMIC_LINKER_PREFIX },
+
+/* Optional specs used for overriding the system include directory, default
+   -rpath links, and prefix for the dynamic linker.  Normally, there are not
+   defined, but if the user configure with the --with-advance-toolchain=<xxx>
+   option, the advance-toolchain.h file will override these.  */
+#ifndef INCLUDE_EXTRA_SPEC
+#define INCLUDE_EXTRA_SPEC     ""
+#endif
+
+#ifndef LINK_OS_EXTRA_SPEC32
+#define LINK_OS_EXTRA_SPEC32   ""
+#endif
+
+#ifndef LINK_OS_EXTRA_SPEC64
+#define LINK_OS_EXTRA_SPEC64   ""
+#endif
+
+#ifndef LINK_OS_NEW_DTAGS_SPEC
+#define LINK_OS_NEW_DTAGS_SPEC ""
+#endif
+
+#ifndef DYNAMIC_LINKER_PREFIX
+#define DYNAMIC_LINKER_PREFIX  ""
+#endif
 
 #undef MULTILIB_DEFAULTS
 #if DEFAULT_ARCH64_P
@@ -341,7 +370,7 @@ extern int dot_symbols;
   while (0)
 
 #undef  CPP_OS_DEFAULT_SPEC
-#define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)"
+#define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux) %(include_extra)"
 
 #undef  LINK_SHLIB_SPEC
 #define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}}"
@@ -361,12 +390,18 @@ extern int dot_symbols;
 #undef LINK_OS_DEFAULT_SPEC
 #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
 
-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
+#define GLIBC_DYNAMIC_LINKER32 "%(dynamic_linker_prefix)/lib/ld.so.1"
+
 #ifdef LINUX64_DEFAULT_ABI_ELFv2
-#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv1:/lib64/ld64.so.1;:/lib64/ld64.so.2}"
+#define GLIBC_DYNAMIC_LINKER64 \
+"%{mabi=elfv1:%(dynamic_linker_prefix)/lib64/ld64.so.1;" \
+":%(dynamic_linker_prefix)/lib64/ld64.so.2}"
 #else
-#define GLIBC_DYNAMIC_LINKER64 "%{mabi=elfv2:/lib64/ld64.so.2;:/lib64/ld64.so.1}"
+#define GLIBC_DYNAMIC_LINKER64 \
+"%{mabi=elfv2:%(dynamic_linker_prefix)/lib64/ld64.so.2;" \
+":%(dynamic_linker_prefix)/lib64/ld64.so.1}"
 #endif
+
 #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
 #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
 #if DEFAULT_LIBC == LIBC_UCLIBC
@@ -402,11 +437,13 @@ extern int dot_symbols;
 
 #define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \
   %{rdynamic:-export-dynamic} \
-  -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}}"
+  -dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}} \
+  %(link_os_extra_spec32)"
 
 #define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \
   %{rdynamic:-export-dynamic} \
-  -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}"
+  -dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}} \
+  %(link_os_extra_spec64)"
 
 #undef  TOC_SECTION_ASM_OP
 #define TOC_SECTION_ASM_OP \
index 24c4a33828280ab9b60cba10fe71ce31e273f101..bcebcd225c73030ae72e685ea58733e30b9fd496 100644 (file)
@@ -1607,6 +1607,14 @@ should not be built.
 Specify that the compiler should
 use DWARF 2 debugging information as the default.
 
+@item --with-advance-toolchain=@var{at}
+On 64-bit PowerPC Linux systems, configure the compiler to use the
+header files, library files, and the dynamic linker from the Advance
+Toolchain release @var{at} instead of the default versions that are
+provided by the Linux distribution.  In general, this option is
+intended for the developers of GCC, and it is not intended for general
+use.
+
 @item --enable-targets=all
 @itemx --enable-targets=@var{target_list}
 Some GCC targets, e.g.@: powerpc64-linux, build bi-arch compilers.