Makefile.in 22.8 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
		 chacha-crypt.c chacha-core-internal.c \
Niels Möller's avatar
Niels Möller committed
93
		 chacha-poly1305.c chacha-poly1305-meta.c \
94
		 chacha-set-key.c chacha-set-nonce.c \
95
		 ctr.c ctr16.c des.c des3.c des-compat.c \
96
		 eax.c eax-aes128.c eax-aes128-meta.c \
97 98 99 100
		 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
101
		 gcm-camellia128.c gcm-camellia128-meta.c \
Niels Möller's avatar
Niels Möller committed
102
		 gcm-camellia256.c gcm-camellia256-meta.c \
103
		 cmac.c cmac-aes128.c cmac-aes256.c \
Niels Möller's avatar
Niels Möller committed
104
		 gosthash94.c gosthash94-meta.c \
105
		 hmac.c hmac-md5.c hmac-ripemd160.c hmac-sha1.c \
106
		 hmac-sha224.c hmac-sha256.c hmac-sha384.c hmac-sha512.c \
107
		 knuth-lfib.c hkdf.c \
108
		 md2.c md2-meta.c md4.c md4-meta.c \
109
		 md5.c md5-compress.c md5-compat.c md5-meta.c \
110
		 memeql-sec.c memxor.c memxor3.c \
111
		 nettle-lookup-hash.c \
112 113
		 nettle-meta-aeads.c nettle-meta-armors.c \
		 nettle-meta-ciphers.c nettle-meta-hashes.c \
Niels Möller's avatar
Niels Möller committed
114 115 116
		 pbkdf2.c pbkdf2-hmac-sha1.c pbkdf2-hmac-sha256.c \
		 poly1305-aes.c poly1305-internal.c \
		 realloc.c \
117
		 ripemd160.c ripemd160-compress.c ripemd160-meta.c \
118
		 salsa20-core-internal.c \
119
		 salsa20-crypt.c salsa20r12-crypt.c salsa20-set-key.c \
120 121
		 salsa20-set-nonce.c \
		 salsa20-128-set-key.c salsa20-256-set-key.c \
122 123
		 sha1.c sha1-compress.c sha1-meta.c \
		 sha256.c sha256-compress.c sha224-meta.c sha256-meta.c \
124
		 sha512.c sha512-compress.c sha384-meta.c sha512-meta.c \
125
		 sha512-224-meta.c sha512-256-meta.c \
126 127 128
		 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\
129 130
		 serpent-set-key.c serpent-encrypt.c serpent-decrypt.c \
		 serpent-meta.c \
131
		 twofish.c twofish-meta.c \
Niels Möller's avatar
Niels Möller committed
132 133 134
		 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 \
135
		 version.c \
Niels Möller's avatar
Niels Möller committed
136
		 write-be32.c write-le32.c write-le64.c \
137
		 yarrow256.c yarrow_key_event.c
138

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

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

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

207
INSTALL_HEADERS = $(HEADERS) nettle-stdint.h version.h @IF_MINI_GMP@ mini-gmp.h
208

209 210
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
211
	  $(OPT_SOURCES) \
212
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
213

214 215
# NOTE: This list must include all source files, with no duplicates,
# independently of which source files are included in the build.
216 217
DISTFILES = $(SOURCES) $(HEADERS) getopt.h getopt_int.h \
	.bootstrap run-tests \
218
	aclocal.m4 configure.ac \
219
	configure stamp-h.in version.h.in \
220
	libnettle.map.in libhogweed.map.in \
221
	config.guess config.sub install-sh texinfo.tex \
222
	config.h.in config.m4.in config.make.in	Makefile.in \
223
	README CONTRIBUTING.md AUTHORS COPYING.LESSERv3 COPYINGv2 COPYINGv3 \
Niels Möller's avatar
Niels Möller committed
224
	INSTALL NEWS TODO ChangeLog \
225
	nettle.pc.in hogweed.pc.in \
226
	$(des_headers) descore.README desdata.stamp \
227 228
	aes-internal.h camellia-internal.h serpent-internal.h \
	cast128_sboxes.h desinfo.h desCode.h \
229
	memxor-internal.h nettle-internal.h nettle-write.h \
230
	ctr-internal.h \
231
	gmp-glue.h ecc-internal.h fat-setup.h \
232
	mini-gmp.h asm.m4 \
233
	nettle.texinfo nettle.info nettle.html nettle.pdf sha-example.c
234

235
# Rules building static libraries
236 237
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) \
	      $(OPT_NETTLE_SOURCES:.c=.$(OBJEXT)) $(OPT_NETTLE_OBJS)
238

239 240
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) \
	       $(OPT_HOGWEED_OBJS) @IF_MINI_GMP@ mini-gmp.$(OBJEXT)
241

242
libnettle.a: $(nettle_OBJS)
243
	-rm -f $@
244
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
245
	$(RANLIB) $@
246
	echo nettle > libnettle.stamp
247

248 249 250 251
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@
252
	echo hogweed > libhogweed.stamp
253

254
.c.$(OBJEXT):
255
	$(COMPILE) -c $< \
256 257
	&& $(DEP_PROCESS)

258
# Rules building shared libraries.
259
$(LIBNETTLE_FORLINK): $(nettle_OBJS)
260
	$(LIBNETTLE_LINK) $(nettle_OBJS) @EXTRA_LINKER_FLAGS@ -o $@ $(LIBNETTLE_LIBS)
261
	-mkdir .lib 2>/dev/null
262 263 264
	(cd .lib \
          && rm -f $(LIBNETTLE_FORLINK) \
	  && $(LN_S) ../$(LIBNETTLE_FORLINK) $(LIBNETTLE_FORLINK) \
265
	  && [ -z "$(LIBNETTLE_SONAME)" ] \
266 267
	  || { rm -f $(LIBNETTLE_SONAME) \
	       && $(LN_S) $(LIBNETTLE_FORLINK) $(LIBNETTLE_SONAME) ; } )
268
	echo nettle > libnettle.stamp
269

270
$(LIBHOGWEED_FORLINK): $(hogweed_OBJS) $(LIBNETTLE_FORLINK)
271
	$(LIBHOGWEED_LINK) $(hogweed_OBJS) @EXTRA_HOGWEED_LINKER_FLAGS@ -o $@ $(LIBHOGWEED_LIBS)
272
	-mkdir .lib 2>/dev/null
273 274 275
	(cd .lib \
          && rm -f $(LIBHOGWEED_FORLINK) \
	  && $(LN_S) ../$(LIBHOGWEED_FORLINK) $(LIBHOGWEED_FORLINK) \
276
	  && [ -z "$(LIBHOGWEED_SONAME)" ] \
277 278
	  || { rm -f $(LIBHOGWEED_SONAME) \
	       && $(LN_S) $(LIBHOGWEED_FORLINK) $(LIBHOGWEED_SONAME) ; } )
279
	echo hogweed > libhogweed.stamp
280

Niels Möller's avatar
Niels Möller committed
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
# 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)

304
eccdata$(EXEEXT_FOR_BUILD): eccdata.c mini-gmp.c mini-gmp.h
305
	$(CC_FOR_BUILD) `test -f eccdata.c || echo '$(srcdir)/'`eccdata.c \
Niels Möller's avatar
Niels Möller committed
306
	-o eccdata$(EXEEXT_FOR_BUILD)
307

Niels Möller's avatar
Niels Möller committed
308 309 310 311
eccparams$(EXEEXT_FOR_BUILD): eccparams.c
	$(CC_FOR_BUILD) `test -f eccparams.c || echo '$(srcdir)/'`eccparams.c \
	-o eccparams$(EXEEXT_FOR_BUILD)

312 313
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
314 315
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
316 317

# Generate DES headers.
318
$(des_headers): desdata.stamp
319
	f="$(srcdir)/`basename $@`"; \
320
	  ./desdata$(EXEEXT_FOR_BUILD) $(@F) > $${f}T; \
321
	  test -s $${f}T && mv -f $${f}T $$f
322

323 324 325 326
desdata.stamp: desdata.c
	$(MAKE) desdata$(EXEEXT_FOR_BUILD)
	echo stamp > desdata.stamp

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

329 330 331 332 333 334 335
# 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
336
ecc-192.h: eccdata.stamp
337 338 339 340 341 342 343
	./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
344
ecc-224.h: eccdata.stamp
345 346 347 348 349 350 351
	./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
352
ecc-256.h: eccdata.stamp
353 354 355 356 357 358 359 360 361 362
	./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
363
ecc-384.h: eccdata.stamp
364 365 366 367 368 369 370
	./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
371
ecc-521.h: eccdata.stamp
372
	./eccdata$(EXEEXT_FOR_BUILD) 521 44 6 $(NUMB_BITS) > $@T && mv $@T $@
373

374
# Parameter choices mostly the same as for ecc-256.h.
375
ecc-25519.h: eccdata.stamp
376
	./eccdata$(EXEEXT_FOR_BUILD) 255 11 6 $(NUMB_BITS) > $@T && mv $@T $@
377

378
eccdata.stamp: eccdata.c
379
	$(MAKE) eccdata$(EXEEXT_FOR_BUILD)
380 381 382 383 384 385 386
	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
387
ecc-25519.$(OBJEXT): ecc-25519.h
388

389 390 391 392
.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 
393

394 395
# Texinfo rules
.texinfo.info:
396
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
397 398

.texinfo.html:
399
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
400
	  --output $@T `basename "$<"` \
401
	  && test -s $@T && mv -f $@T $@
402

403
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
404
	cd $(srcdir) && texi2dvi -b `basename "$<"`
405 406

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

409
# Avoid rebuilding .dvi and .ps files when the .texinfo source is unchanged.
410
PS2PDFFLAGS=-dCompatibilityLevel=1.3 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
411 412 413
.texinfo.pdf:
	$(MAKE) `basename "$<" .texinfo`.ps
	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename "$<" .texinfo`.ps
414

415 416
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
417

418 419
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
420

421 422 423
# 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
424
	cd $(srcdir) && $(AUTOHEADER)
425
	echo timestamp > $(srcdir)/stamp-h.in
426

427 428
config.status: configure
	./config.status --recheck
429

430 431 432 433
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
434

435 436
Makefile: Makefile.in config.status
	./config.status $@
437

438 439
config.make: config.make.in config.status
	./config.status $@
440

Niels Möller's avatar
Niels Möller committed
441 442 443
config.m4: config.m4.in config.status
	./config.status $@

444 445 446 447 448 449
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

450 451 452
version.h: version.h.in config.status
	./config.status $@

453
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
454 455
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
456
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
457 458

install-static: $(LIBTARGETS)
459
	$(MKDIR_P) $(DESTDIR)$(libdir)
460 461 462 463
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

464 465 466 467 468
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
469
	$(MKDIR_P) $(DESTDIR)$(libdir)
470
	$(INSTALL_DATA) $(LIBNETTLE_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
471 472
	[ -z "$(LIBNETTLE_SONAME)" ] \
                || (cd $(DESTDIR)$(libdir) \
473 474 475
		&& rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
476

477 478 479 480 481
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
482
	$(MKDIR_P) $(DESTDIR)$(libdir)
483
	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
484
	[ -z "$(LIBHOGWEED_SONAME)" ] \
485
                || (cd $(DESTDIR)$(libdir) \
486 487 488
		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
489

490 491 492 493
# 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.

494
install-info: nettle.info
495
	$(MKDIR_P) $(DESTDIR)$(infodir)
496 497 498
	f=nettle.info ; \
	[ -f $$f ] || f="$(srcdir)/$$f" ; \
	$(INSTALL_DATA) "$$f" $(DESTDIR)$(infodir) ; \
499 500
	if (install-info --version && \
	    install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
501
	  install-info --info-dir="$(DESTDIR)$(infodir)" "$$f" ; \
502 503
	else : ; fi

504 505
# NOTE: I'd like to use $^, but that's a GNU extension. $? should be
# more portable, and equivalent for phony targets.
506
install-headers: $(INSTALL_HEADERS)
507
	$(MKDIR_P) $(DESTDIR)$(includedir)/nettle
508 509 510 511 512 513
	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
514

515 516 517 518 519 520
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

521
# Uninstall
522
uninstall-here: uninstall-info uninstall-headers uninstall-static \
523
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
524 525

uninstall-static:
526
	for f in $(LIBTARGETS) ; do \
527 528
	  rm -f $(DESTDIR)$(libdir)/$$f ; \
	done
529 530 531 532 533 534 535 536 537 538 539 540 541 542

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
543 544
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

545 546 547 548
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
549 550 551 552
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

553 554 555 556
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
557 558 559
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
560

561 562 563 564 565
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

566 567 568 569
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

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

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

clean-here:
639
	-rm -f $(TARGETS) *.$(OBJEXT) *.s *.so *.dll *.a \
640
		ecc-192.h ecc-224.h ecc-256.h ecc-384.h ecc-521.h ecc-25519.h \
641
		aesdata$(EXEEXT_FOR_BUILD) \
642
		desdata$(EXEEXT_FOR_BUILD) \
643 644 645
		twofishdata$(EXEEXT_FOR_BUILD) \
		shadata$(EXEEXT_FOR_BUILD) \
		gcmdata$(EXEEXT_FOR_BUILD) \
646
		eccdata$(EXEEXT_FOR_BUILD) eccdata.stamp
647
	-rm -rf .lib libnettle.stamp libhogweed.stamp
648

649
distclean-here: clean-here
650
	-rm -f config.h stamp-h config.log config.status machine.m4 \
651
	config.make config.m4 Makefile nettle-stdint.h version.h \
652
	nettle.pc hogweed.pc libnettle.map libhogweed.map \
653
	*.asm *.d
654

655 656 657
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

658
tags-here:	
659
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
660

661
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
662
@DEP_INCLUDE@ $(DEP_FILES)