On Thu, Dec 13, 2012 at 7:01 AM, Vadim Zhukov <persg...@gmail.com> wrote:
> 13.12.2012 4:22 пользователь "Amit Kulkarni" <amitk...@gmail.com> написал:
>
>
>>
>> >> > I thought you guys were talking about building cmake proper in
>> >> > parallel.
>> >>
>> >> We did.  cmake proper first builds a minimal bootstrap cmake, then
>> >> rebuilds itself with it, so getting cmake proper to build in parallel
>> >> *is* the same problem as getting any other cmake-using port to build
>> >> in parallel.
>> >>
>> >> > Anyways, there are TWO distinct points:
>> >> > - problems with make -j.
>> >> > - cmake not writing correct makefiles for parallel building without
>> >> > gmake.
>> >>
>> >> The problem isn't that make -j fails with cmake.  The build succeeds
>> >> just fine.  The problem is that with our make there is no parallelism.
>> >> It's as if the -j was ignored.
>> >
>> > It's likely that cmake decides (arbitrarily) things don't work without
>> > gmake.
>> > Since there is some recursive makefiles involved, it probably strips the
>> > extra stuff early on...
>>
>> i could not see any gmake specific code when i grepped in the cmake
>> codebase.
>>
>> i can confirm what naddy@ sees, when i cd ${WRKBUILD} && make -j4, i
>> see only 1 core being used. but if i use gmake -j4 all cores are used.
>> our make is ignoring -j but what is confusing is that: just before
>> building, in bootstrapping with --parallel, it uses -j successfully.
>
> The problem was already made clear: GNU Make propagates "-j" to subcalls,
> our - does not. The latter is by design, IIRC (if I'm wrong here, then,
> probably, espie@ will use his cluestick to teach me not to write about
> things I understand badly), to avoid extra subprocesses being run: suppose
> that "make -j 4" runs four "make -j 3", then each runs three "make -j 2"...
> That's GNU Make's way, IIRC, and it's broken by design. Unfortunately, three
> is no easy way to fix this. The best option I see (and it's probably wrong)
> is to create socket in /tmp on the initial make(1) invocation, and pass its
> path to subprocesses through environment variable. Through this socket, each
> sub-make could request the right to start one or more jobs, and wait until
> "master" make process answers. But I'm not ready to prepare any patches
> implementing such functionality now: too much time is being spent on fixing
> KDE breakage (due to upstream lazyness, my own stupidity and a lots of
> inaccuracy from both sides).

Btw, I still think it's not so bad to use gmake *only* for cmake (not
for all the cmake-based ports!) to speed up dpb builds...

Reply via email to