Makefile.in 23.2 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 \
Niels Möller's avatar
Niels Möller committed
117 118 119
		 pbkdf2.c pbkdf2-hmac-sha1.c pbkdf2-hmac-sha256.c \
		 poly1305-aes.c poly1305-internal.c \
		 realloc.c \
120
		 ripemd160.c ripemd160-compress.c ripemd160-meta.c \
121
		 salsa20-core-internal.c \
122
		 salsa20-crypt.c salsa20r12-crypt.c salsa20-set-key.c \
123 124
		 salsa20-set-nonce.c \
		 salsa20-128-set-key.c salsa20-256-set-key.c \
125 126
		 sha1.c sha1-compress.c sha1-meta.c \
		 sha256.c sha256-compress.c sha224-meta.c sha256-meta.c \
127
		 sha512.c sha512-compress.c sha384-meta.c sha512-meta.c \
128
		 sha512-224-meta.c sha512-256-meta.c \
129 130 131
		 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\
132 133
		 serpent-set-key.c serpent-encrypt.c serpent-decrypt.c \
		 serpent-meta.c \
134
		 twofish.c twofish-meta.c \
Niels Möller's avatar
Niels Möller committed
135 136 137
		 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 \
138
		 version.c \
Niels Möller's avatar
Niels Möller committed
139
		 write-be32.c write-le32.c write-le64.c \
140 141
		 yarrow256.c yarrow_key_event.c \
		 xts.c xts-aes128.c xts-aes256.c
142

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

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

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

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

216 217
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
218
	  $(OPT_SOURCES) \
219
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
220

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

246
# Rules building static libraries
247 248
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) \
	      $(OPT_NETTLE_SOURCES:.c=.$(OBJEXT)) $(OPT_NETTLE_OBJS)
249

250 251
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) \
	       $(OPT_HOGWEED_OBJS) @IF_MINI_GMP@ mini-gmp.$(OBJEXT)
252

253
libnettle.a: $(nettle_OBJS)
254
	-rm -f $@
255
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
256
	$(RANLIB) $@
257
	echo nettle > libnettle.stamp
258

259 260 261 262
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@
263
	echo hogweed > libhogweed.stamp
264

265
.c.$(OBJEXT):
266
	$(COMPILE) -c $< \
267 268
	&& $(DEP_PROCESS)

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

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

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

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

Niels Möller's avatar
Niels Möller committed
319 320 321 322
eccparams$(EXEEXT_FOR_BUILD): eccparams.c
	$(CC_FOR_BUILD) `test -f eccparams.c || echo '$(srcdir)/'`eccparams.c \
	-o eccparams$(EXEEXT_FOR_BUILD)

323 324
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
325 326
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
327 328

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

334 335 336 337
desdata.stamp: desdata.c
	$(MAKE) desdata$(EXEEXT_FOR_BUILD)
	echo stamp > desdata.stamp

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

340 341 342 343 344 345 346
# 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
347
ecc-192.h: eccdata.stamp
348 349 350 351 352 353 354
	./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
355
ecc-224.h: eccdata.stamp
356 357 358 359 360 361 362
	./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
363
ecc-256.h: eccdata.stamp
364 365 366 367 368 369 370 371 372 373
	./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
374
ecc-384.h: eccdata.stamp
375 376 377 378 379 380 381
	./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
382
ecc-521.h: eccdata.stamp
383
	./eccdata$(EXEEXT_FOR_BUILD) 521 44 6 $(NUMB_BITS) > $@T && mv $@T $@
384

385
# Parameter choices mostly the same as for ecc-256.h.
386
ecc-25519.h: eccdata.stamp
387
	./eccdata$(EXEEXT_FOR_BUILD) 255 11 6 $(NUMB_BITS) > $@T && mv $@T $@
388

389
eccdata.stamp: eccdata.c
390
	$(MAKE) eccdata$(EXEEXT_FOR_BUILD)
391 392 393 394 395 396 397
	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
398
ecc-25519.$(OBJEXT): ecc-25519.h
399

400 401 402 403
.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 
404

405 406
# Texinfo rules
.texinfo.info:
407
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
408 409

.texinfo.html:
410
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
411
	  --output $@T `basename "$<"` \
412
	  && test -s $@T && mv -f $@T $@
413

414
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
415
	cd $(srcdir) && texi2dvi -b `basename "$<"`
416 417

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

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

426 427
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
428

429 430
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
431

432 433 434
# 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
435
	cd $(srcdir) && $(AUTOHEADER)
436
	echo timestamp > $(srcdir)/stamp-h.in
437

438 439
config.status: configure
	./config.status --recheck
440

441 442 443 444
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
445

446 447
Makefile: Makefile.in config.status
	./config.status $@
448

449 450
config.make: config.make.in config.status
	./config.status $@
451

Niels Möller's avatar
Niels Möller committed
452 453 454
config.m4: config.m4.in config.status
	./config.status $@

455 456 457 458 459 460
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

461 462 463
version.h: version.h.in config.status
	./config.status $@

464
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
465 466
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
467
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
468 469

install-static: $(LIBTARGETS)
470
	$(MKDIR_P) $(DESTDIR)$(libdir)
471 472 473 474
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

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

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

501 502 503 504
# 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.

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

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

526 527 528 529 530 531
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

532
# Uninstall
533
uninstall-here: uninstall-info uninstall-headers uninstall-static \
534
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
535 536

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

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
554 555
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

556 557 558 559
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
560 561 562 563
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

564 565 566 567
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
568 569 570
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
571

572 573 574 575 576
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

577 578 579 580
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

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

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

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

660
distclean-here: clean-here
661
	-rm -f config.h stamp-h config.log config.status machine.m4 \
Niels Möller's avatar
Niels Möller committed
662
	config.make config.m4 Makefile version.h \
663
	nettle.pc hogweed.pc libnettle.map libhogweed.map \
664
	*.asm *.d
665

666 667 668
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

669
tags-here:	
670
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
671

672
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
673
@DEP_INCLUDE@ $(DEP_FILES)