Makefile.in 23.6 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 \
Niels Möller's avatar
Niels Möller committed
178
		  ecc-192.c ecc-224.c ecc-256.c ecc-384.c ecc-521.c \
Daiki Ueno's avatar
Daiki Ueno committed
179
		  ecc-25519.c ecc-448.c \
Niels Möller's avatar
Niels Möller committed
180 181
		  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
182
		  ecc-eh-to-a.c \
183
		  ecc-dup-eh.c ecc-add-eh.c ecc-add-ehh.c \
184
		  ecc-dup-th.c ecc-add-th.c ecc-add-thh.c \
Niels Möller's avatar
Niels Möller committed
185
		  ecc-mul-g-eh.c ecc-mul-a-eh.c ecc-mul-m.c \
186
		  ecc-mul-g.c ecc-mul-a.c ecc-hash.c ecc-random.c \
187
		  ecc-point.c ecc-scalar.c ecc-point-mul.c ecc-point-mul-g.c \
188
		  ecc-ecdsa-sign.c ecdsa-sign.c \
189
		  ecc-ecdsa-verify.c ecdsa-verify.c ecdsa-keygen.c \
190
		  curve25519-mul-g.c curve25519-mul.c curve25519-eh-to-x.c \
Daiki Ueno's avatar
Daiki Ueno committed
191
		  curve448-mul-g.c curve448-mul.c curve448-eh-to-x.c \
192
		  eddsa-compress.c eddsa-decompress.c eddsa-expand.c \
193
		  eddsa-hash.c eddsa-pubkey.c eddsa-sign.c eddsa-verify.c \
194
		  ed25519-sha512.c ed25519-sha512-pubkey.c \
195 196 197
		  ed25519-sha512-sign.c ed25519-sha512-verify.c

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

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

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

220 221
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
222
	  $(OPT_SOURCES) \
223
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
224

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

250
# Rules building static libraries
251 252
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) \
	      $(OPT_NETTLE_SOURCES:.c=.$(OBJEXT)) $(OPT_NETTLE_OBJS)
253

254 255
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) \
	       $(OPT_HOGWEED_OBJS) @IF_MINI_GMP@ mini-gmp.$(OBJEXT)
256

257
libnettle.a: $(nettle_OBJS)
258
	-rm -f $@
259
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
260
	$(RANLIB) $@
261
	echo nettle > libnettle.stamp
262

263 264 265 266
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@
267
	echo hogweed > libhogweed.stamp
268

269
.c.$(OBJEXT):
270
	$(COMPILE) -c $< \
271 272
	&& $(DEP_PROCESS)

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

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

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

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

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

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

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

338 339 340 341
desdata.stamp: desdata.c
	$(MAKE) desdata$(EXEEXT_FOR_BUILD)
	echo stamp > desdata.stamp

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

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

389
# Parameter choices mostly the same as for ecc-256.h.
390
ecc-25519.h: eccdata.stamp
391
	./eccdata$(EXEEXT_FOR_BUILD) 255 11 6 $(NUMB_BITS) > $@T && mv $@T $@
392

Daiki Ueno's avatar
Daiki Ueno committed
393 394 395
ecc-448.h: eccdata.stamp
	./eccdata$(EXEEXT_FOR_BUILD) 448 38 6 $(NUMB_BITS) > $@T && mv $@T $@

396
eccdata.stamp: eccdata.c
397
	$(MAKE) eccdata$(EXEEXT_FOR_BUILD)
398 399 400 401 402 403 404
	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
405
ecc-25519.$(OBJEXT): ecc-25519.h
Daiki Ueno's avatar
Daiki Ueno committed
406
ecc-448.$(OBJEXT): ecc-448.h
407

408 409 410 411
.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 
412

413 414
# Texinfo rules
.texinfo.info:
415
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
416 417

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

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

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

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

434 435
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
436

437 438
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
439

440 441 442
# 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
443
	cd $(srcdir) && $(AUTOHEADER)
444
	echo timestamp > $(srcdir)/stamp-h.in
445

446 447
config.status: configure
	./config.status --recheck
448

449 450 451 452
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
453

454 455
Makefile: Makefile.in config.status
	./config.status $@
456

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

Niels Möller's avatar
Niels Möller committed
460 461 462
config.m4: config.m4.in config.status
	./config.status $@

463 464 465 466 467 468
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

469 470 471
version.h: version.h.in config.status
	./config.status $@

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

install-static: $(LIBTARGETS)
478
	$(MKDIR_P) $(DESTDIR)$(libdir)
479 480 481 482
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

483 484 485 486 487
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
488
	$(MKDIR_P) $(DESTDIR)$(libdir)
489
	$(INSTALL_DATA) $(LIBNETTLE_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
490 491
	[ -z "$(LIBNETTLE_SONAME)" ] \
                || (cd $(DESTDIR)$(libdir) \
492 493 494
		&& rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
495

496 497 498 499 500
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
501
	$(MKDIR_P) $(DESTDIR)$(libdir)
502
	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
503
	[ -z "$(LIBHOGWEED_SONAME)" ] \
504
                || (cd $(DESTDIR)$(libdir) \
505 506 507
		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
508

509 510 511 512
# 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.

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

523 524
# NOTE: I'd like to use $^, but that's a GNU extension. $? should be
# more portable, and equivalent for phony targets.
525
install-headers: $(INSTALL_HEADERS)
526
	$(MKDIR_P) $(DESTDIR)$(includedir)/nettle
527 528 529 530 531 532
	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
533

534 535 536 537 538 539
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

540
# Uninstall
541
uninstall-here: uninstall-info uninstall-headers uninstall-static \
542
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
543 544

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

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
562 563
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

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

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

572 573 574 575
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

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

580 581 582 583 584
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

585 586 587 588
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

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

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

clean-here:
658
	-rm -f $(TARGETS) *.$(OBJEXT) *.s *.so *.dll *.a \
659
		ecc-192.h ecc-224.h ecc-256.h ecc-384.h ecc-521.h ecc-25519.h \
Daiki Ueno's avatar
Daiki Ueno committed
660
		ecc-448.h \
661
		aesdata$(EXEEXT_FOR_BUILD) \
662
		desdata$(EXEEXT_FOR_BUILD) \
663 664 665
		twofishdata$(EXEEXT_FOR_BUILD) \
		shadata$(EXEEXT_FOR_BUILD) \
		gcmdata$(EXEEXT_FOR_BUILD) \
666
		eccdata$(EXEEXT_FOR_BUILD) eccdata.stamp
667
	-rm -rf .lib libnettle.stamp libhogweed.stamp
668

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

675 676 677
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

678
tags-here:	
679
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
680

681
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
682
@DEP_INCLUDE@ $(DEP_FILES)