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