Make fipscanisteronly build only required files.

This commit is contained in:
Dr. Stephen Henson 2011-02-21 14:07:15 +00:00
parent ab8a4e54db
commit eead69f5ed
4 changed files with 45 additions and 3 deletions

View File

@ -4,6 +4,10 @@
Changes between 1.0.1 and 1.1.0 [xx XXX xxxx] Changes between 1.0.1 and 1.1.0 [xx XXX xxxx]
*) Modify fipscanisteronly build option to only build the necessary object
files by filtering FIPS_EX_OBJ through a perl script in crypto/Makefile.
[Steve Henson]
*) Add experimental option FIPSSYMS to give all symbols in *) Add experimental option FIPSSYMS to give all symbols in
fipscanister.o and FIPS or fips prefix. This will avoid fipscanister.o and FIPS or fips prefix. This will avoid
conflicts with future versions of OpenSSL. Add perl script conflicts with future versions of OpenSSL. Add perl script

View File

@ -147,8 +147,8 @@ SHLIBDIRS= crypto
# dirs in crypto to build # dirs in crypto to build
SDIRS= \ SDIRS= \
sha hmac des aes modes \ sha hmac des aes modes \
bn ec rsa dsa ecdsa dh ecdh \ bn ec rsa dsa ecdsa dh \
buffer rand evp cmac buffer rand evp # ecdh cmac
# keep in mind that the above list is adjusted by ./Configure # keep in mind that the above list is adjusted by ./Configure
# according to no-xxx arguments... # according to no-xxx arguments...
@ -372,7 +372,7 @@ build_crypto:
else \ else \
AS='$(CC) -c' ; \ AS='$(CC) -c' ; \
fi ; export AS ; \ fi ; export AS ; \
dir=crypto; target=all; $(BUILD_ONE_CMD) dir=crypto; target=fips; $(BUILD_ONE_CMD)
build_ssl: build_ssl:
@dir=ssl; target=all; $(BUILD_ONE_CMD) @dir=ssl; target=all; $(BUILD_ONE_CMD)
build_engines: build_engines:

View File

@ -50,6 +50,13 @@ top:
all: shared all: shared
fips: cryptlib.o thr_id.o uid.o $(CPUID_OBJ)
[ -n "$(SDIRS)" ] && for i in $(SDIRS) ; do \
( obj=`$(PERL) $(TOP)/util/fipsobj.pl $$i` && \
cd $$i && echo "making fips in $(DIR)/$$i..." && \
$(MAKE) -e TOP=../.. DIR=$$i INCLUDES='$(INCLUDES)' $$obj ) || exit 1; \
done;
buildinf.h: ../Makefile buildinf.h: ../Makefile
( echo "#ifndef MK1MF_BUILD"; \ ( echo "#ifndef MK1MF_BUILD"; \
echo ' /* auto-generated by crypto/Makefile for crypto/cversion.c */'; \ echo ' /* auto-generated by crypto/Makefile for crypto/cversion.c */'; \

31
util/fipsobj.pl Normal file
View File

@ -0,0 +1,31 @@
# Filter script. Take all FIPS object files from the environment
# and print out only those in the given directory.
my $dir = $ARGV[0];
my $asmobjs = "";
# Add any needed assembly languagr files.
$asmobjs = $ENV{AES_ENC} if $dir eq "aes";
$asmobjs = $ENV{BN_ASM} if $dir eq "bn";
$asmobjs = $ENV{DES_ENC} if $dir eq "des";
$asmobjs = $ENV{SHA1_ASM_OBJ} if $dir eq "sha";
$asmobjs = $ENV{MODES_ASM_OBJ} if $dir eq "modes";
# Get all other FIPS object files, filtered by directory.
my @objlist = grep {/crypto\/$dir\//} split / /, $ENV{FIPS_EX_OBJ};
push @objlist, split / /, $asmobjs;
# Fatal error if no matches
die "No objects in $dir!" if (scalar @objlist == 0);
# Output all matches removing pathname.
foreach (@objlist)
{
s|../crypto/$dir/||;
print "$_\n";
}