xref: /illumos-gate/usr/src/lib/Makefile (revision a92282e44f968185a6bba094d1e5fece2da819cf)
1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
24# Copyright (c) 2012 by Delphix. All rights reserved.
25# Copyright 2020 Joyent, Inc.
26# Copyright (c) 2013 Gary Mills
27# Copyright 2014 Garrett D'Amore <garrett@damore.org>
28# Copyright (c) 2015 Gary Mills
29# Copyright 2016 Toomas Soome <tsoome@me.com>
30# Copyright 2018 Nexenta Systems, Inc.
31# Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
32# Copyright 2017 RackTop Systems.
33# Copyirght 2018 Jason King
34# Copyright 2019 OmniOS Community Edition (OmniOSce) Association.
35#
36
37include ../Makefile.master
38
39#	Note that libcurses installs commands along with its library.
40#	This is a minor bug which probably should be fixed.
41#	Note also that a few extra libraries are kept in cmd source.
42#
43# Certain libraries are linked with, hence depend on, other libraries.
44# Library dependencies are called out explicitly, see "Library
45# interdependencies" below.
46.PARALLEL:
47
48# Build libc and its dependencies
49SUBDIRS=			\
50	ssp_ns			\
51	crt			\
52	../cmd/sgs/libconv	\
53	../cmd/sgs/libdl	\
54	libc			\
55	.WAIT
56
57# Build libraries with lots of dependents
58SUBDIRS +=		\
59	libm		\
60	libmd		\
61	libmp		\
62	libnsl		\
63	libnvpair	\
64	libsocket	\
65	.WAIT
66
67# Build everything else. Aside from explicit dependencies, all libraries
68# are built in parallel.
69SUBDIRS +=				\
70	../cmd/sendmail/libmilter	\
71	../cmd/sgs/libelf	\
72	../cmd/sgs/librtld_db	\
73	abi		\
74	auditd_plugins	\
75	brand		\
76	c_synonyms	\
77	cfgadm_plugins	\
78	crypt_modules	\
79	extendedFILE	\
80	fm		\
81	getloginx	\
82	gss_mechs/mech_dh	\
83	gss_mechs/mech_dummy	\
84	gss_mechs/mech_krb5	\
85	gss_mechs/mech_spnego	\
86	hal		\
87	hbaapi		\
88	iconv_modules	\
89	krb5		\
90	libadm		\
91	libads		\
92	libadt_jni	\
93	libadutils	\
94	libaio		\
95	libast		\
96	libavl		\
97	libbe		\
98	libbrand	\
99	libbsdmalloc	\
100	libbsm		\
101	libc_db		\
102	libcfgadm	\
103	libcmd		\
104	libcmdutils	\
105	libcommputil	\
106	libcontract	\
107	libcpc		\
108	libcrypt	\
109	libcryptoutil	\
110	libctf		\
111	libcurses	\
112	libcustr	\
113	libdemangle	\
114	libdevice	\
115	libdevid	\
116	libdevinfo	\
117	libdhcpagent	\
118	libdhcputil	\
119	libdisasm	\
120	libdiskmgt	\
121	libdladm	\
122	libdll		\
123	libdlpi		\
124	libdns_sd	\
125	libdoor		\
126	libdtrace	\
127	libdtrace_jni	\
128	libdwarf	\
129	libefi		\
130	libelfsign	\
131	libeti		\
132	libexacct	\
133	libexacct/demo	\
134	libfakekernel	\
135	libfcoe		\
136	libficl		\
137	libfru		\
138	libfruutils	\
139	libfsmgt	\
140	libfstyp	\
141	libgen		\
142	libgrubmgmt	\
143	libgss		\
144	libhotplug	\
145	libidmap	\
146	libilb		\
147	libima		\
148	libinetsvc	\
149	libinetutil	\
150	libinstzones	\
151	libintl		\
152	libipadm	\
153	libipd		\
154	libipmi		\
155	libipmp		\
156	libipp		\
157	libipsecutil	\
158	libiscsit	\
159	libjedec	\
160	libkmf		\
161	libkrb5		\
162	libkstat	\
163	libkvm		\
164	libldap5	\
165	liblgrp		\
166	liblm		\
167	libm1		\
168	libmail		\
169	libmalloc	\
170	libmapid	\
171	libmapmalloc	\
172	libmd5		\
173	libmlrpc	\
174	libmtmalloc	\
175	libmvec		\
176	libndmp		\
177	libnisdb	\
178	libnls		\
179	libnwam		\
180	libofmt		\
181	libpam		\
182	libpcidb	\
183	libpcsc		\
184	libpctx		\
185	libpicl		\
186	libpicltree	\
187	libpkg		\
188	libpool		\
189	libpp		\
190	libproc		\
191	libproject	\
192	libpthread	\
193	libraidcfg	\
194	librcm		\
195	libreparse	\
196	libresolv	\
197	libresolv2	\
198	librestart	\
199	librpcsvc	\
200	librsm		\
201	librstp		\
202	librt		\
203	libsasl		\
204	libscf		\
205	libsched	\
206	libsctp		\
207	libsec		\
208	libsecdb	\
209	libsendfile	\
210	libsff		\
211	libshare	\
212	libshell	\
213	libsip		\
214	libsldap	\
215	libslp		\
216	libsmbfs	\
217	libsmbios	\
218	libsmedia	\
219	libsqlite	\
220	libsrpt		\
221	libstmf		\
222	libstmfproxy	\
223	libsum		\
224	libsun_ima	\
225	libsysevent	\
226	libtecla	\
227	libtermcap	\
228	libthread	\
229	libtnf		\
230	libtnfctl	\
231	libtnfprobe	\
232	libtsnet	\
233	libtsol		\
234	libumem		\
235	libutempter	\
236	libuuid		\
237	libuutil	\
238	libvolmgt	\
239	libvrrpadm	\
240	libvscan	\
241	libw		\
242	libwrap		\
243	libxcurses	\
244	libxcurses2	\
245	libxnet		\
246	libzfs		\
247	libzfsbootenv	\
248	libzfs_core	\
249	libzfs_jni	\
250	libzonecfg	\
251	libzoneinfo	\
252	libzonestat	\
253	libzpool	\
254	libzutil	\
255	madv		\
256	mpapi		\
257	mpss		\
258	nametoaddr	\
259	ncad_addr	\
260	nsswitch	\
261	pam_modules	\
262	passwdutil	\
263	pkcs11		\
264	policykit	\
265	print		\
266	pylibbe		\
267	pysolaris	\
268	pyzfs		\
269	raidcfg_plugins	\
270	rpcsec_gss	\
271	sasl_plugins	\
272	scsi		\
273	smbclnt		\
274	smbsrv		\
275	smhba		\
276	sun_fc		\
277	sun_sas		\
278	udapl		\
279	watchmalloc	\
280	$($(MACH)_SUBDIRS)
281
282i386_SUBDIRS=		\
283	libfdisk	\
284	libppt		\
285	libsaveargs	\
286	libvmm		\
287	libvmmapi
288
289sparc_SUBDIRS=		\
290	efcode		\
291	libds		\
292	libdscp		\
293	libprtdiag	\
294	libprtdiag_psr	\
295	libpri		\
296	librsc		\
297	storage		\
298	libpcp		\
299	libtsalarm	\
300	libv12n
301
302#
303# Create a special version of $(SUBDIRS) with no .WAIT's, for use with the
304# clean and clobber targets (for more information, see those targets, below).
305#
306NOWAIT_SUBDIRS= $(SUBDIRS:.WAIT=)
307
308DCSUBDIRS=
309
310MSGSUBDIRS=		\
311	abi		\
312	auditd_plugins	\
313	brand		\
314	cfgadm_plugins	\
315	gss_mechs/mech_dh	\
316	gss_mechs/mech_krb5	\
317	krb5		\
318	libast		\
319	libbsm		\
320	libc		\
321	libcfgadm	\
322	libcmd		\
323	libcontract	\
324	libcurses	\
325	libdhcputil	\
326	libdiskmgt	\
327	libdladm	\
328	libdll		\
329	libgrubmgmt	\
330	libgss		\
331	libidmap	\
332	libilb		\
333	libinstzones	\
334	libipadm	\
335	libipmp		\
336	libipsecutil	\
337	libldap5	\
338	libnsl		\
339	libnwam		\
340	libofmt		\
341	libpam		\
342	libpicl		\
343	libpkg		\
344	libpool		\
345	libpp		\
346	libreparse	\
347	libsasl		\
348	libscf		\
349	libsecdb	\
350	libshare	\
351	libshell	\
352	libsldap	\
353	libslp		\
354	libsmbfs	\
355	libsmedia	\
356	libsum		\
357	libtsol		\
358	libuutil	\
359	libvrrpadm	\
360	libvscan	\
361	libzfs		\
362	libzonecfg	\
363	madv		\
364	mpss		\
365	pam_modules	\
366	pyzfs		\
367	rpcsec_gss	\
368	$($(MACH)_MSGSUBDIRS)
369
370sparc_MSGSUBDIRS=	\
371	libprtdiag	\
372	libprtdiag_psr
373
374i386_MSGSUBDIRS= libfdisk
375
376HDRSUBDIRS=				\
377	../cmd/sendmail/libmilter	\
378	auditd_plugins	\
379	fm		\
380	hal		\
381	hbaapi		\
382	libads		\
383	libast		\
384	libbrand	\
385	libbsm		\
386	libc		\
387	libcmd		\
388	libcmdutils	\
389	libcommputil	\
390	libcontract	\
391	libcpc		\
392	libcryptoutil	\
393	libctf		\
394	libcurses	\
395	libcustr	\
396	libdemangle	\
397	libdevice	\
398	libdevid	\
399	libdevinfo	\
400	libdhcpagent	\
401	libdhcputil	\
402	libdisasm	\
403	libdiskmgt	\
404	libdladm	\
405	libdll		\
406	libdlpi		\
407	libdns_sd	\
408	libdtrace	\
409	libdtrace_jni	\
410	libelfsign	\
411	libeti		\
412	libfakekernel	\
413	libfcoe		\
414	libfru		\
415	libfstyp	\
416	libgen		\
417	libgrubmgmt	\
418	libidmap	\
419	libilb		\
420	libima		\
421	libinetsvc	\
422	libinetutil	\
423	libinstzones	\
424	libipadm	\
425	libipd		\
426	libipmi		\
427	libipmp		\
428	libipp		\
429	libipsecutil	\
430	libiscsit	\
431	libkrb5		\
432	libkstat	\
433	libkvm		\
434	libmail		\
435	libmapid	\
436	libmd		\
437	libmlrpc	\
438	libmtmalloc	\
439	libndmp		\
440	libnsl		\
441	libnvpair	\
442	libnwam		\
443	libofmt		\
444	libpam		\
445	libpcidb	\
446	libpcsc		\
447	libpctx		\
448	libpicl		\
449	libpicltree	\
450	libpool		\
451	libpp		\
452	libproc		\
453	libraidcfg	\
454	librcm		\
455	libreparse	\
456	librestart	\
457	librpcsvc	\
458	librsm		\
459	librstp		\
460	libsasl		\
461	libscf		\
462	libsec		\
463	libsff		\
464	libshare	\
465	libshell	\
466	libsip		\
467	libslp		\
468	libsmbfs	\
469	libsmbios	\
470	libsmedia	\
471	libsocket	\
472	libsqlite	\
473	libsrpt		\
474	libstmf		\
475	libstmfproxy	\
476	libsum		\
477	libsun_ima	\
478	libsysevent	\
479	libtecla	\
480	libtermcap	\
481	libtnf		\
482	libtnfctl	\
483	libtnfprobe	\
484	libtsnet	\
485	libtsol		\
486	libumem		\
487	libutempter	\
488	libuutil	\
489	libvolmgt	\
490	libvrrpadm	\
491	libvscan	\
492	libwrap		\
493	libxcurses2	\
494	libzfs		\
495	libzfs_core	\
496	libzfs_jni	\
497	libzoneinfo	\
498	libzonestat	\
499	mpapi		\
500	passwdutil	\
501	pkcs11		\
502	policykit	\
503	scsi		\
504	smbsrv		\
505	smhba		\
506	udapl		\
507	$($(MACH)_HDRSUBDIRS)
508
509i386_HDRSUBDIRS=	\
510	libfdisk	\
511	libppt		\
512	libsaveargs	\
513	libvmm		\
514	libvmmapi
515
516sparc_HDRSUBDIRS=	\
517	libds		\
518	libdscp		\
519	libpri		\
520	libv12n		\
521	storage
522
523all :=		TARGET= all
524check :=	TARGET= check
525clean :=	TARGET= clean
526clobber :=	TARGET= clobber
527install :=	TARGET= install
528install_h :=	TARGET= install_h
529_dc :=		TARGET= _dc
530_msg :=		TARGET= _msg
531
532.KEEP_STATE:
533
534#
535# For the all and install targets, we clearly must respect library
536# dependencies so that the libraries link correctly.  However, for
537# the remaining targets (check, clean, clobber, install_h, _dc
538# and _msg), libraries do not have any dependencies on one another
539# and thus respecting dependencies just slows down the build.
540# As such, for these rules, we use pattern replacement to explicitly
541# avoid triggering the dependency information.  Note that for clean and
542# clobber, we must use $(NOWAIT_SUBDIRS) rather than
543# $(SUBDIRS), to prevent `.WAIT' from expanding to `.WAIT-nodepend'.
544#
545
546all:			$(SUBDIRS)
547
548install:		$(SUBDIRS) .WAIT install_extra
549
550# extra libraries kept in other source areas
551install_extra:
552	@cd ../cmd/sgs; pwd; $(MAKE) install_lib
553	@pwd
554
555clean clobber:		$(NOWAIT_SUBDIRS:%=%-nodepend)
556
557
558install_h check:	$(HDRSUBDIRS:%=%-nodepend)
559
560_msg:			$(MSGSUBDIRS:%=%-nodepend) .WAIT _dc
561
562_dc:			$(DCSUBDIRS:%=%-nodepend)
563
564lint:
565
566# Library interdependencies are called out explicitly here.
567../cmd/sgs/libconv: crt
568../cmd/sgs/libdl: crt
569libc:		../cmd/sgs/libconv ../cmd/sgs/libdl
570
571libm:		libc
572libmd:		libc
573libmp:		libc
574libnsl:		libc libmd libmp
575libnvpair:	libc libnsl
576libsocket:	libc libnsl
577
578basedeps:	libc libm libmd libmp libnsl libnvpair libsocket
579basedeps :=	TARGET=install
580
581# The following dependencies are currently required by libdbus-1 and should
582# be used for anything linking against it.
583dbusdeps:	libsecdb libtsol libinetutil libscf libuutil libgen libsmbios \
584		libbsm
585
586# The following dependencies don't need to be listed below as they are built
587# before everything else:
588# libc libm libmd libmp libnsl libnvpair libsocket
589../cmd/sendmail/libmilter:	libsocket libnsl
590abi:		libctf libmapmalloc libproc
591auditd_plugins: libbsm libsecdb libgss libmtmalloc
592brand:		libzonecfg libmapmalloc
593cfgadm_plugins:	libdevice libdevinfo libhotplug librcm hbaapi libkstat libscf
594fm:		libexacct libipmi libzfs scsi libdevinfo libdevid libcfgadm \
595		libcontract libsysevent ../cmd/sgs/libelf libdladm libsff \
596		libpcidb libdiskmgt
597$(SPARC_BLD)fm:	libpri
598gss_mechs/mech_dh: libgss
599gss_mechs/mech_dummy: libgss
600gss_mechs/mech_krb5: libgss libresolv2 pkcs11 libkstat
601gss_mechs/mech_spnego: gss_mechs/mech_krb5
602hal:		dbusdeps
603krb5:		gss_mechs/mech_krb5 libtecla libldap5
604libads:		libnsl
605libadt_jni:	libbsm
606libadutils:	libldap5 libresolv2
607libbe:		libzfs libinstzones libuuid libgen libdevinfo libefi libficl \
608		libzfsbootenv
609libbsm:		libinetutil libscf libsecdb libtsol
610libcfgadm:	libdevinfo
611libcontract:	libnvpair
612libcmd:		libsum libast
613libcmdutils:	libavl libnvpair
614libcpc:		libpctx
615libcrypt:	libgen
616libctf:		libdwarf
617libdemangle:	libcustr
618libdevice:	libnvpair
619libdevid:	libdevinfo
620libdevinfo:	libsec libgen
621libdhcpagent:	libdhcputil libuuid libdlpi libcontract
622libdhcputil:	libgen libinetutil libdlpi
623libdiskmgt:	libdevid libdevinfo libadm libefi libkstat libsysevent
624$(INTEL_BLD)libdiskmgt: libfdisk
625libdladm:	libdevinfo libinetutil libscf librcm libexacct libkstat \
626		libpool
627libdll:		libast
628libdlpi:	libinetutil libdladm
629libds:		libsysevent
630libdtrace:	libproc libgen libctf libmapmalloc
631libdtrace_jni:	libuutil libdtrace
632libdwarf:	../cmd/sgs/libelf
633libefi:		libuuid libsmbios
634libelfsign:	libcryptoutil libkmf ../cmd/sgs/libelf
635libeti:		libcurses
636libexacct/demo:	libexacct libproject
637libfakekernel:	libumem libcryptoutil
638libfcoe:	libdladm
639libficl:	libuuid libumem
640libfru:		libfruutils
641libfsmgt:	libkstat
642libgrubmgmt:	libdevinfo libzfs libfstyp libefi
643$(INTEL_BLD)libgrubmgmt: libfdisk
644libidmap:	libavl libuutil
645libinetsvc:	libscf
646libinetutil:	libsocket
647libinstzones:	libzonecfg libcontract
648libipadm:	libinetutil libdlpi libdhcpagent libdladm libsecdb libdhcputil
649libipmi:	libm libnvpair libsocket libnsl
650libipmp:	libinetutil
651libipsecutil:	libtecla libtsol libkmf
652libiscsit:	libstmf libuuid
653libhotplug:	libnvpair
654libkmf:		libcryptoutil pkcs11 libcustr
655libkvm:		../cmd/sgs/libelf
656libldap5:	libsasl
657libmapid:	libresolv2 libscf
658libmlrpc:	libsmbfs libuuid
659libndmp:	libscf
660libnisdb:	libldap5
661libnwam:	libscf libbsm libdladm libipadm
662libpcp:		libumem libdevinfo
663libpctx:	libproc
664libpkg:		libscf libadm
665libpool:	libscf libexacct
666libpp:		libast
667libppt:		libpcidb libdevinfo libcmdutils
668libproc:	../cmd/sgs/librtld_db ../cmd/sgs/libelf libctf
669$(INTEL_BLD)libproc: libsaveargs
670libproject:	libpool libproc libsecdb
671libprtdiag:	libkstat libdevinfo
672libprtdiag_psr:	libprtdiag
673libraidcfg:	libdevinfo
674librcm:		libnvpair
675librestart:	libuutil libscf libpool libproject libsecdb libsysevent
676libsasl:	libgss pkcs11
677libsaveargs:	libdisasm
678libscf:		libuutil libgen libnsl libnvpair libsmbios
679libsec:		libavl libidmap
680libsecdb:	libnsl
681libsff:		libnvpair
682libshare:	libscf libzfs libuuid libfsmgt libsecdb libumem libsmbfs
683libshell:	libast libcmd libdll libsecdb
684libsip:		libmd5
685libsldap:	libldap5 libscf
686libsmbfs:	libkrb5 libsec libidmap pkcs11
687libsmbios:	libdevinfo
688libsrpt:	libstmf
689libstmf:	libscf
690libstmfproxy:	libstmf libpthread
691libsum:		libast
692libsun_ima:	libdevinfo libsysevent
693libsysevent:	libsecdb
694libtecla:	libcurses
695libtermcap:	libcurses
696libtnfctl:	../cmd/sgs/libelf
697libtsalarm:	libpcp
698libtsnet:	libtsol libsecdb
699libtsol:	libsecdb
700libuuid:	libdlpi
701libv12n:	libds libuuid
702libvmm:		libvmmapi
703libvolmgt:	libadm
704libvrrpadm:	libdladm libscf
705libvscan:	libscf libsecdb
706libzfs:		libdevid libgen libuutil libavl libefi libidmap \
707		libumem libtsol libzfs_core libcryptoutil pkcs11 libmd libzutil
708libzfsbootenv:	libzfs libnvpair
709libzfs_core:	libnvpair
710libzfs_jni:	libdiskmgt libzfs libzutil
711libzonecfg:	libuuid libsysevent libsec libbrand libpool libscf libproc \
712		libuutil libbsm libsecdb
713libzonestat:	libcmdutils libumem
714libzpool:	libavl libumem libcmdutils libsysevent libfakekernel libzutil
715libzutil:	libadm libavl libdevid libefi
716madv:		libgen
717mpapi:		libpthread libdevinfo libsysevent
718mpss:		libgen
719nsswitch:	libadutils libidmap libdns_sd libscf libldap5 libsldap
720pam_modules:	libproject passwdutil smbsrv libtsnet libpam libbsm libsecdb
721passwdutil:	libsldap
722pkcs11:		libcryptoutil libgen libuuid
723policykit:	dbusdeps
724print:		libldap5 libmd5 libsendfile
725pylibbe:	libbe libzfs
726pysolaris:	libsec libidmap
727pyzfs:		libzfs
728raidcfg_plugins: libraidcfg librcm libcfgadm libpicl libpicltree
729rpcsec_gss:	libgss
730sasl_plugins:	pkcs11 libgss libsasl
731scsi:		libfru libumem libdevid libdevinfo
732smbclnt:	libfakekernel pkcs11
733smbsrv:		libxnet libpthread librt libshare libidmap pkcs11 libsqlite \
734		libcryptoutil libreparse libcmdutils libresolv2 libsmbfs \
735		libuuid libfakekernel libads libgss libldap5 krb5 libmlrpc
736storage:	libdevice libdevinfo libdevid
737sun_fc:		libdevinfo libsysevent
738sun_sas:	libdevinfo libsysevent libkstat libdevid
739udapl:		libdevinfo libdladm
740
741#
742# The reason this rule checks for the existence of the
743# Makefile is that some of the directories do not exist
744# in certain situations (e.g., exportable source builds,
745# OpenSolaris).
746#
747$(SUBDIRS): FRC
748	@if [ -f $@/Makefile  ]; then \
749		cd $@; pwd; $(MAKE) $(TARGET); \
750	else \
751		true; \
752	fi
753
754$(SUBDIRS:%=%-nodepend):
755	@if [ -f $(@:%-nodepend=%)/Makefile  ]; then \
756		cd $(@:%-nodepend=%); pwd; $(MAKE) $(TARGET); \
757	else \
758		true; \
759	fi
760
761FRC:
762