Date: Mon, 21 Apr 2014 21:09:42 -0600 From: Ian Lepore <ian@FreeBSD.org> To: Glen Barber <gjb@FreeBSD.org> Cc: freebsd-ia64@FreeBSD.org, freebsd-current@FreeBSD.org, freebsd-ppc@FreeBSD.org Subject: Re: Build failures with high parallel make(1) jobs with GCC Message-ID: <1398136182.1124.394.camel@revolution.hippie.lan> In-Reply-To: <20140422025435.GL49791@glenbarber.us> References: <20140422025435.GL49791@glenbarber.us>
next in thread | previous in thread | raw e-mail | index | archive | help
--=-/f9e1SmI0wN69NuW1Rk7 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit On Mon, 2014-04-21 at 22:54 -0400, Glen Barber wrote: > I have been pounding my head against the desk for longer than I care to > admit with this failure. > > I see this with powerpc, powerpc64, and now ia64. I initially thought > it was specific to powerpc{,64}, but now realize ia64 is also affected. > > This build was running with -j48 on a 48-core machine, when the > following caused build failure: > > ======================================================================= > > /usr/obj/ia64.ia64/usr/src/tmp/usr/bin/ld: cannot find -lm > --- libstdc++.so.6 --- > *** [libstdc++.so.6] Error code 1 > > make[4]: stopped in /usr/src/gnu/lib/libstdc++ > A failure has been detected in another branch of the parallel make > > ======================================================================= > > It is unclear to me when exactly this started happening, but it seems at > least two weeks is a reasonable estimate. > > I realize this is not an entirely large chunk of useful information > regarding the build failure, but I have determined it is entirely > reproducible. I have determined that the failure case seems to > disappear with make(1) jobs <= 10, at least for powerpc. > > The last successful build for powerpc on head/ was April 8. But I am > having trouble tracking down what commits may (or may not) have > contributed to recent high-parallel build failures. > > Glen > A couple weeks corresponds somewhat with the parallel subdir build changes (it's about 3 weeks now). Try this patch I cooked up today for $work, and in src/lib/Makefile add .WAIT (as if it were a directory name) between ${SUBDIR_ORDERED} and the rest of the directories. -- Ian --=-/f9e1SmI0wN69NuW1Rk7 Content-Disposition: inline; filename="parallel_make_wait.diff" Content-Type: text/x-patch; name="parallel_make_wait.diff"; charset="us-ascii" Content-Transfer-Encoding: 7bit diff -r 67802e319fc6 share/mk/bsd.subdir.mk --- a/share/mk/bsd.subdir.mk Sun Apr 20 21:01:07 2014 -0600 +++ b/share/mk/bsd.subdir.mk Mon Apr 21 06:59:37 2014 -0600 @@ -4,10 +4,10 @@ # The include file <bsd.subdir.mk> contains the default targets # for building subdirectories. # -# For all of the directories listed in the variable SUBDIRS, the +# For all of the directories listed in the variable SUBDIR, the # specified directory will be visited and the target made. There is # also a default target which allows the command "make subdir" where -# subdir is any directory listed in the variable SUBDIRS. +# subdir is any directory listed in the variable SUBDIR. # # # +++ variables +++ @@ -42,7 +42,7 @@ distribute: _SUBDIR: .USE .if defined(SUBDIR) && !empty(SUBDIR) && !defined(NO_SUBDIR) - @${_+_}for entry in ${SUBDIR}; do \ + @${_+_}for entry in ${SUBDIR:N.WAIT}; do \ if test -d ${.CURDIR}/$${entry}.${MACHINE_ARCH}; then \ ${ECHODIR} "===> ${DIRPRFX}$${entry}.${MACHINE_ARCH} (${.TARGET:realinstall=install})"; \ edir=$${entry}.${MACHINE_ARCH}; \ @@ -57,7 +57,7 @@ distribute: done .endif -${SUBDIR}: .PHONY +${SUBDIR:N.WAIT}: .PHONY ${_+_}@if test -d ${.TARGET}.${MACHINE_ARCH}; then \ cd ${.CURDIR}/${.TARGET}.${MACHINE_ARCH}; \ else \ @@ -65,13 +65,18 @@ distribute: fi; \ ${MAKE} all +__wait=.WAIT .for __target in all all-man checkdpadd clean cleandepend cleandir \ depend distribute lint maninstall manlint \ obj objlink realinstall regress tags \ ${SUBDIR_TARGETS} .ifdef SUBDIR_PARALLEL +__subdir_targets= .for __dir in ${SUBDIR} -${__target}: ${__target}_subdir_${__dir} +.if ${__wait} == ${__dir} +__subdir_targets+= .WAIT +.else +__subdir_targets+= ${__target}_subdir_${__dir} ${__target}_subdir_${__dir}: .MAKE @${_+_}set -e; \ if test -d ${.CURDIR}/${__dir}.${MACHINE_ARCH}; then \ @@ -85,7 +90,9 @@ distribute: fi; \ ${MAKE} ${__target:realinstall=install} \ DIRPRFX=${DIRPRFX}$$edir/ +.endif .endfor +${__target}: ${__subdir_targets} .else ${__target}: _SUBDIR .endif --=-/f9e1SmI0wN69NuW1Rk7--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1398136182.1124.394.camel>