diff options
author | Richard Levitte <levitte@openssl.org> | 2016-02-19 22:02:41 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2016-02-20 16:51:31 +0100 |
commit | 45502bfe19fb03c9f343b03fa6434ee0bece8428 (patch) | |
tree | aee03c1d32efbaa7227580971da0f628359016f2 | |
parent | 011b967508342a5c940a0c75193f742c0b13bdc4 (diff) |
Always build library object files with shared library cflags
This takes us away from the idea that we know exactly how our static
libraries are going to get used. Instead, we make them available to
build shareable things with, be it other shared libraries or DSOs.
On the other hand, we also have greater control of when the shared
library cflags. They will never be used with object files meant got
binaries, such as apps/openssl or test/test*.
With unified, we take this a bit further and prepare for having to
deal with extra cflags specifically to be used with DSOs (dynamic
engines), libraries and binaries (applications).
Reviewed-by: Rich Salz <rsalz@openssl.org>
65 files changed, 91 insertions, 83 deletions
diff --git a/Configurations/README b/Configurations/README index 58c4d96c6c..454c8f375e 100644 --- a/Configurations/README +++ b/Configurations/README @@ -488,7 +488,8 @@ They are all expected to return a string with the lines they produce. src2obj(obj => "PATH/TO/objectfile", srcs => [ "PATH/TO/sourcefile", ... ], deps => [ "dep1", ... ], - incs => [ "INCL/PATH", ... ]); + incs => [ "INCL/PATH", ... ] + intent => one of "lib", "dso", "bin" ); 'obj' has the intended object file *without* extension, src2obj() is expected to add that. @@ -496,7 +497,9 @@ They are all expected to return a string with the lines they produce. object file, with the first item being the source file that directly corresponds to the object file. 'deps' is a list of explicit dependencies. 'incs' - is a list of include file directories. + is a list of include file directories. Finally, + 'intent' indicates what this object file is going + to be used for. obj2lib - function that produces build file lines to build a static library file ("libfoo.a" in Unix terms) from diff --git a/Configurations/README.design b/Configurations/README.design index 80839faa6d..362b967f17 100644 --- a/Configurations/README.design +++ b/Configurations/README.design @@ -392,15 +392,18 @@ etc. src2obj(obj => "PATH/TO/objectfile", srcs => [ "PATH/TO/sourcefile", ... ], deps => [ "dep1", ... ], - incs => [ "INCL/PATH", ... ]); + incs => [ "INCL/PATH", ... ] + intent => one of "lib", "dso", "bin" ); 'obj' has the intended object file *without* extension, src2obj() is expected to add that. 'srcs' has the list of source files to build the object file, with the first item being the source file that directly corresponds to the object file. - 'deps' is a list of dependencies. 'incs' is a list - of include file directories. + 'deps' is a list of explicit dependencies. 'incs' + is a list of include file directories. Finally, + 'intent' indicates what this object file is going + to be used for. obj2lib - function that produces build file lines to build a static library file ("libfoo.a" in Unix terms) from diff --git a/Configurations/common.tmpl b/Configurations/common.tmpl index f0860dd781..196441c267 100644 --- a/Configurations/common.tmpl +++ b/Configurations/common.tmpl @@ -37,12 +37,14 @@ my $obj = shift; (my $obj_no_o = $obj) =~ s|\.o$||; my $bin = shift; + my %opts = @_; if (@{$unified_info{sources}->{$obj}}) { $OUT .= src2obj(obj => $obj_no_o, srcs => $unified_info{sources}->{$obj}, deps => [ reducedepends(resolvedepends($obj)) ], incs => [ @{$unified_info{includes}->{$bin}}, - @{$unified_info{includes}->{$obj}} ]); + @{$unified_info{includes}->{$obj}} ], + %opts); } } @@ -78,7 +80,7 @@ objs => [ map { (my $x = $_) =~ s|\.o$||; $x } @{$unified_info{sources}->{$lib}} ], deps => [ resolvedepends($lib) ]); - map { doobj($_, $lib, intent => "lib") } @{$unified_info{sources}->{$lib}}; + map { doobj($_, $lib, intent => "dso") } @{$unified_info{sources}->{$lib}}; } # dobin is responsible for building programs. It will call obj2bin, diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index 9dc6d7dfe8..61ee7a6ab0 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -43,7 +43,6 @@ # given libname with the simple shared extension (possible SO version # removed). This differs from shlib_simple() by being unconditional. sub dso { - return () if $config{no_shared}; my $engine = shift; return $engine . '$(DSO_EXT)'; @@ -149,6 +148,7 @@ CFLAGS_Q={- $cflags2 =~ s|([\\"])|\\$1|g; $cflags2 -} {- $config{cflags} -} LDFLAGS= {- $config{lflags} -} PLIB_LDFLAGS= {- $config{plib_lflags} -} EX_LIBS= {- $config{ex_libs} -} +SHARED_CFLAGS={- $target{shared_cflag} || "" -} SHARED_LDFLAGS={- $target{shared_ldflag} # Unlike other OSes (like Solaris, Linux, Tru64, # IRIX) BSD run-time linkers (tested OpenBSD, NetBSD @@ -164,6 +164,8 @@ SHARED_LDFLAGS={- $target{shared_ldflag} . ($config{target} =~ m|^BSD-| && $prefix !~ m|^/usr/.*$| ? " -Wl,-rpath,\$\$(LIBRPATH)" : "") -} SHARED_RCFLAGS={- $target{shared_rcflag} -} +DSO_CFLAGS={- $target{shared_cflag} || "" -} +BIN_CFLAGS={- "" -} PERL={- $config{perl} -} @@ -823,25 +825,28 @@ configdata.pm: {- $config{build_file_template} -} $(SRCDIR)/Configure $(SRCDIR)/ my $obj = $args{obj}; my $srcs = join(" ", @{$args{srcs}}); my $deps = join(" ", @{$args{srcs}}, @{$args{deps}}); - my $incs = join(" ", map { " -I".$_ } @{$args{incs}}); + my $incs = join("", map { " -I".$_ } @{$args{incs}}); + my $ecflags = { lib => '$(SHARED_CFLAGS)', + dso => '$(DSO_CFLAGS)', + bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; my $makedepprog = $config{makedepprog}; if ($makedepprog eq "makedepend") { return <<"EOF"; $obj\$(DEP_EXT): $deps rm -f \$\@.tmp; touch \$\@.tmp - \$(MAKEDEPEND) -f\$\@.tmp -o"|$obj" -- \$(CFLAGS)$incs -- $srcs \\ + \$(MAKEDEPEND) -f\$\@.tmp -o"|$obj" -- \$(CFLAGS) $ecflags$incs -- $srcs \\ 2>/dev/null sed -e 's/^.*|//' -e 's/ \\/\\(\\\\.\\|[^ ]\\)*//g' -e '/: *\$\$/d' -e '/^\\(#.*\\| *\\)\$\$/d' \$\@.tmp > \$\@ rm \$\@.tmp $obj\$(OBJ_EXT): $obj\$(DEP_EXT) - \$(CC) \$(CFLAGS)$incs -c -o \$\@ $srcs + \$(CC) \$(CFLAGS) $ecflags$incs -c -o \$\@ $srcs EOF } return <<"EOF"; $obj\$(DEP_EXT): $deps - \$(CC) \$(CFLAGS)$incs -MM -MF \$\@ -MQ $obj $srcs + \$(CC) \$(CFLAGS) $ecflags$incs -MM -MF \$\@ -MQ $obj $srcs $obj\$(OBJ_EXT): $obj\$(DEP_EXT) - \$(CC) \$(CFLAGS)$incs -c -o \$\@ $srcs + \$(CC) \$(CFLAGS) $ecflags$incs -c -o \$\@ $srcs EOF } # On Unix, we build shlibs from static libs, so we're ignoring the @@ -983,14 +983,6 @@ if ($target{shared_target} eq "") $no_shared_warn = 1 if !$config{no_shared} && !$config{fips}; $config{no_shared} = 1; } -if (!$config{no_shared}) - { - if ($target{shared_cflag} ne "") - { - push @{$config{defines}}, "OPENSSL_PIC"; - $config{cflags} = "$target{shared_cflag} $config{cflags}"; - } - } if ($builder ne "mk1mf") { diff --git a/Makefile.in b/Makefile.in index a7cd7570a9..c269a6d20a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -194,6 +194,7 @@ LIBS= libcrypto.a libssl.a SHARED_CRYPTO=libcrypto$(SHLIB_EXT) SHARED_SSL=libssl$(SHLIB_EXT) SHARED_LIBS={- '$(SHARED_CRYPTO) $(SHARED_SSL)' if (!$config{no_shared}) -} +SHARED_CFLAG={- $target{shared_cflag} -} SHARED_LDFLAG={- $target{shared_ldflag} # Unlike other OSes (like Solaris, Linux, Tru64, # IRIX) BSD run-time linkers (tested OpenBSD, NetBSD @@ -249,9 +250,10 @@ CLEARENV= TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS} \ # same language for uniform treatment. BUILDENV= LC_ALL=C PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)'\ CC='$(CC)' CFLAG='$(CFLAG)' CFLAG_Q='$(CFLAG_Q)' \ + SHARED_CFLAG='$(SHARED_CFLAG)' \ AS='$(CC)' ASFLAG='$(CFLAG) -c' \ AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)' \ - CROSS_COMPILE='$(CROSS_COMPILE)' \ + CROSS_COMPILE='$(CROSS_COMPILE)' \ PERL='$(PERL)' \ SDIRS='$(SDIRS)' LIBRPATH='$(INSTALLTOP)/$(LIBDIR)' \ DESTDIR='$(DESTDIR)' \ diff --git a/crypto/Makefile.in b/crypto/Makefile.in index d04f75c3bc..c8184e5a5c 100644 --- a/crypto/Makefile.in +++ b/crypto/Makefile.in @@ -21,7 +21,7 @@ RECURSIVE_MAKE= [ -n "$(SDIRS)" ] && for i in $(SDIRS) ; do \ PLIB_LDFLAG= EX_LIBS= -CFLAGS= $(INCLUDE) $(CFLAG) +CFLAGS= $(INCLUDE) $(CFLAG) $(SHARED_CFLAG) ASFLAGS= $(INCLUDE) $(ASFLAG) AFLAGS=$(ASFLAGS) CPUID_OBJ=mem_clr.o diff --git a/crypto/aes/Makefile.in b/crypto/aes/Makefile.in index 98bfb0a61a..938ad3c404 100644 --- a/crypto/aes/Makefile.in +++ b/crypto/aes/Makefile.in @@ -13,7 +13,7 @@ AR= ar r AES_ENC=aes_core.o aes_cbc.o -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) ASFLAGS= $(INCLUDES) $(ASFLAG) AFLAGS= $(ASFLAGS) diff --git a/crypto/asn1/Makefile.in b/crypto/asn1/Makefile.in index b6c44e7dc7..86f805bc6f 100644 --- a/crypto/asn1/Makefile.in +++ b/crypto/asn1/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile README diff --git a/crypto/async/Makefile.in b/crypto/async/Makefile.in index 6e9f4653f6..277aa9ec32 100644 --- a/crypto/async/Makefile.in +++ b/crypto/async/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile TEST= diff --git a/crypto/bf/Makefile.in b/crypto/bf/Makefile.in index 14e2fe2229..ee5c259923 100644 --- a/crypto/bf/Makefile.in +++ b/crypto/bf/Makefile.in @@ -13,7 +13,7 @@ AR= ar r BF_ENC= bf_enc.o -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) ASFLAGS= $(INCLUDES) $(ASFLAG) AFLAGS= $(ASFLAGS) diff --git a/crypto/bio/Makefile.in b/crypto/bio/Makefile.in index ff35cfb214..2bf8601ee8 100644 --- a/crypto/bio/Makefile.in +++ b/crypto/bio/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile diff --git a/crypto/bn/Makefile.in b/crypto/bn/Makefile.in index 7574585cb7..b14301aa0e 100644 --- a/crypto/bn/Makefile.in +++ b/crypto/bn/Makefile.in @@ -13,7 +13,7 @@ AR= ar r BN_ASM= bn_asm.o -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) ASFLAGS= $(INCLUDES) $(ASFLAG) AFLAGS= $(ASFLAGS) diff --git a/crypto/buffer/Makefile.in b/crypto/buffer/Makefile.in index 79eeac1540..09b3488f04 100644 --- a/crypto/buffer/Makefile.in +++ b/crypto/buffer/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile diff --git a/crypto/camellia/Makefile.in b/crypto/camellia/Makefile.in index ac3ffdaa17..10c5a75341 100644 --- a/crypto/camellia/Makefile.in +++ b/crypto/camellia/Makefile.in @@ -13,7 +13,7 @@ AR= ar r CMLL_ENC= camellia.o cmll_misc.o cmll_cbc.o -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) ASFLAGS= $(INCLUDES) $(ASFLAG) AFLAGS= $(ASFLAGS) diff --git a/crypto/cast/Makefile.in b/crypto/cast/Makefile.in index cd62408f35..06f65e21aa 100644 --- a/crypto/cast/Makefile.in +++ b/crypto/cast/Makefile.in @@ -13,7 +13,7 @@ AR= ar r CAST_ENC=c_enc.o -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) ASFLAGS= $(INCLUDES) $(ASFLAG) AFLAGS= $(ASFLAGS) diff --git a/crypto/chacha/Makefile.in b/crypto/chacha/Makefile.in index de80ba4fd0..33e41d5940 100644 --- a/crypto/chacha/Makefile.in +++ b/crypto/chacha/Makefile.in @@ -12,7 +12,7 @@ AR= ar r CHACHA_ENC=chacha_enc.o -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) ASFLAGS= $(INCLUDES) $(ASFLAG) AFLAGS= $(ASFLAGS) diff --git a/crypto/cmac/Makefile.in b/crypto/cmac/Makefile.in index 44888657c8..5abc139068 100644 --- a/crypto/cmac/Makefile.in +++ b/crypto/cmac/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile diff --git a/crypto/cms/Makefile.in b/crypto/cms/Makefile.in index 5e5db74ccc..cf074eaa81 100644 --- a/crypto/cms/Makefile.in +++ b/crypto/cms/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile diff --git a/crypto/comp/Makefile.in b/crypto/comp/Makefile.in index 6db134982b..24c1231fcc 100644 --- a/crypto/comp/Makefile.in +++ b/crypto/comp/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile diff --git a/crypto/conf/Makefile.in b/crypto/conf/Makefile.in index c0c8cd8982..e1bae369c2 100644 --- a/crypto/conf/Makefile.in +++ b/crypto/conf/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile diff --git a/crypto/ct/Makefile.in b/crypto/ct/Makefile.in index 5d186b8fd9..100179ddfa 100644 --- a/crypto/ct/Makefile.in +++ b/crypto/ct/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile diff --git a/crypto/des/Makefile.in b/crypto/des/Makefile.in index c65c05b110..248b53d700 100644 --- a/crypto/des/Makefile.in +++ b/crypto/des/Makefile.in @@ -13,7 +13,7 @@ AR= ar r RANLIB= ranlib DES_ENC= des_enc.o fcrypt_b.o -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) ASFLAGS= $(INCLUDES) $(ASFLAG) AFLAGS= $(ASFLAGS) diff --git a/crypto/dh/Makefile.in b/crypto/dh/Makefile.in index 473ad3576a..9ac52eb1b4 100644 --- a/crypto/dh/Makefile.in +++ b/crypto/dh/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile diff --git a/crypto/dsa/Makefile.in b/crypto/dsa/Makefile.in index dd5bdbef25..a22dfa32b5 100644 --- a/crypto/dsa/Makefile.in +++ b/crypto/dsa/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile diff --git a/crypto/dso/Makefile.in b/crypto/dso/Makefile.in index 1f74735fd5..58d0974507 100644 --- a/crypto/dso/Makefile.in +++ b/crypto/dso/Makefile.in @@ -10,7 +10,7 @@ CFLAG=-g MAKEFILE= Makefile AR= ar r -CFLAGS= $(INCLUDES) $(CFLAG) +CFLAGS= $(INCLUDES) $(CFLAG) $(SHARED_CFLAG) GENERAL=Makefile diff --git a/crypto/ec/Makefile.in b/crypto/ec/Makefile.in index eb68dcd4b7..1aa22d4962 100644 --- a/crypto/ec/Makefile.in +++ b/ |