Makefile.in 23.3 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 \
178
		  ecc-25519.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 183
		  ecc-dup-eh.c ecc-add-eh.c ecc-add-ehh.c \
		  ecc-mul-g-eh.c ecc-mul-a-eh.c \
184
		  ecc-mul-g.c ecc-mul-a.c ecc-hash.c ecc-random.c \
185
		  ecc-point.c ecc-scalar.c ecc-point-mul.c ecc-point-mul-g.c \
186
		  ecc-ecdsa-sign.c ecdsa-sign.c \
187
		  ecc-ecdsa-verify.c ecdsa-verify.c ecdsa-keygen.c \
188
		  curve25519-mul-g.c curve25519-mul.c curve25519-eh-to-x.c \
189
		  eddsa-compress.c eddsa-decompress.c eddsa-expand.c \
190
		  eddsa-hash.c eddsa-pubkey.c eddsa-sign.c eddsa-verify.c \
191
		  ed25519-sha512-pubkey.c \
192 193 194
		  ed25519-sha512-sign.c ed25519-sha512-verify.c

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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