Redo the Unix source code generator
For assembler, we want the final target to be foo.s (lowercase s).
However, the build.info may have lines like this (note upper case S):
GENERATE[foo.S]=foo.pl
This indicates that foo.s (lowercase s) is still to be produced, but
that producing it will take an extra step via $(CC) -E. Therefore,
the following variants (simplified for display) can be generated:
GENERATE[foo.S]=foo.pl => foo.s: foo.pl
$(PERL) $foo.pl $@.S; \
$(CC) $(CFLAGS) -E -P $@.S > $@ && \
rm -f $@.S
GENERATE[foo.s]=foo.pl => foo.s: foo.pl
$(PERL) $foo.pl $@
GENERATE[foo.S]=foo.m4 => foo.s: foo.m4
m4 -B 8192 $foo.m4 > $@.S; \
$(CC) $(CFLAGS) -E -P $@.S > $@ && \
rm -f $@.S
GENERATE[foo.s]=foo.m4 => foo.s: foo.m4
m4 -B 8192 $foo.m4 > $@
Reviewed-by: Andy Polyakov <appro@openssl.org>
This commit is contained in:
@@ -828,38 +828,47 @@ $args{src}: $args{generator}->[0]
|
|||||||
\$(PERL) $generator > \$@
|
\$(PERL) $generator > \$@
|
||||||
EOF
|
EOF
|
||||||
} else {
|
} else {
|
||||||
if ($args{generator}->[0] =~ /\.[sS]$/) {
|
if ($args{generator}->[0] =~ /\.pl$/) {
|
||||||
return <<"EOF";
|
$generator = 'CC="$(CC)" $(PERL) '.$generator;
|
||||||
$args{src}: $args{generator}->[0]
|
|
||||||
\$(CC) \$(CFLAGS) -E \$< > \$@
|
|
||||||
EOF
|
|
||||||
} elsif ($args{generator}->[0] =~ /\.pl$/) {
|
|
||||||
return <<"EOF";
|
|
||||||
$args{src}: $args{generator}->[0]
|
|
||||||
( trap "rm -f \$@.S" INT; \\
|
|
||||||
CC="\$(CC)" \$(PERL) $generator \$@.S; \\
|
|
||||||
if grep '^#' \$@.S >/dev/null; then \\
|
|
||||||
\$(CC) -E -P \$@.S > \$@ && rm -f \$@.S; \\
|
|
||||||
else \\
|
|
||||||
mv \$@.S \$@; \\
|
|
||||||
fi )
|
|
||||||
EOF
|
|
||||||
} elsif ($args{generator}->[0] =~ /\.m4$/) {
|
} elsif ($args{generator}->[0] =~ /\.m4$/) {
|
||||||
|
$generator = 'm4 -B 8192 '.$generator.' >'
|
||||||
|
} elsif ($args{generator}->[0] =~ /\.S$/) {
|
||||||
|
$generator = undef;
|
||||||
|
} else {
|
||||||
|
die "Generator type for $args{src} unknown: $generator\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defined($generator)) {
|
||||||
|
# If the target is named foo.S in build.info, we want to
|
||||||
|
# end up generating foo.s in two steps.
|
||||||
|
if ($args{src} =~ /\.S$/) {
|
||||||
|
(my $target = $args{src}) =~ s|\.S$|.s|;
|
||||||
|
return <<"EOF";
|
||||||
|
$target: $args{generator}->[0]
|
||||||
|
( trap "rm -f \$@.S" INT; \\
|
||||||
|
$generator \$@.S; \\
|
||||||
|
\$(CC) \$(CFLAGS) -E -P \$@.S > \$@ && rm -f \$@.S )
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
# Otherwise....
|
||||||
return <<"EOF";
|
return <<"EOF";
|
||||||
$args{src}: $args{generator}->[0]
|
$args{src}: $args{generator}->[0]
|
||||||
m4 -B 8192 $generator > \$@
|
$generator \$@
|
||||||
EOF
|
EOF
|
||||||
} else {
|
|
||||||
die "Generator type for $args{src} unknown: $args{generator}\n";
|
|
||||||
}
|
}
|
||||||
|
return <<"EOF";
|
||||||
|
$args{src}: $args{generator}->[0]
|
||||||
|
\$(CC) \$(CFLAGS) -E -P \$< > \$@
|
||||||
|
EOF
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub src2obj {
|
sub src2obj {
|
||||||
my %args = @_;
|
my %args = @_;
|
||||||
my $obj = $args{obj};
|
my $obj = $args{obj};
|
||||||
my $srcs = join(" ", @{$args{srcs}});
|
my @srcs = map { (my $x = $_) =~ s/\.S$/.s/; $x } ( @{$args{srcs}} );
|
||||||
my $deps = join(" ", @{$args{srcs}}, @{$args{deps}});
|
my $srcs = join(" ", @srcs);
|
||||||
|
my $deps = join(" ", @srcs, @{$args{deps}});
|
||||||
my $incs = join("", map { " -I".$_ } @{$args{incs}});
|
my $incs = join("", map { " -I".$_ } @{$args{incs}});
|
||||||
my $ecflags = { lib => '$(SHARED_CFLAGS)',
|
my $ecflags = { lib => '$(SHARED_CFLAGS)',
|
||||||
dso => '$(DSO_CFLAGS)',
|
dso => '$(DSO_CFLAGS)',
|
||||||
|
|||||||
Reference in New Issue
Block a user