Skip to content

Commit

Permalink
Configurations/*.tmpl: overhaul assembler make rules.
Browse files Browse the repository at this point in the history
NOTE: Not Configurations/unix-Makefile.tmpl, as that was done 4 years
ago, in commit a23f031.

So far assembly modules were intended to be built as .pl->.S->.{asmext}
followed by .{asmext}->.o.  This posed a problem in build_all_generated
rule if it was executed on another computer, and also turned out to be
buggy, as .S was also translated to .{asmext} on Windows and VMS.
Both issues are fixed by changing the rule sequence to .pl->.S and then
.S->.s->.o, with the added benefit that the Windows and VMS build file
templates are more in sync with unix-Makefile.tmpl and slightly simpler.

Fixes #19594

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from #19598)

(cherry picked from commit b8d3cf0)
  • Loading branch information
levitte committed Nov 4, 2022
1 parent 7343f68 commit 4aabade
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 34 deletions.
22 changes: 5 additions & 17 deletions Configurations/descrip.mms.tmpl
Expand Up @@ -984,7 +984,8 @@ EOF
$target : $gen0 $deps $mkdef
\$(PERL) $mkdef$ord_ver --type $args{intent} --ordinals $gen0 --name $ord_name "--OS" "VMS"$case_insensitive > $target
EOF
} elsif (platform->isasm($args{src})) {
} elsif (platform->isasm($args{src})
|| platform->iscppasm($args{src})) {
#
# Assembler generator
#
Expand All @@ -994,7 +995,9 @@ EOF
dso => "$dso_cflags $dso_cppflags",
bin => "$bin_cflags $bin_cppflags" } -> {$args{intent}};
my $defs = join("", map { ",".$_ } @{$args{defs}});
my $target = platform->asm($args{src});
my $target = platform->isasm($args{src})
? platform->asm($args{src})
: $args{src};

my $generator;
if ($gen0 =~ /\.pl$/) {
Expand All @@ -1007,21 +1010,6 @@ EOF
}

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$/) {
return <<"EOF";
$target : $gen0 $deps
$generator \$\@-S
\@ extradefines = "$defs"
PIPE \$(CPP) $cppflags \$\@-S | -
\$(PERL) -ne "/^#(\\s*line)?\\s*[0-9]+\\s+""/ or print" > \$\@-i
\@ DELETE/SYMBOL/LOCAL extradefines
RENAME \$\@-i \$\@
DELETE \$\@-S;
EOF
}
# Otherwise....
return <<"EOF";
$target : $gen0 $deps
\@ extradefines = "$defs"
Expand Down
5 changes: 3 additions & 2 deletions Configurations/platform/BASE.pm
Expand Up @@ -42,7 +42,7 @@ sub def { return __base($_[1], '.ld') . $_[0]->defext() }
sub obj { return __base($_[1], '.o') . $_[0]->objext() }
sub res { return __base($_[1], '.res') . $_[0]->resext() }
sub dep { return __base($_[1], '.o') . $_[0]->depext() } # <- objname
sub asm { return __base($_[1], '.S', '.s') . $_[0]->asmext() }
sub asm { return __base($_[1], '.s') . $_[0]->asmext() }

# Another set of convenience functions for standard checks of certain
# internal extensions and conversion from internal to platform specific
Expand All @@ -51,7 +51,8 @@ sub asm { return __base($_[1], '.S', '.s') . $_[0]->asmext() }
sub isdef { return $_[1] =~ m|\.ld$|; }
sub isobj { return $_[1] =~ m|\.o$|; }
sub isres { return $_[1] =~ m|\.res$|; }
sub isasm { return $_[1] =~ m|\.[Ss]$|; }
sub isasm { return $_[1] =~ m|\.s$|; }
sub iscppasm { return $_[1] =~ m|\.S$|; }
sub isstaticlib { return $_[1] =~ m|\.a$|; }
sub convertext {
if ($_[0]->isdef($_[1])) { return $_[0]->def($_[1]); }
Expand Down
3 changes: 2 additions & 1 deletion Configurations/unix-Makefile.tmpl
Expand Up @@ -1552,7 +1552,8 @@ EOF
$target: $gen0 $deps \$(SRCDIR)/util/mkdef.pl
\$(PERL) \$(SRCDIR)/util/mkdef.pl$ord_ver --type $args{intent} --ordinals $gen0 --name $ord_name --OS $mkdef_os > $target
EOF
} elsif (platform->isasm($args{src})) {
} elsif (platform->isasm($args{src})
|| platform->iscppasm($args{src})) {
#
# Assembler generator
#
Expand Down
19 changes: 5 additions & 14 deletions Configurations/windows-makefile.tmpl
Expand Up @@ -747,7 +747,8 @@ EOF
$target: $gen0 $deps $mkdef
"\$(PERL)" "$mkdef"$ord_ver --type $args{intent} --ordinals $gen0 --name $ord_name --OS windows > $target
EOF
} elsif (platform->isasm($args{src})) {
} elsif (platform->isasm($args{src})
|| platform->iscppasm($args{src})) {
#
# Assembler generator
#
Expand All @@ -757,7 +758,9 @@ EOF
dso => '$(DSO_CFLAGS) $(DSO_CPPFLAGS)',
bin => '$(BIN_CFLAGS) $(BIN_CPPFLAGS)'
} -> {$args{intent}};
my $target = platform->asm($args{src});
my $target = platform->isasm($args{src})
? platform->asm($args{src})
: $args{src};

my $generator;
if ($gen0 =~ /\.pl$/) {
Expand All @@ -770,18 +773,6 @@ EOF
}

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$/) {
return <<"EOF";
$target: "$gen0" $deps
cmd /C "set "ASM=\$(AS)" & $generator \$@.S"
\$(CPP) $incs $cppflags $defs \$@.S > \$@.i
move /Y \$@.i \$@
del /Q \$@.S
EOF
}
# Otherwise....
return <<"EOF";
$target: "$gen0" $deps
cmd /C "set "ASM=\$(AS)" & $generator \$@"
Expand Down

0 comments on commit 4aabade

Please sign in to comment.