gcc.c (option_map): Add --sysroot.
authorMark Mitchell <mark@codesourcery.com>
Mon, 25 Jul 2005 19:42:04 +0000 (19:42 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Mon, 25 Jul 2005 19:42:04 +0000 (19:42 +0000)
* gcc.c (option_map): Add --sysroot.
(process_command): Handle --sysroot.
(display_help): Document it.
* doc/cppopts.tex (-isysroot): Document.
* doc/invoke.texi (--sysroot): Document.
* doc/install.texi (--with-build-sysroot): Document.

* Makefile.in (inhibit_libc): New variable.
(INHIBIT_LIBC_CFLAGS): Likewise.
(LIBGCC2_CFLAGS): Include
$(INHIBIT_LIBC_CFLAGS).
(CRTSTUFF_CFLAGS): Include $(INHIBIT_LIBC_CFLAGS).
($(T)crtbegin.o): Do not use @inhibit_libc@.
($(T)crtend.o): Likewise.
($(T)crtbeginS.o): Do not use @inhibit_libc@.
($(T)crtendS.o): Likewise.
($(T)crtbeginT.o): Do not use @inhibit_libc@.
($(T)crtendT.o): Likewise.
(stmp-fixinc): Do not complain about missing headers if
inhibit_libc.
* configure.ac (inhibit_libc): Set it to true/false.
(--with-build-sysroot): New option.  Use it to set
SYSTEM_HEADER_DIR.
* configure: Regenerated.

From-SVN: r102367

gcc/ChangeLog
gcc/Makefile.in
gcc/configure
gcc/configure.ac
gcc/doc/cppopts.texi
gcc/doc/install.texi
gcc/doc/invoke.texi
gcc/gcc.c

index 8df429108d97a166694549611f62cfab1ea8c751..7d8d6f7784515c1d451b2ecd61e371ad518e552b 100644 (file)
@@ -1,3 +1,30 @@
+2005-07-25  Mark Mitchell  <mark@codesourcery.com>
+
+       * gcc.c (option_map): Add --sysroot.
+       (process_command): Handle --sysroot.
+       (display_help): Document it.
+       * doc/cppopts.tex (-isysroot): Document.
+       * doc/invoke.texi (--sysroot): Document.
+       * doc/install.texi (--with-build-sysroot): Document.
+
+       * Makefile.in (inhibit_libc): New variable.
+       (INHIBIT_LIBC_CFLAGS): Likewise.
+       (LIBGCC2_CFLAGS): Include
+       $(INHIBIT_LIBC_CFLAGS).
+       (CRTSTUFF_CFLAGS): Include $(INHIBIT_LIBC_CFLAGS).
+       ($(T)crtbegin.o): Do not use @inhibit_libc@.
+       ($(T)crtend.o): Likewise.
+       ($(T)crtbeginS.o): Do not use @inhibit_libc@.
+       ($(T)crtendS.o): Likewise.
+       ($(T)crtbeginT.o): Do not use @inhibit_libc@.
+       ($(T)crtendT.o): Likewise.
+       (stmp-fixinc): Do not complain about missing headers if
+       inhibit_libc.
+       * configure.ac (inhibit_libc): Set it to true/false.
+       (--with-build-sysroot): New option.  Use it to set
+       SYSTEM_HEADER_DIR. 
+       * configure: Regenerated.
+
 2005-07-25  Manfred Hollstein  <mh@suse.com>
 
        * calls.c (store_one_arg): Fix unsigned comparison warning.
index 30b95eed94b0b7fc61e649c55ba27cb0d9c4a7c4..55b6e74ab4898ce8406cb036475e1a30fe4daf0a 100644 (file)
@@ -325,7 +325,7 @@ GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) ./xgcc -B./ -B$(build_tooldir)/bin/ -isyste
 # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
 # It omits XCFLAGS, and specifies -B./.
 # It also specifies -isystem ./include to find, e.g., stddef.h.
-GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(LOOSE_WARN) -Wold-style-definition $($@-warn) -isystem ./include $(TCFLAGS)
+GCC_CFLAGS=$(CFLAGS_FOR_TARGET) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(LOOSE_WARN) -Wold-style-definition $($@-warn) -isystem ./include $(TCFLAGS)
 
 # ---------------------------------------------------
 # Programs which produce files for the target machine
@@ -511,12 +511,20 @@ GGC_LIB=
 LIBGCC = libgcc.a
 INSTALL_LIBGCC = install-libgcc
 
+# "true" if the target C library headers are unavailable; "false"
+# otherwise.
+inhibit_libc = @inhibit_libc@
+ifeq ($(inhibit_libc),true)
+INHIBIT_LIBC_CFLAGS = -Dinhibit_libc
+endif
+
 # Options to use when compiling libgcc2.a.
 #
 LIBGCC2_DEBUG_CFLAGS = -g
 LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) \
                 $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) \
-                -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED @inhibit_libc@
+                -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \
+                $(INHIBIT_LIBC_CFLAGS)
 
 # Additional options to use when compiling libgcc2.a.
 # Some targets override this to -isystem include
@@ -528,7 +536,8 @@ TARGET_LIBGCC2_CFLAGS =
 # Options to use when compiling crtbegin/end.
 CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
   -finhibit-size-directive -fno-inline-functions -fno-exceptions \
-  -fno-zero-initialized-in-bss -fno-unit-at-a-time
+  -fno-zero-initialized-in-bss -fno-unit-at-a-time \
+  $(INHIBIT_LIBC_CFLAGS)
 
 # Additional sources to handle exceptions; overridden by targets as needed.
 LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
@@ -1393,33 +1402,33 @@ stmp-multilib: $(LIBGCC_DEPS)
 $(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
   gbl-ctors.h stmp-int-hdrs tsystem.h coretypes.h $(TM_H)
        $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
-         @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN \
+         -c $(srcdir)/crtstuff.c -DCRT_BEGIN \
          -o $(T)crtbegin$(objext)
 
 $(T)crtend.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
   gbl-ctors.h stmp-int-hdrs tsystem.h coretypes.h $(TM_H)
        $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
-         @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END \
+         -c $(srcdir)/crtstuff.c -DCRT_END \
          -o $(T)crtend$(objext)
 
 # These are versions of crtbegin and crtend for shared libraries.
 $(T)crtbeginS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
   gbl-ctors.h stmp-int-hdrs tsystem.h coretypes.h $(TM_H)
        $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \
-         @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O \
+         -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O \
          -o $(T)crtbeginS$(objext)
 
 $(T)crtendS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
   gbl-ctors.h stmp-int-hdrs tsystem.h coretypes.h $(TM_H)
        $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \
-         @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O \
+         -c $(srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O \
          -o $(T)crtendS$(objext)
 
 # This is a version of crtbegin for -static links.
 $(T)crtbeginT.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
   gbl-ctors.h stmp-int-hdrs tsystem.h coretypes.h $(TM_H)
        $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
-         @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O \
+         -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O \
          -o $(T)crtbeginT$(objext)
 
 # Compile the start modules crt0.o and mcrt0.o that are linked with
@@ -3137,7 +3146,7 @@ s-macro_list : $(GCC_PASSES)
 stmp-fixinc: gsyslimits.h macro_list \
   $(build_objdir)/fixincludes/fixincl \
   $(build_objdir)/fixincludes/fixinc.sh
-       @if test ! -d ${SYSTEM_HEADER_DIR}; then \
+       @if ! $(inhibit_libc) && test ! -d ${SYSTEM_HEADER_DIR}; then \
          echo The directory that should contain system headers does not exist: >&2 ; \
          echo "  ${SYSTEM_HEADER_DIR}" >&2 ; \
          if test "x${SYSTEM_HEADER_DIR}" = "x${gcc_tooldir}/sys-include"; \
index cb79298d1b010feda8d1861702791da9278b3e83..59e0b2596d0c1b867ff4b0c463e724ec8f3bd24e 100755 (executable)
@@ -922,6 +922,8 @@ Optional Packages:
   --with-as               arrange to use the specified as (full pathname)
   --with-stabs            arrange to use stabs instead of host debug format
   --with-dwarf2           force the default debug format to be DWARF 2
+  --with-build-sysroot=sysroot
+                          use sysroot as the system root during the build
   --with-sysroot=DIR Search for usr/lib, usr/include, et al, within DIR.
   --with-gnu-ld           assume the C compiler uses GNU ld default=no
   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
@@ -6934,6 +6936,13 @@ fi;
 
 
 
+# Check whether --with-build-sysroot or --without-build-sysroot was given.
+if test "${with_build_sysroot+set}" = set; then
+  withval="$with_build_sysroot"
+
+fi;
+
+
 # Check whether --with-sysroot or --without-sysroot was given.
 if test "${with_sysroot+set}" = set; then
   withval="$with_sysroot"
@@ -6945,6 +6954,11 @@ if test "${with_sysroot+set}" = set; then
 
  TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
  CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR)'
+ if test "x$with_build_sysroot" != x; then
+   build_system_header_dir=$with_build_sysroot'$(NATIVE_SYSTEM_HEADER_DIR)'
+ else
+   build_system_header_dir='$(CROSS_SYSTEM_HEADER_DIR)'
+ fi
 
  if test "x$exec_prefix" = xNONE; then
   if test "x$prefix" = xNONE; then
@@ -7464,7 +7478,7 @@ if test "${gcc_cv_prog_makeinfo_modern+set}" = set; then
 else
     ac_prog_version=`$MAKEINFO --version 2>&1 |
                    sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
-  echo "configure:7467: version of makeinfo is $ac_prog_version" >&5
+  echo "configure:7481: version of makeinfo is $ac_prog_version" >&5
   case $ac_prog_version in
     '')     gcc_cv_prog_makeinfo_modern=no;;
     4.[2-9]*)
@@ -12737,7 +12751,7 @@ if test x$host != x$target
 then
        CROSS="-DCROSS_COMPILE"
        ALL=all.cross
-       SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
+       SYSTEM_HEADER_DIR=$build_system_header_dir
        case "$host","$target" in
        # Darwin crosses can use the host system's libraries and headers,
        # because of the fat library support.  Of course, it must be the
 # then define inhibit_libc in LIBGCC2_CFLAGS.
 # This prevents libgcc2 from containing any code which requires libc
 # support.
-inhibit_libc=
+inhibit_libc=false
 if { { test x$host != x$target && test "x$with_sysroot" = x ; } ||
        test x$with_newlib = xyes ; } &&
      { test "x$with_headers" = x || test "x$with_headers" = xno ; } ; then
-       inhibit_libc=-Dinhibit_libc
+       inhibit_libc=true
 fi
 
 
@@ -13059,7 +13073,7 @@ fi
 
   test -n "$gcc_cv_as" && break
 done
-test -n "$gcc_cv_as" || gcc_cv_as="$gcc_cv_tool_prefix/bin/$default_tool_name$build_exeext"
+test -n "$gcc_cv_as" || gcc_cv_as="$gcc_cv_tool_prefix/$default_tool_name$build_exeext"
 
 fi
 test "$silent" != yes && exec 6>&1
@@ -13237,7 +13251,7 @@ fi
 
   test -n "$gcc_cv_ld" && break
 done
-test -n "$gcc_cv_ld" || gcc_cv_ld="$gcc_cv_tool_prefix/bin/$default_tool_name$build_exeext"
+test -n "$gcc_cv_ld" || gcc_cv_ld="$gcc_cv_tool_prefix/$default_tool_name$build_exeext"
 
 fi
 test "$silent" != yes && exec 6>&1
@@ -13381,7 +13395,7 @@ fi
 
   test -n "$gcc_cv_nm" && break
 done
-test -n "$gcc_cv_nm" || gcc_cv_nm="$gcc_cv_tool_prefix/bin/$default_tool_name$build_exeext"
+test -n "$gcc_cv_nm" || gcc_cv_nm="$gcc_cv_tool_prefix/$default_tool_name$build_exeext"
 
 fi
 test "$silent" != yes && exec 6>&1
index 9cc51d5c99f786b05c525df9bf2a1b9ec1f616de..d9f2167ad441d30b6bc26eec9e8c79012e1cb1a0 100644 (file)
@@ -681,6 +681,10 @@ AC_ARG_ENABLE(shared,
 ], [enable_shared=yes])
 AC_SUBST(enable_shared)
 
+AC_ARG_WITH(build-sysroot, 
+  [  --with-build-sysroot=sysroot
+                          use sysroot as the system root during the build])
+
 AC_ARG_WITH(sysroot,
 [  --with-sysroot[=DIR] Search for usr/lib, usr/include, et al, within DIR.],
 [
@@ -691,7 +695,12 @@ AC_ARG_WITH(sysroot,
    
  TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
  CROSS_SYSTEM_HEADER_DIR='$(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR)'
-
+ if test "x$with_build_sysroot" != x; then
+   build_system_header_dir=$with_build_sysroot'$(NATIVE_SYSTEM_HEADER_DIR)'
+ else
+   build_system_header_dir='$(CROSS_SYSTEM_HEADER_DIR)'
+ fi
  if test "x$exec_prefix" = xNONE; then
   if test "x$prefix" = xNONE; then
    test_prefix=/usr/local
@@ -1643,7 +1652,7 @@ if test x$host != x$target
 then
        CROSS="-DCROSS_COMPILE"
        ALL=all.cross
-       SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
+       SYSTEM_HEADER_DIR=$build_system_header_dir
        case "$host","$target" in
        # Darwin crosses can use the host system's libraries and headers,
        # because of the fat library support.  Of course, it must be the
@@ -1677,11 +1686,11 @@ fi
 # then define inhibit_libc in LIBGCC2_CFLAGS.
 # This prevents libgcc2 from containing any code which requires libc
 # support.
-inhibit_libc=
+inhibit_libc=false
 if { { test x$host != x$target && test "x$with_sysroot" = x ; } ||
        test x$with_newlib = xyes ; } &&
      { test "x$with_headers" = x || test "x$with_headers" = xno ; } ; then
-       inhibit_libc=-Dinhibit_libc
+       inhibit_libc=true
 fi
 AC_SUBST(inhibit_libc)
 
index 80bbe50e690b807756b0a6f7e4e943de989b0f31..2790e8c77345bbb070bea7d264ab5dd191c28a6a 100644 (file)
@@ -478,6 +478,11 @@ Append @var{dir} to the prefix specified previously with
 path.  @option{-iwithprefixbefore} puts it in the same place @option{-I}
 would; @option{-iwithprefix} puts it where @option{-idirafter} would.
 
+@item -isysroot @var{dir}
+@opindex isysroot
+This option is like the @option{--sysroot} option, but applies only to
+header files.  See the @option{--sysroot} option for more information.
+
 @item -isystem @var{dir}
 @opindex isystem
 Search @var{dir} for header files, after all directories specified by
index ac046c7a7fade65a6f8a1343bb6e64a723e62c18..2baf003b95cb5cc5fb84b9cbd468eb7e9b7e282c 100644 (file)
@@ -1228,6 +1228,16 @@ in case @option{--with-sysroot} is not given an argument, is
 subdirectory of @option{$@{exec_prefix@}}, then it will be found relative to
 the GCC binaries if the installation tree is moved.
 
+@item --with-build-sysroot
+@itemx --with-build-sysroot=@var{dir}
+Tells GCC to consider @var{dir} as the system root (see
+@option{--with-sysroot}) while building the compiler itself, instead of
+the directory specified with @option{--with-sysroot}.  This option is
+only useful when you are already using @option{--with-sysroot}.  You
+can use @option{--with-build-sysroot} when you are configure with
+@option{--prefix} set to a directory that is different from the one in
+which you are installing GCC and your target libraries.
+
 @item --with-headers
 @itemx --with-headers=@var{dir}
 Deprecated in favor of @option{--with-sysroot}.
index 988f13b1dbd24809e6d64907933704c6135e13d9..f24505562a7e510d7dbc89b0df9145193ecc6d67 100644 (file)
@@ -349,6 +349,7 @@ Objective-C and Objective-C++ Dialects}.
 -include @var{file}  -imacros @var{file} @gol
 -iprefix @var{file}  -iwithprefix @var{dir} @gol
 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
+-isysroot @var{dir} @gol
 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
 -P  -fworking-directory  -remap @gol
 -trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
@@ -368,7 +369,8 @@ Objective-C and Objective-C++ Dialects}.
 
 @item Directory Options
 @xref{Directory Options,,Options for Directory Search}.
-@gccoptlist{-B@var{prefix}  -I@var{dir}  -iquote@var{dir}  -L@var{dir}  -specs=@var{file}  -I-}
+@gccoptlist{-B@var{prefix}  -I@var{dir}  -iquote@var{dir}  -L@var{dir}
+-specs=@var{file}  -I- --sysroot=@var{dir}}
 
 @item Target Options
 @c I wrote this xref this way to avoid overfull hbox. -- rms
@@ -6372,6 +6374,22 @@ program uses when determining what switches to pass to @file{cc1},
 @option{-specs=@var{file}} can be specified on the command line, and they
 are processed in order, from left to right.
 
+@item --sysroot=@var{dir}
+@opindex sysroot
+Use @var{dir} as the logical root directory for headers and libraries.
+For example, if the compiler would normally search for headers in
+@file{/usr/include} and libraries in @file{/usr/lib}, it will instead
+search @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.  
+
+If you use both this option and the @option{-isysroot} option, then
+the @option{--sysroot} option will apply to libraries, but the
+@option{-isysroot} option will apply to header files.
+
+The GNU linker (beginning with version 2.16) has the necessary support
+for this option.  If your linker does not support this option, the
+header file aspect of @option{--sysroot} will still work, but the
+library aspect will not.
+
 @item -I-
 @opindex I-
 This option has been deprecated.  Please use @option{-iquote} instead for
index a701d2c52f2eb6197c700b4c5bcb7b97a2608d17..c62dbbbe53c5c942509c18ada0a52daab2e40dce 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -1120,6 +1120,7 @@ static const struct option_map option_map[] =
    {"--static", "-static", 0},
    {"--std", "-std=", "aj"},
    {"--symbolic", "-symbolic", 0},
+   {"--sysroot", "--sysroot=", "aj"}, 
    {"--time", "-time", 0},
    {"--trace-includes", "-H", 0},
    {"--traditional", "-traditional", 0},
@@ -3064,6 +3065,9 @@ display_help (void)
   fputs (_("  -time                    Time the execution of each subprocess\n"), stdout);
   fputs (_("  -specs=<file>            Override built-in specs with the contents of <file>\n"), stdout);
   fputs (_("  -std=<standard>          Assume that the input sources are for <standard>\n"), stdout);
+  fputs (_("\
+  --sysroot=<directory>    Use <directory> as the root directory for headers\n\
+                           for headers and libraries\n"), stdout);
   fputs (_("  -B <directory>           Add <directory> to the compiler's search paths\n"), stdout);
   fputs (_("  -b <machine>             Run gcc for target <machine>, if installed\n"), stdout);
   fputs (_("  -V <version>             Run gcc version number <version>, if installed\n"), stdout);
@@ -3926,6 +3930,11 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
        ;
       else if (! strcmp (argv[i], "-fhelp"))
        ;
+      else if (! strncmp (argv[i], "--sysroot=", strlen ("--sysroot=")))
+       {
+         target_system_root = argv[i] + strlen ("--sysroot=");
+         target_system_root_changed = 1;
+       }
       else if (argv[i][0] == '+' && argv[i][1] == 'e')
        {
          /* Compensate for the +e options to the C++ front-end;