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 \
Niels Möller's avatar
Niels Möller committed
183
		  ecc-mul-g-eh.c ecc-mul-a-eh.c ecc-mul-m.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 \
Daiki Ueno's avatar
Daiki Ueno committed
189
		  curve448-mul-g.c curve448-mul.c curve448-eh-to-x.c \
190
		  eddsa-compress.c eddsa-decompress.c eddsa-expand.c \
191
		  eddsa-hash.c eddsa-pubkey.c eddsa-sign.c eddsa-verify.c \
192
		  ed25519-sha512-pubkey.c \
193 194 195
		  ed25519-sha512-sign.c ed25519-sha512-verify.c

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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