Makefile.in 23.9 KB
Newer Older
1 2 3 4 5 6 7
# Nettle Makefile

@SET_MAKE@

srcdir = @srcdir@
VPATH = @srcdir@

8 9 10 11 12
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = $(INSTALL_PROGRAM) -s
13
MKDIR_P = @MKDIR_P@
14

15 16
OPT_NETTLE_OBJS = @OPT_NETTLE_OBJS@
OPT_HOGWEED_OBJS = @OPT_HOGWEED_OBJS@
17

18
OPT_NETTLE_SOURCES = @OPT_NETTLE_SOURCES@
19

20 21 22 23
SUBDIRS = tools testsuite examples

include config.make

24
PRE_CPPFLAGS = -I.
25
EXTRA_CFLAGS = $(CCPIC)
26

27
# FIXME: Add configuration of LIBEXT?
28 29
LIBTARGETS = @IF_STATIC@ libnettle.a @IF_HOGWEED@ libhogweed.a
SHLIBTARGETS = @IF_SHARED@ $(LIBNETTLE_FORLINK) @IF_HOGWEED@ $(LIBHOGWEED_FORLINK)
30

31 32 33
getopt_SOURCES = getopt.c getopt1.c
getopt_TARGETS = $(getopt_SOURCES:.c=.$(OBJEXT))

34 35 36
internal_SOURCES = nettle-internal.c
internal_TARGETS = $(internal_SOURCES:.c=.$(OBJEXT))

37
TARGETS = $(getopt_TARGETS) $(internal_TARGETS) \
38
	  $(LIBTARGETS) $(SHLIBTARGETS)
39

Sam Thursfield's avatar
Sam Thursfield committed
40
DOCTARGETS = @IF_DOCUMENTATION@ nettle.info nettle.html nettle.pdf
41

42 43 44
PKGCONFIG_FILES = nettle.pc @IF_HOGWEED@ hogweed.pc
pkgconfigdir = $(libdir)/pkgconfig

45
all check install uninstall:
46
	$(MAKE) $@-here
Niels Möller's avatar
Niels Möller committed
47 48
	set -e; for d in $(SUBDIRS); do \
	  echo "Making $@ in $$d" ; (cd $$d && $(MAKE) $@); done
49

50
clean distclean mostlyclean maintainer-clean tags:
Niels Möller's avatar
Niels Möller committed
51 52
	set -e; for d in $(SUBDIRS); do \
	  echo "Making $@ in $$d" ; (cd $$d && $(MAKE) $@); done
53 54
	$(MAKE) $@-here

55 56 57
check-here:
	true

58
# FIXME: Remove. These targets aren't supported, but they are expected by the
59 60 61 62
# automake generated Makefiles in the lsh build.
dvi installcheck uninstallcheck:
	true

63
all-here: $(TARGETS) $(DOCTARGETS)
64

65 66
nettle_SOURCES = aes-decrypt-internal.c aes-decrypt.c \
		 aes-encrypt-internal.c aes-encrypt.c aes-encrypt-table.c \
67
		 aes-invert-internal.c aes-set-key-internal.c \
68
		 aes-set-encrypt-key.c aes-set-decrypt-key.c \
Niels Möller's avatar
Niels Möller committed
69 70
		 aes128-set-encrypt-key.c aes128-set-decrypt-key.c \
		 aes128-meta.c \
Niels Möller's avatar
Niels Möller committed
71 72
		 aes192-set-encrypt-key.c aes192-set-decrypt-key.c \
		 aes192-meta.c \
73 74
		 aes256-set-encrypt-key.c aes256-set-decrypt-key.c \
		 aes256-meta.c \
75
		 arcfour.c arcfour-crypt.c \
Niels Möller's avatar
Niels Möller committed
76
		 arctwo.c arctwo-meta.c blowfish.c \
77
		 base16-encode.c base16-decode.c base16-meta.c \
Niels Möller's avatar
Niels Möller committed
78
		 base64-encode.c base64-decode.c base64-meta.c \
79
		 base64url-encode.c base64url-decode.c base64url-meta.c \
Niels Möller's avatar
Niels Möller committed
80
		 buffer.c buffer-init.c \
Niels Möller's avatar
Niels Möller committed
81 82 83 84 85 86 87 88 89
		 camellia-crypt-internal.c camellia-table.c \
		 camellia-absorb.c camellia-invert-key.c \
		 camellia128-set-encrypt-key.c camellia128-crypt.c \
		 camellia128-set-decrypt-key.c \
		 camellia128-meta.c \
		 camellia192-meta.c \
		 camellia256-set-encrypt-key.c camellia256-crypt.c \
		 camellia256-set-decrypt-key.c \
		 camellia256-meta.c \
Niels Möller's avatar
Niels Möller committed
90
		 cast128.c cast128-meta.c cbc.c \
Dmitry Baryshkov's avatar
Dmitry Baryshkov committed
91
		 ccm.c ccm-aes128.c ccm-aes192.c ccm-aes256.c cfb.c \
92
		 siv-cmac.c siv-cmac-aes128.c siv-cmac-aes256.c \
93
		 cnd-memcpy.c \
94
		 chacha-crypt.c chacha-core-internal.c \
Niels Möller's avatar
Niels Möller committed
95
		 chacha-poly1305.c chacha-poly1305-meta.c \
96
		 chacha-set-key.c chacha-set-nonce.c \
97
		 ctr.c ctr16.c des.c des3.c \
98
		 eax.c eax-aes128.c eax-aes128-meta.c \
99 100 101 102
		 gcm.c gcm-aes.c \
		 gcm-aes128.c gcm-aes128-meta.c \
		 gcm-aes192.c gcm-aes192-meta.c \
		 gcm-aes256.c gcm-aes256-meta.c \
Niels Möller's avatar
Niels Möller committed
103
		 gcm-camellia128.c gcm-camellia128-meta.c \
Niels Möller's avatar
Niels Möller committed
104
		 gcm-camellia256.c gcm-camellia256-meta.c \
105
		 cmac.c cmac64.c cmac-aes128.c cmac-aes256.c cmac-des3.c \
106
		 gost28147.c gosthash94.c gosthash94-meta.c \
107 108 109
		 hmac.c hmac-gosthash94.c hmac-md5.c hmac-ripemd160.c \
		 hmac-sha1.c hmac-sha224.c hmac-sha256.c hmac-sha384.c \
		 hmac-sha512.c \
110
		 knuth-lfib.c hkdf.c \
111
		 md2.c md2-meta.c md4.c md4-meta.c \
112
		 md5.c md5-compress.c md5-compat.c md5-meta.c \
113
		 memeql-sec.c memxor.c memxor3.c \
114
		 nettle-lookup-hash.c \
115 116
		 nettle-meta-aeads.c nettle-meta-armors.c \
		 nettle-meta-ciphers.c nettle-meta-hashes.c \
117 118
		 pbkdf2.c pbkdf2-hmac-gosthash94.c pbkdf2-hmac-sha1.c \
		 pbkdf2-hmac-sha256.c \
Niels Möller's avatar
Niels Möller committed
119 120
		 poly1305-aes.c poly1305-internal.c \
		 realloc.c \
121
		 ripemd160.c ripemd160-compress.c ripemd160-meta.c \
122
		 salsa20-core-internal.c \
123
		 salsa20-crypt.c salsa20r12-crypt.c salsa20-set-key.c \
124 125
		 salsa20-set-nonce.c \
		 salsa20-128-set-key.c salsa20-256-set-key.c \
126 127
		 sha1.c sha1-compress.c sha1-meta.c \
		 sha256.c sha256-compress.c sha224-meta.c sha256-meta.c \
128
		 sha512.c sha512-compress.c sha384-meta.c sha512-meta.c \
129
		 sha512-224-meta.c sha512-256-meta.c \
130 131
		 sha3.c sha3-permute.c \
		 sha3-224.c sha3-224-meta.c sha3-256.c sha3-256-meta.c \
132 133
		 sha3-384.c sha3-384-meta.c sha3-512.c sha3-512-meta.c \
		 shake256.c \
134 135
		 serpent-set-key.c serpent-encrypt.c serpent-decrypt.c \
		 serpent-meta.c \
136
		 twofish.c twofish-meta.c \
Niels Möller's avatar
Niels Möller committed
137 138 139
		 umac-nh.c umac-nh-n.c umac-l2.c umac-l3.c \
		 umac-poly64.c umac-poly128.c umac-set-key.c \
		 umac32.c umac64.c umac96.c umac128.c \
140
		 version.c \
Niels Möller's avatar
Niels Möller committed
141
		 write-be32.c write-le32.c write-le64.c \
142 143
		 yarrow256.c yarrow_key_event.c \
		 xts.c xts-aes128.c xts-aes256.c
144

145 146
hogweed_SOURCES = sexp.c sexp-format.c \
		  sexp-transport.c sexp-transport-format.c \
147
		  bignum.c bignum-random.c bignum-random-prime.c \
148
		  sexp2bignum.c \
149
		  pkcs1.c pkcs1-encrypt.c pkcs1-decrypt.c \
150
		  pkcs1-sec-decrypt.c \
151
		  pkcs1-rsa-digest.c pkcs1-rsa-md5.c pkcs1-rsa-sha1.c \
152
		  pkcs1-rsa-sha256.c pkcs1-rsa-sha512.c \
Daiki Ueno's avatar
Daiki Ueno committed
153
		  pss.c pss-mgf1.c \
154
		  rsa.c rsa-sign.c rsa-sign-tr.c rsa-verify.c \
155
		  rsa-sec-compute-root.c \
156
		  rsa-pkcs1-sign.c rsa-pkcs1-sign-tr.c rsa-pkcs1-verify.c \
157 158 159 160
		  rsa-md5-sign.c rsa-md5-sign-tr.c rsa-md5-verify.c \
		  rsa-sha1-sign.c rsa-sha1-sign-tr.c rsa-sha1-verify.c \
		  rsa-sha256-sign.c rsa-sha256-sign-tr.c rsa-sha256-verify.c \
		  rsa-sha512-sign.c rsa-sha512-sign-tr.c rsa-sha512-verify.c \
161 162
		  rsa-pss-sha256-sign-tr.c rsa-pss-sha256-verify.c \
		  rsa-pss-sha512-sign-tr.c rsa-pss-sha512-verify.c \
163 164
		  rsa-encrypt.c rsa-decrypt.c \
		  rsa-sec-decrypt.c rsa-decrypt-tr.c \
165
		  rsa-keygen.c rsa-blind.c \
166
		  rsa2sexp.c sexp2rsa.c \
167
		  dsa.c dsa-compat.c dsa-compat-keygen.c dsa-gen-params.c \
168
		  dsa-sign.c dsa-verify.c dsa-keygen.c dsa-hash.c \
169 170
		  dsa-sha1-sign.c dsa-sha1-verify.c \
		  dsa-sha256-sign.c dsa-sha256-verify.c  \
171
		  dsa2sexp.c sexp2dsa.c \
172
		  pgp-encode.c rsa2openpgp.c \
173
		  der-iterator.c der2rsa.c der2dsa.c \
174
		  sec-add-1.c sec-sub-1.c sec-tabselect.c \
Niels Möller's avatar
Niels Möller committed
175
		  gmp-glue.c cnd-copy.c \
176
		  ecc-mod.c ecc-mod-inv.c \
177
		  ecc-mod-arith.c ecc-pp1-redc.c ecc-pm1-redc.c \
178 179 180
		  ecc-curve25519.c ecc-curve448.c \
		  ecc-secp192r1.c ecc-secp224r1.c ecc-secp256r1.c \
		  ecc-secp384r1.c ecc-secp521r1.c \
Niels Möller's avatar
Niels Möller committed
181 182
		  ecc-size.c ecc-j-to-a.c ecc-a-to-j.c \
		  ecc-dup-jj.c ecc-add-jja.c ecc-add-jjj.c \
Niels Möller's avatar
Niels Möller committed
183
		  ecc-eh-to-a.c \
184
		  ecc-dup-eh.c ecc-add-eh.c ecc-add-ehh.c \
185
		  ecc-dup-th.c ecc-add-th.c ecc-add-thh.c \
Niels Möller's avatar
Niels Möller committed
186
		  ecc-mul-g-eh.c ecc-mul-a-eh.c ecc-mul-m.c \
187
		  ecc-mul-g.c ecc-mul-a.c ecc-hash.c ecc-random.c \
188
		  ecc-point.c ecc-scalar.c ecc-point-mul.c ecc-point-mul-g.c \
189
		  ecc-ecdsa-sign.c ecdsa-sign.c \
190
		  ecc-ecdsa-verify.c ecdsa-verify.c ecdsa-keygen.c \
191
		  curve25519-mul-g.c curve25519-mul.c curve25519-eh-to-x.c \
Daiki Ueno's avatar
Daiki Ueno committed
192
		  curve448-mul-g.c curve448-mul.c curve448-eh-to-x.c \
193
		  eddsa-compress.c eddsa-decompress.c eddsa-expand.c \
194
		  eddsa-hash.c eddsa-pubkey.c eddsa-sign.c eddsa-verify.c \
195
		  ed25519-sha512.c ed25519-sha512-pubkey.c \
Niels Möller's avatar
Niels Möller committed
196 197 198
		  ed25519-sha512-sign.c ed25519-sha512-verify.c \
		  ed448-shake256.c ed448-shake256-pubkey.c \
		  ed448-shake256-sign.c ed448-shake256-verify.c
199 200

OPT_SOURCES = fat-x86_64.c fat-arm.c mini-gmp.c
201

202
HEADERS = aes.h arcfour.h arctwo.h asn1.h blowfish.h \
203
	  base16.h base64.h bignum.h buffer.h camellia.h cast128.h \
Dmitry Baryshkov's avatar
Dmitry Baryshkov committed
204
	  cbc.h ccm.h cfb.h chacha.h chacha-poly1305.h ctr.h \
Daiki Ueno's avatar
Daiki Ueno committed
205
	  curve25519.h curve448.h des.h dsa.h dsa-compat.h eax.h \
206
	  ecc-curve.h ecc.h ecdsa.h eddsa.h \
207
	  gcm.h gost28147.h gosthash94.h hmac.h \
208
	  knuth-lfib.h hkdf.h \
209
	  macros.h \
210
	  cmac.h siv-cmac.h \
211 212
	  md2.h md4.h \
	  md5.h md5-compat.h \
213
	  memops.h memxor.h \
Niels Möller's avatar
Niels Möller committed
214
	  nettle-meta.h nettle-types.h \
215
	  pbkdf2.h \
Daiki Ueno's avatar
Daiki Ueno committed
216
	  pgp.h pkcs1.h pss.h pss-mgf1.h realloc.h ripemd160.h rsa.h \
217
	  salsa20.h sexp.h \
218
	  serpent.h sha.h sha1.h sha2.h sha3.h twofish.h \
219
	  umac.h yarrow.h xts.h poly1305.h
220

Niels Möller's avatar
Niels Möller committed
221
INSTALL_HEADERS = $(HEADERS) version.h @IF_MINI_GMP@ mini-gmp.h
222

223 224
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
225
	  $(OPT_SOURCES) \
226
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
227

228 229
# NOTE: This list must include all source files, with no duplicates,
# independently of which source files are included in the build.
230 231
DISTFILES = $(SOURCES) $(HEADERS) getopt.h getopt_int.h \
	.bootstrap run-tests \
232
	aclocal.m4 configure.ac \
233
	configure stamp-h.in version.h.in \
234
	libnettle.map.in libhogweed.map.in \
235
	config.guess config.sub install-sh texinfo.tex \
236
	config.h.in config.m4.in config.make.in	Makefile.in \
237
	README CONTRIBUTING.md AUTHORS COPYING.LESSERv3 COPYINGv2 COPYINGv3 \
Niels Möller's avatar
Niels Möller committed
238
	INSTALL NEWS ChangeLog \
239
	nettle.pc.in hogweed.pc.in \
240
	$(des_headers) descore.README desdata.stamp \
241 242
	aes-internal.h block-internal.h camellia-internal.h \
	gost28147-internal.h serpent-internal.h \
243
	cast128_sboxes.h desinfo.h desCode.h \
244
	ripemd160-internal.h sha2-internal.h \
245
	memxor-internal.h nettle-internal.h nettle-write.h \
246 247
	ctr-internal.h chacha-internal.h sha3-internal.h \
	salsa20-internal.h umac-internal.h hogweed-internal.h \
248
	rsa-internal.h pkcs1-internal.h dsa-internal.h eddsa-internal.h \
249
	gmp-glue.h ecc-internal.h fat-setup.h \
250
	mini-gmp.h asm.m4 \
251
	nettle.texinfo nettle.info nettle.html nettle.pdf sha-example.c
252

253
# Rules building static libraries
254 255
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) \
	      $(OPT_NETTLE_SOURCES:.c=.$(OBJEXT)) $(OPT_NETTLE_OBJS)
256

257 258
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) \
	       $(OPT_HOGWEED_OBJS) @IF_MINI_GMP@ mini-gmp.$(OBJEXT)
259

260
libnettle.a: $(nettle_OBJS)
261
	-rm -f $@
262
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
263
	$(RANLIB) $@
264
	echo nettle > libnettle.stamp
265

266 267 268 269
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@
270
	echo hogweed > libhogweed.stamp
271

272
.c.$(OBJEXT):
273
	$(COMPILE) -c $< \
274 275
	&& $(DEP_PROCESS)

276
# Rules building shared libraries.
277
$(LIBNETTLE_FORLINK): $(nettle_OBJS)
278
	$(LIBNETTLE_LINK) $(nettle_OBJS) @EXTRA_LINKER_FLAGS@ -o $@ $(LIBNETTLE_LIBS)
279
	-mkdir .lib 2>/dev/null
280 281 282
	(cd .lib \
          && rm -f $(LIBNETTLE_FORLINK) \
	  && $(LN_S) ../$(LIBNETTLE_FORLINK) $(LIBNETTLE_FORLINK) \
283
	  && [ -z "$(LIBNETTLE_SONAME)" ] \
284 285
	  || { rm -f $(LIBNETTLE_SONAME) \
	       && $(LN_S) $(LIBNETTLE_FORLINK) $(LIBNETTLE_SONAME) ; } )
286
	echo nettle > libnettle.stamp
287

288
$(LIBHOGWEED_FORLINK): $(hogweed_OBJS) $(LIBNETTLE_FORLINK)
289
	$(LIBHOGWEED_LINK) $(hogweed_OBJS) @EXTRA_HOGWEED_LINKER_FLAGS@ -o $@ $(LIBHOGWEED_LIBS)
290
	-mkdir .lib 2>/dev/null
291 292 293
	(cd .lib \
          && rm -f $(LIBHOGWEED_FORLINK) \
	  && $(LN_S) ../$(LIBHOGWEED_FORLINK) $(LIBHOGWEED_FORLINK) \
294
	  && [ -z "$(LIBHOGWEED_SONAME)" ] \
295 296
	  || { rm -f $(LIBHOGWEED_SONAME) \
	       && $(LN_S) $(LIBHOGWEED_FORLINK) $(LIBHOGWEED_SONAME) ; } )
297
	echo hogweed > libhogweed.stamp
298

Niels Möller's avatar
Niels Möller committed
299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
# For Solaris and BSD make, we have to use an explicit rule for each
# executable. Avoid object file targets to make it easy to run the
# right compiler.
aesdata$(EXEEXT_FOR_BUILD): aesdata.c
	$(CC_FOR_BUILD) `test -f aesdata.c || echo '$(srcdir)/'`aesdata.c \
	-o aesdata$(EXEEXT_FOR_BUILD)

desdata$(EXEEXT_FOR_BUILD): desdata.c
	$(CC_FOR_BUILD) `test -f desdata.c || echo '$(srcdir)/'`desdata.c \
	-o desdata$(EXEEXT_FOR_BUILD)

twofishdata$(EXEEXT_FOR_BUILD): twofishdata.c
	$(CC_FOR_BUILD) `test -f twofishdata.c || echo '$(srcdir)/'`twofishdata.c \
	-o twofishdata$(EXEEXT_FOR_BUILD)

shadata$(EXEEXT_FOR_BUILD): shadata.c
	$(CC_FOR_BUILD) `test -f shadata.c || echo '$(srcdir)/'`shadata.c -lm \
	-o shadata$(EXEEXT_FOR_BUILD)

gcmdata$(EXEEXT_FOR_BUILD): gcmdata.c
	$(CC_FOR_BUILD) `test -f gcmdata.c || echo '$(srcdir)/'`gcmdata.c \
	-o gcmdata$(EXEEXT_FOR_BUILD)

322
eccdata$(EXEEXT_FOR_BUILD): eccdata.c mini-gmp.c mini-gmp.h
323
	$(CC_FOR_BUILD) `test -f eccdata.c || echo '$(srcdir)/'`eccdata.c \
Niels Möller's avatar
Niels Möller committed
324
	-o eccdata$(EXEEXT_FOR_BUILD)
325

Niels Möller's avatar
Niels Möller committed
326 327 328 329
eccparams$(EXEEXT_FOR_BUILD): eccparams.c
	$(CC_FOR_BUILD) `test -f eccparams.c || echo '$(srcdir)/'`eccparams.c \
	-o eccparams$(EXEEXT_FOR_BUILD)

330 331
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
332 333
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
334 335

# Generate DES headers.
336
$(des_headers): desdata.stamp
337
	f="$(srcdir)/`basename $@`"; \
338
	  ./desdata$(EXEEXT_FOR_BUILD) $(@F) > $${f}T; \
339
	  test -s $${f}T && mv -f $${f}T $$f
340

341 342 343 344
desdata.stamp: desdata.c
	$(MAKE) desdata$(EXEEXT_FOR_BUILD)
	echo stamp > desdata.stamp

Niels Möller's avatar
Niels Möller committed
345
des.$(OBJEXT): des.c des.h $(des_headers)
346

347 348 349 350 351 352 353
# Generate ECC files, with roughly 16 KB of tables per curve.

# Some reasonable choices for 192:
# k =  8, c =  6, S = 256, T =  40 ( 32 A +  8 D) 12 KB
# k = 14, c =  7, S = 256, T =  42 ( 28 A + 14 D) 12 KB
# k = 11, c =  6, S = 192, T =  44 ( 33 A + 11 D)  9 KB
# k = 16, c =  6, S = 128, T =  48 ( 32 A + 16 D)  6 KB
354 355
ecc-secp192r1.h: eccdata.stamp
	./eccdata$(EXEEXT_FOR_BUILD) secp192r1 8 6 $(NUMB_BITS) > $@T && mv $@T $@
356 357 358 359 360 361

# Some reasonable choices for 224:
# k = 16, c =  7, S = 256, T =  48 ( 32 A + 16 D) ~16 KB
# k = 10, c =  6, S = 256, T =  50 ( 40 A + 10 D) ~16 KB
# k = 13, c =  6, S = 192, T =  52 ( 39 A + 13 D) ~12 KB
# k =  9, c =  5, S = 160, T =  54 ( 45 A +  9 D) ~10 KB
362 363
ecc-secp224r1.h: eccdata.stamp
	./eccdata$(EXEEXT_FOR_BUILD) secp224r1 16 7 $(NUMB_BITS) > $@T && mv $@T $@
364 365 366 367 368 369

# Some reasonable choices for 256:
# k =  9, c =  6, S = 320, T =  54 ( 45 A +  9 D) 20 KB
# k = 11, c =  6, S = 256, T =  55 ( 44 A + 11 D) 16 KB
# k = 19, c =  7, S = 256, T =  57 ( 38 A + 19 D) 16 KB
# k = 15, c =  6, S = 192, T =  60 ( 45 A + 15 D) 12 KB
370 371
ecc-secp256r1.h: eccdata.stamp
	./eccdata$(EXEEXT_FOR_BUILD) secp256r1 11 6 $(NUMB_BITS) > $@T && mv $@T $@
372 373 374 375 376 377 378 379 380

# Some reasonable choices for 384:
# k = 16, c =  6, S = 256, T =  80 ( 64 A + 16 D) 24 KB
# k = 28, c =  7, S = 256, T =  84 ( 56 A + 28 D) 24 KB
# k = 11, c =  5, S = 224, T =  88 ( 77 A + 11 D) 21 KB
# k = 22, c =  6, S = 192, T =  88 ( 66 A + 22 D) 18 KB
# k = 13, c =  5, S = 192, T =  91 ( 78 A + 13 D) 18 KB
# k = 16, c =  5, S = 160, T =  96 ( 80 A + 16 D) 15 KB
# k = 32, c =  6, S = 128, T =  96 ( 64 A + 32 D) 12 KB
381 382
ecc-secp384r1.h: eccdata.stamp
	./eccdata$(EXEEXT_FOR_BUILD) secp384r1 32 6 $(NUMB_BITS) > $@T && mv $@T $@
383 384 385 386 387 388

# Some reasonable choices for 521:
# k = 29, c =  6, S = 192, T = 116 ( 87 A + 29 D) ~27 KB
# k = 21, c =  5, S = 160, T = 126 (105 A + 21 D) ~23 KB
# k = 44, c =  6, S = 128, T = 132 ( 88 A + 44 D) ~18 KB
# k = 35, c =  5, S =  96, T = 140 (105 A + 35 D) ~14 KB
389 390
ecc-secp521r1.h: eccdata.stamp
	./eccdata$(EXEEXT_FOR_BUILD) secp521r1 44 6 $(NUMB_BITS) > $@T && mv $@T $@
391

392 393 394
# Parameter choices mostly the same as for ecc-secp256r1.h.
ecc-curve25519.h: eccdata.stamp
	./eccdata$(EXEEXT_FOR_BUILD) curve25519 11 6 $(NUMB_BITS) > $@T && mv $@T $@
395

396 397
ecc-curve448.h: eccdata.stamp
	./eccdata$(EXEEXT_FOR_BUILD) curve448 38 6 $(NUMB_BITS) > $@T && mv $@T $@
Daiki Ueno's avatar
Daiki Ueno committed
398

399
eccdata.stamp: eccdata.c
400
	$(MAKE) eccdata$(EXEEXT_FOR_BUILD)
401 402
	echo stamp > eccdata.stamp

403 404 405 406 407 408 409
ecc-curve25519.$(OBJEXT): ecc-curve25519.h
ecc-curve448.$(OBJEXT): ecc-curve448.h
ecc-secp192r1.$(OBJEXT): ecc-secp192r1.h
ecc-secp224r1.$(OBJEXT): ecc-secp224r1.h
ecc-secp256r1.$(OBJEXT): ecc-secp256r1.h
ecc-secp384r1.$(OBJEXT): ecc-secp384r1.h
ecc-secp521r1.$(OBJEXT): ecc-secp521r1.h
410

411 412 413 414
.asm.$(OBJEXT): $(srcdir)/asm.m4 machine.m4 config.m4
	$(M4) $(srcdir)/asm.m4 machine.m4 config.m4 $< >$*.s
	$(COMPILE) -c $*.s
	@echo "$@ : $< $(srcdir)/asm.m4 machine.m4 config.m4" >$@.d 
415

416 417
# Texinfo rules
.texinfo.info:
418
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
419 420

.texinfo.html:
421
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
422
	  --output $@T `basename "$<"` \
423
	  && test -s $@T && mv -f $@T $@
424

425
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
426
	cd $(srcdir) && texi2dvi -b `basename "$<"`
427 428

.dvi.ps:
429
	cd $(srcdir) && dvips -Ppdf -G0 -o `basename "$<" .dvi`.ps `basename "$<"`
430

431
# Avoid rebuilding .dvi and .ps files when the .texinfo source is unchanged.
432
PS2PDFFLAGS=-dCompatibilityLevel=1.3 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
433 434 435
.texinfo.pdf:
	$(MAKE) `basename "$<" .texinfo`.ps
	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename "$<" .texinfo`.ps
436

437 438
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
439

440 441
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
442

443 444 445
# autoheader might not change config.h.in, so touch a stamp file.
config.h.in: stamp-h.in
stamp-h.in: configure.ac aclocal.m4
446
	cd $(srcdir) && $(AUTOHEADER)
447
	echo timestamp > $(srcdir)/stamp-h.in
448

449 450
config.status: configure
	./config.status --recheck
451

452 453 454 455
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
456

457 458
Makefile: Makefile.in config.status
	./config.status $@
459

460 461
config.make: config.make.in config.status
	./config.status $@
462

Niels Möller's avatar
Niels Möller committed
463 464 465
config.m4: config.m4.in config.status
	./config.status $@

466 467 468 469 470 471
nettle.pc: nettle.pc.in config.status
	./config.status $@

hogweed.pc: hogweed.pc.in config.status
	./config.status $@

472 473 474
version.h: version.h.in config.status
	./config.status $@

475
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
476 477
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
478
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
479 480

install-static: $(LIBTARGETS)
481
	$(MKDIR_P) $(DESTDIR)$(libdir)
482 483 484 485
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

486 487 488 489 490
install-dll-nettle:
	$(MKDIR_P) $(DESTDIR)$(bindir)
	$(INSTALL_DATA) $(LIBNETTLE_FORLINK) $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

install-shared-nettle: $(LIBNETTLE_FORLINK) @IF_DLL@ install-dll-nettle
491
	$(MKDIR_P) $(DESTDIR)$(libdir)
492
	$(INSTALL_DATA) $(LIBNETTLE_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
493 494
	[ -z "$(LIBNETTLE_SONAME)" ] \
                || (cd $(DESTDIR)$(libdir) \
495 496 497
		&& rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
498

499 500 501 502 503
install-dll-hogweed:
	$(MKDIR_P) $(DESTDIR)$(bindir)
	$(INSTALL_DATA) $(LIBHOGWEED_FORLINK) $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

install-shared-hogweed: $(LIBHOGWEED_FORLINK) @IF_DLL@ install-dll-hogweed
504
	$(MKDIR_P) $(DESTDIR)$(libdir)
505
	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
506
	[ -z "$(LIBHOGWEED_SONAME)" ] \
507
                || (cd $(DESTDIR)$(libdir) \
508 509 510
		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
511

512 513 514 515
# I'd like to use makes VPATH search to locate the files to be
# installed. But it seems most make programs don't set $<, $^, $? and
# friends for ordinary explicit rules.

516
install-info: nettle.info
517
	$(MKDIR_P) $(DESTDIR)$(infodir)
518 519 520
	f=nettle.info ; \
	[ -f $$f ] || f="$(srcdir)/$$f" ; \
	$(INSTALL_DATA) "$$f" $(DESTDIR)$(infodir) ; \
521 522
	if (install-info --version && \
	    install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
523
	  install-info --info-dir="$(DESTDIR)$(infodir)" "$$f" ; \
524 525
	else : ; fi

526 527
# NOTE: I'd like to use $^, but that's a GNU extension. $? should be
# more portable, and equivalent for phony targets.
528
install-headers: $(INSTALL_HEADERS)
529
	$(MKDIR_P) $(DESTDIR)$(includedir)/nettle
530 531 532 533 534 535
	for f in $(INSTALL_HEADERS) ; do \
	  if [ -f "$$f" ] ; then \
	    $(INSTALL_DATA) "$$f" $(DESTDIR)$(includedir)/nettle ; \
	  else \
	    $(INSTALL_DATA) "$(srcdir)/$$f" $(DESTDIR)$(includedir)/nettle ; \
	  fi ; done
536

537 538 539 540 541 542
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

543
# Uninstall
544
uninstall-here: uninstall-info uninstall-headers uninstall-static \
545
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
546 547

uninstall-static:
548
	for f in $(LIBTARGETS) ; do \
549 550
	  rm -f $(DESTDIR)$(libdir)/$$f ; \
	done
551 552 553 554 555 556 557 558 559 560 561 562 563 564

uninstall-headers:
	for f in $(INSTALL_HEADERS) ; do \
	  rm -f $(DESTDIR)$(includedir)/nettle/$$f ; \
	done

uninstall-info:
	if (install-info --version && \
	    install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
	  install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)"/nettle.info ; \
	else : ; fi
	-rm -f $(DESTDIR)$(infodir)/nettle.info

# FIXME: Leaves the links around
565 566
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

567 568 569 570
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
571 572 573 574
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

575 576 577 578
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
579 580 581
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
582

583 584 585 586 587
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

588 589 590 591
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

Niels Möller's avatar
Niels Möller committed
592
# NOTE: We should handle both absolute and relative $destdir.
593

594
distdir: $(DISTFILES)
595 596
	rm -rf "$(distdir)"
	mkdir "$(distdir)"
597
	set -e; for f in $(DISTFILES) ; do \
598
	  if [ -f "$$f" ] ; then cp "$$f" "$(distdir)" ; \
599 600 601
	  else cp "$(srcdir)/$$f" "$(distdir)" ; \
	  fi ; \
	done
602
	set -e; for d in sparc32 sparc64 x86 \
Niels Möller's avatar
Niels Möller committed
603
		x86_64 x86_64/aesni x86_64/sha_ni x86_64/fat \
604
		arm arm/neon arm/v6 arm/fat ; do \
605
	  mkdir "$(distdir)/$$d" ; \
Niels Möller's avatar
Niels Möller committed
606 607
	  find "$(srcdir)/$$d" -maxdepth 1 '(' -name '*.asm' -o -name '*.m4' ')' \
	    -exec cp '{}' "$(distdir)/$$d" ';' ; \
608
	done
609
	set -e; for d in $(SUBDIRS); do \
610 611
	  sd="$(distdir)/$$d" ; \
	  mkdir "$$sd" && $(MAKE) -C $$d distdir="`cd $$sd && pwd`" $@ ; \
612 613 614 615 616 617 618 619
	done

dist: distdir
	tar cf - $(distdir) | gzip -c >$(distdir).tar.gz	
	rm -rf $(distdir)

rm_distcheck = test ! -d distcheck-tmp \
	    || { find distcheck-tmp -type d ! -perm -200 -exec chmod u+w {} ';' \
620
                 && rm -fr distcheck-tmp; }; 
621 622 623 624

distcheck: dist
	$(rm_distcheck)
	mkdir distcheck-tmp
625 626
	gzip -d < $(distdir).tar.gz \
	  | { cd distcheck-tmp && tar xf - && chmod -R a-w $(distdir) ; }
627 628
	mkdir distcheck-tmp/build
	mkdir distcheck-tmp/install
629
	cd distcheck-tmp/build && ../$(distdir)/configure --prefix="`cd ../install && pwd`"
630 631 632
	cd distcheck-tmp/build && $(MAKE)
	cd distcheck-tmp/build && $(MAKE) check
	cd distcheck-tmp/build && $(MAKE) install
633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649
	cd distcheck-tmp/build && $(MAKE) uninstall
	cd distcheck-tmp && find install -type f -print > leftover-install-files
	@test `cat distcheck-tmp/leftover-install-files | wc -l` -le 1  \
	  || { echo "ERROR: files left after uninstall:" ; \
	       cat distcheck-tmp/leftover-install-files ; \
	       exit 1; }
	chmod -R a-w distcheck-tmp/install
	mkdir distcheck-tmp/destdir
	destdir="`cd distcheck-tmp/destdir && pwd`" \
	  && cd distcheck-tmp/build \
	  && $(MAKE) install DESTDIR="$$destdir" \
	  && $(MAKE) uninstall DESTDIR="$$destdir"
	cd distcheck-tmp && find destdir -type f -print > leftover-destdir-files
	@test `cat distcheck-tmp/leftover-destdir-files | wc -l` -le 1  \
	  || { echo "ERROR: destdir files left after uninstall:" ; \
	       cat distcheck-tmp/leftover-destdir-files ; \
	       exit 1; }	
650 651
	cd distcheck-tmp/build && $(MAKE) dist
	cd distcheck-tmp/build && rm *.gz
652
	cd distcheck-tmp/build && $(MAKE) distclean
653 654
	cd distcheck-tmp && find build -type f -print > leftover-build-files
	@test `cat distcheck-tmp/leftover-build-files | wc -l` -eq 0  \
655
	  || { echo "ERROR: files left in build directory after distclean:" ; \
656
	       cat distcheck-tmp/leftover-build-files ; \
657 658 659 660
	       exit 1; }
	$(rm_distcheck)

clean-here:
661
	-rm -f $(TARGETS) *.$(OBJEXT) *.s *.so *.dll *.a \
662 663 664
		ecc-curve25519.h ecc-curve448.h \
		ecc-secp192r1.h ecc-secp224r1.h ecc-secp256r1.h \
		ecc-secp384r1.h ecc-secp521r1.h \
665
		aesdata$(EXEEXT_FOR_BUILD) \
666
		desdata$(EXEEXT_FOR_BUILD) \
667 668 669
		twofishdata$(EXEEXT_FOR_BUILD) \
		shadata$(EXEEXT_FOR_BUILD) \
		gcmdata$(EXEEXT_FOR_BUILD) \
670
		eccdata$(EXEEXT_FOR_BUILD) eccdata.stamp
671
	-rm -rf .lib libnettle.stamp libhogweed.stamp
672

673
distclean-here: clean-here
674
	-rm -f config.h stamp-h config.log config.status machine.m4 \
Niels Möller's avatar
Niels Möller committed
675
	config.make config.m4 Makefile version.h \
676
	nettle.pc hogweed.pc libnettle.map libhogweed.map \
677
	*.asm *.d
678

679 680 681
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

682
tags-here:	
683
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
684

685
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
686
@DEP_INCLUDE@ $(DEP_FILES)