Makefile.in 23.2 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 \
Dmitry Baryshkov's avatar
Dmitry Baryshkov committed
105
		 cmac.c cmac64.c cmac-aes128.c cmac-aes256.c \
Niels Möller's avatar
Niels Möller committed
106
		 gosthash94.c gosthash94-meta.c \
107
		 hmac.c hmac-md5.c hmac-ripemd160.c hmac-sha1.c \
108
		 hmac-sha224.c hmac-sha256.c hmac-sha384.c hmac-sha512.c \
109
		 knuth-lfib.c hkdf.c \
110
		 md2.c md2-meta.c md4.c md4-meta.c \
111
		 md5.c md5-compress.c md5-compat.c md5-meta.c \
112
		 memeql-sec.c memxor.c memxor3.c \
113
		 nettle-lookup-hash.c \
114 115
		 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
116 117 118
		 pbkdf2.c pbkdf2-hmac-sha1.c pbkdf2-hmac-sha256.c \
		 poly1305-aes.c poly1305-internal.c \
		 realloc.c \
119
		 ripemd160.c ripemd160-compress.c ripemd160-meta.c \
120
		 salsa20-core-internal.c \
121
		 salsa20-crypt.c salsa20r12-crypt.c salsa20-set-key.c \
122 123
		 salsa20-set-nonce.c \
		 salsa20-128-set-key.c salsa20-256-set-key.c \
124 125
		 sha1.c sha1-compress.c sha1-meta.c \
		 sha256.c sha256-compress.c sha224-meta.c sha256-meta.c \
126
		 sha512.c sha512-compress.c sha384-meta.c sha512-meta.c \
127
		 sha512-224-meta.c sha512-256-meta.c \
128 129 130
		 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\
131 132
		 serpent-set-key.c serpent-encrypt.c serpent-decrypt.c \
		 serpent-meta.c \
133
		 twofish.c twofish-meta.c \
Niels Möller's avatar
Niels Möller committed
134 135 136
		 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 \
137
		 version.c \
Niels Möller's avatar
Niels Möller committed
138
		 write-be32.c write-le32.c write-le64.c \
139 140
		 yarrow256.c yarrow_key_event.c \
		 xts.c xts-aes128.c xts-aes256.c
141

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

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

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

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

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

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

244
# Rules building static libraries
245 246
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) \
	      $(OPT_NETTLE_SOURCES:.c=.$(OBJEXT)) $(OPT_NETTLE_OBJS)
247

248 249
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) \
	       $(OPT_HOGWEED_OBJS) @IF_MINI_GMP@ mini-gmp.$(OBJEXT)
250

251
libnettle.a: $(nettle_OBJS)
252
	-rm -f $@
253
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
254
	$(RANLIB) $@
255
	echo nettle > libnettle.stamp
256

257 258 259 260
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@
261
	echo hogweed > libhogweed.stamp
262

263
.c.$(OBJEXT):
264
	$(COMPILE) -c $< \
265 266
	&& $(DEP_PROCESS)

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

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

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

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

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

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

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

332 333 334 335
desdata.stamp: desdata.c
	$(MAKE) desdata$(EXEEXT_FOR_BUILD)
	echo stamp > desdata.stamp

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

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

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

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

398 399 400 401
.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 
402

403 404
# Texinfo rules
.texinfo.info:
405
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
406 407

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

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

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

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

424 425
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
426

427 428
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
429

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

436 437
config.status: configure
	./config.status --recheck
438

439 440 441 442
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
443

444 445
Makefile: Makefile.in config.status
	./config.status $@
446

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

Niels Möller's avatar
Niels Möller committed
450 451 452
config.m4: config.m4.in config.status
	./config.status $@

453 454 455 456 457 458
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

459 460 461
version.h: version.h.in config.status
	./config.status $@

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

install-static: $(LIBTARGETS)
468
	$(MKDIR_P) $(DESTDIR)$(libdir)
469 470 471 472
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

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

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

499 500 501 502
# 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.

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

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

524 525 526 527 528 529
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

530
# Uninstall
531
uninstall-here: uninstall-info uninstall-headers uninstall-static \
532
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
533 534

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

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
552 553
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

554 555 556 557
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

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

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

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

570 571 572 573 574
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

575 576 577 578
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

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

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

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

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

664 665 666
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

667
tags-here:	
668
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
669

670
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
671
@DEP_INCLUDE@ $(DEP_FILES)