Date: Mon, 30 May 2016 17:40:41 -0700 From: Mark Millard <markmi@dsl-only.net> To: FreeBSD Current <freebsd-current@freebsd.org>, Bryan Drewery <bdrewery@FreeBSD.org> Cc: FreeBSD Toolchain <freebsd-toolchain@freebsd.org>, FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, freebsd-arm <freebsd-arm@freebsd.org> Subject: 11.0 -r300944 buildworld attempt failed [amd64 targeting powerpc or armv6 via system clang use] Message-ID: <137F75C8-F81A-44EE-B036-D7ABA7C75684@dsl-only.net> In-Reply-To: <C0ABC879-468D-4C78-8DEC-3A6F41D7ECB4@dsl-only.net> References: <8A197698-51C7-43F9-9927-465602E19AAE@dsl-only.net> <C0ABC879-468D-4C78-8DEC-3A6F41D7ECB4@dsl-only.net>
next in thread | previous in thread | raw e-mail | index | archive | help
[This adds armv6 information to a prior note that was just powerpc = based. The powerpc example material is listed first then it is noted = that armv6 ended up similar in my attempt.] On 2016-May-29, at 11:32 PM, Mark Millard <markmi at dsl-only.net> = wrote: > [It may well be that powerpc is not an intended cross compile target = via clang since clang is insufficient for an FreeBSD/powerpc ABI = compliant buildworld as stands. Still I use this to illustrate the more = general points for clang use in cross builds.] >=20 > The failure: >=20 >> --- libc.so.7.full --- >> /usr/bin/ld: unrecognised emulation mode: elf32ppc_fbsd >> Supported emulations: elf_x86_64_fbsd elf_i386_fbsd >> clang: error: linker command failed with exit code 1 (use -v to see = invocation) >> *** [libc.so.7.full] Error code 1 >>=20 >> make[4]: stopped in /usr/src/lib/libc >> 1 error >>=20 >> make[4]: stopped in /usr/src/lib/libc >> *** [lib/libc__L] Error code 2 >=20 > Note the /usr/bin/ld use: the host (amd64) linker for a powerpc link = operation. >=20 > The log shows the ld command was via clang=E2=80=99s front end as far = as what the build did directly (just a prefix shown): >=20 >> --- libc.so.7.full --- >> /usr/bin/clang -target powerpc-unknown-freebsd11.0 = --sysroot=3D/usr/obj/clang/powerpc.powerpc/usr/src/tmp = -B/usr/obj/clang/powerpc.powerpc/usr/src/tmp/usr/bin -nodefaultlibs = -Wl,--version-script=3DVersion.map -shared -Wl,-x -Wl,--fatal-warnings = -Wl,--warn-shared-textrel -o libc.so.7.full -Wl,-soname,libc.so.7 = `NM=3D'nm' NMFLAGS=3D'' lorder trivial-vdso_tc.So bt_close.So bt_conv.So = bt_debug.So bt_delete.So bt_get.So bt_open.So bt_overflow.So bt_page.So > . . . >=20 > The -B does not point to a place with a powerpc specific ld command: >=20 >> # ls -lt /usr/obj/clang/powerpc.powerpc/usr/src/tmp/usr/bin >> total 1395 >> -rwxr-xr-x 1 root wheel 827248 May 29 22:20 ctfmerge >> -rwxr-xr-x 1 root wheel 534712 May 29 22:20 sysinit >> -rwxr-xr-x 1 root wheel 960784 May 29 22:20 ctfconvert >=20 > As far as I can tell a potentially proper path would have been: >=20 > /usr/local/powerpc-freebsd/bin/ld >=20 > if a devel/powerpc-binutils port existed and was installed. (No such = port exists.) >=20 > I do not know if other TARGET_ARCH=E2=80=99s have similar problems or = not (even if they have a binutils port). >=20 >=20 > This was not a WITH_META_MODE=3Dyes context. >=20 >=20 > make.conf was empty and src.conf was: >=20 > TO_TYPE=3Dpowerpc > # > KERNCONF=3DGENERICvtsc-NODEBUG > TARGET=3D${TO_TYPE} > .if ${.MAKE.LEVEL} =3D=3D 0 > TARGET_ARCH=3D${TO_TYPE} > .export TARGET_ARCH > .endif > # > WITHOUT_CROSS_COMPILER=3D > WITH_SYSTEM_COMPILER=3D > # > WITH_LIBCPLUSPLUS=3D > WITH_BINUTILS_BOOTSTRAP=3D > WITH_CLANG=3D > WITH_CLANG_IS_CC=3D > WITH_CLANG_FULL=3D > WITH_CLANG_EXTRAS=3D > # lldb requires missing atomic 8-byte operations for powerpc (non-64) > WITHOUT_LLDB=3D > # > WITH_BOOT=3D > WITHOUT_LIB32=3D > # > WITHOUT_GCC_BOOTSTRAP=3D > WITHOUT_GCC=3D > WITHOUT_GCC_IS_CC=3D > WITHOUT_GNUCXX=3D > # > NO_WERROR=3D > #WERROR=3D > MALLOC_PRODUCTION=3D > # > WITH_DEBUG_FILES=3D >=20 >=20 > =3D=3D=3D > Mark Millard > markmi at dsl-only.net I finally tried a amd64 host -> armv6 (rpi2) cross build for freebsd = 11.0. amd64 -> armv6 for freebsd 11.0 also ended up with linker vs. file = format/content mismatches: in this case what was reported was about the = crti.o format when attempting to link libc.so.7.full . The error = messages were not explicit about the linker path used, unfortunately. = .../tmp/usr/bin as listed in the -B had only the same 3 file names (and = no ld) as was shown above for the powerpc context. Again it is a context of using the clang front end to indirectly get to = the linker with "-target" needing to guide details if the selection of = the linker is to be automatic. (Otherwise -B likely needs to point to = where an appropriate tool set is to be found [including ld].) armv6 for freebsd 11.0 is likely intended to be supported, unlike = powerpc possibly being viewed as irrelevant currently because of clang's = code generation issues for powerpc variants. armv6-gnueabihf-freebsd11.0 for modern hardfloat vs. = armv6-gnueabi-freebsd11.0 for temporary softfloat may need distinct = linkers (or other tools)? (Possibly via distinct -B's?) I'm not sure if the following additional item is a potential issue or = not: While there is a devel/arm-gnueabi-binutils there is no = devel/arm-gnueabihf-binutils. But I notice that -target = armv6-gnueabihf-freebsd11.0 is in use now for freebsd 11.0. Targets of = the form armv6-gnueabi-freebsd10* are probably still needed to support = 10.x for rpi's and the like. (So is another port needed?) =3D=3D=3D Mark Millard markmi at dsl-only.net
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?137F75C8-F81A-44EE-B036-D7ABA7C75684>