Date: Wed, 30 Mar 2011 10:26:47 -0500 From: Nathan Whitehorn <nwhitehorn@freebsd.org> To: freebsd-hackers@freebsd.org Subject: Re: Include file search path Message-ID: <4D934BB7.9080201@freebsd.org> In-Reply-To: <4D934AF4.9080503@FreeBSD.org> References: <AANLkTi=BiUVnzsGg83wwWPHjnTDR=XukhJ3UK6Bd5hvF@mail.gmail.com> <4D934AF4.9080503@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 03/30/11 10:23, Dimitry Andric wrote: > On 2011-03-29 23:20, mdf@FreeBSD.org wrote: >> So here's what I'm pondering. When I build a library, like e.g. libc, >> where do the include files get pulled from? They can't (shouldn't) be >> the ones in /usr/include, but I don't see a -nostdinc like for the >> kernel. There are -I directives in the Makefile for >> -I${.CURDIR}/include -I${.CURDIR}/../../include, etc., but that won't >> remove /usr/include from the search path. > > During the bootstrap stage, a copy of gcc (or clang) is built, that has > all default search paths for headers, libraries, etc, set relative to > ${WORLDTMP}, usually /usr/obj/usr/src/tmp. > > E.g: > > $ /usr/obj/usr/src/tmp/usr/bin/gcc -v -E -x c /dev/null -o /dev/null > Using built-in specs. > Target: amd64-undermydesk-freebsd > Configured with: FreeBSD/amd64 system compiler > Thread model: posix > gcc version 4.2.1 20070719 [FreeBSD] > /usr/obj/usr/src/tmp/usr/libexec/cc1 -E -quiet -v -D_LONGLONG > /dev/null -o /dev/null > #include "..." search starts here: > #include <...> search starts here: > /usr/obj/usr/src/tmp/usr/include/gcc/4.2 > /usr/obj/usr/src/tmp/usr/include > End of search list. > > and: > > $ /usr/obj/usr/src/tmp/usr/bin/gcc -print-search-dirs > install: /usr/obj/usr/src/tmp/usr/libexec/ > programs: > =/usr/obj/usr/src/tmp/usr/bin/:/usr/obj/usr/src/tmp/usr/bin/:/usr/obj/usr/src/tmp/usr/libexec/:/usr/obj/usr/src/tmp/usr/libexec/:/usr/obj/usr/src/tmp/usr/libexec/ > libraries: =/usr/obj/usr/src/tmp/usr/lib/:/usr/obj/usr/src/tmp/usr/lib/ > > This is a rather nasty hack, though. If we can make it work, we should > probably try using --sysroot instead, or alternatively, -nostdinc and > adding include dirs by hand. The same for executable and library search > paths, although I am not sure if there is a way to completely reset > those with the current options. Since you need to build two compilers anyway (one for the current system, to build the new one, and one to live in the new one, linked against new libraries), I don't see that it's such a nasty hack. -Nathan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D934BB7.9080201>