[GRASS-dev] [grass-code I][359] GRASS fails to build with make -j3
Markus Neteler
neteler at itc.it
Tue Jul 10 13:06:32 EDT 2007
Glynn Clements wrote:
>
>
> Markus Neteler wrote:
>
>> > > code I item #359, was opened at 2007-04-05 12:01
>> > > Summary: GRASS fails to build with make -j3
>
>> > However: I'm not sure whether parallel make will actually be useful
>> > with the existing Makefiles, due to the use of a shell "for" loop for
>> > building subdirectories:
>> >
>> > subdirs:
>> > @list='$(SUBDIRS)'; \
>> > for subdir in $$list; do \
>> > echo $$subdir ; \
>> > $(MAKE) -C $$subdir || echo $(CURDIR)/$$subdir >>
>> $(GRASS_HOME)/error.log; \
>> > done
>> >
>> > [From include/Make/Dir.make]
>> >
>> > To have the subdirectories built in parallel, you would need to use
>> > something like:
>> >
>> > .PHONY: subdirs $(SUBDIRS)
>> >
>> > subdirs: $(SUBDIRS)
>> >
>> > $(SUBDIRS):
>> > $(MAKE) -C $@
>>
>> I am interested to get this working but failed to get the
>> second part in include/Make/Dir.make successfully running.
>>
>> Any further hints? My Makefile knowledge is fairly limited
>> unfortunately.
>
> Note that this cannot be done for all directories. In particular, the
> inter-dependencies between libraries mean that you cannot build the
> lib/* directories in an arbitrary order. You would have to either use
> the existing "for" loop in lib/Makefile, or explicitly list the
> dependencies, e.g.:
>
> gis: datetime
> driver: gis
> pngdriver: driver gis
> psdriver: driver gis
> raster: driver gis pngdriver psdriver
> display: gis raster
>
> Using the naïve parallel version for the lib directory will result in
> severe failure, due to attempting to link other libraries against
> libgis before libgis has been generated.
>
Yes, confirmed.
> The top-level directories may as well be built sequentially, but
> presumably you would want to parallelise within the raster, vector,
> general etc directories. Parallelising lib is less important as most
> of the subdirectories contain enough files that parallelising within
> individual lib/* subdirectories would probably be sufficient.
>
> As a first attempt, I'd suggest trying the above idiom in Dir.make,
> and using the existing loop in lib/Makefile (name the target somthing
> other than "subdirs" to avoid a conflict with Dir.make). Hopefully,
> that should keep the number of errors down to manageable proportions
> (it's a safe bet that at least some of the individual module/lib
> Makefiles rely upon sequential processing).
>
Will do.
Concerning modules: candidates for sequential processing are certainly the
r.li suite (r.li.daemon comes first), raster/simwe/lib/, vector/v.lrs/lib/
vector/lidar/lidarlib/ and so forth. For these subdirectories some trick
must
be implemented to get them sequentially processed (which this could go in
parallel with other raster/vector programs).
Anyway, slowly we'll arrive.
Markus
--
View this message in context: http://www.nabble.com/-grass-code-I--359--GRASS-fails-to-build-with-make--j3-tf3530677.html#a11525174
Sent from the Grass - Dev mailing list archive at Nabble.com.
More information about the grass-dev
mailing list