xref: /freebsd/lib/libmd/Makefile (revision d92e987421001c365216b039f8c3303939c195f7)
1SHLIBDIR?= /lib
2
3.include <src.opts.mk>
4.include <bsd.compiler.mk>
5
6PACKAGE=	runtime
7LIB=	md
8SHLIB_MAJOR= 7
9SRCS=	md4c.c md5c.c md4hl.c md5hl.c \
10	rmd160c.c rmd160hl.c \
11	sha0c.c sha0hl.c sha1c.c sha1hl.c \
12	sha224hl.c sha256c.c sha256hl.c \
13	sha384hl.c \
14	sha512c.c sha512hl.c sha512t224hl.c sha512t256hl.c \
15	skein.c skein_block.c \
16	skein256hl.c skein512hl.c skein1024hl.c
17INCS=	md4.h md5.h ripemd.h sha.h sha224.h sha256.h sha384.h sha512.h \
18	sha512t.h skein.h skein_port.h skein_freebsd.h skein_iv.h
19
20WARNS?=	0
21
22VERSION_DEF=	${SRCTOP}/lib/libc/Versions.def
23SYMBOL_MAPS=	${.CURDIR}/Symbol.map
24
25MAN+=	md4.3 md5.3 ripemd.3 sha.3 sha256.3 sha512.3 skein.3
26MLINKS+=md4.3 MD4Init.3 md4.3 MD4Update.3 md4.3 MD4Final.3
27MLINKS+=md4.3 MD4End.3  md4.3 MD4File.3   md4.3 MD4FileChunk.3
28MLINKS+=md4.3 MD4Data.3
29MLINKS+=md5.3 MD5Init.3 md5.3 MD5Update.3 md5.3 MD5Final.3
30MLINKS+=md5.3 MD5End.3  md5.3 MD5File.3   md5.3 MD5FileChunk.3
31MLINKS+=md5.3 MD5Data.3
32MLINKS+=ripemd.3 RIPEMD160_Init.3  ripemd.3 RIPEMD160_Update.3
33MLINKS+=ripemd.3 RIPEMD160_Final.3 ripemd.3 RIPEMD160_Data.3
34MLINKS+=ripemd.3 RIPEMD160_End.3   ripemd.3 RIPEMD160_File.3
35MLINKS+=ripemd.3 RIPEMD160_FileChunk.3
36MLINKS+=sha.3 SHA_Init.3  sha.3 SHA_Update.3  sha.3 SHA_Final.3
37MLINKS+=sha.3 SHA_End.3   sha.3 SHA_File.3    sha.3 SHA_FileChunk.3
38MLINKS+=sha.3 SHA_Data.3
39MLINKS+=sha.3 SHA1_Init.3 sha.3 SHA1_Update.3 sha.3 SHA1_Final.3
40MLINKS+=sha.3 SHA1_End.3  sha.3 SHA1_File.3   sha.3 SHA1_FileChunk.3
41MLINKS+=sha.3 SHA1_Data.3
42MLINKS+=sha256.3 SHA224_Init.3  sha256.3 SHA224_Update.3
43MLINKS+=sha256.3 SHA224_Final.3 sha256.3 SHA224_End.3
44MLINKS+=sha256.3 SHA224_File.3  sha256.3 SHA224_FileChunk.3
45MLINKS+=sha256.3 SHA224_Data.3
46MLINKS+=sha256.3 SHA256_Init.3  sha256.3 SHA256_Update.3
47MLINKS+=sha256.3 SHA256_Final.3 sha256.3 SHA256_End.3
48MLINKS+=sha256.3 SHA256_File.3  sha256.3 SHA256_FileChunk.3
49MLINKS+=sha256.3 SHA256_Data.3
50MLINKS+=sha512.3 SHA384_Init.3  sha512.3 SHA384_Update.3
51MLINKS+=sha512.3 SHA384_Final.3 sha512.3 SHA384_End.3
52MLINKS+=sha512.3 SHA384_File.3  sha512.3 SHA384_FileChunk.3
53MLINKS+=sha512.3 SHA384_Data.3  sha512.3 sha384.3
54MLINKS+=sha512.3 SHA512_Init.3  sha512.3 SHA512_Update.3
55MLINKS+=sha512.3 SHA512_Final.3 sha512.3 SHA512_End.3
56MLINKS+=sha512.3 SHA512_File.3  sha512.3 SHA512_FileChunk.3
57MLINKS+=sha512.3 SHA512_Data.3
58MLINKS+=sha512.3 SHA512_224_Init.3  sha512.3 SHA512_224_Update.3
59MLINKS+=sha512.3 SHA512_224_Final.3 sha512.3 SHA512_224_End.3
60MLINKS+=sha512.3 SHA512_224_File.3  sha512.3 SHA512_224_FileChunk.3
61MLINKS+=sha512.3 SHA512_224_Data.3
62MLINKS+=sha512.3 SHA512_256_Init.3  sha512.3 SHA512_256_Update.3
63MLINKS+=sha512.3 SHA512_256_Final.3 sha512.3 SHA512_256_End.3
64MLINKS+=sha512.3 SHA512_256_File.3  sha512.3 SHA512_256_FileChunk.3
65MLINKS+=sha512.3 SHA512_256_Data.3
66MLINKS+=skein.3 SKEIN256_Init.3  skein.3 SKEIN256_Update.3
67MLINKS+=skein.3 SKEIN256_Final.3 skein.3 SKEIN256_End.3
68MLINKS+=skein.3 SKEIN256_File.3  skein.3 SKEIN256_FileChunk.3
69MLINKS+=skein.3 SKEIN256_Data.3  skein.3 skein256.3
70MLINKS+=skein.3 SKEIN512_Init.3  skein.3 SKEIN512_Update.3
71MLINKS+=skein.3 SKEIN512_Final.3 skein.3 SKEIN512_End.3
72MLINKS+=skein.3 SKEIN512_File.3  skein.3 SKEIN512_FileChunk.3
73MLINKS+=skein.3 SKEIN512_Data.3  skein.3 skein512.3
74MLINKS+=skein.3 SKEIN1024_Init.3  skein.3 SKEIN1024_Update.3
75MLINKS+=skein.3 SKEIN1024_Final.3 skein.3 SKEIN1024_End.3
76MLINKS+=skein.3 SKEIN1024_File.3  skein.3 SKEIN1024_FileChunk.3
77MLINKS+=skein.3 SKEIN1024_Data.3  skein.3 skein1024.3
78
79CLEANFILES+=	md[245]hl.c md[245].ref md[245].3 mddriver \
80		rmd160.ref rmd160hl.c rmddriver \
81		sha0.ref sha0hl.c sha1.ref sha1hl.c shadriver \
82		sha224.ref sha256.ref sha224hl.c sha256hl.c \
83		sha384hl.c sha384.ref \
84		sha512.ref sha512hl.c \
85		sha512t224.ref sha512t224hl.c \
86		sha512t256.ref sha512t256hl.c \
87		skein256hl.c skein512hl.c skein1024hl.c \
88		skein256.ref skein512.ref skein1024.ref \
89		skeindriver
90
91# Need src tree sys/md5.h for MD5FileChunk prototype on older systems.
92SRCS+=		sys/md5.h
93CLEANDIRS=	sys
94CFLAGS+=	-I.
95sys/md5.h: ${SRCTOP}/sys/${.TARGET} .NOMETA
96	ln -sf ${.ALLSRC} ${.TARGET}
97
98# Define WEAK_REFS to provide weak aliases for libmd symbols
99#
100# Note that the same sources are also used internally by libcrypt,
101# in which case:
102#   * macros are used to rename symbols to libcrypt internal names
103#   * no weak aliases are generated
104CFLAGS+= -I${.CURDIR} -I${SRCTOP}/sys/crypto/sha2
105CFLAGS+= -I${SRCTOP}/sys/crypto/skein
106CFLAGS+= -DWEAK_REFS
107# unroll the 256 and 512 loops, half unroll the 1024
108CFLAGS.skein_block.c+= -DSKEIN_LOOP=995
109.PATH: ${.CURDIR}/${MACHINE_ARCH} ${SRCTOP}/sys/crypto/sha2
110.PATH: ${SRCTOP}/sys/crypto/skein ${SRCTOP}/sys/crypto/skein/${MACHINE_ARCH}
111.PATH: ${SRCTOP}/sys/crypto
112
113USE_ASM_SOURCES?=1
114.if defined(BOOTSTRAPPING) || ${MK_MACHDEP_OPTIMIZATIONS} == no
115# Don't build ASM sources when bootstrapping to avoid toolchain dependencies
116USE_ASM_SOURCES:=0
117.endif
118
119.if ${USE_ASM_SOURCES} != 0
120.if exists(${MACHINE_ARCH}/md5block.S)
121SRCS+=	md5block.S
122CFLAGS+= -DMD5_ASM
123.if exists(${MACHINE_ARCH}/md5dispatch.c)
124SRCS+=  md5dispatch.c
125.endif
126.endif
127.if exists(${MACHINE_ARCH}/sha1block.S)
128SRCS+=	sha1block.S
129CFLAGS+= -DSHA1_ASM
130.if exists(${MACHINE_ARCH}/sha1dispatch.c)
131SRCS+=  sha1dispatch.c
132.endif
133.endif
134.if exists(${MACHINE_ARCH}/rmd160.S)
135SRCS+=	rmd160.S
136CFLAGS+= -DRMD160_ASM
137.endif
138.if exists(${MACHINE_ARCH}/skein_block_asm.S)
139# Fully unroll all loops in the assembly optimized version
140ACFLAGS+= -DSKEIN_LOOP=0
141SRCS+= skein_block_asm.S
142CFLAGS+= -DSKEIN_ASM -DSKEIN_USE_ASM=1792 # list of block functions to replace with assembly: 256+512+1024 = 1792
143# 20201002 Add explict Makefile dependency for r366344 (reenabled assembly
144# optimized version). SKEIN_USE_ASM determines which routines should come from
145# the assembly vs C versions, and skein_block needs to be rebuilt if it changes.
146skein_block.o skein_block.pico: Makefile
147.endif
148.if exists(${MACHINE_ARCH}/rmd160.S) || exists(${MACHINE_ARCH}/skein_block_asm.S)
149ACFLAGS+= -DELF -Wa,--noexecstack
150.endif
151.if ${MACHINE_CPUARCH} == "aarch64"
152SRCS+=	sha256c_arm64.c
153CFLAGS+= -DARM64_SHA2
154CFLAGS.sha256c_arm64.c+= -march=armv8-a+crypto
155.if ${COMPILER_FEATURES:Maarch64-sha512}
156SRCS+=	sha512c_arm64.c
157CFLAGS+= -DARM64_SHA512
158CFLAGS.sha512c_arm64.c+= -march=armv8.2-a+sha3
159.endif # aarch64-sha512
160.endif
161.endif # ${USE_ASM_SOURCES} != 0
162
163md4hl.c: mdXhl.c
164	(echo '#define LENGTH 16'; \
165		sed -e 's/mdX/md4/g' -e 's/MDX/MD4/g' ${.ALLSRC}) > ${.TARGET}
166
167md5hl.c: mdXhl.c
168	(echo '#define LENGTH 16'; \
169		sed -e 's/mdX/md5/g' -e 's/MDX/MD5/g' ${.ALLSRC}) > ${.TARGET}
170
171sha0hl.c: mdXhl.c
172	(echo '#define LENGTH 20'; \
173		sed -e 's/mdX/sha/g' -e 's/MDX/SHA_/g' -e 's/SHA__/SHA_/g' \
174		${.ALLSRC}) > ${.TARGET}
175
176sha1hl.c: mdXhl.c
177	(echo '#define LENGTH 20'; \
178		sed -e 's/mdX/sha/g' -e 's/MDX/SHA1_/g' -e 's/SHA1__/SHA1_/g' \
179		${.ALLSRC}) > ${.TARGET}
180
181sha224hl.c: mdXhl.c
182	(echo '#define LENGTH 28'; \
183		sed -e 's/mdX/sha224/g' -e 's/MDX/SHA224_/g'	\
184			-e  's/SHA224__/SHA224_/g' \
185		${.ALLSRC}) > ${.TARGET}
186
187sha256hl.c: mdXhl.c
188	(echo '#define LENGTH 32'; \
189		sed -e 's/mdX/sha256/g' -e 's/MDX/SHA256_/g'	\
190			-e  's/SHA256__/SHA256_/g' \
191		${.ALLSRC}) > ${.TARGET}
192
193sha384hl.c: mdXhl.c
194	(echo '#define LENGTH 48'; \
195		sed -e 's/mdX/sha384/g' -e 's/MDX/SHA384_/g'	\
196			-e  's/SHA384__/SHA384_/g' \
197		${.ALLSRC}) > ${.TARGET}
198
199sha512hl.c: mdXhl.c
200	(echo '#define LENGTH 64'; \
201		sed -e 's/mdX/sha512/g' -e 's/MDX/SHA512_/g'	\
202			-e  's/SHA512__/SHA512_/g' \
203		${.ALLSRC}) > ${.TARGET}
204
205sha512t224hl.c: mdXhl.c
206	(echo '#define LENGTH 28'; \
207		sed -e 's/mdX/sha512t/g' -e 's/MDX/SHA512_224_/g'	\
208			-e  's/SHA512_224__/SHA512_224_/g' \
209			-e 's/SHA512_224_CTX/SHA512_CTX/g' \
210		${.ALLSRC}) > ${.TARGET}
211
212sha512t256hl.c: mdXhl.c
213	(echo '#define LENGTH 32'; \
214		sed -e 's/mdX/sha512t/g' -e 's/MDX/SHA512_256_/g'	\
215			-e  's/SHA512_256__/SHA512_256_/g' \
216			-e 's/SHA512_256_CTX/SHA512_CTX/g' \
217		${.ALLSRC}) > ${.TARGET}
218
219rmd160hl.c: mdXhl.c
220	(echo '#define LENGTH 20'; \
221		sed -e 's/mdX/ripemd/g' -e 's/MDX/RIPEMD160_/g' \
222			-e 's/RIPEMD160__/RIPEMD160_/g' \
223			${.ALLSRC}) > ${.TARGET}
224
225skein256hl.c: mdXhl.c
226	(echo '#define LENGTH 32'; \
227		sed -e 's/mdX/skein/g' -e 's/MDX/SKEIN256_/g'	\
228			-e  's/SKEIN256__/SKEIN256_/g' \
229		${.ALLSRC}) > ${.TARGET}
230
231skein512hl.c: mdXhl.c
232	(echo '#define LENGTH 64'; \
233		sed -e 's/mdX/skein/g' -e 's/MDX/SKEIN512_/g'	\
234			-e  's/SKEIN512__/SKEIN512_/g' \
235		${.ALLSRC}) > ${.TARGET}
236
237skein1024hl.c: mdXhl.c
238	(echo '#define LENGTH 128'; \
239		sed -e 's/mdX/skein/g' -e 's/MDX/SKEIN1024_/g'	\
240			-e  's/SKEIN1024__/SKEIN1024_/g' \
241		${.ALLSRC}) > ${.TARGET}
242
243
244.for i in 2 4 5
245md${i}.3: ${.CURDIR}/mdX.3
246	sed -e "s/mdX/md${i}/g" -e "s/MDX/MD${i}/g" ${.ALLSRC} > ${.TARGET}
247	cat ${.CURDIR}/md${i}.copyright >> ${.TARGET}
248.endfor
249
250HAS_TESTS=
251SUBDIR.${MK_TESTS}+=	tests
252
253.include <bsd.lib.mk>
254