Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 331011 - dev-cpp/tbb fails to build
Summary: dev-cpp/tbb fails to build
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: New packages (show other bugs)
Hardware: All Linux
: High normal (vote)
Assignee: Sébastien Fabbro (RETIRED)
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-08-03 10:26 UTC by Diego Elio Pettenò (RETIRED)
Modified: 2010-11-19 06:11 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments
Build log (tbb-3.0.035:20100802-211840.log,13.65 KB, text/plain)
2010-08-03 10:27 UTC, Diego Elio Pettenò (RETIRED)
Details
Patch to tbb-3.0.056 to address parallelism issue (and others) (tbb-3.0.056.ebuild.patch,1.79 KB, patch)
2010-11-06 21:04 UTC, Kevin Pyle
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Diego Elio Pettenò (RETIRED) gentoo-dev 2010-08-03 10:26:26 UTC
Portage 2.1.8.3 (default/linux/x86/10.0, gcc-4.5.0-asneeded, glibc-2.11.2-r0, 2.6.35+ i686)
=================================================================
System uname: Linux-2.6.35+-i686-Quad-Core_AMD_Opteron-tm-_Processor_2350-with-gentoo-2.0.1
Timestamp of tree: Tue, 03 Aug 2010 09:00:19 +0000
distcc 3.1 i686-pc-linux-gnu [disabled]
ccache version 2.4 [disabled]
app-shells/bash:     4.1_p7
dev-java/java-config: 2.1.11
dev-lang/python:     2.7, 3.1.2-r4
dev-util/ccache:     2.4-r8
dev-util/cmake:      2.8.1-r2
sys-apps/baselayout: 2.0.1
sys-apps/openrc:     0.6.1-r1
sys-apps/sandbox:    2.2
sys-devel/autoconf:  2.13, 2.65-r1
sys-devel/automake:  1.4_p6-r1, 1.5-r1, 1.6.3-r1, 1.7.9-r2, 1.8.5-r4, 1.9.6-r3, 1.10.3, 1.11.1
sys-devel/binutils:  2.20.1-r1
sys-devel/gcc:       4.5.0
sys-devel/gcc-config: 1.4.1
sys-devel/libtool:   2.2.10
virtual/os-headers:  2.6.34
ACCEPT_KEYWORDS="x86 ~x86"
ACCEPT_LICENSE="*"
CBUILD="i686-pc-linux-gnu"
CFLAGS="-O2 -pipe"
CHOST="i686-pc-linux-gnu"
CONFIG_PROTECT="/etc /opt/openjms/config /usr/share/X11/xkb /usr/share/bufrtables /usr/share/config /usr/share/qpsmtpd/plugins /var/bind /var/lib/hsqldb /var/phxd /var/qmail/alias /var/qmail/control /var/vpopmail/etc /var/yp/Makefile"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/ /etc/eselect/postgresql /etc/fonts/fonts.conf /etc/games/angband/edit/ /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/splash /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c"
CXXFLAGS="-O2 -pipe"
DISTDIR="/var/cache/distfiles"
FEATURES="assume-digests distlocks fixpackages news parallel-fetch protect-owned sandbox sfperms split-log strict test test-fail-continue unmerge-orphans userfetch userpriv usersandbox"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://gentoo.wheel.sk/"
LANG="en_US.utf8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
MAKEOPTS="-j14"
PKGDIR="/var/spool/portage/packages"
PORTAGE_COMPRESS=""
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/var/cache/portage/tree-tinderbox"
SYNC="rsync://rsync.gentoo.org/gentoo-portage"
USE="acl berkdb bzip2 cli cracklib crypt cups cxx dri fortran gdbm gpm iconv ipv6 java5 java6 modules mudflap ncurses nls nostatic nptl nptlonly openmp pam pcre perl postgres pppd python qt3support readline reflection ruby session spl ssl sysfs tcpd unicode vhosts x86 xorg zlib" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias auth_digest cgi" ELIBC="glibc" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" RUBY_TARGETS="ruby18 jruby ruby19 ree18" USERLAND="GNU" XTABLES_ADDONS="quota2 lines 1-44
Comment 1 Diego Elio Pettenò (RETIRED) gentoo-dev 2010-08-03 10:27:01 UTC
Created attachment 241227 [details]
Build log
Comment 2 Sébastien Fabbro (RETIRED) gentoo-dev 2010-08-04 22:25:39 UTC
not reproducible on amd64 with similar profile.
to be re-checked with newer 3.0.056
Comment 3 Kevin Pyle 2010-08-05 03:30:54 UTC
(In reply to comment #2)
> not reproducible on amd64 with similar profile.
> to be re-checked with newer 3.0.056

What MAKEOPTS did you use and how many CPU cores were available to run the jobs?  The build log shows that version_string.tmp is generated by running a shipped shell script, and occurs in two different places.  The upstream Makefile attempted to use the .NOTPARALLEL pseudo-target to prevent parallelism so that they would not need to fix the build system to properly handle version_string.tmp.  However, Gentoo begins building in a subdirectory where that pseudo-target is not mentioned, thus bypassing the parallelism blocker.  You can see at the top of the build log that make reacts to the dual goals of tbb_release and tbbmalloc_release by spawning two sub-make processes.  Each of those subprocesses independently tries to generate version_string.tmp, leading to file truncation and compilation failure.
Comment 4 Sébastien Fabbro (RETIRED) gentoo-dev 2010-08-10 20:35:05 UTC
(In reply to comment #3)

> What MAKEOPTS did you use and how many CPU cores were available to run the

-j32 with 32 cores.

> jobs?  The build log shows that version_string.tmp is generated by running a
> shipped shell script, and occurs in two different places.  The upstream
> Makefile attempted to use the .NOTPARALLEL pseudo-target to prevent parallelism
> so that they would not need to fix the build system to properly handle
> version_string.tmp.  However, Gentoo begins building in a subdirectory where
> that pseudo-target is not mentioned, thus bypassing the parallelism blocker. 
> You can see at the top of the build log that make reacts to the dual goals of
> tbb_release and tbbmalloc_release by spawning two sub-make processes.  Each of
> those subprocesses independently tries to generate version_string.tmp, leading
> to file truncation and compilation failure.

If you do compile it from one directory up, can you still reproduce the compilation failure?



Comment 5 Sébastien Fabbro (RETIRED) gentoo-dev 2010-11-05 19:57:22 UTC
Still can't reproduce with the most recent version. Building it with the upstream makefile would require much more work for us in order to split the debug, tests and examples which are not needed during the src_compile phase.
Comment 6 Kevin Pyle 2010-11-06 21:04:38 UTC
Created attachment 253429 [details, diff]
Patch to tbb-3.0.056 to address parallelism issue (and others)

(In reply to comment #4)
> -j32 with 32 cores.
> If you do compile it from one directory up, can you still reproduce the
> compilation failure?

I have nowhere near that much concurrency, so I never reproduced the problem.  Compiling from one level up would likely trigger the .NOTPARALLEL target and suppress the failure, but it would be much nicer to fix the Makefile so that it is properly parallel safe.

The attached patch makes the following changes:
- Drop unnecessary insertion of user CXXFLAGS.  As shown in Diego's output (and confirmed locally when testing the patch), upstream appends CXXFLAGS to CPLUS_FLAGS.  The change that was made by the ebuild resulted in a second copy of the flags being included.
- Rewrite gcc/g++ to use the qualified compiler name, for better cross-compilation support.
- Remove upstream's forced -march=pentium4 when arch=ia32.
- Change a strange abuse of $(shell) so that the command is printed when it is run.
- Fix parallel build race by modifying the mkdir_debug and mkdir_release targets to create their respective version_string.tmp before completing, so that the parallel step finds the file exists and does not race.
- Rewrite the src_compile use of emake in the style shown in <http://blog.flameeyes.eu/2010/10/18/for-a-parallel-world-ebuild-writing-tip-faster-optional-builds>.  This allows make to start building the debug build as soon as job slots become available, rather than requiring the release build to complete before debug starts.  Compilation of the debug build is still guarded by USE flags, as it was before.
Comment 7 Sébastien Fabbro (RETIRED) gentoo-dev 2010-11-19 06:11:23 UTC
Should be fixed in cvs now.
Thanks for your input!