c6249c13f063c047f0c719ad2300a0081272ddbd
[openssl.git] / fips-1.0 / Makefile
1 #
2 # SSLeay/fips/Makefile
3 #
4
5 DIR=            fips
6 TOP=            ..
7 CC=             cc
8 INCLUDE=        -I. -I$(TOP) -I../include
9 INCLUDES=       -I.. -I../.. -I../../include
10 CFLAG=          -g
11 INSTALL_PREFIX=
12 OPENSSLDIR=     /usr/local/ssl
13 INSTALLTOP=     /usr/local/ssl
14 MAKEFILE=       Makefile
15 MAKEDEPPROG=    makedepend
16 MAKEDEPEND=     $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
17 PERL=           perl
18 RM=             rm -f
19 AR=             ar r
20
21 PEX_LIBS=
22 EX_LIBS=
23
24 CFLAGS= $(INCLUDE) $(CFLAG) -DHMAC_EXT=\"$${HMAC_EXT:-sha1}\"
25
26
27 LIBS=
28
29 FDIRS=sha rand des aes dsa rsa dh hmac
30
31 GENERAL=Makefile README fips-lib.com install.com
32
33 LIB= $(TOP)/libcrypto.a
34 SHARED_LIB= libcrypto$(SHLIB_EXT)
35 LIBSRC=fips.c fips_err_wrapper.c fipshashes.c
36 LIBOBJ=fips.o fips_err_wrapper.o fipshashes.o
37
38 FIPS_OBJ_LISTS=sha/lib rand/lib des/lib aes/lib dsa/lib rsa/lib dh/lib
39 SRC= $(LIBSRC)
40
41 EXHEADER=fips.h
42 HEADER=$(EXHEADER) fips_err.h
43 EXE=fipsld
44
45 ALL=    $(GENERAL) $(SRC) $(HEADER)
46
47 top:
48         @(cd ..; $(MAKE) DIRS=$(DIR) all)
49
50 all:
51         @if egrep 'define OPENSSL_FIPS' $(TOP)/include/openssl/opensslconf.h > /dev/null; then \
52                 $(MAKE) -e subdirs check lib shared; \
53         fi
54
55 check:
56         $(PERL) ../util/checkhash.pl || (rm fipscanister.o* 2>/dev/null; exit 1)
57
58 # Idea behind fipscanister.o is to "seize" the sequestered code between
59 # known symbols for fingerprinting purposes, which would be commonly
60 # done with ld -r start.o ... end.o. The latter however presents a minor
61 # challenge on multi-ABI platforms. As just implied, we'd rather use ld,
62 # but the trouble is that we don't generally know how ABI-selection
63 # compiler flag is translated to corresponding linker flag. All compiler
64 # drivers seem to recognize -r flag and pass it down to linker, but some
65 # of them, including gcc, erroneously add -lc, as well as run-time
66 # components, such as crt1.o and alike. Fortunately among those vendor
67 # compilers which were observed to misinterpret -r flag multi-ABI ones
68 # are equipped with smart linkers, which don't require any ABI-selection
69 # flag and simply assume that all objects are of the same type as first
70 # one in command line. So the idea is to identify gcc and deficient
71 # vendor compiler drivers...
72 fipscanister.o: fips_start.o $(LIBOBJ) $(FIPS_OBJ_LISTS) fips_end.o
73         @objs="fips_start.o $(LIBOBJ)"; \
74         for i in $(FIPS_OBJ_LISTS); do \
75                 dir=`dirname $$i`; script="s|^|$$dir/|;s| | $$dir/|g"; \
76                 objs="$$objs `sed "$$script" $$i`"; \
77         done; \
78         objs="$$objs fips_end.o" ; \
79         if [ -n "${FIPS_SITE_LD}" ]; then \
80                 set -x; ${FIPS_SITE_LD} -r -o $@ $$objs; \
81         elif $(CC) -dumpversion >/dev/null 2>&1; then \
82                 set -x; $(CC) $(CFLAGS) -r -nostdlib -o $@ $$objs ; \
83         else case "`(uname -s) 2>/dev/null`" in \
84                 HP-UX|OSF1|SunOS) set -x; /usr/ccs/bin/ld -r -o $@ $$objs ;; \
85                 *) set -x; $(CC) $(CFLAGS) -r -o $@ $$objs ;; \
86         esac fi
87         sha/fips_standalone_sha1 fipscanister.o > fipscanister.o.sha1
88 # If another exception is immediately required, assign approprite
89 # site-specific ld command to FIPS_SITE_LD environment variable.
90
91 fips_start.o: fips_canister.c
92         $(CC) $(CFLAGS) -DFIPS_START -c -o $@ fips_canister.c
93 fips_end.o: fips_canister.c
94         $(CC) $(CFLAGS) -DFIPS_END -c -o $@ fips_canister.c
95 fips_premain_dso$(EXE_EXT): fips_premain.c
96         $(CC) $(CFLAGS) -DFINGERPRINT_PREMAIN_DSO_LOAD -o $@ fips_premain.c \
97                 ../libcrypto.a $(EX_LIBS)
98
99 subdirs:
100         @for i in $(FDIRS) ;\
101         do \
102         (cd $$i && echo "making all in fips/$$i..." && \
103         $(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' FIPS_DES_ENC='${FIPS_DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' FIPS_SHA1_ASM_OBJ='${FIPS_SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' all ) || exit 1; \
104         done;
105
106 sub_target:
107         @for i in $(FDIRS) ;\
108         do \
109         (cd $$i && echo "making $(TARGET) in fips/$$i..." && \
110         $(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' FIPS_DES_ENC='${FIPS_DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' FIPS_SHA1_ASM_OBJ='${FIPS_SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' $(TARGET) ) || exit 1; \
111         done;
112
113 files:
114         $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
115         @for i in $(FDIRS) ;\
116         do \
117         (cd $$i && echo "making 'files' in fips/$$i..." && \
118         $(MAKE) PERL='${PERL}' files ); \
119         done;
120
121 links:
122         @$(PERL) $(TOP)/util/mklink.pl $(TOP)/include/openssl $(EXHEADER)
123         @$(PERL) $(TOP)/util/mklink.pl $(TOP)/test $(TEST)
124         @for i in $(FDIRS); do \
125         (cd $$i && echo "making links in fips/$$i..." && \
126         $(MAKE) CC='$(CC)' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_ENC}' FIPS_DES_ENC='${FIPS_DES_ENC}' SHA1_ASM_OBJ='${SHA1_ASM_OBJ}' FIPS_SHA1_ASM_OBJ='${FIPS_SHA1_ASM_OBJ}' MD5_ASM_OBJ='${MD5_ASM_OBJ}' RMD160_ASM_OBJ='${RMD160_ASM_OBJ}' BF_ENC='${BF_ENC}' CAST_ENC='${CAST_ENC}' RC4_ENC='${RC4_ENC}' RC5_ENC='${RC5_ENC}' AR='${AR}' PERL='${PERL}' links ); \
127         done;
128
129 lib:    fipscanister.o
130         $(AR) $(LIB) fipscanister.o
131         $(RANLIB) $(LIB) || echo Never mind.
132         @touch lib
133
134 shared: fips_premain_dso$(EXE_EXT)
135         if [ -n "$(SHARED_LIBS)" ]; then \
136                 (cd ..; $(MAKE) FIPSLD_CC=$(CC) FIPSLD=fips-1.0/fipsld $(SHARED_LIB)); \
137         fi
138
139 libs:
140         @for i in $(FDIRS) ;\
141         do \
142         (cd $$i && echo "making libs in fips/$$i..." && \
143         $(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' AR='${AR}' lib ); \
144         done;
145
146 tests:
147         (cd ..; make DIRS=test)
148
149 fips_test: top tests
150         -cd testvectors && perl -p -i -e 's/COUNT=/COUNT = /' des[23]/req/*.req
151         @for i in dsa sha aes des hmac rand rsa; \
152         do \
153                 (cd $$i && echo "making fips_test in fips/$$i..." && $(MAKE) fips_test) \
154         done;
155
156 install:
157         @headerlist="$(EXHEADER)"; for i in $$headerlist ;\
158         do \
159                 (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
160                 chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
161         done;
162         @for i in $(FDIRS) ;\
163         do \
164                 (cd $$i && echo "making install in fips/$$i..." && \
165                 $(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}'  INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' install ); \
166         done;
167         @for i in $(EXE) ; \
168         do \
169                 echo "installing $$i"; \
170                 cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
171                 chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
172                 mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i; \
173         done
174         @cp -p -f fipscanister.o fipscanister.o.sha1 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/; \
175         chmod 0444 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/fipscanister.o \
176                    $(INSTALL_PREFIX)$(INSTALLTOP)/lib/fipscanister.o.sha1
177
178 lint:
179         @for i in $(FDIRS) ;\
180         do \
181         (cd $$i && echo "making lint in fips/$$i..." && \
182         $(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' lint ); \
183         done;
184
185 depend:
186         if [ ! -f buildinf.h ]; then touch buildinf.h; fi # fake buildinf.h if it does not exist
187         $(MAKEDEPEND) -- $(CFLAG) $(INCLUDE) $(DEPFLAG) -- $(SRC)
188         if [ ! -s buildinf.h ]; then rm buildinf.h; fi
189         @for i in $(FDIRS) ;\
190         do \
191         (cd $$i && echo "making depend in fips/$$i..." && \
192         $(MAKE) MAKEFILE='${MAKEFILE}' INCLUDES='${INCLUDES}' CFLAG='${CFLAG}' DEPFLAG='${DEPFLAG}' MAKEDEPPROG='${MAKEDEPPROG}' KRB5_INCLUDES='${KRB5_INCLUDES}' PERL='${PERL}' depend ); \
193         done;
194
195 clean:
196         rm -f buildinf.h *.o *.obj fips_premain_dso$(EXE_EXT) lib tags core .pure .nfs* *.old *.bak fluff
197         @for i in $(FDIRS) ;\
198         do \
199         (cd $$i && echo "making clean in fips/$$i..." && \
200         $(MAKE) CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' clean ); \
201         done;
202
203 dclean:
204         $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
205         mv -f Makefile.new $(MAKEFILE)
206         @for i in $(FDIRS) ;\
207         do \
208         (cd $$i && echo "making dclean in fips/$$i..." && \
209         $(MAKE) PERL='${PERL}' CC='$(CC)' CFLAG='${CFLAG}' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' dclean ); \
210         done;
211
212 # DO NOT DELETE THIS LINE -- make depend depends on it.
213
214 fips.o: ../include/openssl/aes.h ../include/openssl/asn1.h
215 fips.o: ../include/openssl/bio.h ../include/openssl/blowfish.h
216 fips.o: ../include/openssl/bn.h ../include/openssl/cast.h
217 fips.o: ../include/openssl/crypto.h ../include/openssl/des.h
218 fips.o: ../include/openssl/des_old.h ../include/openssl/dh.h
219 fips.o: ../include/openssl/dsa.h ../include/openssl/e_os2.h
220 fips.o: ../include/openssl/err.h ../include/openssl/evp.h
221 fips.o: ../include/openssl/fips.h ../include/openssl/fips_rand.h
222 fips.o: ../include/openssl/hmac.h ../include/openssl/idea.h
223 fips.o: ../include/openssl/lhash.h ../include/openssl/md2.h
224 fips.o: ../include/openssl/md4.h ../include/openssl/md5.h
225 fips.o: ../include/openssl/mdc2.h ../include/openssl/obj_mac.h
226 fips.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
227 fips.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
228 fips.o: ../include/openssl/rand.h ../include/openssl/rc2.h
229 fips.o: ../include/openssl/rc4.h ../include/openssl/rc5.h
230 fips.o: ../include/openssl/ripemd.h ../include/openssl/rsa.h
231 fips.o: ../include/openssl/safestack.h ../include/openssl/sha.h
232 fips.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
233 fips.o: ../include/openssl/ui.h ../include/openssl/ui_compat.h fips.c
234 fips.o: fips_locl.h
235 fips_err_wrapper.o: ../include/openssl/opensslconf.h fips_err_wrapper.c