head -r324071 system clang 5 based powerpc64 building ports: lang/gcc7 messed up by a matching name vec_step? [vec_step macro name in gcc7's altivec.h]

Mark Millard markmi at dsl-only.net
Fri Sep 29 19:14:32 UTC 2017


Summary of later additions:

devel/powerpc64-gcc has the same problem as gcc7
in this clang-based powerpc64.

My note about using gcc 4.2.1 for the kernel
build was wrong. (My 32-bit powerpc builds
are that way, not the powerpc64 ones.)

On 2017-Sep-29, at 1:51 AM, Mark Millard <markmi at dsl-only.net> wrote:

> [Looks like gcc7 might be causing its own problem
> via a vec_step macro name in its altivec.h .]
> 
> On 2017-Sep-29, at 1:14 AM, Mark Millard <markmi at dsl-only.net> wrote:
> 
>> I attempted a poudriere based build of some
>> ports and the gcc7 build involved failed
>> with the following sorts of notices:

devel/powerpc64-gcc has the same problem as gcc7
in this clang-based powerpc64

>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:3835:27: error: expected unqualified-id
>> tree new_vec, vec_init, vec_step, t;
>>                         ^
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:3835:26: error: expected ';' at end of declaration
>> tree new_vec, vec_init, vec_step, t;
>>                        ^
>>                        ;
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:3983:3: error: use of undeclared identifier 't'
>> t = unshare_expr (new_name);
>> ^
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:3988:49: error: use of undeclared identifier 't'
>> new_vec = build_vector_from_val (stepvectype, t);
>>                                               ^
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:3989:12: error: expected expression
>> vec_step = vect_init_vector (iv_phi, new_vec, stepvectype, NULL);
>>          ^
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:4011:75: error: expected expression
>> new_stmt = gimple_build_assign (vec_dest, PLUS_EXPR, induc_def, vec_step);
>>                                                                         ^
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:4048:7: error: use of undeclared identifier 't'
>>     t = unshare_expr (new_name);
>>     ^
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:4051:53: error: use of undeclared identifier 't'
>>     new_vec = build_vector_from_val (stepvectype, t);
>>                                                   ^
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:4052:16: error: expected expression
>>     vec_step = vect_init_vector (iv_phi, new_vec, stepvectype, NULL);
>>              ^
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:4060:25: error: expected expression
>>                                         vec_def, vec_step);
>>                                                          ^
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:6327:9: error: expected unqualified-id
>>         tree vec_step = build_vector_from_val (cr_index_vector_type, step);
>>              ^
>> /wrkdirs/usr/ports/lang/gcc7/work/gcc-7.2.0/gcc/tree-vect-loop.c:6333:36: error: expected expression
>>         create_iv (series_vect, vec_step, NULL_TREE, loop, &incr_gsi,
>>                                         ^
>> 50 warnings and 12 errors generated.
>> gmake[3]: *** [Makefile:1099: tree-vect-loop.o] Error 1
>> gmake[3]: *** Waiting for unfinished jobs....
>> 42 warnings generated.
>> 51 warnings generated.
>> 50 warnings generated.
>> rm gfortran.pod gcc.pod
>> gmake[3]: Leaving directory '/wrkdirs/usr/ports/lang/gcc7/work/.build/gcc'
>> gmake[2]: *** [Makefile:4225: all-gcc] Error 2
>> gmake[2]: Leaving directory '/wrkdirs/usr/ports/lang/gcc7/work/.build'
>> gmake[1]: *** [Makefile:893: all] Error 2
>> gmake[1]: Leaving directory '/wrkdirs/usr/ports/lang/gcc7/work/.build'
>> ===> Compilation failed unexpectedly.
>> Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to
>> the maintainer.
>> *** Error code 1
>> 
>> Stop.
>> make: stopped in /usr/ports/lang/gcc7
>> =>> Cleaning up wrkdir
>> ===>  Cleaning for gcc7-7.2.0_1
>> build of lang/gcc7 | gcc7-7.2.0_1 ended at Fri Sep 29 00:22:00 PDT 2017
>> build time: 00:29:27
>> !!! build failure encountered !!!
> 
> Turns out that there is:
> 
> # grep -r "\<vec_step\>" ~/poudriere_failure/lang_gcc7/ | more
> . . .
> /root/poudriere_failure/lang_gcc7/work/gcc-7.2.0/gcc/config/rs6000/altivec.h:/* Given the vec_step of a type, return the corresponding bool type.  */
> /root/poudriere_failure/lang_gcc7/work/gcc-7.2.0/gcc/config/rs6000/altivec.h:typename __altivec_bool_ret <vec_step (T)>::__ret \
> /root/poudriere_failure/lang_gcc7/work/gcc-7.2.0/gcc/config/rs6000/altivec.h:   to #define vec_step to __builtin_vec_step.  */
> /root/poudriere_failure/lang_gcc7/work/gcc-7.2.0/gcc/config/rs6000/altivec.h:#define vec_step(x) __builtin_vec_step (* (__typeof__ (x) *) 0)
> . . .
> 
> ( config/s390/vecintrin.h has something similar.)
> 
> 
> 
>> FYI:
>> 
>> # grep -r "\<vec_step\>" /usr/src/* | more
>> /usr/src/contrib/llvm/tools/clang/lib/AST/ASTDumper.cpp:    OS << " vec_step";
>> /usr/src/contrib/llvm/tools/clang/lib/AST/StmtPrinter.cpp:    OS << "vec_step";
>> /usr/src/contrib/llvm/tools/clang/lib/AST/ExprConstant.cpp:/// VisitUnaryExprOrTypeTraitExpr - Evaluate a sizeof, alignof or vec_step with
>> /usr/src/contrib/llvm/tools/clang/lib/AST/ExprConstant.cpp:      // The vec_step built-in functions that take a 3-component
>> /usr/src/contrib/llvm/tools/clang/lib/AST/ItaniumMangle.cpp:                                     "cannot yet mangle vec_step expression");
>> /usr/src/contrib/llvm/tools/clang/lib/Headers/opencl-c.h: * by vec_step(gentypem). The shuffle mask operand
>> /usr/src/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp:  case tok::kw_vec_step:   // unary-expression: OpenCL 'vec_step' expression
>> /usr/src/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp:/// vec_step and we are at the start of an expression or a parenthesized
>> /usr/src/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp:/// [OpenCL 1.1 6.11.12] vec_step built-in function:
>> /usr/src/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp:///           vec_step ( expressions )
>> /usr/src/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp:///           vec_step ( type-name )
>> /usr/src/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp:         "Not a typeof/sizeof/alignof/vec_step expression!");
>> /usr/src/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp:         "Not a sizeof/alignof/vec_step expression!");
>> /usr/src/contrib/llvm/tools/clang/lib/Sema/SemaExpr.cpp:  // [OpenCL 1.1 6.11.12] "The vec_step built-in function takes a built-in
>> /usr/src/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h:  /// \brief Build a new sizeof, alignof or vec_step expression with a
>> /usr/src/contrib/llvm/tools/clang/include/clang/AST/Expr.h:/// vec_step (OpenCL 1.1 6.11.12).
>> /usr/src/contrib/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchers.h:/// \brief Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
>> /usr/src/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td:  "invalid application of '%select{sizeof|alignof|vec_step}0' to a "
>> /usr/src/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td:  "invalid application of '%select{sizeof|alignof|vec_step}0' to a void "
>> /usr/src/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td:  "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align}0' to a void type">;
>> /usr/src/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td:  "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align}0' to an "
>> /usr/src/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td:  "invalid application of '%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align}0' to a "
>> /usr/src/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td:  "'vec_step' requires built-in scalar or vector type, %0 invalid">;
>> /usr/src/contrib/llvm/tools/clang/include/clang/Basic/TokenKinds.def:KEYWORD(vec_step                    , KEYOPENCL|KEYALTIVEC|KEYZVECTOR)
>> /usr/src/contrib/gcc/config/rs6000/altivec.h:/* Given the vec_step of a type, return the corresponding bool type.  */
>> /usr/src/contrib/gcc/config/rs6000/altivec.h:typename __altivec_bool_ret <vec_step (T)>::__ret \
>> /usr/src/contrib/gcc/config/rs6000/altivec.h:   to #define vec_step to __builtin_vec_step.  */
>> /usr/src/contrib/gcc/config/rs6000/altivec.h:#define vec_step(x) __builtin_vec_step (* (__typeof__ (x) *) 0)
>> /usr/src/contrib/gcc/ChangeLog-2002:    * config/rs6000/altivec.h (vec_step): Remove extraneous
>> /usr/src/contrib/gcc/ChangeLog-2002:    (vec_step): Implement for C++.
>> 
>> 
>> Context:
>> 
>> # uname -apKU
>> FreeBSD FBSDG5L 12.0-CURRENT FreeBSD 12.0-CURRENT  r324071M  powerpc powerpc64 1200047 1200047
>> 
>> Built via amd64 -> powerpc64 cross build, using clang
>> for buildworld:
>> 
>> [Note: The kernel was built with gcc 4.2.1 .]

Wrong: I was thinking of the powerpc (32- bit) build
when I wrote that. powerpc64 is a pure clang based build.

>> 
>> # poudriere jail -l
>> JAILNAME      VERSION      ARCH              METHOD TIMESTAMP           PATH
>> FBSDpowerpc64 12.0-CURRENT powerpc.powerpc64 null   2017-09-28 20:55:01 /usr/obj/DESTDIRs/clang-powerpc64-installworld_altbinutils-poud
>> 
>> (It is using /usr/src .)
>> 
>> # poudriere ports -l
>> PORTSTREE METHOD TIMESTAMP           PATH
>> default   null   2017-09-28 17:04:57 /usr/ports
>> 
>> 
>> # more ~/src.configs/src.conf.powerpc64-clang_altbinutils-bootstrap.amd64-host 
>> TO_TYPE=powerpc64
>> TOOLS_TO_TYPE=${TO_TYPE}
>> VERSION_CONTEXT=12.0
>> #
>> KERNCONF=GENERIC64vtsc-NODBG
>> TARGET=powerpc
>> .if ${.MAKE.LEVEL} == 0
>> TARGET_ARCH=${TO_TYPE}
>> .export TARGET_ARCH
>> .endif
>> #
>> WITH_CROSS_COMPILER=
>> WITHOUT_SYSTEM_COMPILER=
>> #
>> WITH_LIBCPLUSPLUS=
>> WITHOUT_BINUTILS_BOOTSTRAP=
>> WITH_ELFTOOLCHAIN_BOOTSTRAP=
>> WITH_CLANG_BOOTSTRAP=
>> WITH_CLANG=
>> WITH_CLANG_IS_CC=
>> WITH_CLANG_FULL=
>> WITH_CLANG_EXTRAS=
>> WITHOUT_LLD_BOOTSTRAP=
>> WITH_LLD=
>> WITHOUT_LLD_IS_LD=
>> WITH_LLDB=
>> #
>> WITH_BOOT=
>> WITH_LIB32=
>> #
>> WITHOUT_GCC_BOOTSTRAP=
>> WITHOUT_GCC=
>> WITHOUT_GCC_IS_CC=
>> WITHOUT_GNUCXX=
>> #
>> NO_WERROR=
>> MALLOC_PRODUCTION=
>> #
>> # Avoid converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
>> # and such from blocking the build.
>> WERROR=
>> #
>> WITH_REPRODUCIBLE_BUILD=
>> WITH_DEBUG_FILES=
>> #
>> #
>> # For TO (so-called "cross") stages . . .
>> # So-called-cross via ${TO_TYPE}-xtoolchain-gcc/${TO_TYPE}-gcc. . .
>> # TOOLS_TO_TYPE based on ${TO_TYPE}-xtoolchain-gcc related binutils. . .
>> #
>> CROSS_BINUTILS_PREFIX=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/
>> .if ${.MAKE.LEVEL} == 0
>> #
>> # Note: The WITH_CROSS_COMPILER picks up the CROSS_BINUTILS_PREFIX
>> #       binding automatically.
>> #
>> XAS=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/as
>> XAR=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ar
>> XNM=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/nm
>> XOBJCOPY=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/objcopy
>> XOBJDUMP=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/objdump
>> XRANLIB=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ranlib
>> XSIZE=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/size
>> #NO-SUCH: XSTRINGS=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/strings
>> XSTRINGS=/usr/local/bin/${TOOLS_TO_TYPE}-freebsd-strings
>> .export XAS
>> .export XAR
>> .export XNM
>> .export XOBJCOPY
>> .export XOBJDUMP
>> .export XRANLIB
>> .export XSIZE
>> .export XSTRINGS
>> XLD=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ld
>> .export XLD
>> .endif
>> 
>> # svnlite status /usr/src/ | sort
>> ?       /usr/src/sys/amd64/conf/GENERIC-DBG
>> ?       /usr/src/sys/amd64/conf/GENERIC-NODBG
>> ?       /usr/src/sys/arm/conf/GENERIC-DBG
>> ?       /usr/src/sys/arm/conf/GENERIC-NODBG
>> ?       /usr/src/sys/arm64/conf/GENERIC-DBG
>> ?       /usr/src/sys/arm64/conf/GENERIC-NODBG
>> ?       /usr/src/sys/powerpc/conf/GENERIC64vtsc-DBG
>> ?       /usr/src/sys/powerpc/conf/GENERIC64vtsc-NODBG
>> ?       /usr/src/sys/powerpc/conf/GENERICvtsc-DBG
>> ?       /usr/src/sys/powerpc/conf/GENERICvtsc-NODBG
>> M       /usr/src/contrib/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
>> M       /usr/src/contrib/llvm/tools/lld/ELF/Arch/PPC64.cpp
>> M       /usr/src/crypto/openssl/crypto/armcap.c
>> M       /usr/src/lib/Makefile
>> M       /usr/src/lib/libkvm/kvm_powerpc.c
>> M       /usr/src/lib/libkvm/kvm_private.c
>> M       /usr/src/sys/arm64/arm64/identcpu.c
>> M       /usr/src/sys/arm64/arm64/mp_machdep.c
>> M       /usr/src/sys/boot/ofw/Makefile.inc
>> M       /usr/src/sys/boot/powerpc/Makefile.inc
>> M       /usr/src/sys/boot/powerpc/boot1.chrp/Makefile
>> M       /usr/src/sys/boot/powerpc/kboot/Makefile
>> M       /usr/src/sys/boot/uboot/Makefile.inc
>> M       /usr/src/sys/conf/kmod.mk
>> M       /usr/src/sys/conf/ldscript.powerpc
>> M       /usr/src/sys/ddb/db_main.c
>> M       /usr/src/sys/ddb/db_script.c
>> M       /usr/src/sys/kern/subr_pcpu.c
>> M       /usr/src/sys/powerpc/aim/mmu_oea64.c
>> M       /usr/src/sys/powerpc/ofw/ofw_machdep.c
>> M       /usr/src/sys/powerpc/powerpc/interrupt.c
>> M       /usr/src/sys/powerpc/powerpc/mp_machdep.c
>> M       /usr/src/sys/powerpc/powerpc/trap.c
>> 
>> 
>> 
>> # svnlite info /usr/ports/ | grep "Re[plv]"
>> Relative URL: ^/head
>> Repository Root: svn://svn0.us-west.freebsd.org/ports
>> Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
>> Revision: 450478
>> Last Changed Rev: 450478
>> 
>> # svnlite status /usr/ports
>> M       /usr/ports/Mk/bsd.port.mk
>> M       /usr/ports/Mk/bsd.qt.mk
>> M       /usr/ports/audio/liba52/Makefile
>> M       /usr/ports/base/gcc/Makefile
>> M       /usr/ports/base/gcc/distinfo
>> M       /usr/ports/base/gcc/pkg-plist
>> M       /usr/ports/devel/libunwind/Makefile
>> ?       /usr/ports/devel/qt5/files/extrapatch-config.tests_unix_arch.test
>> M       /usr/ports/lang/gcc7/Makefile
>> M       /usr/ports/sysutils/cdrdao/Makefile
>> ?       /usr/ports/www/qt5-webkit/files/patch-Source_JavaScriptCore_assembler_ARMAssembler.h
>> ?       /usr/ports/www/qt5-webkit/files/patch-Source_JavaScriptCore_assembler_ARMv7Assembler.h
>> ?       /usr/ports/www/qt5-webkit/files/patch-Source_JavaScriptCore_offlineasm_arm.rb
>> ?       /usr/ports/www/qt5-webkit/files/patch-Source_WTF_wtf_Platform.h
>> ?       /usr/ports/www/qt5-webkit/files/patch-Source_WebCore_platform_graphics_cpu_arm_filters_FELightingNEON.cpp
>> ?       /usr/ports/www/qt5-webkit/files/patch-Source_bmalloc_bmalloc_BPlatform.h
>> 
>> 
>> # more /usr/local/etc/poudriere.d/make.conf
>> WANT_QT_VERBOSE_CONFIGURE=1
>> #
>> DEFAULT_VERSIONS+=perl5=5.24 gcc=7
>> #
>> # From a local /usr/ports/Mk/bsd.port.mk extension:
>> ALLOW_OPTIMIZATIONS_FOR_WITH_DEBUG=
>> #
>> .if ${.CURDIR:M*/devel/llvm*}
>> #WITH_DEBUG=
>> .elif ${.CURDIR:M*/www/qt5-webkit*}
>> #WITH_DEBUG=
>> .else
>> WITH_DEBUG=
>> .endif
>> MALLOC_PRODUCTION=
>> #
>> # The system clang for TARGET_ARCH=powerpc64
>> # and the system binutils (such as ld) do not
>> # (yet?) mix well. So for ports use the
>> # devel/binutils ones. (A problem before
>> # they are already in place!)
>> #USE_BINUTILS=
>> CFLAGS+=-B${LOCALBASE}/bin/
>> CXXFLAGS+=-B${LOCALBASE}/bin/
>> CPPFLAGS+=-B${LOCALBASE}/bin/
>> 
>> 
>> # svnlite diff /usr/ports/Mk/bsd.port.mk
>> Index: /usr/ports/Mk/bsd.port.mk
>> ===================================================================
>> --- /usr/ports/Mk/bsd.port.mk	(revision 450478)
>> +++ /usr/ports/Mk/bsd.port.mk	(working copy)
>> @@ -1130,12 +1130,12 @@
>> 
>> # Get the operating system type
>> .if !defined(OPSYS)
>> -OPSYS!=	${UNAME} -s
>> +OPSYS!=	echo FreeBSD
>> .endif
>> _EXPORTED_VARS+=	OPSYS
>> 
>> .if !defined(_OSRELEASE)
>> -_OSRELEASE!=	${UNAME} -r
>> +_OSRELEASE!=	echo 12.0-CURRENT
>> .endif
>> _EXPORTED_VARS+=	_OSRELEASE
>> 
>> @@ -1651,7 +1651,11 @@
>> STRIP_CMD=	${TRUE}
>> .endif
>> DEBUG_FLAGS?=	-g
>> +.if defined(ALLOW_OPTIMIZATIONS_FOR_WITH_DEBUG)
>> +CFLAGS:=		${CFLAGS} ${DEBUG_FLAGS}
>> +.else
>> CFLAGS:=		${CFLAGS:N-O*:N-fno-strict*} ${DEBUG_FLAGS}
>> +.endif
>> .if defined(INSTALL_TARGET)
>> INSTALL_TARGET:=	${INSTALL_TARGET:S/^install-strip$/install/g}
>> .endif
>> 
>> 
>> (Note: I've had problems with some ${UNAME} use returning empty strings,
>> which is why I've used echo as a replacement in places. The real point
>> for the above is the ALLOW_OPTIMIZATIONS_FOR_WITH_DEBUG use.)


===
Mark Millard
markmi at dsl-only.net





More information about the freebsd-toolchain mailing list