diff options
author | Richard Levitte <levitte@openssl.org> | 2022-11-03 15:24:52 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2022-11-04 10:11:11 +0100 |
commit | 6f6d7eeda1d62affc379b0b91c851d1a17f149d1 (patch) | |
tree | 2ea402e87ecd82a87b14b34875c566d5913d3551 /Configurations | |
parent | ec33ed712665ca65cabcd87d446e5db79a64379e (diff) |
Configurations/*.tmpl: overhaul assembler make rules.
NOTE: Not Configurations/unix-Makefile.tmpl, as that was done 4 years
ago, in commit a23f03166e0ec49ac09b3671e7ab4ba4fa57d42a.
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 https://github.com/openssl/openssl/pull/19598)
(cherry picked from commit b8d3cf0954737a9665e3b2bff25bc689a5114010)
Diffstat (limited to 'Configurations')
-rw-r--r-- | Configurations/descrip.mms.tmpl | 22 | ||||
-rw-r--r-- | Configurations/platform/BASE.pm | 5 | ||||
-rw-r--r-- | Configurations/unix-Makefile.tmpl | 3 | ||||
-rw-r--r-- | Configurations/windows-makefile.tmpl | 19 |
4 files changed, 15 insertions, 34 deletions
diff --git a/Configurations/descrip.mms.tmpl b/Configurations/descrip.mms.tmpl index b7d1df2592..d4a1792ec4 100644 --- a/Configurations/descrip.mms.tmpl +++ b/Configurations/descrip.mms.tmpl @@ -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 # @@ -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$/) { @@ -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" diff --git a/Configurations/platform/BASE.pm b/Configurations/platform/BASE.pm index 1ab4bf18e9..95c2211d83 100644 --- a/Configurations/platform/BASE.pm +++ b/Configurations/platform/BASE.pm @@ -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 @@ -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]); } diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index 110ba0687d..ebf20965b7 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -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 # diff --git a/Configurations/windows-makefile.tmpl b/Configurations/windows-makefile.tmpl index dcf83a516a..5d41af41bc 100644 --- a/Configurations/windows-makefile.tmpl +++ b/Configurations/windows-makefile.tmpl @@ -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 # @@ -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$/) { @@ -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 \$@" |