Makefile.in 23.1 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
		 cnd-memcpy.c \
93
		 chacha-crypt.c chacha-core-internal.c \
Niels Möller's avatar
Niels Möller committed
94
		 chacha-poly1305.c chacha-poly1305-meta.c \
95
		 chacha-set-key.c chacha-set-nonce.c \
96
		 ctr.c ctr16.c des.c des3.c des-compat.c \
97
		 eax.c eax-aes128.c eax-aes128-meta.c \
98 99 100 101
		 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
102
		 gcm-camellia128.c gcm-camellia128-meta.c \
Niels Möller's avatar
Niels Möller committed
103
		 gcm-camellia256.c gcm-camellia256-meta.c \
104
		 cmac.c cmac-aes128.c cmac-aes256.c \
Niels Möller's avatar
Niels Möller committed
105
		 gosthash94.c gosthash94-meta.c \
106
		 hmac.c hmac-md5.c hmac-ripemd160.c hmac-sha1.c \
107
		 hmac-sha224.c hmac-sha256.c hmac-sha384.c hmac-sha512.c \
108
		 knuth-lfib.c hkdf.c \
109
		 md2.c md2-meta.c md4.c md4-meta.c \
110
		 md5.c md5-compress.c md5-compat.c md5-meta.c \
111
		 memeql-sec.c memxor.c memxor3.c \
112
		 nettle-lookup-hash.c \
113 114
		 nettle-meta-aeads.c nettle-meta-armors.c \
		 nettle-meta-ciphers.c nettle-meta-hashes.c \
Niels Möller's avatar
Niels Möller committed
115 116 117
		 pbkdf2.c pbkdf2-hmac-sha1.c pbkdf2-hmac-sha256.c \
		 poly1305-aes.c poly1305-internal.c \
		 realloc.c \
118
		 ripemd160.c ripemd160-compress.c ripemd160-meta.c \
119
		 salsa20-core-internal.c \
120
		 salsa20-crypt.c salsa20r12-crypt.c salsa20-set-key.c \
121 122
		 salsa20-set-nonce.c \
		 salsa20-128-set-key.c salsa20-256-set-key.c \
123 124
		 sha1.c sha1-compress.c sha1-meta.c \
		 sha256.c sha256-compress.c sha224-meta.c sha256-meta.c \
125
		 sha512.c sha512-compress.c sha384-meta.c sha512-meta.c \
126
		 sha512-224-meta.c sha512-256-meta.c \
127 128 129
		 sha3.c sha3-permute.c \
		 sha3-224.c sha3-224-meta.c sha3-256.c sha3-256-meta.c \
		 sha3-384.c sha3-384-meta.c sha3-512.c sha3-512-meta.c\
130 131
		 serpent-set-key.c serpent-encrypt.c serpent-decrypt.c \
		 serpent-meta.c \
132
		 twofish.c twofish-meta.c \
Niels Möller's avatar
Niels Möller committed
133 134 135
		 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 \
136
		 version.c \
Niels Möller's avatar
Niels Möller committed
137
		 write-be32.c write-le32.c write-le64.c \
138
		 yarrow256.c yarrow_key_event.c
139

140 141
hogweed_SOURCES = sexp.c sexp-format.c \
		  sexp-transport.c sexp-transport-format.c \
142
		  bignum.c bignum-random.c bignum-random-prime.c \
143
		  sexp2bignum.c \
144
		  pkcs1.c pkcs1-encrypt.c pkcs1-decrypt.c \
145
		  pkcs1-sec-decrypt.c \
146
		  pkcs1-rsa-digest.c pkcs1-rsa-md5.c pkcs1-rsa-sha1.c \
147
		  pkcs1-rsa-sha256.c pkcs1-rsa-sha512.c \
Daiki Ueno's avatar
Daiki Ueno committed
148
		  pss.c pss-mgf1.c \
149
		  rsa.c rsa-sign.c rsa-sign-tr.c rsa-verify.c \
150
		  rsa-sec-compute-root.c \
151
		  rsa-pkcs1-sign.c rsa-pkcs1-sign-tr.c rsa-pkcs1-verify.c \
152 153 154 155
		  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 \
156 157
		  rsa-pss-sha256-sign-tr.c rsa-pss-sha256-verify.c \
		  rsa-pss-sha512-sign-tr.c rsa-pss-sha512-verify.c \
158 159
		  rsa-encrypt.c rsa-decrypt.c \
		  rsa-sec-decrypt.c rsa-decrypt-tr.c \
160
		  rsa-keygen.c rsa-blind.c \
161
		  rsa2sexp.c sexp2rsa.c \
162
		  dsa.c dsa-compat.c dsa-compat-keygen.c dsa-gen-params.c \
163
		  dsa-sign.c dsa-verify.c dsa-keygen.c dsa-hash.c \
164 165
		  dsa-sha1-sign.c dsa-sha1-verify.c \
		  dsa-sha256-sign.c dsa-sha256-verify.c  \
166
		  dsa2sexp.c sexp2dsa.c \
167
		  pgp-encode.c rsa2openpgp.c \
168
		  der-iterator.c der2rsa.c der2dsa.c \
169
		  sec-add-1.c sec-sub-1.c sec-tabselect.c \
Niels Möller's avatar
Niels Möller committed
170
		  gmp-glue.c cnd-copy.c \
171
		  ecc-mod.c ecc-mod-inv.c \
172
		  ecc-mod-arith.c ecc-pp1-redc.c ecc-pm1-redc.c \
Niels Möller's avatar
Niels Möller committed
173
		  ecc-192.c ecc-224.c ecc-256.c ecc-384.c ecc-521.c \
174
		  ecc-25519.c \
Niels Möller's avatar
Niels Möller committed
175 176
		  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
177
		  ecc-eh-to-a.c \
178 179
		  ecc-dup-eh.c ecc-add-eh.c ecc-add-ehh.c \
		  ecc-mul-g-eh.c ecc-mul-a-eh.c \
180
		  ecc-mul-g.c ecc-mul-a.c ecc-hash.c ecc-random.c \
181
		  ecc-point.c ecc-scalar.c ecc-point-mul.c ecc-point-mul-g.c \
182
		  ecc-ecdsa-sign.c ecdsa-sign.c \
183
		  ecc-ecdsa-verify.c ecdsa-verify.c ecdsa-keygen.c \
184
		  curve25519-mul-g.c curve25519-mul.c curve25519-eh-to-x.c \
185
		  eddsa-compress.c eddsa-decompress.c eddsa-expand.c \
186
		  eddsa-hash.c eddsa-pubkey.c eddsa-sign.c eddsa-verify.c \
187
		  ed25519-sha512-pubkey.c \
188 189 190
		  ed25519-sha512-sign.c ed25519-sha512-verify.c

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

192
HEADERS = aes.h arcfour.h arctwo.h asn1.h blowfish.h \
193
	  base16.h base64.h bignum.h buffer.h camellia.h cast128.h \
Dmitry Baryshkov's avatar
Dmitry Baryshkov committed
194
	  cbc.h ccm.h cfb.h chacha.h chacha-poly1305.h ctr.h \
Niels Möller's avatar
Niels Möller committed
195
	  curve25519.h des.h des-compat.h dsa.h dsa-compat.h eax.h \
196
	  ecc-curve.h ecc.h ecdsa.h eddsa.h \
Niels Möller's avatar
Niels Möller committed
197
	  gcm.h gosthash94.h hmac.h \
198
	  knuth-lfib.h hkdf.h \
199
	  macros.h \
200
	  cmac.h \
201 202
	  md2.h md4.h \
	  md5.h md5-compat.h \
203
	  memops.h memxor.h \
Niels Möller's avatar
Niels Möller committed
204
	  nettle-meta.h nettle-types.h \
205
	  pbkdf2.h \
Daiki Ueno's avatar
Daiki Ueno committed
206
	  pgp.h pkcs1.h pss.h pss-mgf1.h realloc.h ripemd160.h rsa.h \
207
	  salsa20.h sexp.h \
208
	  serpent.h sha.h sha1.h sha2.h sha3.h twofish.h \
209
	  umac.h yarrow.h poly1305.h
210

211
INSTALL_HEADERS = $(HEADERS) nettle-stdint.h version.h @IF_MINI_GMP@ mini-gmp.h
212

213 214
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
215
	  $(OPT_SOURCES) \
216
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
217

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

242
# Rules building static libraries
243 244
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) \
	      $(OPT_NETTLE_SOURCES:.c=.$(OBJEXT)) $(OPT_NETTLE_OBJS)
245

246 247
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) \
	       $(OPT_HOGWEED_OBJS) @IF_MINI_GMP@ mini-gmp.$(OBJEXT)
248

249
libnettle.a: $(nettle_OBJS)
250
	-rm -f $@
251
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
252
	$(RANLIB) $@
253
	echo nettle > libnettle.stamp
254

255 256 257 258
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@
259
	echo hogweed > libhogweed.stamp
260

261
.c.$(OBJEXT):
262
	$(COMPILE) -c $< \
263 264
	&& $(DEP_PROCESS)

265
# Rules building shared libraries.
266
$(LIBNETTLE_FORLINK): $(nettle_OBJS)
267
	$(LIBNETTLE_LINK) $(nettle_OBJS) @EXTRA_LINKER_FLAGS@ -o $@ $(LIBNETTLE_LIBS)
268
	-mkdir .lib 2>/dev/null
269 270 271
	(cd .lib \
          && rm -f $(LIBNETTLE_FORLINK) \
	  && $(LN_S) ../$(LIBNETTLE_FORLINK) $(LIBNETTLE_FORLINK) \
272
	  && [ -z "$(LIBNETTLE_SONAME)" ] \
273 274
	  || { rm -f $(LIBNETTLE_SONAME) \
	       && $(LN_S) $(LIBNETTLE_FORLINK) $(LIBNETTLE_SONAME) ; } )
275
	echo nettle > libnettle.stamp
276

277
$(LIBHOGWEED_FORLINK): $(hogweed_OBJS) $(LIBNETTLE_FORLINK)
278
	$(LIBHOGWEED_LINK) $(hogweed_OBJS) @EXTRA_HOGWEED_LINKER_FLAGS@ -o $@ $(LIBHOGWEED_LIBS)
279
	-mkdir .lib 2>/dev/null
280 281 282
	(cd .lib \
          && rm -f $(LIBHOGWEED_FORLINK) \
	  && $(LN_S) ../$(LIBHOGWEED_FORLINK) $(LIBHOGWEED_FORLINK) \
283
	  && [ -z "$(LIBHOGWEED_SONAME)" ] \
284 285
	  || { rm -f $(LIBHOGWEED_SONAME) \
	       && $(LN_S) $(LIBHOGWEED_FORLINK) $(LIBHOGWEED_SONAME) ; } )
286
	echo hogweed > libhogweed.stamp
287

Niels Möller's avatar
Niels Möller committed
288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
# 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)

311
eccdata$(EXEEXT_FOR_BUILD): eccdata.c mini-gmp.c mini-gmp.h
312
	$(CC_FOR_BUILD) `test -f eccdata.c || echo '$(srcdir)/'`eccdata.c \
Niels Möller's avatar
Niels Möller committed
313
	-o eccdata$(EXEEXT_FOR_BUILD)
314

Niels Möller's avatar
Niels Möller committed
315 316 317 318
eccparams$(EXEEXT_FOR_BUILD): eccparams.c
	$(CC_FOR_BUILD) `test -f eccparams.c || echo '$(srcdir)/'`eccparams.c \
	-o eccparams$(EXEEXT_FOR_BUILD)

319 320
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
321 322
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
323 324

# Generate DES headers.
325
$(des_headers): desdata.stamp
326
	f="$(srcdir)/`basename $@`"; \
327
	  ./desdata$(EXEEXT_FOR_BUILD) $(@F) > $${f}T; \
328
	  test -s $${f}T && mv -f $${f}T $$f
329

330 331 332 333
desdata.stamp: desdata.c
	$(MAKE) desdata$(EXEEXT_FOR_BUILD)
	echo stamp > desdata.stamp

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

336 337 338 339 340 341 342
# 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
343
ecc-192.h: eccdata.stamp
344 345 346 347 348 349 350
	./eccdata$(EXEEXT_FOR_BUILD) 192 8 6 $(NUMB_BITS) > $@T && mv $@T $@

# 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
351
ecc-224.h: eccdata.stamp
352 353 354 355 356 357 358
	./eccdata$(EXEEXT_FOR_BUILD) 224 16 7 $(NUMB_BITS) > $@T && mv $@T $@

# 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
359
ecc-256.h: eccdata.stamp
360 361 362 363 364 365 366 367 368 369
	./eccdata$(EXEEXT_FOR_BUILD) 256 11 6 $(NUMB_BITS) > $@T && mv $@T $@

# 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
370
ecc-384.h: eccdata.stamp
371 372 373 374 375 376 377
	./eccdata$(EXEEXT_FOR_BUILD) 384 32 6 $(NUMB_BITS) > $@T && mv $@T $@

# 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
378
ecc-521.h: eccdata.stamp
379
	./eccdata$(EXEEXT_FOR_BUILD) 521 44 6 $(NUMB_BITS) > $@T && mv $@T $@
380

381
# Parameter choices mostly the same as for ecc-256.h.
382
ecc-25519.h: eccdata.stamp
383
	./eccdata$(EXEEXT_FOR_BUILD) 255 11 6 $(NUMB_BITS) > $@T && mv $@T $@
384

385
eccdata.stamp: eccdata.c
386
	$(MAKE) eccdata$(EXEEXT_FOR_BUILD)
387 388 389 390 391 392 393
	echo stamp > eccdata.stamp

ecc-192.$(OBJEXT): ecc-192.h
ecc-224.$(OBJEXT): ecc-224.h
ecc-256.$(OBJEXT): ecc-256.h
ecc-384.$(OBJEXT): ecc-384.h
ecc-521.$(OBJEXT): ecc-521.h
394
ecc-25519.$(OBJEXT): ecc-25519.h
395

396 397 398 399
.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 
400

401 402
# Texinfo rules
.texinfo.info:
403
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
404 405

.texinfo.html:
406
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
407
	  --output $@T `basename "$<"` \
408
	  && test -s $@T && mv -f $@T $@
409

410
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
411
	cd $(srcdir) && texi2dvi -b `basename "$<"`
412 413

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

416
# Avoid rebuilding .dvi and .ps files when the .texinfo source is unchanged.
417
PS2PDFFLAGS=-dCompatibilityLevel=1.3 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
418 419 420
.texinfo.pdf:
	$(MAKE) `basename "$<" .texinfo`.ps
	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename "$<" .texinfo`.ps
421

422 423
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
424

425 426
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
427

428 429 430
# 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
431
	cd $(srcdir) && $(AUTOHEADER)
432
	echo timestamp > $(srcdir)/stamp-h.in
433

434 435
config.status: configure
	./config.status --recheck
436

437 438 439 440
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
441

442 443
Makefile: Makefile.in config.status
	./config.status $@
444

445 446
config.make: config.make.in config.status
	./config.status $@
447

Niels Möller's avatar
Niels Möller committed
448 449 450
config.m4: config.m4.in config.status
	./config.status $@

451 452 453 454 455 456
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

457 458 459
version.h: version.h.in config.status
	./config.status $@

460
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
461 462
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
463
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
464 465

install-static: $(LIBTARGETS)
466
	$(MKDIR_P) $(DESTDIR)$(libdir)
467 468 469 470
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

471 472 473 474 475
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
476
	$(MKDIR_P) $(DESTDIR)$(libdir)
477
	$(INSTALL_DATA) $(LIBNETTLE_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
478 479
	[ -z "$(LIBNETTLE_SONAME)" ] \
                || (cd $(DESTDIR)$(libdir) \
480 481 482
		&& rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
483

484 485 486 487 488
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
489
	$(MKDIR_P) $(DESTDIR)$(libdir)
490
	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
491
	[ -z "$(LIBHOGWEED_SONAME)" ] \
492
                || (cd $(DESTDIR)$(libdir) \
493 494 495
		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
496

497 498 499 500
# 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.

501
install-info: nettle.info
502
	$(MKDIR_P) $(DESTDIR)$(infodir)
503 504 505
	f=nettle.info ; \
	[ -f $$f ] || f="$(srcdir)/$$f" ; \
	$(INSTALL_DATA) "$$f" $(DESTDIR)$(infodir) ; \
506 507
	if (install-info --version && \
	    install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
508
	  install-info --info-dir="$(DESTDIR)$(infodir)" "$$f" ; \
509 510
	else : ; fi

511 512
# NOTE: I'd like to use $^, but that's a GNU extension. $? should be
# more portable, and equivalent for phony targets.
513
install-headers: $(INSTALL_HEADERS)
514
	$(MKDIR_P) $(DESTDIR)$(includedir)/nettle
515 516 517 518 519 520
	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
521

522 523 524 525 526 527
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

528
# Uninstall
529
uninstall-here: uninstall-info uninstall-headers uninstall-static \
530
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
531 532

uninstall-static:
533
	for f in $(LIBTARGETS) ; do \
534 535
	  rm -f $(DESTDIR)$(libdir)/$$f ; \
	done
536 537 538 539 540 541 542 543 544 545 546 547 548 549

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
550 551
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

552 553 554 555
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
556 557 558 559
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

560 561 562 563
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
564 565 566
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
567

568 569 570 571 572
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

573 574 575 576
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

579
distdir: $(DISTFILES)
580 581
	rm -rf "$(distdir)"
	mkdir "$(distdir)"
582
	set -e; for f in $(DISTFILES) ; do \
583
	  if [ -f "$$f" ] ; then cp "$$f" "$(distdir)" ; \
584 585 586
	  else cp "$(srcdir)/$$f" "$(distdir)" ; \
	  fi ; \
	done
587 588 589
	set -e; for d in sparc32 sparc64 x86 \
		x86_64 x86_64/aesni x86_64/fat \
		arm arm/neon arm/v6 arm/fat ; do \
590
	  mkdir "$(distdir)/$$d" ; \
Niels Möller's avatar
Niels Möller committed
591 592
	  find "$(srcdir)/$$d" -maxdepth 1 '(' -name '*.asm' -o -name '*.m4' ')' \
	    -exec cp '{}' "$(distdir)/$$d" ';' ; \
593
	done
594
	set -e; for d in $(SUBDIRS); do \
595 596
	  sd="$(distdir)/$$d" ; \
	  mkdir "$$sd" && $(MAKE) -C $$d distdir="`cd $$sd && pwd`" $@ ; \
597 598 599 600 601 602 603 604
	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 {} ';' \
605
                 && rm -fr distcheck-tmp; }; 
606 607 608 609

distcheck: dist
	$(rm_distcheck)
	mkdir distcheck-tmp
610 611
	gzip -d < $(distdir).tar.gz \
	  | { cd distcheck-tmp && tar xf - && chmod -R a-w $(distdir) ; }
612 613
	mkdir distcheck-tmp/build
	mkdir distcheck-tmp/install
614
	cd distcheck-tmp/build && ../$(distdir)/configure --prefix="`cd ../install && pwd`"
615 616 617
	cd distcheck-tmp/build && $(MAKE)
	cd distcheck-tmp/build && $(MAKE) check
	cd distcheck-tmp/build && $(MAKE) install
618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634
	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; }	
635 636
	cd distcheck-tmp/build && $(MAKE) dist
	cd distcheck-tmp/build && rm *.gz
637
	cd distcheck-tmp/build && $(MAKE) distclean
638 639
	cd distcheck-tmp && find build -type f -print > leftover-build-files
	@test `cat distcheck-tmp/leftover-build-files | wc -l` -eq 0  \
640
	  || { echo "ERROR: files left in build directory after distclean:" ; \
641
	       cat distcheck-tmp/leftover-build-files ; \
642 643 644 645
	       exit 1; }
	$(rm_distcheck)

clean-here:
646
	-rm -f $(TARGETS) *.$(OBJEXT) *.s *.so *.dll *.a \
647
		ecc-192.h ecc-224.h ecc-256.h ecc-384.h ecc-521.h ecc-25519.h \
648
		aesdata$(EXEEXT_FOR_BUILD) \
649
		desdata$(EXEEXT_FOR_BUILD) \
650 651 652
		twofishdata$(EXEEXT_FOR_BUILD) \
		shadata$(EXEEXT_FOR_BUILD) \
		gcmdata$(EXEEXT_FOR_BUILD) \
653
		eccdata$(EXEEXT_FOR_BUILD) eccdata.stamp
654
	-rm -rf .lib libnettle.stamp libhogweed.stamp
655

656
distclean-here: clean-here
657
	-rm -f config.h stamp-h config.log config.status machine.m4 \
658
	config.make config.m4 Makefile nettle-stdint.h version.h \
659
	nettle.pc hogweed.pc libnettle.map libhogweed.map \
660
	*.asm *.d
661

662 663 664
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

665
tags-here:	
666
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
667

668
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
669
@DEP_INCLUDE@ $(DEP_FILES)