Makefile.in 23.5 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 132
		 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\
133 134
		 serpent-set-key.c serpent-encrypt.c serpent-decrypt.c \
		 serpent-meta.c \
135
		 twofish.c twofish-meta.c \
Niels Möller's avatar
Niels Möller committed
136 137 138
		 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 \
139
		 version.c \
Niels Möller's avatar
Niels Möller committed
140
		 write-be32.c write-le32.c write-le64.c \
141 142
		 yarrow256.c yarrow_key_event.c \
		 xts.c xts-aes128.c xts-aes256.c
143

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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