bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Error in processing of :: targets


From: reid . madsen
Subject: Error in processing of :: targets
Date: Mon, 13 Jun 2005 18:31:50 -0700

Gnumake maintainers,
 
I've run into a functional difference between the standard unix make and GNUmake (3.80) involving how the :: rules are processed.
 
In the standard unix make (Solaris), the :: targets ( i.e., all::) are process in the order they are found in the Makefile serially, regardless of whether parallelism is used (i.e., -jN, where N is > 1).
 
In GNUmake (3.80), the when -j1 is used, the "::" targets are executed serially.  When -jN is used the "::" targets are executed in parallel.
 
Consider the following -- from an IMAKE generated Makefile:
 
all:: all.prologue
all:: all.serial all.parallel
all:: ; @echo $@; sleep 1; echo address@hidden
all:: all.epilogue
 
all.epilogue all.prologue:: ; @echo $@; sleep 2; echo address@hidden
all.serial:: ; @echo address@hidden; sleep 1; echo address@hidden
all.serial:: ; @echo address@hidden; sleep 1; echo address@hidden
all.parallel: aaa bbb ccc
aaa bbb ccc: ; @echo $@; sleep 1; echo address@hidden
 
In a non-parallel make (i.e. -j1) in both Unix and Gnu make, the following is the result:
 
all.prologue
all.prologue-done
all.serial-1
all.serial-1-done
all.serial-2
all.serial-2-done
aaa
aaa-done
bbb
bbb-done
ccc
ccc-done
all
all-done
all.epilogue
all.epilogue-done
 
When run in parallel using Unix make (i.e., -j12), the following occurs:
 
all.prologue
all.prologue-done
all.serial-1
aaa
bbb
ccc
all.serial-1-done
aaa-done
bbb-done
ccc-done
all.serial-2
all.serial-2-done
all
all-done
all-epilogue
all-epilogue-done
 
When run in parallel using GNUmake (i.e., -j12), the following occurs:
 
all.prologue
all.serial-1
aaa
bbb
ccc
all.epilogue
all.prologue-done
all.serial-1-done
aaa-done
all.serial-2
all.epilogue-done
bbb-done
ccc-done
all.serial-2-done
all
all-done
 
It appears that all the :: targets that exist in the file are started at the same time and not executed sequentially as is done for standard Unix make.  The only exception to this is the all.serial target which has multiple command, which are executed in order... As a result of this I cannot port our IMAKE based make utility to use GNUmake.
 
The intent of the above targets is as follows:
 
+ all.prologue -- things which should be performed before any other all* targets are made
                        For example, creating, or removing a directory.
+ all.epilogue -- things which should occur after all* targets have completed -- for example sending email.
+ a.serial -- rules that MUST execute serially
+ a.parallel -- rules that may execute in parallel
 
The following defines the order of execution:
 
all: all.prologue                   
all: all.serial all.parallel
[ multiple all, all-serial, and all.parallel targets]
all: all.epilogue
 
I'm interested in your views on this problem.  I think it's a bug because GNUmake is clearly out of sync with standard make on the order in which :: targets are evaluated in a parallel build environment.
 
Reid Madsen
Principal Engineer - Architecture Group
Tektronix, Inc.
214-912-5152
 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]