xref: /freebsd/share/mk/src.libnames.mk (revision 64038db825d64fb4827fc8ee264ea0fa1a046d82)
1#
2# The include file <src.libnames.mk> define library names suitable
3# for INTERNALLIB and PRIVATELIB definition
4
5.if !target(__<bsd.init.mk>__)
6.error src.libnames.mk cannot be included directly.
7.endif
8
9.if !target(__<src.libnames.mk>__)
10__<src.libnames.mk>__:	.NOTMAIN
11
12.include <src.opts.mk>
13
14_PRIVATELIBS=	\
15		atf_c \
16		atf_cxx \
17		auditd \
18		bsddialog \
19		bsdstat \
20		cbor \
21		devdctl \
22		event1 \
23		fido2 \
24		gmock \
25		gtest \
26		gmock_main \
27		gtest_main \
28		heimipcc \
29		heimipcs \
30		kldelf \
31		ldns \
32		opencsd \
33		pkgconf \
34		samplerate \
35		sqlite3 \
36		ssh \
37		ucl \
38		unbound \
39		yaml \
40		zstd
41
42# Let projects based on FreeBSD append to _PRIVATELIBS
43# by maintaining their own LOCAL_PRIVATELIBS list.
44_PRIVATELIBS+=	${LOCAL_PRIVATELIBS}
45
46_INTERNALLIBS=	\
47		amu \
48		apputils \
49		bsnmptools \
50		c_nossp_pic \
51		cron \
52		der \
53		diff \
54		elftc \
55		fdt \
56		fifolog \
57		ifconfig \
58		ipf \
59		iscsiutil \
60		kadmin_common \
61		kprop_util \
62		krb5apputils \
63		krb5profile \
64		krb5ss \
65		lpr \
66		lua \
67		lutok \
68		netbsd \
69		ntp \
70		ntpevent \
71		nvmf \
72		openbsd \
73		opts \
74		parse \
75		pe \
76		pfctl \
77		pkgecc \
78		pmcstat \
79		sl \
80		sm \
81		smdb \
82		smutil \
83		telnet \
84		util++ \
85		vers \
86		wpaap \
87		wpacommon \
88		wpacrypto \
89		wpadrivers \
90		wpaeap_common \
91		wpaeap_peer \
92		wpaeap_server \
93		wpaeapol_auth \
94		wpaeapol_supp \
95		wpal2_packet \
96		wpapasn \
97		wparadius \
98		wparsn_supp \
99		wpatls \
100		wpautils \
101		wpawps
102
103# Let projects based on FreeBSD append to _INTERNALLIBS
104# by maintaining their own LOCAL_INTERNALLIBS list.
105_INTERNALLIBS+=	${LOCAL_INTERNALLIBS}
106
107_LIBRARIES=	\
108		${_PRIVATELIBS} \
109		${_INTERNALLIBS} \
110		${LOCAL_LIBRARIES} \
111		80211 \
112		9p \
113		alias \
114		archive \
115		asn1 \
116		avl \
117		BlocksRuntime \
118		be \
119		begemot \
120		bluetooth \
121		bsdxml \
122		bsm \
123		bsnmp \
124		bz2 \
125		c \
126		c_pic \
127		calendar \
128		cam \
129		casper \
130		cap_dns \
131		cap_fileargs \
132		cap_grp \
133		cap_net \
134		cap_netdb \
135		cap_pwd \
136		cap_sysctl \
137		cap_syslog \
138		com_err \
139		compiler_rt \
140		crypt \
141		crypto \
142		ctf \
143		cuse \
144		cxxrt \
145		devctl \
146		devdctl \
147		devinfo \
148		devstat \
149		dl \
150		dtrace \
151		dwarf \
152		edit \
153		efivar \
154		elf \
155		execinfo \
156		fetch \
157		formw \
158		geom \
159		gpio \
160		gssapi \
161		gssapi_krb5 \
162		gssrpc \
163		hdb \
164		heimbase \
165		heimntlm \
166		heimsqlite \
167		hx509 \
168		icp \
169		ipsec \
170		ipt \
171		jail \
172		k5crypto \
173		kadm5 \
174		kadmin_common \
175		kafs5 \
176		kdb5 \
177		kdc \
178		kiconv \
179		krad \
180		krb5 \
181		krb5profile \
182		krb5support \
183		kvm \
184		l \
185		lzma \
186		m \
187		magic \
188		md \
189		memstat \
190		mp \
191		mt \
192		ncursesw \
193		netgraph \
194		netmap \
195		ngatm \
196		nv \
197		nvpair \
198		opencsd \
199		pam \
200		panel \
201		panelw \
202		pcap \
203		pcsclite \
204		pjdlog \
205		pmc \
206		proc \
207		procstat \
208		pthread \
209		radius \
210		regex \
211		roken \
212		rpcsec_gss \
213		rpcsvc \
214		rt \
215		rtld_db \
216		sbuf \
217		sdp \
218		sm \
219		smb \
220		spl \
221		ssl \
222		ssp_nonshared \
223		stats \
224		stdthreads \
225		supcplusplus \
226		sys \
227		sysdecode \
228		tacplus \
229		termcapw \
230		tinfow \
231		ufs \
232		ugidfw \
233		ulog \
234		umem \
235		usb \
236		usbhid \
237		util \
238		uvmem \
239		verto \
240		vmmapi \
241		wind \
242		wrap \
243		xo \
244		y \
245		ypclnt \
246		z \
247		zdb \
248		zfs_core \
249		zfs \
250		zfsbootenv \
251		zpool \
252		zutil
253
254.if ${MK_KERBEROS} != "no" && ${MK_MITKRB5} != "no"
255_LIBRARIES+= \
256		kadm5clnt_mit \
257		kadm5srv_mit
258.else
259_LIBRARIES+= \
260		kadm5clnt \
261		kadm5srv
262.endif
263
264.if ${MK_BLACKLIST} != "no"
265_LIBRARIES+= \
266		blacklist
267.endif
268
269.if ${MK_BLOCKLIST} != "no"
270_LIBRARIES+= \
271		blocklist
272.endif
273
274.if ${MK_OFED} != "no"
275_LIBRARIES+= \
276		cxgb4 \
277		ibcm \
278		ibmad \
279		ibnetdisc \
280		ibumad \
281		ibverbs \
282		irdma \
283		mlx4 \
284		mlx5 \
285		bnxtre \
286		rdmacm \
287		osmcomp \
288		opensm \
289		osmvendor
290.endif
291
292.if ${MK_BEARSSL} == "yes"
293_LIBRARIES+= \
294		bearssl \
295		secureboot \
296
297LIBBEARSSL?=	${LIBBEARSSLDIR}/libbearssl.a
298LIBSECUREBOOT?=	${LIBSECUREBOOTDIR}/libsecureboot.a
299.endif
300
301.if ${MK_VERIEXEC} == "yes"
302_LIBRARIES+= veriexec
303
304LIBVERIEXEC?=	${LIBVERIEXECDIR}/libveriexec.a
305.endif
306
307# Each library's LIBADD needs to be duplicated here for static linkage of
308# 2nd+ order consumers.  Auto-generating this would be better.
309_DP_80211=	sbuf bsdxml
310_DP_9p=		sbuf
311.if ${MK_CASPER} != "no"
312_DP_9p+=	casper cap_pwd cap_grp
313.endif
314
315# XXX: Not bootstrapped so uses host version on non-FreeBSD, so don't use a
316# FreeBSD-specific dependency list
317.if ${.MAKE.OS} == "FreeBSD" || !defined(BOOTSTRAPPING)
318_DP_archive=	z bz2 lzma bsdxml zstd
319.endif
320_DP_atf_cxx=	atf_c
321_DP_avl=	spl
322_DP_be=		zfs spl nvpair zfsbootenv
323_DP_bsddialog=	ncursesw tinfow
324.if ${MK_OPENSSL} != "no"
325_DP_bsnmp=	crypto
326.endif
327# The libc dependencies are not strictly needed but are defined to make the
328# assert happy.
329_DP_c=		compiler_rt sys
330# Use libssp_nonshared only on i386 and power*.  Other archs emit direct calls
331# to __stack_chk_fail, not __stack_chk_fail_local provided by libssp_nonshared.
332.if ${MK_SSP} != "no" && \
333    (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH:Mpower*} != "")
334_DP_c+=		ssp_nonshared
335.endif
336_DP_cam=	sbuf
337_DP_cap_dns=	nv
338_DP_cap_fileargs=	nv
339_DP_cap_grp=	nv
340_DP_cap_pwd=	nv
341_DP_cap_sysctl=	nv
342_DP_cap_syslog=	nv
343_DP_casper=	nv
344# See comment by _DP_archive above
345.if ${.MAKE.OS} == "FreeBSD" || !defined(BOOTSTRAPPING)
346.if ${MK_OPENSSL} != "no"
347_DP_archive+=	crypto
348.else
349_DP_archive+=	md
350.endif
351.endif
352_DP_ctf=	spl z
353_DP_crypt=	md
354_DP_crypto=	pthread
355_DP_cuse=	pthread
356.if ${MK_BLACKLIST} != "no"
357_DP_blacklist+=	pthread
358.endif
359.if ${MK_BLOCKLIST} != "no"
360_DP_blocklist+=	pthread
361.endif
362_DP_devstat=	kvm
363_DP_dtrace=	ctf elf proc pthread rtld_db xo
364_DP_dwarf=	elf z
365_DP_edit=	tinfow
366_DP_execinfo=	elf
367.if ${MK_OPENSSL} != "no"
368_DP_fetch=	ssl crypto
369.else
370_DP_fetch=	md
371.endif
372.if ${MK_OPENSSH} != "no"
373_DP_fido2+=	crypto z
374.endif
375_DP_fifolog=	z
376_DP_formw=	ncursesw
377_DP_geom=	bsdxml sbuf
378_DP_gmock=	gtest
379_DP_gmock_main=	gmock
380_DP_gtest=	pthread regex
381_DP_gtest_main=	gtest
382_DP_ifconfig=	m
383_DP_ipf=	kvm
384_DP_iscsiutil=	md
385_DP_kldelf=	elf
386_DP_krb5ss=	edit
387_DP_kvm=	elf
388_DP_ldns=	ssl crypto
389_DP_lua=	m
390_DP_lutok=	lua
391_DP_lzma=	md pthread
392_DP_magic=	z
393_DP_memstat=	kvm
394_DP_mp=		crypto
395_DP_mt=		sbuf bsdxml
396_DP_ncursesw=	tinfow
397_DP_netmap=
398_DP_nvmf=	nv
399_DP_nvpair=	spl
400_DP_opencsd=	cxxrt
401_DP_panelw=	ncursesw
402_DP_pam=	radius tacplus md util
403.if ${MK_KERBEROS} != "no" && ${MK_MITKRB5} != "no"
404_DP_pam+=	krb5
405.endif
406.if ${MK_OPENSSH} != "no"
407_DP_pam+=	ssh
408.endif
409.if ${MK_NIS} != "no"
410_DP_pam+=	ypclnt
411.endif
412_DP_pfctl=	nv
413_DP_pjdlog=	util
414_DP_proc=	cxxrt
415.if ${MK_CTF} != "no"
416_DP_proc+=	ctf
417.endif
418_DP_proc+=	elf procstat rtld_db util z
419_DP_procstat=	kvm util elf
420.if ${MK_OPENSSL} == "no"
421_DP_radius=	md
422.else
423_DP_radius=	crypto
424.endif
425_DP_rt=		pthread
426_DP_rtld_db=	elf procstat
427_DP_smb=	kiconv
428_DP_sqlite3=	pthread
429_DP_ssl=	pthread crypto
430_DP_ssh=	crypto crypt z
431.if ${MK_LDNS} != "no"
432_DP_ssh+=	ldns
433.endif
434_DP_stats=	sbuf pthread
435_DP_stdthreads=	pthread
436_DP_sys=	compiler_rt
437# Use libssp_nonshared only on i386 and power*.  Other archs emit direct calls
438# to __stack_chk_fail, not __stack_chk_fail_local provided by libssp_nonshared.
439.if ${MK_SSP} != "no" && \
440    (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH:Mpower*} != "")
441_DP_sys+=	ssp_nonshared
442.endif
443.if !defined(BOOTSTRAPPING)
444_DP_thr=	c sys
445_DP_pthread=	${_DP_thr}
446.endif
447_DP_tacplus=	md pam
448_DP_ucl=	m
449_DP_ulog=	md
450_DP_unbound=	ssl crypto pthread
451_DP_usb=	pthread
452_DP_uvmem=	pthread
453_DP_vmmapi=	util
454_DP_xo=		util
455_DP_zfs=	md pthread rt umem util m avl bsdxml crypto geom nvpair \
456	z zfs_core zutil
457_DP_zfs_core=	nvpair spl zutil
458_DP_zfsbootenv= zfs nvpair
459_DP_zpool=	md pthread z icp spl nvpair avl umem
460_DP_zstd=	pthread
461_DP_ztest=	geom m nvpair umem zpool pthread avl zfs_core spl zutil zfs icp
462_DP_zutil=	avl geom m
463
464# Kerberos support
465.if ${MK_KERBEROS} != "no"
466.if ${MK_MITKRB5} != "no"
467# _DP_krb5support=	no dependencies except for libc
468# _DP_verto=		no dependencies except for libc
469# _DP_apputils=		no dependencies except for libc
470_DP_com_err=		krb5support
471_DP_gssapi_krb5=	krb5 k5crypto com_err krb5profile krb5support
472_DP_gssrpc=		gssapi_krb5 krb5 k5crypto com_err krb5support
473_DP_k5crypto=		com_err krb5support crypto
474_DP_kadm5clnt_mit=	gssrpc gssapi_krb5 krb5 k5crypto krb5support com_err krb5profile
475_DP_kadm5srv_mit=	krb5profile gssrpc gssapi_krb5 kdb5 krb5 k5crypto krb5support com_err
476_DP_kdb5=		gssrpc krb5 k5crypto com_err krb5support gssapi_krb5 krb5profile
477_DP_krad=		krb5 k5crypto com_err krb5profile krb5support verto
478_DP_krb5=		krb5profile k5crypto com_err krb5support
479.else
480_DP_asn1=	com_err roken
481_DP_gssapi_krb5=	gssapi krb5 crypto roken asn1 com_err
482_DP_hdb=	asn1 com_err krb5 roken sqlite3 heimbase
483_DP_heimbase=	pthread
484_DP_heimipcc=	heimbase roken pthread
485_DP_heimipcs=	heimbase roken pthread
486_DP_heimntlm=	crypto com_err krb5 roken
487_DP_hx509=	asn1 com_err crypto roken wind
488_DP_kadm5clnt=	com_err krb5 roken
489_DP_kadm5srv=	com_err hdb krb5 roken
490_DP_kafs5=	asn1 krb5 roken
491_DP_kdc=	roken hdb hx509 krb5 heimntlm asn1 crypto
492_DP_krb5=	asn1 com_err crypt crypto hx509 roken wind heimbase heimipcc
493_DP_roken=	crypt
494_DP_wind=	com_err roken
495.endif
496.endif
497.if ${MK_MITKRB5} == "no"
498_DP_rpcsec_gss=	gssapi
499.else
500_DP_rpcsec_gss=	gssapi_krb5
501.endif
502_DP_smb=	kiconv
503_DP_ulog=	md
504_DP_fifolog=	z
505_DP_ipf=	kvm
506_DP_uvmem=	pthread
507_DP_zfs=	md pthread rt umem util m avl bsdxml crypto geom nvpair \
508	z zfs_core zutil
509_DP_zfsbootenv= zfs nvpair
510_DP_zfs_core=	nvpair spl zutil
511_DP_zpool=	md pthread z icp spl nvpair avl umem
512_DP_zutil=	avl geom m
513_DP_be=		zfs spl nvpair zfsbootenv
514_DP_netmap=
515_DP_ifconfig=	m
516_DP_pfctl=	nv
517_DP_krb5ss=		edit
518
519# OFED support
520.if ${MK_OFED} != "no"
521_DP_bnxtre=	ibverbs pthread
522_DP_cxgb4=	ibverbs pthread
523_DP_ibcm=	ibverbs
524_DP_ibmad=	ibumad
525_DP_ibnetdisc=	osmcomp ibmad ibumad
526_DP_ibumad=
527_DP_ibverbs=
528_DP_irdma=	ibverbs pthread
529_DP_mlx4=	ibverbs pthread
530_DP_mlx5=	ibverbs pthread
531_DP_opensm=	pthread
532_DP_osmcomp=	pthread
533_DP_osmvendor=	ibumad pthread
534_DP_pcap=	ibverbs mlx5 bnxtre
535_DP_rdmacm=	ibverbs
536.endif
537
538# Define special cases
539LDADD_supcplusplus=	-lsupc++
540LIBATF_C=	${LIBDESTDIR}${LIBDIR_BASE}/libprivateatf-c.a
541LIBATF_CXX=	${LIBDESTDIR}${LIBDIR_BASE}/libprivateatf-c++.a
542LDADD_atf_c=	-lprivateatf-c
543LDADD_atf_cxx=	-lprivateatf-c++
544
545LIBGMOCK=	${LIBDESTDIR}${LIBDIR_BASE}/libprivategmock.a
546LIBGMOCK_MAIN=	${LIBDESTDIR}${LIBDIR_BASE}/libprivategmock_main.a
547LIBGTEST=	${LIBDESTDIR}${LIBDIR_BASE}/libprivategtest.a
548LIBGTEST_MAIN=	${LIBDESTDIR}${LIBDIR_BASE}/libprivategtest_main.a
549LDADD_gmock=	-lprivategmock
550LDADD_gtest=	-lprivategtest
551LDADD_gmock_main= -lprivategmock_main
552LDADD_gtest_main= -lprivategtest_main
553
554.for _l in ${_PRIVATELIBS}
555LIB${_l:tu}?=	${LIBDESTDIR}${LIBDIR_BASE}/libprivate${_l}.a
556.endfor
557
558.if ${MK_PIE} != "no"
559PIE_SUFFIX=	_pie
560.endif
561
562.for _l in ${_LIBRARIES}
563.if ${_INTERNALLIBS:M${_l}} || !defined(SYSROOT)
564LDADD_${_l}_L+=		-L${LIB${_l:tu}DIR}
565.endif
566DPADD_${_l}?=	${LIB${_l:tu}}
567.if ${_PRIVATELIBS:M${_l}}
568LDADD_${_l}?=	${LDADD_${_l}_L} -lprivate${_l}
569.elif ${_INTERNALLIBS:M${_l}}
570LDADD_${_l}?=	${LDADD_${_l}_L} -l${_l:S/${PIE_SUFFIX}//}${PIE_SUFFIX}
571.else
572LDADD_${_l}?=	${LDADD_${_l}_L} -l${_l}
573.endif
574# Add in all dependencies for static linkage.
575# Bootstrapping from non-FreeBSD needs special handling, since it overrides
576# NO_SHARED back to yes despite only building static versions of bootstrap
577# libraries (see tools/build/mk/Makefile.boot.pre).
578.if defined(_DP_${_l}) && (${_INTERNALLIBS:M${_l}} || \
579    (defined(NO_SHARED) && ${NO_SHARED:tl} != "no") || \
580    (defined(BOOTSTRAPPING) && ${.MAKE.OS} != "FreeBSD"))
581.for _d in ${_DP_${_l}}
582DPADD_${_l}+=	${DPADD_${_d}}
583LDADD_${_l}+=	${LDADD_${_d}}
584.endfor
585.endif
586.endfor
587
588# These are special cases where the library is broken and anything that uses
589# it needs to add more dependencies.  Broken usually means that it has a
590# cyclic dependency and cannot link its own dependencies.  This is bad, please
591# fix the library instead.
592# Unless the library itself is broken then the proper place to define
593# dependencies is _DP_* above.
594
595# libatf-c++ exposes libatf-c abi hence we need to explicit link to atf_c for
596# atf_cxx
597DPADD_atf_cxx+=	${DPADD_atf_c}
598LDADD_atf_cxx+=	${LDADD_atf_c}
599
600DPADD_gmock+=	${DPADD_gtest}
601LDADD_gmock+=	${LDADD_gtest}
602
603DPADD_gmock_main+=	${DPADD_gmock}
604LDADD_gmock_main+=	${LDADD_gmock}
605
606DPADD_gtest_main+=	${DPADD_gtest}
607LDADD_gtest_main+=	${LDADD_gtest}
608
609# Detect LDADD/DPADD that should be LIBADD, before modifying LDADD here.
610_BADLDADD=
611.for _l in ${LDADD:M-l*:N-l*/*:C,^-l,,}
612.if ${_LIBRARIES:M${_l}} && !${_PRIVATELIBS:M${_l}}
613_BADLDADD+=	${_l}
614.endif
615.endfor
616.if !empty(_BADLDADD)
617.error ${.CURDIR}: These libraries should be LIBADD+=foo rather than DPADD/LDADD+=-lfoo: ${_BADLDADD}
618.endif
619
620.for _l in ${LIBADD}
621DPADD+=		${DPADD_${_l}}
622LDADD+=		${LDADD_${_l}}
623.endfor
624
625_LIB_OBJTOP?=	${OBJTOP}
626# INTERNALLIB definitions.
627LIBDIFFDIR=	${_LIB_OBJTOP}/lib/libdiff
628LIBDIFF?=	${LIBDIFFDIR}/libdiff${PIE_SUFFIX}.a
629
630LIBELFTCDIR=	${_LIB_OBJTOP}/lib/libelftc
631LIBELFTC?=	${LIBELFTCDIR}/libelftc${PIE_SUFFIX}.a
632
633LIBFDTDIR=	${_LIB_OBJTOP}/lib/libfdt
634LIBFDT?=	${LIBFDTDIR}/libfdt${PIE_SUFFIX}.a
635
636LIBLUADIR=	${_LIB_OBJTOP}/lib/liblua
637LIBLUA?=	${LIBLUADIR}/liblua${PIE_SUFFIX}.a
638
639LIBLUTOKDIR=	${_LIB_OBJTOP}/lib/liblutok
640LIBLUTOK?=	${LIBLUTOKDIR}/liblutok${PIE_SUFFIX}.a
641
642LIBPEDIR=	${_LIB_OBJTOP}/lib/libpe
643LIBPE?=		${LIBPEDIR}/libpe${PIE_SUFFIX}.a
644
645LIBOPENBSDDIR=	${_LIB_OBJTOP}/lib/libopenbsd
646LIBOPENBSD?=	${LIBOPENBSDDIR}/libopenbsd${PIE_SUFFIX}.a
647
648LIBSMDIR=	${_LIB_OBJTOP}/lib/libsm
649LIBSM?=		${LIBSMDIR}/libsm${PIE_SUFFIX}.a
650
651LIBSMDBDIR=	${_LIB_OBJTOP}/lib/libsmdb
652LIBSMDB?=	${LIBSMDBDIR}/libsmdb${PIE_SUFFIX}.a
653
654LIBSMUTILDIR=	${_LIB_OBJTOP}/lib/libsmutil
655LIBSMUTIL?=	${LIBSMUTILDIR}/libsmutil${PIE_SUFFIX}.a
656
657LIBSYSDIR=	${_LIB_OBJTOP}/lib/libsys
658LIBSYS?=	${LIBSYSDIR}/libsys${PIE_SUFFIX}.a
659
660LIBNETBSDDIR?=	${_LIB_OBJTOP}/lib/libnetbsd
661LIBNETBSD?=	${LIBNETBSDDIR}/libnetbsd${PIE_SUFFIX}.a
662
663LIBVERSDIR?=	${_LIB_OBJTOP}/kerberos5/lib/libvers
664LIBVERS?=	${LIBVERSDIR}/libvers${PIE_SUFFIX}.a
665
666LIBSLDIR=	${_LIB_OBJTOP}/kerberos5/lib/libsl
667LIBSL?=		${LIBSLDIR}/libsl${PIE_SUFFIX}.a
668
669LIBIFCONFIGDIR=	${_LIB_OBJTOP}/lib/libifconfig
670LIBIFCONFIG?=	${LIBIFCONFIGDIR}/libifconfig${PIE_SUFFIX}.a
671
672LIBIPFDIR=	${_LIB_OBJTOP}/sbin/ipf/libipf
673LIBIPF?=	${LIBIPFDIR}/libipf${PIE_SUFFIX}.a
674
675LIBNVDIR=	${_LIB_OBJTOP}/lib/libnv
676LIBNV?=		${LIBNVDIR}/libnv${PIE_SUFFIX}.a
677
678LIBISCSIUTILDIR=	${_LIB_OBJTOP}/lib/libiscsiutil
679LIBISCSIUTIL?=	${LIBISCSIUTILDIR}/libiscsiutil${PIE_SUFFIX}.a
680
681LIBNVMFDIR=	${_LIB_OBJTOP}/lib/libnvmf
682LIBNVMF?=	${LIBNVMFDIR}/libnvmf${PIE_SUFFIX}.a
683
684LIBTELNETDIR=	${_LIB_OBJTOP}/lib/libtelnet
685LIBTELNET?=	${LIBTELNETDIR}/libtelnet${PIE_SUFFIX}.a
686
687LIBCRONDIR=	${_LIB_OBJTOP}/usr.sbin/cron/lib
688LIBCRON?=	${LIBCRONDIR}/libcron${PIE_SUFFIX}.a
689
690LIBDERDIR=	${_LIB_OBJTOP}/lib/libder
691LIBDER?=	${LIBDERDIR}/libder${PIE_SUFFIX}.a
692
693LIBNTPDIR=	${_LIB_OBJTOP}/usr.sbin/ntp/libntp
694LIBNTP?=	${LIBNTPDIR}/libntp${PIE_SUFFIX}.a
695
696LIBNTPEVENTDIR=	${_LIB_OBJTOP}/usr.sbin/ntp/libntpevent
697LIBNTPEVENT?=	${LIBNTPEVENTDIR}/libntpevent${PIE_SUFFIX}.a
698
699LIBOPTSDIR=	${_LIB_OBJTOP}/usr.sbin/ntp/libopts
700LIBOPTS?=	${LIBOPTSDIR}/libopts${PIE_SUFFIX}.a
701
702LIBPARSEDIR=	${_LIB_OBJTOP}/usr.sbin/ntp/libparse
703LIBPARSE?=	${LIBPARSEDIR}/libparse${PIE_SUFFIX}.a
704
705LIBPFCTLDIR=	${_LIB_OBJTOP}/lib/libpfctl
706LIBPFCTL?=	${LIBPFCTLDIR}/libpfctl${PIE_SUFFIX}.a
707
708LIBLPRDIR=	${_LIB_OBJTOP}/usr.sbin/lpr/common_source
709LIBLPR?=	${LIBLPRDIR}/liblpr${PIE_SUFFIX}.a
710
711LIBFIFOLOGDIR=	${_LIB_OBJTOP}/usr.sbin/fifolog/lib
712LIBFIFOLOG?=	${LIBFIFOLOGDIR}/libfifolog${PIE_SUFFIX}.a
713
714LIBBSNMPTOOLSDIR=	${_LIB_OBJTOP}/usr.sbin/bsnmpd/tools/libbsnmptools
715LIBBSNMPTOOLS?=	${LIBBSNMPTOOLSDIR}/libbsnmptools${PIE_SUFFIX}.a
716
717LIBBE?=		${LIBBEDIR}/libbe${PIE_SUFFIX}.a
718
719LIBPKGECCDIR=	${_LIB_OBJTOP}/secure/lib/libpkgecc
720LIBPKGECC?=	${LIBPKGECCDIR}/libpkgecc${PIE_SUFFIX}.a
721
722LIBPMCSTATDIR=	${_LIB_OBJTOP}/lib/libpmcstat
723LIBPMCSTAT?=	${LIBPMCSTATDIR}/libpmcstat${PIE_SUFFIX}.a
724
725LIBUTIL++DIR=	${_LIB_OBJTOP}/lib/libutil++
726LIBUTIL++?=	${LIBUTIL++DIR}/libutil++${PIE_SUFFIX}.a
727
728LIBWPAAPDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/ap
729LIBWPAAP?=	${LIBWPAAPDIR}/libwpaap${PIE_SUFFIX}.a
730
731LIBWPACOMMONDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/common
732LIBWPACOMMON?=	${LIBWPACOMMONDIR}/libwpacommon${PIE_SUFFIX}.a
733
734LIBWPACRYPTODIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/crypto
735LIBWPACRYPTO?=	${LIBWPACRYPTODIR}/libwpacrypto${PIE_SUFFIX}.a
736
737LIBWPADRIVERSDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/drivers
738LIBWPADRIVERS?=	${LIBWPADRIVERSDIR}/libwpadrivers${PIE_SUFFIX}.a
739
740LIBWPAEAP_COMMONDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/eap_common
741LIBWPAEAP_COMMON?=	${LIBWPAEAP_COMMONDIR}/libwpaeap_common${PIE_SUFFIX}.a
742
743LIBWPAEAP_PEERDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/eap_peer
744LIBWPAEAP_PEER?=	${LIBWPAEAP_PEERDIR}/libwpaeap_peer${PIE_SUFFIX}.a
745
746LIBWPAEAP_SERVERDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/eap_server
747LIBWPAEAP_SERVER?=	${LIBWPAEAP_SERVERDIR}/libwpaeap_server${PIE_SUFFIX}.a
748
749LIBWPAEAPOL_AUTHDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/eapol_auth
750LIBWPAEAPOL_AUTH?=	${LIBWPAEAPOL_AUTHDIR}/libwpaeapol_auth${PIE_SUFFIX}.a
751
752LIBWPAEAPOL_SUPPDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/eapol_supp
753LIBWPAEAPOL_SUPP?=	${LIBWPAEAPOL_SUPPDIR}/libwpaeapol_supp${PIE_SUFFIX}.a
754
755LIBWPAL2_PACKETDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/l2_packet
756LIBWPAL2_PACKET?=	${LIBWPAL2_PACKETDIR}/libwpal2_packet${PIE_SUFFIX}.a
757
758LIBWPAPASNDIR=		${_LIB_OBJTOP}/usr.sbin/wpa/src/pasn
759LIBWPAPASN?=		${LIBWPAPASNDIR}/libwpapasn${PIE_SUFFIX}.a
760
761LIBWPARADIUSDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/radius
762LIBWPARADIUS?=	${LIBWPARADIUSDIR}/libwparadius${PIE_SUFFIX}.a
763
764LIBWPARSN_SUPPDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/rsn_supp
765LIBWPARSN_SUPP?=	${LIBWPARSN_SUPPDIR}/libwparsn_supp${PIE_SUFFIX}.a
766
767LIBWPATLSDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/tls
768LIBWPATLS?=	${LIBWPATLSDIR}/libwpatls${PIE_SUFFIX}.a
769
770LIBWPAUTILSDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/utils
771LIBWPAUTILS?=	${LIBWPAUTILSDIR}/libwpautils${PIE_SUFFIX}.a
772
773LIBWPAWPSDIR=	${_LIB_OBJTOP}/usr.sbin/wpa/src/wps
774LIBWPAWPS?=	${LIBWPAWPSDIR}/libwpawps${PIE_SUFFIX}.a
775
776LIBC_NOSSP_PICDIR=	${_LIB_OBJTOP}/lib/libc
777LIBC_NOSSP_PIC?=	${LIBC_NOSSP_PICDIR}/libc_nossp_pic.a
778
779LIBSYS_PICDIR=	${_LIB_OBJTOP}/lib/libsys
780LIBSYS_PIC?=	${LIBSYS_PICDIR}/libsys_pic.a
781
782LIBSAMPLERATEDIR?=	${_LIB_OBJTOP}/lib/libsamplerate
783LIBSAMPLERATE?=	${LIBSAMPLERATEDIR}/libsamplerate${PIE_SUFFIX}.a
784
785LIBUVMEMDIR=	${OBJTOP}/lib/libuvmem
786LIBUVMEM?=	${LIBUVMEMDIR}/libuvmem${PIE_SUFFIX}.a
787
788# Define a directory for each library.  This is useful for adding -L in when
789# not using a --sysroot or for meta mode bootstrapping when there is no
790# Makefile.depend.  These are sorted by directory.
791LIBAVLDIR=	${_LIB_OBJTOP}/cddl/lib/libavl
792LIBCTFDIR=	${_LIB_OBJTOP}/cddl/lib/libctf
793LIBDTRACEDIR=	${_LIB_OBJTOP}/cddl/lib/libdtrace
794LIBICPDIR=	${_LIB_OBJTOP}/cddl/lib/libicp
795LIBICP?=	${LIBICPDIR}/libicp${PIE_SUFFIX}.a
796LIBICP_RESCUEDIR=	${_LIB_OBJTOP}/cddl/lib/libicp_rescue
797LIBICP_RESCUE?=	${LIBICP_RESCUEDIR}/libicp_rescue${PIE_SUFFIX}.a
798LIBNVPAIRDIR=	${_LIB_OBJTOP}/cddl/lib/libnvpair
799LIBNVPAIR?=	${LIBNVPAIRDIR}/libnvpair${PIE_SUFFIX}.a
800LIBUMEMDIR=	${_LIB_OBJTOP}/cddl/lib/libumem
801LIBZDBDIR=	${_LIB_OBJTOP}/cddl/lib/libzdb
802LIBZDB?=	${LIBZDBDIR}/libzdb${PIE_SUFFIX}.a
803LIBZFSDIR=	${_LIB_OBJTOP}/cddl/lib/libzfs
804LIBZFS?=	${LIBZFSDIR}/libzfs${PIE_SUFFIX}.a
805LIBZFS_COREDIR=	${_LIB_OBJTOP}/cddl/lib/libzfs_core
806LIBZFS_CORE?=	${LIBZFS_COREDIR}/libzfs_core${PIE_SUFFIX}.a
807LIBZFSBOOTENVDIR=	${_LIB_OBJTOP}/cddl/lib/libzfsbootenv
808LIBZFSBOOTENV?=	${LIBZFSBOOTENVDIR}/libzfsbootenv${PIE_SUFFIX}.a
809LIBZPOOLDIR=	${_LIB_OBJTOP}/cddl/lib/libzpool
810LIBZPOOL?=	${LIBZPOOLDIR}/libzpool${PIE_SUFFIX}.a
811LIBZUTILDIR=	${_LIB_OBJTOP}/cddl/lib/libzutil
812LIBZUTIL?=	${LIBZUTILDIR}/libzutil${PIE_SUFFIX}.a
813
814# OFED support
815LIBCXGB4DIR=	${_LIB_OBJTOP}/lib/ofed/libcxgb4
816LIBIBCMDIR=	${_LIB_OBJTOP}/lib/ofed/libibcm
817LIBIBMADDIR=	${_LIB_OBJTOP}/lib/ofed/libibmad
818LIBIBNETDISCDIR=${_LIB_OBJTOP}/lib/ofed/libibnetdisc
819LIBIBUMADDIR=	${_LIB_OBJTOP}/lib/ofed/libibumad
820LIBIBVERBSDIR=	${_LIB_OBJTOP}/lib/ofed/libibverbs
821LIBIRDMADIR=	${_LIB_OBJTOP}/lib/ofed/libirdma
822LIBMLX4DIR=	${_LIB_OBJTOP}/lib/ofed/libmlx4
823LIBMLX5DIR=	${_LIB_OBJTOP}/lib/ofed/libmlx5
824LIBBNXTREDIR=	${_LIB_OBJTOP}/lib/ofed/libbnxtre
825LIBRDMACMDIR=	${_LIB_OBJTOP}/lib/ofed/librdmacm
826LIBOSMCOMPDIR=	${_LIB_OBJTOP}/lib/ofed/complib
827LIBOPENSMDIR=	${_LIB_OBJTOP}/lib/ofed/libopensm
828LIBOSMVENDORDIR=${_LIB_OBJTOP}/lib/ofed/libvendor
829
830LIBSSPDIR=	${_LIB_OBJTOP}/lib/libssp
831LIBSSP_NONSHAREDDIR=	${_LIB_OBJTOP}/lib/libssp_nonshared
832.if ${MK_MITKRB5} != "no"
833LIBAPPUTILSDIR=		${_LIB_OBJTOP}/krb5/lib/apputils
834LIBAPPUTILS?=		${LIBAPPUTILSDIR}/libapputils${PIE_SUFFIX}.a
835LIBGSSAPI_KRB5DIR=	${_LIB_OBJTOP}/krb5/lib/gssapi
836LIBGSSAPI_KRB5?=	${LIBGSSAPI_KRB5DIR}/libgssapi_krb5${PIE_SUFFIX}.a
837LIBGSSRPCDIR=		${_LIB_OBJTOP}/krb5/lib/rpc
838LIBGSSRPC?=		${LIBGSSRPCDIR}/libgssrpc${PIE_SUFFIX}.a
839LIBK5CRYPTODIR=		${_LIB_OBJTOP}/krb5/lib/crypto
840LIBK5CRYPTO?=		${LIBK5CRYPTODIR}/libk5crypto${PIE_SUFFIX}.a
841LIBK5GSSRPCDIR=		${_LIB_OBJTOP}/krb5/lib/rpc
842LIBK5GSSRPC?=		${LIBK5GSSRPCDIR}/libgssrpc${PIE_SUFFIX}.a
843LIBKADM5CLNT_MITDIR=	${_LIB_OBJTOP}/krb5/lib/kadm5clnt
844LIBKADM5CLNT_MIT?=	${LIBKADM5CLNT_MITDIR}/libkadm5clnt_mit${PIE_SUFFIX}.a
845LIBKADM5SRV_MITDIR=	${_LIB_OBJTOP}/krb5/lib/kadm5srv
846LIBKADM5SRV_MIT?=	${LIBKADM5SRV_MITDIR}/libkadm5srv_mit${PIE_SUFFIX}.a
847LIBKADMIN_COMMONDIR=	${_LIB_OBJTOP}/krb5/lib/kadmin_common
848LIBKADMIN_COMMON?=	${LIBKADMIN_COMMONDIR}/libkadmin_common${PIE_SUFFIX}.a
849LIBKDB5DIR=		${_LIB_OBJTOP}/krb5/lib/kdb
850LIBKDB5?=		${LIBKDB5DIR}/libkdb5${PIE_SUFFIX}.a
851LIBKPROP_UTILDIR=	${_LIB_OBJTOP}/krb5/lib/kprop_util
852LIBKPROP_UTIL?=		${LIBKPROP_UTILDIR}/libkprop_util${PIE_SUFFIX}.a
853LIBKRADDIR=		${_LIB_OBJTOP}/krb5/lib/krad
854LIBKRAD?=		${LIBKRADDIR}/libkrad${PIE_SUFFIX}.a
855LIBKRB5DIR=		${_LIB_OBJTOP}/krb5/lib/krb5
856LIBKRB5?=		${LIBKRB5DIR}/libkrb5${PIE_SUFFIX}.a
857LIBKRB5SSDIR=		${_LIB_OBJTOP}/krb5/util/ss
858LIBKRB5SS?=		${LIBKRB5SUPPORTDIR}/libkrb5ss${PIE_SUFFIX}.a
859LIBKRB5SUPPORTDIR=	${_LIB_OBJTOP}/krb5/util/support
860LIBKRB5SUPPORT?=	${LIBKRB5SUPPORTDIR}/libkrb5support${PIE_SUFFIX}.a
861LIBKRB5PROFILEDIR=	${_LIB_OBJTOP}/krb5/util/profile
862LIBKRB5PROFILE?=	${LIBPROFILEDIR}/libkrb5profile${PIE_SUFFIX}.a
863LIBVERTODIR=		${_LIB_OBJTOP}/krb5/util/verto
864LIBVERTO?=		${LIBVERTODIR}/libverto${PIE_SUFFIX}.a
865.else
866LIBASN1DIR=	${_LIB_OBJTOP}/kerberos5/lib/libasn1
867LIBGSSAPI_KRB5DIR=	${_LIB_OBJTOP}/kerberos5/lib/libgssapi_krb5
868LIBGSSAPI_NTLMDIR=	${_LIB_OBJTOP}/kerberos5/lib/libgssapi_ntlm
869LIBGSSAPI_SPNEGODIR=	${_LIB_OBJTOP}/kerberos5/lib/libgssapi_spnego
870LIBHDBDIR=	${_LIB_OBJTOP}/kerberos5/lib/libhdb
871LIBHEIMBASEDIR=	${_LIB_OBJTOP}/kerberos5/lib/libheimbase
872LIBHEIMIPCCDIR=	${_LIB_OBJTOP}/kerberos5/lib/libheimipcc
873LIBHEIMIPCSDIR=	${_LIB_OBJTOP}/kerberos5/lib/libheimipcs
874LIBHEIMNTLMDIR=	${_LIB_OBJTOP}/kerberos5/lib/libheimntlm
875LIBHX509DIR=	${_LIB_OBJTOP}/kerberos5/lib/libhx509
876LIBKADM5CLNTDIR=	${_LIB_OBJTOP}/kerberos5/lib/libkadm5clnt
877LIBKADM5SRVDIR=	${_LIB_OBJTOP}/kerberos5/lib/libkadm5srv
878LIBKAFS5DIR=	${_LIB_OBJTOP}/kerberos5/lib/libkafs5
879LIBKDCDIR=	${_LIB_OBJTOP}/kerberos5/lib/libkdc
880LIBKRB5DIR=	${_LIB_OBJTOP}/kerberos5/lib/libkrb5
881LIBROKENDIR=	${_LIB_OBJTOP}/kerberos5/lib/libroken
882LIBWINDDIR=	${_LIB_OBJTOP}/kerberos5/lib/libwind
883.endif
884LIBATF_CDIR=	${_LIB_OBJTOP}/lib/atf/libatf-c
885LIBATF_CXXDIR=	${_LIB_OBJTOP}/lib/atf/libatf-c++
886LIBGMOCKDIR=	${_LIB_OBJTOP}/lib/googletest/gmock
887LIBGMOCK_MAINDIR=	${_LIB_OBJTOP}/lib/googletest/gmock_main
888LIBGTESTDIR=	${_LIB_OBJTOP}/lib/googletest/gtest
889LIBGTEST_MAINDIR=	${_LIB_OBJTOP}/lib/googletest/gtest_main
890LIBALIASDIR=	${_LIB_OBJTOP}/lib/libalias/libalias
891LIBBLACKLISTDIR=	${_LIB_OBJTOP}/lib/libblacklist
892LIBBLOCKLISTDIR=	${_LIB_OBJTOP}/lib/libblocklist
893LIBBLOCKSRUNTIMEDIR=	${_LIB_OBJTOP}/lib/libblocksruntime
894LIBBSNMPDIR=	${_LIB_OBJTOP}/lib/libbsnmp/libbsnmp
895LIBCASPERDIR=	${_LIB_OBJTOP}/lib/libcasper/libcasper
896LIBCAP_DNSDIR=	${_LIB_OBJTOP}/lib/libcasper/services/cap_dns
897LIBCAP_GRPDIR=	${_LIB_OBJTOP}/lib/libcasper/services/cap_grp
898LIBCAP_NETDIR=	${_LIB_OBJTOP}/lib/libcasper/services/cap_net
899LIBCAP_PWDDIR=	${_LIB_OBJTOP}/lib/libcasper/services/cap_pwd
900LIBCAP_SYSCTLDIR=	${_LIB_OBJTOP}/lib/libcasper/services/cap_sysctl
901LIBCAP_SYSLOGDIR=	${_LIB_OBJTOP}/lib/libcasper/services/cap_syslog
902LIBCBORDIR=	${_LIB_OBJTOP}/lib/libcbor
903LIBBSDXMLDIR=	${_LIB_OBJTOP}/lib/libexpat
904LIBFIDO2DIR=	${_LIB_OBJTOP}/lib/libfido2
905LIBKVMDIR=	${_LIB_OBJTOP}/lib/libkvm
906LIBPTHREADDIR=	${_LIB_OBJTOP}/lib/libthr
907LIBMDIR=	${_LIB_OBJTOP}/lib/msun
908LIBFORMWDIR=	${_LIB_OBJTOP}/lib/ncurses/form
909LIBMENUWDIR=	${_LIB_OBJTOP}/lib/ncurses/menu
910LIBNCURSESWDIR=	${_LIB_OBJTOP}/lib/ncurses/ncurses
911LIBTINFOWDIR=	${_LIB_OBJTOP}/lib/ncurses/tinfo
912LIBPANELWDIR=	${_LIB_OBJTOP}/lib/ncurses/panel
913LIBCRYPTODIR=	${_LIB_OBJTOP}/secure/lib/libcrypto
914LIBSPLDIR=	${_LIB_OBJTOP}/cddl/lib/libspl
915LIBSSHDIR=	${_LIB_OBJTOP}/secure/lib/libssh
916LIBSSLDIR=	${_LIB_OBJTOP}/secure/lib/libssl
917LIBTEKENDIR=	${_LIB_OBJTOP}/sys/teken/libteken
918LIBEGACYDIR=	${_LIB_OBJTOP}/tools/build
919LIBLNDIR=	${_LIB_OBJTOP}/usr.bin/lex/lib
920
921LIBTERMCAPWDIR=	${LIBTINFOWDIR}
922
923.-include <site.src.libnames.mk>
924
925# Default other library directories to lib/libNAME.
926.for lib in ${_LIBRARIES}
927LIB${lib:tu}DIR?=	${OBJTOP}/lib/lib${lib}
928.endfor
929
930# Validate that listed LIBADD are valid.
931.for _l in ${LIBADD}
932.if empty(_LIBRARIES:M${_l})
933_BADLIBADD+= ${_l}
934.endif
935.endfor
936.if !empty(_BADLIBADD)
937.error ${.CURDIR}: Invalid LIBADD used which may need to be added to ${_this:T}: ${_BADLIBADD}
938.endif
939
940# Sanity check that libraries are defined here properly when building them.
941.if defined(LIB) && ${_LIBRARIES:M${LIB}} != ""
942.if !empty(LIBADD) && \
943    (!defined(_DP_${LIB}) || ${LIBADD:O:u} != ${_DP_${LIB}:O:u})
944.error ${.CURDIR}: Missing or incorrect _DP_${LIB} entry in ${_this:T}.  Should match LIBADD for ${LIB} ('${LIBADD}' vs '${_DP_${LIB}}')
945.endif
946# Note that OBJTOP is not yet defined here but for the purpose of the check
947# it is fine as it resolves to the SRC directory.
948.if !defined(LIB${LIB:tu}DIR) || !exists(${SRCTOP}/${LIB${LIB:tu}DIR:S,^${OBJTOP}/,,})
949.error ${.CURDIR}: Missing or incorrect value for LIB${LIB:tu}DIR in ${_this:T}: ${LIB${LIB:tu}DIR:S,^${OBJTOP}/,,}
950.endif
951.if ${_INTERNALLIBS:M${LIB}} != "" && !defined(LIB${LIB:tu})
952.error ${.CURDIR}: Missing value for LIB${LIB:tu} in ${_this:T}.  Likely should be: LIB${LIB:tu}?= $${LIB${LIB:tu}DIR}/lib${LIB}.a
953.endif
954.endif
955
956.endif	# !target(__<src.libnames.mk>__)
957