Re: another external compiler topic

From: Brooks Davis <brooks_at_freebsd.org>
Date: Wed, 5 Jun 2013 14:31:22 -0500
On Wed, Jun 05, 2013 at 08:53:14PM +0200, dt71_at_gmx.com wrote:
> For the diagnosis of an error related to external compilers, I'll post full setup information.

My first reaction is that your configuration is so far beyond anything
that is actually documented as working you're going to be mostly on your
own.  That said, a few hopefully helpful comments below.

First off I assume that since you posted to freebsd-current_at_ that you
are running the latest head.

> Compiler version string: "clang version 3.4 (trunk 182723)".
> Installed system revision: 251046.
> Checked out source tree revision: 251352.
> 
> The following 2 configuration files were used to build the installed system, as well as the new system. (However, see the "compiler" note later on.)
> 
> ======= make.conf begins =======
> CPUTYPE=native
> KERNCONF=MYCONF
> COMPILER_TYPE=clang
> CROSS_COMPILER_PREFIX=
> WITHOUT_FORMAT_EXTENSIONS=1
> CC=/path/to/clang
> CPP=/path/to/clang-cpp
> CXX=/path/to/clang++
> NO_CLEAN=1
> NO_KERNELCLEAN=1
> NO_MODULES=1
> MALLOC_PRODUCTION=1
> ======= make.conf ends =======

Setting CC, CPP, and CXX except in the environment isn't supported and
can't work for cross build cases.  It looks like your avoiding those
cases (but more on your wrapper script later), but this does put you in
uncharted land.

> 
> ======= src.conf begins =======
> WITHOUT_ACCT=1
> WITHOUT_ACPI=1
> WITHOUT_AMD=1
> WITHOUT_APM=1
> WITHOUT_AT=1
> WITHOUT_ATF=1
> WITHOUT_ATM=1
> WITHOUT_AUDIT=1
> WITHOUT_AUTHPF=1
> WITHOUT_BIND=1
> WITHOUT_BLUETOOTH=1
> WITHOUT_BSNMP=1
> WITHOUT_CALENDAR=1
> WITHOUT_CDDL=1
> WITHOUT_CLANG=1
> WITHOUT_CLANG_IS_CC=1
> WITHOUT_CTM=1
> WITHOUT_CVS=1
> WITHOUT_DICT=1
> WITHOUT_ED_CRYPTO=1
> WITHOUT_FDT=1
> WITHOUT_FLOPPY=1
> WITHOUT_FREEBSD_UPDATE=1
> WITHOUT_GAMES=1
> WITHOUT_GCC=1
> WITHOUT_GCOV=1
> WITHOUT_GDB=1
> WITHOUT_GPIB=1
> WITHOUT_GPIO=1
> WITHOUT_HESIOD=1
> WITHOUT_HTML=1
> WITHOUT_INET6=1
> WITHOUT_INFO=1 # [1]
> WITHOUT_IPFILTER=1
> WITHOUT_IPFW=1
> WITHOUT_IPX=1
> WITHOUT_JAIL=1
> WITHOUT_KDUMP=1
> WITHOUT_KVM=1
> WITHOUT_LDNS=1
> WITHOUT_LEGACY_CONSOLE=1
> WITHOUT_LOCATE=1
> WITHOUT_LPR=1
> WITHOUT_MAIL=1
> WITHOUT_NDIS=1
> WITHOUT_NETGRAPH=1
> WITHOUT_NLS=1
> WITHOUT_NLS_CATALOGS=1
> WITHOUT_NTP=1
> WITHOUT_PC_SYSINSTALL=1
> WITHOUT_PF=1
> WITHOUT_PKGTOOLS=1
> WITHOUT_PMC=1
> WITHOUT_PORTSNAP=1
> WITHOUT_PPP=1
> WITHOUT_PROFILE=1
> WITHOUT_QUOTAS=1
> WITHOUT_RCMDS=1
> WITHOUT_RCS=1
> WITHOUT_RESCUE=1
> WITHOUT_SENDMAIL=1
> WITHOUT_SHAREDOCS=1
> WITHOUT_SYSINSTALL=1
> WITHOUT_TELNET=1
> WITHOUT_WIRELESS=1
> WITHOUT_WPA_SUPPLICANT_EAPOL=1
> WITH_BSD_GREP=1
> WITH_BSD_PATCH=1
> ======= src.conf ends =======

I see that WITHOUT_KERBEROS is not set here.  Was it ever?  Migration
from a WITHOUT_KERBEROS system to a WITH_KERBEROS system is known to be
broken which might explain your breakage in the libkrb5 build.

> For the interested reader, regarding "# [1]":
> ======= /usr/bin/makeinfo begins =======
> B=
> for i in "$_at_" ; do
>    if test -n "$B" ; then
>      echo fuck this shit > "$i"
>      exit 0
>    fi
>    if test "$i" = -o ; then
>      B=1
>    fi
> done
> ======= /usr/bin/makeinfo ends =======
> 
> 
> The following are output log snippets. (Snippet 2 contains an error that follows snippet 1; key term: parallel builds (most likely).)
> 
> ======= `make buildworld` snippet 1 begins =======
> building shared library libkadm5srv.so.11
> ===> kerberos5/lib/libkafs5 (all)
> /i/a/clang  -O2 -pipe -march=native -I/usr/src/kerberos5/lib/libkafs5/../../../crypto/heimdal/lib/kafs  -I/usr/src/kerberos5/li
> b/libkafs5/../../../crypto/heimdal/lib/krb5  -I/usr/obj/usr/src/kerberos5/lib/libkafs5/../libkrb5/  -I/usr/src/kerberos5/lib/li
> bkafs5/../../../crypto/heimdal/lib/roken -DHAVE_CONFIG_H -I/usr/src/kerberos5/lib/libkafs5/../../include -std=gnu99 -Qunused-ar
> guments -fstack-protector  -c /usr/src/kerberos5/lib/libkafs5/../../../crypto/heimdal/lib/kafs/afssys.c -o afssys.o
> In file included from /usr/src/kerberos5/lib/libkafs5/../../../crypto/heimdal/lib/kafs/afssys.c:34:
> In file included from /usr/src/kerberos5/lib/libkafs5/../../../crypto/heimdal/lib/kafs/kafs_locl.h:99:
> /usr/src/kerberos5/lib/libkafs5/../../../crypto/heimdal/lib/krb5/krb5-v4compat.h:39:10: fatal error: 'krb_err.h' file not found
> ======= `make buildworld` snippet 1 ends =======
> 
> ======= `make buildworld` snippet 2 begins =======
> ===> kerberos5/lib/libkafs5 (install)
> sh /usr/src/tools/install.sh -C -o root -g wheel -m 444   libkafs5.a /usr/obj/usr/src/tmp/usr/lib
> install: libkafs5.a: No such file or directory
> ======= `make buildworld` snippet 2 ends =======
> 
> 
> When building the system that is currently installed, the following "compiler" was used:
> ======= /path/to/clang begins =======
> #!/bin/sh
> /path/to/real/clang "$_at_" || /path/to/real/clang --sysroot=/usr/obj/usr/src/tmp "$_at_"
> ======= /path/to/clang ends =======

This has got to corrupt your build.  I can't imagine anything staying
working for long given that many translation units will compile with
the system headers and then get linked to something compiled with the
headers from the source tree.

You might want to consider using the XCC external toolchain support I
committed to HEAD a couple weeks ago.  I've only really testing it with
clang, but it works for at least a few people.  Some documentation at:

https://wiki.freebsd.org/ExternalToolchain

> Also, the following patch was applied to the source tree:
> ======= diff begins =======
> Index: Makefile.inc1
> ===================================================================
> --- Makefile.inc1	(revision 251352)
> +++ Makefile.inc1	(working copy)
> _at__at_ -722,7 +722,7 _at__at_
>   ITOOLS=	[ awk cap_mkdb cat chflags chmod chown \
>   	date echo egrep find grep id install ${_install-info} \
>   	ln lockf make mkdir mtree ${_nmtree_itools} mv pwd_mkdb \
> -	rm sed sh sysctl test true uname wc ${_zoneinfo}
> +	rm sed sh sysctl test true uname wc ${_zoneinfo} btxld ls mv cp dd
>   
>   #
>   # distributeworld
> Index: usr.bin/xlint/llib/Makefile
> ===================================================================
> --- usr.bin/xlint/llib/Makefile	(revision 251352)
> +++ usr.bin/xlint/llib/Makefile	(working copy)
> _at__at_ -9,9 +9,9 _at__at_
>   CLEANFILES+= ${LIBS}
>   
>   llib-lposix.ln: llib-lposix
> -	${LINT} ${LINTFLAGS} -Cposix ${.ALLSRC}
> +	CC=${CC:Q} ${LINT} ${LINTFLAGS} -Cposix ${.ALLSRC}
>   
>   llib-lstdc.ln: llib-lstdc
> -	${LINT} ${LINTFLAGS} -Cstdc ${.ALLSRC}
> +	CC=${CC:Q} ${LINT} ${LINTFLAGS} -Cstdc ${.ALLSRC}
>   
>   .include <bsd.prog.mk>
> ======= diff ends =======

What do these patches work around?

-- Brooks

Received on Wed Jun 05 2013 - 17:31:31 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:38 UTC