Skip site navigation (1)Skip section navigation (2)
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>