@newlist;
}
+ # dogenerate is responsible for producing all the recipes that build
+ # generated source files. It recurses in case a dependency is also a
+ # generated source file.
sub dogenerate {
my $src = shift;
return "" if $cache{$src};
+ my $obj = shift;
+ my $bin = shift;
my %opts = @_;
if ($unified_info{generate}->{$src}) {
$OUT .= generatesrc(src => $src,
generator => $unified_info{generate}->{$src},
deps => $unified_info{depends}->{$src},
+ incs => [ @{$unified_info{includes}->{$bin}},
+ @{$unified_info{includes}->{$obj}} ],
%opts);
foreach (@{$unified_info{depends}->{$src}}) {
- dogenerate($_, %opts);
+ dogenerate($_, $obj, $bin, %opts);
}
}
$cache{$src} = 1;
%opts);
foreach ((@{$unified_info{sources}->{$obj}},
@{$unified_info{depends}->{$obj}})) {
- dogenerate($_, %opts);
+ dogenerate($_, $obj, $bin, %opts);
}
}
$cache{$obj} = 1;
sub generatesrc {
my %args = @_;
my $generator = join(" ", @{$args{generator}});
+ my $incs = join("", map { " -I".$_ } @{$args{incs}});
if ($args{src} !~ /\.[sS]$/) {
return <<"EOF";
$target: $args{generator}->[0]
( trap "rm -f \$@.S" INT; \\
$generator \$@.S; \\
- \$(CC) \$(CFLAGS) -E -P \$@.S > \$@ && rm -f \$@.S )
+ \$(CC) \$(CFLAGS) $incs -E -P \$@.S > \$@ && rm -f \$@.S )
EOF
}
# Otherwise....
}
return <<"EOF";
$args{src}: $args{generator}->[0]
- \$(CC) \$(CFLAGS) -E -P \$< > \$@
+ \$(CC) \$(CFLAGS) $incs -E -P \$< > \$@
EOF
}
}
my %args = @_;
(my $target = $args{src}) =~ s/\.[sS]$/.asm/;
my $generator = join(" ", @{$args{generator}});
+ my $incs = join("", map { " /I ".$_ } @{$args{incs}});
if ($target !~ /\.asm$/) {
return <<"EOF";
set ASM=\$(AS)
set CC=\$(CC)
$generator \$@.S
- \$(CC) \$(CFLAGS) /EP /C \$@.S > \$@
+ \$(CC) \$(CFLAGS) $incs /EP /C \$@.S > \$@
del /Q \$@.S
EOF
}
}
return <<"EOF";
$target: $args{generator}->[0]
- \$(CC) \$(CFLAGS) /EP /C \$< > \$@
+ \$(CC) \$(CFLAGS) $incs /EP /C \$< > \$@
EOF
}
}