Mail Archives: djgpp/2001/03/17/02:14:49
> From: "Thompson, Dan" <DThompso AT midwaygames DOT com>
> Date: Fri, 16 Mar 2001 15:03:12 -0600
>
> The project that is being configured to build with GNU-make is a decent-size
> directory tree. The build-tree has been set up to fully recurse from any
> location in the tree. Herein lies one of the major inconsistencies: when
> doing a build from the root of the tree (or any sufficiently large branch),
> the results are unpredictable. For reasons unknown, I have witnessed builds
> that complete successfully and builds that fail midway through, complaining
> of being unable to write to memory, e.g. 'The instruction at "0x0f048d8a"
> referenced memory at "0x01340ffc". The memory could not be "written".' The
> failures occur at various places in builds done from the same location.
This is a known problem with W2K: NTVDM, the Windows DOS emulator,
crashes when more than two levels of nested DJGPP programs are run.
The crashes are indeed somewhat random; what you see sounds like a
relatively mild form of the problem.
Unfortunately, there's no known work-around.
> $(TRG_AGRUNT): $(OBJ_AGRUNT)
> asl $(OPT_AS_LINK) -o $@ $^
>
> which produces the command-line (emphasis added)
>
> asl -v -o agrunt.asd stiffarm.aso lateral.aso hits.aso qb.aso idle.aso
> run.aso lineup.aso getup.aso tackles.aso catches.aso throw.aso taunts.aso
> mills.aso victory.aso huddle.aso blocks.aso kicks.aso reactions.aso
> hurdles.aso
>
> which then aborts the build with a link error.
I'm guessing that asl is not a DJGPP program. If so, you are probably
hitting the DOS 126-character limit on command line length. DJGPP
programs have a way of passing long commands between them, but that
doesn't work if you invoke non-DJGPP programs.
You might be better off if you find a Windows port of GNU Make. That
would solve both the command-line length problems and the NTVDM
crashes.
> Also, the 'clean' rule process
>
> $(foreach VAR,$(TRGS_CLN),@if exist $(VAR) $(RM) $(VAR)$(NEWLINE))
>
> will not remove 'reactions.aso', though the 'if' is executed against this
> file. And again, if entered as a command, this 'if' will remove the file.
> When checked with a -n, these problem lines are correctly displayed, but it
> seems that the filename is being truncated to 8.3 (but not with the implicit
> build rule).
Please post the output of this rule under -n, and the list of the
files in $(TRGS_CLN).
> TRGS := ball.$(RTD)
>
> OBJS := $(TRGS:.$(RTD)=.$(TDL))
>
> SRCS := $(TEXS)
>
> .PRECIOUS: $(OBJS)
>
> #---------------------------------------
> # Make specified targets.
> #---------------------------------------
> all: $(TRGS)
> @echo $(MSG_MAKING) $(MSG_DIR) $(MSG_COMPLETE)
>
> %.$(RTD): %.$(TDL) $(SRCS)
> @$(GNTEXTDT) $<
>
> %.$(TDL): $(SRCS)
> @$(GENTLOAD) $*
>
> causes make to error-out with "make.exe: *** No rule to make target
> `ball.RTD', needed by `all'. Stop." Looks to me like the rule is right
> there, and this *exact* set of rules works fine in other makefiles.
Invoke Make with the -d switch ("make -d all") and look at the output:
it might give a clue about what's happening.
One possible gotcha is that Make is case-sensitive about file names,
so ball.RTD and ball.rtd are not the same file for it.
- Raw text -