Commit 7792cf66 by Iain Sandoe Committed by Iain Sandoe

Darwin, objective-c - register gnu-runtime headers correctly.

Darwin is able to use two runtimes for objective-c; the
default is its native "NeXT" runtime, but also it can build
code using the "gnu-runtime".  In order to do this, we have to
be able to find the gnu-runtime headers (which are installed
into the compiler's tree).

The process to do this is erroneously prepending the sysroot
to this when a sysroot is in force.  The gnu-runtime headers have
never been installed in a Darwin (macOS) SDK so we must make
sure that they are found local to the compiler.

gcc/

2019-05-18  Iain Sandoe  <iain@sandoe.co.uk>

	* config/darwin-c.c (darwin_register_objc_includes): Do not
	prepend the sysroot when building gnu-runtime header search
	paths.

From-SVN: r271371
parent 5219955c
2019-05-18 Iain Sandoe <iain@sandoe.co.uk> 2019-05-18 Iain Sandoe <iain@sandoe.co.uk>
* config/darwin-c.c (darwin_register_objc_includes): Do not
prepend the sysroot when building gnu-runtime header search
paths.
2019-05-18 Iain Sandoe <iain@sandoe.co.uk>
* config/darwin.c (darwin_file_end): Use switch_to_section () * config/darwin.c (darwin_file_end): Use switch_to_section ()
instead of direct output of the asm. instead of direct output of the asm.
......
...@@ -463,41 +463,32 @@ static const char *framework_defaults [] = ...@@ -463,41 +463,32 @@ static const char *framework_defaults [] =
/* Register the GNU objective-C runtime include path if STDINC. */ /* Register the GNU objective-C runtime include path if STDINC. */
void void
darwin_register_objc_includes (const char *sysroot, const char *iprefix, darwin_register_objc_includes (const char *sysroot ATTRIBUTE_UNUSED,
int stdinc) const char *iprefix, int stdinc)
{ {
const char *fname; /* If we want standard includes; Register the GNU OBJC runtime include
size_t len; path if we are compiling OBJC with GNU-runtime.
/* We do not do anything if we do not want the standard includes. */ This path is compiler-relative, we don't want to prepend the sysroot
if (!stdinc) since it's not expected to find the headers there. */
return;
fname = GCC_INCLUDE_DIR "-gnu-runtime";
/* Register the GNU OBJC runtime include path if we are compiling OBJC
with GNU-runtime. */
if (c_dialect_objc () && !flag_next_runtime) if (stdinc && c_dialect_objc () && !flag_next_runtime)
{ {
const char *fname = GCC_INCLUDE_DIR "-gnu-runtime";
char *str; char *str;
/* See if our directory starts with the standard prefix. size_t len;
/* See if our directory starts with the standard prefix.
"Translate" them, i.e. replace /usr/local/lib/gcc... with "Translate" them, i.e. replace /usr/local/lib/gcc... with
IPREFIX and search them first. */ IPREFIX and search them first. */
if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0 && !sysroot if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0
&& !strncmp (fname, cpp_GCC_INCLUDE_DIR, len)) && !strncmp (fname, cpp_GCC_INCLUDE_DIR, len))
{ {
str = concat (iprefix, fname + len, NULL); str = concat (iprefix, fname + len, NULL);
/* FIXME: wrap the headers for C++awareness. */ add_path (str, INC_SYSTEM, /*c++aware=*/true, false);
add_path (str, INC_SYSTEM, /*c++aware=*/false, false);
} }
/* Should this directory start with the sysroot? */ str = update_path (fname, "");
if (sysroot) add_path (str, INC_SYSTEM, /*c++aware=*/true, false);
str = concat (sysroot, fname, NULL);
else
str = update_path (fname, "");
add_path (str, INC_SYSTEM, /*c++aware=*/false, false);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment