Makefile.in 23.7 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 \
Niels Möller's avatar
Niels Möller committed
195 196 197
		  ed25519-sha512-sign.c ed25519-sha512-verify.c \
		  ed448-shake256.c ed448-shake256-pubkey.c \
		  ed448-shake256-sign.c ed448-shake256-verify.c
198 199

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

410 411 412 413
.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 
414

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

511 512 513 514
# 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.

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

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

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

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

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

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
564 565
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

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

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

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

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

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

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

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

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

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

clean-here:
660
	-rm -f $(TARGETS) *.$(OBJEXT) *.s *.so *.dll *.a \
661
		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
662
		ecc-448.h \
663
		aesdata$(EXEEXT_FOR_BUILD) \
664
		desdata$(EXEEXT_FOR_BUILD) \
665 666 667
		twofishdata$(EXEEXT_FOR_BUILD) \
		shadata$(EXEEXT_FOR_BUILD) \
		gcmdata$(EXEEXT_FOR_BUILD) \
668
		eccdata$(EXEEXT_FOR_BUILD) eccdata.stamp
669
	-rm -rf .lib libnettle.stamp libhogweed.stamp
670

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

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

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

683
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
684
@DEP_INCLUDE@ $(DEP_FILES)