Date: Mon, 4 Apr 2016 09:28:40 -0600 From: Warner Losh <imp@bsdimp.com> To: Mark Millard <markmi@dsl-only.net> Cc: FreeBSD Toolchain <freebsd-toolchain@freebsd.org>, freebsd-arm <freebsd-arm@freebsd.org> Subject: Re: 11.0: head/lib/libsysdecode/Makefile for . . ./libsoft/usr/include uses CPP when XCPP needed? Message-ID: <CANCZdfqX8d-DZ-Y%2B%2BDFjsP7L8M_xFTvFLknxgGLSf_zO-wSfdA@mail.gmail.com> In-Reply-To: <3A6ED16B-F941-41FC-B844-50292894D5F4@dsl-only.net> References: <D8803949-18C1-4B17-981F-DAD5A2DEDCE8@dsl-only.net> <CANCZdfo3Gdf0QF64hfn_WJzxhPOwJk6yMB3qEkDi8tfEpRRveg@mail.gmail.com> <B222BAE7-FD73-4F54-8C31-E982B6FCA718@dsl-only.net> <3A6ED16B-F941-41FC-B844-50292894D5F4@dsl-only.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Apr 4, 2016 at 12:18 AM, Mark Millard <markmi@dsl-only.net> wrote: > The following may be suggestive of the "upstream" issue: > > Makefile.libcompat has things like. . . > > > .if ${TARGET_ARCH} == "amd64" > . . . > > LIB32WMAKEFLAGS= \ > > AS="${XAS} --32" \ > > LD="${XLD} -m elf_i386_fbsd -Y > P,${LIBCOMPATTMP}/usr/lib32" \ > > OBJCOPY="${XOBJCOPY}" > > > > > .elif ${TARGET_ARCH} == "powerpc64" > . . . > > LIB32WMAKEFLAGS= \ > > LD="${XLD} -m elf32ppc_fbsd" \ > > OBJCOPY="${XOBJCOPY}" > > .endif > > that set up to deal with some host vs. cross distinctions. > > But: > > > # soft-fp world > > .if ${TARGET_ARCH} == "armv6" > > LIBSOFTCFLAGS= -DCOMPAT_SOFTFP > > LIBSOFTCPUFLAGS= -mfloat-abi=softfp > > LIBSOFTWMAKEENV= CPUTYPE=soft MACHINE=arm MACHINE_ARCH=armv6 > > LIBSOFTWMAKEFLAGS= -DCOMPAT_SOFTFP > > .endif > > in the file has no such translations and Makefile.libcompat has no > examples of ${XCPP} anywhere. > > The only place that has ${XCPP} in /usr/src/Makefile* and > /usr/src/share/mk/* is Makefile.inc1 : > Yes, X* is an invention of the top level Makefile*. I've long been uneasy about it, but haven't been able to articulate why. > > CROSSENV+= CC="${XCC} ${XCFLAGS}" CXX="${XCXX} ${XCFLAGS} > ${XCXXFLAGS}" \ > > CPP="${XCPP} ${XCFLAGS}" \ > > AS="${XAS}" AR="${XAR}" LD="${XLD}" NM=${XNM} \ > > OBJDUMP=${XOBJDUMP} OBJCOPY="${XOBJCOPY}" \ > > RANLIB=${XRANLIB} STRINGS=${XSTRINGS} \ > > SIZE="${XSIZE}" > > but WMAKE does not use CROSSENV. Maybe it got removed over time? It there's one more layer of indirection? However, I'm not sure I agree with that: We see that's it's part of WMAKEENV, which is used by WMAKE: WMAKEENV= ${CROSSENV} \ ... WMAKE= ${WMAKEENV} ${MAKE} ${WORLD_FLAGS} -f Makefile.inc1 DESTDIR=${WORLDTMP} And several others. Am I missing something or looking at old code? Warner > > > === > Mark Millard > markmi at dsl-only.net > > On 2016-Apr-3, at 10:22 PM, Mark Millard <markmi at dsl-only.net> wrote: > > On 2016-Apr-3, at 9:48 PM, Warner Losh <imp bsdimp.com> wrote: > > > > On Sun, Apr 3, 2016 at 10:25 PM, Mark Millard <markmi dsl-only.net> > wrote: > > For an amd64 -> armv7a (rpi2 targeting) cross-compile the code > > > >> # $FreeBSD: head/lib/libsysdecode/Makefile 295931 2016-02-23 20:00:55Z > jhb $ > >> > >> . . . > >> ioctl.c: mkioctls > >> env MACHINE=${MACHINE} CPP="${CPP}" \ > >> /bin/sh ${.CURDIR}/mkioctls ${DESTDIR}${INCLUDEDIR} > > ${.TARGET} > > > > (with its use of CPP instead of the XCPP) got: > > > >> --- all_subdir_lib/libsysdecode --- > >> --- ioctl.c --- > >> env MACHINE=arm CPP="/usr/bin/clang-cpp" /bin/sh > /usr/src/lib/libsysdecode/mkioctls > /usr/obj/clang/arm.armv6/usr/src/libsoft/usr/include > ioctl.c > >> . . . > >> --- all_subdir_lib/libsysdecode --- > >> In file included from <stdin>:17: > >> In file included from > /usr/obj/clang/arm.armv6/usr/src/libsoft/usr/include/dev/nvme/nvme.h:36: > >> In file included from > /usr/obj/clang/arm.armv6/usr/src/libsoft/usr/include/sys/param.h:135: > >> In file included from > /usr/obj/clang/arm.armv6/usr/src/libsoft/usr/include/machine/param.h:49: > >> > /usr/obj/clang/arm.armv6/usr/src/libsoft/usr/include/machine/acle-compat.h:182:4: > error: Unable to determine architecture version. > >> # error Unable to determine architecture version. > >> ^ > > > > In my case I had the following in the in-use src.conf in order to > control the cross compile specifics: > > > >> XCC=/usr/bin/clang -target ${TO_TYPE}--freebsd11.0-gnueabi > -march=armv7a -mcpu=cortex-a7 -mno-unaligned-access > >> XCXX=/usr/bin/clang++ -target ${TO_TYPE}--freebsd11.0-gnueabi > -march=armv7a -mcpu=cortex-a7 -mno-unaligned-access > >> XCPP=/usr/bin/clang-cpp -target ${TO_TYPE}--freebsd11.0-gnueabi > -march=armv7a -mcpu=cortex-a7 -mno-unaligned-access > > > > > > (I've been doing such for a long time but only just progressed to a 11.0 > source vintage with libsoft involved.) > > > > Even if I'm out of bounds for technique in some way I expect that > > > >> ioctl.c: mkioctls > >> env MACHINE=${MACHINE} CPP="${CPP}" \ > >> /bin/sh ${.CURDIR}/mkioctls ${DESTDIR}${INCLUDEDIR} > > ${.TARGET} > > > > is not doing everything it should to have the full context needed for . > . ./machine/acle-compat.h . > > > > It's gotta be upstream. XCPP XCC and XCXX are all exclusive to > Makefile.inc1. It's up to it to sort out the > > rest... And none of the X{AR,AS,LD,etc} are defined, so there's bound > to be an impedance mismatch. :) > > In the past when I've seen this it's been due to some kind of variable > contamination, perhaps one that's > > not otherwise known... > > > > Warner > > For reference the src.conf used for amd64 -> arm is: > > > KERNCONF=RPI2-NODBG > > TARGET=arm > > .if ${.MAKE.LEVEL} == 0 > > TARGET_ARCH=armv6 > > .export TARGET_ARCH > > .endif > > # > > WITH_LIBSOFT= > > WITH_FAST_DEPEND= > > WITH_LIBCPLUSPLUS= > > WITH_BINUTILS_BOOTSTRAP= > > WITH_CLANG= > > WITH_CLANG_IS_CC= > > WITH_CLANG_FULL= > > WITH_LLDB= > > WITH_CLANG_EXTRAS= > > WITH_BOOT= > > # > > WITHOUT_LIB32= > > WITHOUT_ELFTOOLCHAIN_BOOTSTRAP= > > WITHOUT_CLANG_BOOTSTRAP= > > WITHOUT_GCC_BOOTSTRAP= > > WITHOUT_GCC= > > WITHOUT_GNUCXX= > > # > > NO_WERROR= > > MALLOC_PRODUCTION= > > # > > WITH_DEBUG_FILES= > > # > > .if ${.MAKE.LEVEL} == 0 > > XCC=/usr/bin/clang -target ${TARGET_ARCH}--freebsd11.0-gnueabi > -march=armv7a -mcpu=cortex-a7 -mno-unaligned-access > > XCXX=/usr/bin/clang++ -target ${TARGET_ARCH}--freebsd11.0-gnueabi > -march=armv7a -mcpu=cortex-a7 -mno-unaligned-access > > XCPP=/usr/bin/clang-cpp -target ${TARGET_ARCH}--freebsd11.0-gnueabi > -march=armv7a -mcpu=cortex-a7 -mno-unaligned-access > > .export XCC > > .export XCXX > > .export XCPP > > .endif > > # > > .if ${.MAKE.LEVEL} == 0 > > CC=/usr/bin/clang > > CXX=/usr/bin/clang++ > > CPP=/usr/bin/clang-cpp > > .export CC > > .export CXX > > .export CPP > > .endif > > > === > Mark Millard > markmi at dsl-only.net > > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfqX8d-DZ-Y%2B%2BDFjsP7L8M_xFTvFLknxgGLSf_zO-wSfdA>