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# Copyright 2011 Nexenta Systems, Inc. All rights reserved. 23# Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. 24# Copyright (c) 2012 by Delphix. All rights reserved. 25# Copyright (c) 2012, Joyent, Inc. All rights reserved. 26 27include ../Makefile.master 28 29# Note that libcurses installs commands along with its library. 30# This is a minor bug which probably should be fixed. 31# Note also that a few extra libraries are kept in cmd source. 32# 33# Certain libraries are linked with, hence depend on, other libraries. 34# 35# Although we have historically used .WAIT to express dependencies, it 36# reduces the amount of parallelism and thus lengthens the time it 37# takes to build the libraries. Thus, we now require that any new 38# libraries explicitly call out their dependencies. Eventually, all 39# the library dependencies will be called out explicitly. See 40# "Library interdependencies" near the end of this file. 41# 42# Aside from explicit dependencies (and legacy .WAITs), all libraries 43# are built in parallel. 44# 45.PARALLEL: 46 47# 48# The $(CLOSED_BUILD) additions to SUBDIRS & MSGSUBDIRS are unfortunate, 49# but required due to the "dependencies" of using .WAIT to barrier the 50# parallel dmake builds. once 4631488 has been fixed, they can be 51# consolidated into one $(CLOSED_BUILD)SUBDIRS += (all closed libs) as 52# shown in HDRSUBDIRS 53# 54SUBDIRS= \ 55 common .WAIT \ 56 ../cmd/sgs/libconv \ 57 ../cmd/sgs/libdl .WAIT 58 59SUBDIRS += \ 60 libc .WAIT \ 61 ../cmd/sgs/libelf .WAIT \ 62 c_synonyms \ 63 libmd \ 64 libmd5 \ 65 librsm \ 66 libmp .WAIT \ 67 libnsl \ 68 libsecdb .WAIT \ 69 librpcsvc \ 70 libsocket .WAIT \ 71 libsctp \ 72 libsip \ 73 libcommputil \ 74 libresolv \ 75 libresolv2 .WAIT \ 76 libw .WAIT \ 77 libintl .WAIT \ 78 ../cmd/sgs/librtld_db \ 79 libaio \ 80 libast \ 81 libdll \ 82 libcmd \ 83 libshell \ 84 libsum \ 85 librt \ 86 libadm \ 87 libctf \ 88 libdtrace \ 89 libdtrace_jni \ 90 libcurses \ 91 libtermcap \ 92 libgen \ 93 libgss \ 94 libpam \ 95 libuuid \ 96 libthread \ 97 libpthread .WAIT \ 98 libslp \ 99 libbsdmalloc \ 100 libdoor \ 101 libdevinfo \ 102 libdladm \ 103 libdlpi \ 104 libeti \ 105 libcrypt \ 106 libdns_sd \ 107 libefi \ 108 libfstyp \ 109 libwanboot \ 110 libwanbootutil \ 111 libcryptoutil \ 112 libinetutil \ 113 libipadm \ 114 libipmp \ 115 libiscsit \ 116 libkmf \ 117 libkstat \ 118 libkvm \ 119 liblm \ 120 libmalloc \ 121 libmapmalloc \ 122 libmtmalloc \ 123 libnls \ 124 libnwam \ 125 libsmbios \ 126 libtecla \ 127 libumem \ 128 libnvpair .WAIT \ 129 libexacct \ 130 libsasl \ 131 libldap5 \ 132 libsldap .WAIT \ 133 libbsm \ 134 libsys \ 135 libsysevent \ 136 libnisdb \ 137 libpool \ 138 libpp \ 139 libproc \ 140 libproject \ 141 libsendfile \ 142 nametoaddr \ 143 ncad_addr \ 144 hbaapi \ 145 smhba \ 146 sun_fc \ 147 sun_sas \ 148 gss_mechs/mech_krb5 .WAIT \ 149 libkrb5 .WAIT \ 150 krb5 .WAIT \ 151 libsmbfs \ 152 libfcoe \ 153 libsrpt \ 154 libstmf \ 155 libstmfproxy \ 156 libnsctl \ 157 libunistat \ 158 libdscfg \ 159 librdc \ 160 libinstzones \ 161 libpkg \ 162 libpcidb 163 164SUBDIRS += \ 165 passwdutil \ 166 pam_modules \ 167 crypt_modules \ 168 libadt_jni \ 169 abi \ 170 auditd_plugins \ 171 libvolmgt \ 172 libdevice \ 173 libdevid \ 174 libdhcpsvc \ 175 libc_db \ 176 libndmp \ 177 libsec \ 178 libtnfprobe \ 179 libtnf \ 180 libtnfctl \ 181 libdhcpagent \ 182 libdhcpdu \ 183 libdhcputil \ 184 libxnet \ 185 libipsecutil 186$(CLOSED_BUILD)SUBDIRS += \ 187 $(CLOSED)/lib/libike 188SUBDIRS += \ 189 nsswitch \ 190 print \ 191 libuutil \ 192 libscf \ 193 libinetsvc \ 194 librestart \ 195 libsched \ 196 libelfsign \ 197 pkcs11 .WAIT \ 198 libpctx .WAIT \ 199 libcpc \ 200 watchmalloc \ 201 extendedFILE \ 202 madv \ 203 mpss \ 204 libdisasm \ 205 libwrap \ 206 libxcurses \ 207 libxcurses2 \ 208 libbrand .WAIT \ 209 libzonecfg \ 210 libzoneinfo \ 211 libzonestat \ 212 libtsnet \ 213 libtsol \ 214 gss_mechs/mech_spnego \ 215 gss_mechs/mech_dummy \ 216 gss_mechs/mech_dh \ 217 rpcsec_gss \ 218 libraidcfg .WAIT \ 219 librcm .WAIT \ 220 libcfgadm .WAIT \ 221 libpicl .WAIT \ 222 libpicltree .WAIT \ 223 raidcfg_plugins \ 224 cfgadm_plugins \ 225 libmail \ 226 lvm \ 227 libsmedia \ 228 libipp \ 229 libdiskmgt \ 230 liblgrp \ 231 libfsmgt \ 232 fm \ 233 libavl \ 234 libcmdutils \ 235 libcontract \ 236 ../cmd/sendmail/libmilter \ 237 sasl_plugins \ 238 udapl \ 239 libzpool \ 240 libzfs_core \ 241 libzfs \ 242 libbe \ 243 pylibbe \ 244 libzfs_jni \ 245 pyzfs \ 246 pysolaris \ 247 libmapid \ 248 brand \ 249 policykit \ 250 hal \ 251 libshare \ 252 libsqlite \ 253 libidmap \ 254 libadutils \ 255 libipmi \ 256 libexacct/demo \ 257 libvrrpadm \ 258 libvscan \ 259 libgrubmgmt \ 260 smbsrv \ 261 libilb \ 262 scsi \ 263 libima \ 264 libsun_ima \ 265 mpapi \ 266 librstp \ 267 libreparse \ 268 libhotplug \ 269 libfruutils .WAIT \ 270 libfru \ 271 $($(MACH)_SUBDIRS) 272 273i386_SUBDIRS= \ 274 libntfs \ 275 libparted \ 276 libfdisk \ 277 libsaveargs 278 279sparc_SUBDIRS= .WAIT \ 280 efcode \ 281 libds \ 282 libdscp \ 283 libprtdiag .WAIT \ 284 libprtdiag_psr \ 285 libpri \ 286 librsc \ 287 storage \ 288 libpcp \ 289 libtsalarm \ 290 libv12n 291 292FM_sparc_DEPLIBS= libpri 293 294fm: \ 295 libexacct \ 296 libipmi \ 297 libzfs \ 298 scsi \ 299 $(FM_$(MACH)_DEPLIBS) 300 301# 302# Create a special version of $(SUBDIRS) with no .WAIT's, for use with the 303# clean and clobber targets (for more information, see those targets, below). 304# 305NOWAIT_SUBDIRS= $(SUBDIRS:.WAIT=) 306 307DCSUBDIRS = \ 308 lvm 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 libdhcpsvc \ 326 libdhcputil \ 327 libipsecutil \ 328 libdiskmgt \ 329 libdladm \ 330 libdll \ 331 libgrubmgmt \ 332 libgss \ 333 libidmap \ 334 libipmp \ 335 libilb \ 336 libinetutil \ 337 libinstzones \ 338 libipadm \ 339 libnsl \ 340 libnwam \ 341 libpam \ 342 libpicl \ 343 libpool \ 344 libpkg \ 345 libpp \ 346 libscf \ 347 libsasl \ 348 libldap5 \ 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 libwanboot \ 362 libwanbootutil \ 363 libzfs \ 364 libzonecfg \ 365 lvm \ 366 madv \ 367 mpss \ 368 pam_modules \ 369 pyzfs \ 370 pysolaris \ 371 rpcsec_gss \ 372 libreparse 373MSGSUBDIRS += \ 374 $($(MACH)_MSGSUBDIRS) 375 376sparc_MSGSUBDIRS= \ 377 libprtdiag \ 378 libprtdiag_psr 379 380i386_MSGSUBDIRS= libfdisk 381 382HDRSUBDIRS= \ 383 auditd_plugins \ 384 libast \ 385 libbrand \ 386 libbsm \ 387 libc \ 388 libcmd \ 389 libcmdutils \ 390 libcommputil \ 391 libcontract \ 392 libcpc \ 393 libctf \ 394 libcurses \ 395 libtermcap \ 396 libcryptoutil \ 397 libdevice \ 398 libdevid \ 399 libdevinfo \ 400 libdiskmgt \ 401 libdladm \ 402 libdll \ 403 libdlpi \ 404 libdhcpagent \ 405 libdhcpsvc \ 406 libdhcputil \ 407 libdisasm \ 408 libdns_sd \ 409 libdscfg \ 410 libdtrace \ 411 libdtrace_jni \ 412 libelfsign \ 413 libeti \ 414 libfru \ 415 libfstyp \ 416 libgen \ 417 libipadm \ 418 libipsecutil \ 419 libinetsvc \ 420 libinetutil \ 421 libinstzones \ 422 libipmi \ 423 libipmp \ 424 libipp \ 425 libiscsit \ 426 libkstat \ 427 libkvm \ 428 libmail \ 429 libmd \ 430 libmtmalloc \ 431 libndmp \ 432 libnvpair \ 433 libnsctl \ 434 libnsl \ 435 libnwam \ 436 libpam \ 437 libpcidb \ 438 libpctx \ 439 libpicl \ 440 libpicltree \ 441 libpool \ 442 libpp \ 443 libproc \ 444 libraidcfg \ 445 librcm \ 446 librdc \ 447 libscf \ 448 libsip \ 449 libsmbios \ 450 librestart \ 451 librpcsvc \ 452 librsm \ 453 librstp \ 454 libsasl \ 455 libsec \ 456 libshell \ 457 libslp \ 458 libsmedia \ 459 libsocket \ 460 libsqlite \ 461 libfcoe \ 462 libsrpt \ 463 libstmf \ 464 libstmfproxy \ 465 libsum \ 466 libsysevent \ 467 libtecla \ 468 libtnf \ 469 libtnfctl \ 470 libtnfprobe \ 471 libtsnet \ 472 libtsol \ 473 libvrrpadm \ 474 libvolmgt \ 475 libumem \ 476 libunistat \ 477 libuutil \ 478 libwanboot \ 479 libwanbootutil \ 480 libwrap \ 481 libxcurses2 \ 482 libzfs \ 483 libzfs_core \ 484 libzfs_jni \ 485 libzoneinfo \ 486 libzonestat \ 487 hal \ 488 policykit \ 489 lvm \ 490 pkcs11 \ 491 passwdutil \ 492 ../cmd/sendmail/libmilter \ 493 fm \ 494 udapl \ 495 libmapid \ 496 libkrb5 \ 497 libsmbfs \ 498 libshare \ 499 libidmap \ 500 libvscan \ 501 libgrubmgmt \ 502 smbsrv \ 503 libilb \ 504 scsi \ 505 hbaapi \ 506 smhba \ 507 libima \ 508 libsun_ima \ 509 mpapi \ 510 libreparse \ 511 $($(MACH)_HDRSUBDIRS) 512 513$(CLOSED_BUILD)HDRSUBDIRS += \ 514 $(CLOSED)/lib/libike 515 516i386_HDRSUBDIRS= \ 517 libparted \ 518 libfdisk \ 519 libsaveargs 520 521sparc_HDRSUBDIRS= \ 522 libds \ 523 libdscp \ 524 libpri \ 525 libv12n \ 526 storage 527 528all := TARGET= all 529check := TARGET= check 530clean := TARGET= clean 531clobber := TARGET= clobber 532install := TARGET= install 533install_h := TARGET= install_h 534lint := TARGET= lint 535_dc := TARGET= _dc 536_msg := TARGET= _msg 537 538.KEEP_STATE: 539 540# 541# For the all and install targets, we clearly must respect library 542# dependencies so that the libraries link correctly. However, for 543# the remaining targets (check, clean, clobber, install_h, lint, _dc 544# and _msg), libraries do not have any dependencies on one another 545# and thus respecting dependencies just slows down the build. 546# As such, for these rules, we use pattern replacement to explicitly 547# avoid triggering the dependency information. Note that for clean, 548# clobber and lint, we must use $(NOWAIT_SUBDIRS) rather than 549# $(SUBDIRS), to prevent `.WAIT' from expanding to `.WAIT-nodepend'. 550# 551 552all: $(SUBDIRS) 553 554install: $(SUBDIRS) .WAIT install_extra 555 556# extra libraries kept in other source areas 557install_extra: 558 @cd ../cmd/sgs; pwd; $(MAKE) install_lib 559 @pwd 560 561clean clobber lint: $(NOWAIT_SUBDIRS:%=%-nodepend) 562 563install_h check: $(HDRSUBDIRS:%=%-nodepend) 564 565_msg: $(MSGSUBDIRS:%=%-nodepend) .WAIT _dc 566 567_dc: $(DCSUBDIRS:%=%-nodepend) 568 569# 570# Library interdependencies are called out explicitly here 571# 572auditd_plugins: libbsm libnsl libsecdb 573gss_mechs/mech_krb5: libgss libnsl libsocket libresolv pkcs11 574libadt_jni: libbsm 575libast: libsocket 576libadutils: libldap5 libresolv libsocket libnsl 577nsswitch: libadutils libidmap 578libbe: libzfs 579libbsm: libtsol 580libcmd: libsum libast libsocket libnsl 581libcmdutils: libavl 582libcontract: libnvpair 583libdevid: libdevinfo 584libdevinfo: libnvpair libsec 585libdhcpagent: libsocket libdhcputil libuuid libdlpi libcontract 586libdhcpsvc: libinetutil 587libdhcputil: libnsl libgen libinetutil libdlpi 588libdladm: libdevinfo libinetutil libsocket libscf librcm libnvpair \ 589 libexacct libnsl libkstat libcurses 590libdll: libast 591libdlpi: libinetutil libdladm 592libds: libsysevent 593libdscfg: libnsctl libunistat libsocket libnsl 594libdtrace: libproc libgen libctf 595libdtrace_jni: libuutil libdtrace 596libefi: libuuid 597libfstyp: libnvpair 598libelfsign: libcryptoutil libkmf 599libidmap: libadutils libldap5 libavl libsldap libuutil 600libipadm: libnsl libinetutil libsocket libdlpi libnvpair libdhcpagent \ 601 libdladm libsecdb 602libiscsit: libc libnvpair libstmf libuuid libnsl 603libkmf: libcryptoutil pkcs11 604libnsl: libmd5 605libmapid: libresolv 606librdc: libsocket libnsl libnsctl libunistat libdscfg 607libuuid: libdlpi 608$(CLOSED_BUILD)libike: libipsecutil libxnet libcryptoutil 609libinetutil: libsocket 610libipsecutil: libtecla libsocket 611libinstzones: libzonecfg libcontract 612libpkg: libwanboot libscf libadm 613libnwam: libscf 614libsecdb: libnsl 615libsasl: libgss libsocket pkcs11 libmd 616sasl_plugins: pkcs11 libgss libsocket libsasl 617libsctp: libsocket 618libshell: libast libcmd libdll libsocket libsecdb 619libsip: libmd5 620libsmbfs: libcmdutils libsocket libnsl libkrb5 621libsocket: libnsl 622libstmfproxy: libstmf libsocket libnsl libpthread 623libsum: libast 624libsysevent: libsecdb 625libldap5: libsasl libsocket libnsl libmd 626libsldap: libldap5 libtsol libnsl libc libscf libresolv 627libpool: libnvpair libexacct 628libpp: libast 629libzonecfg: libc libsocket libnsl libuuid libnvpair libsysevent libsec \ 630 libbrand libpool libscf 631libproc: ../cmd/sgs/librtld_db ../cmd/sgs/libelf libctf libsaveargs 632libproject: libpool libproc libsecdb 633libtermcap: libcurses 634libtsnet: libnsl libtsol libsecdb 635libwrap: libnsl libsocket 636libwanboot: libnvpair libresolv libnsl libsocket libdevinfo libinetutil \ 637 libdhcputil 638libwanbootutil: libnsl 639pam_modules: libproject passwdutil smbsrv 640libscf: libuutil libmd libgen libsmbios libnsl 641libinetsvc: libscf 642librestart: libuutil libscf 643libsaveargs: libdisasm 644../cmd/sgs/libdl: ../cmd/sgs/libconv 645../cmd/sgs/libelf: ../cmd/sgs/libconv 646pkcs11: libcryptoutil 647print: libldap5 648udapl/udapl_tavor: udapl/libdat 649libzfs: libdevid libgen libnvpair libuutil \ 650 libadm libavl libefi libidmap libmd libzfs_core 651libzfs_core: libnvpair 652libzfs_jni: libdiskmgt libnvpair libzfs 653libzpool: libavl libumem libnvpair libcmdutils 654libsec: libavl libidmap 655brand: libc libsocket 656libshare: libscf libzfs libuuid libfsmgt libsecdb libumem libsmbfs 657libexacct/demo: libexacct libproject libsocket libnsl 658libtsalarm: libpcp 659smbsrv: libsocket libnsl libmd libxnet libpthread librt \ 660 libshare libidmap pkcs11 libsqlite libcryptoutil \ 661 libreparse libcmdutils 662libv12n: libds libuuid 663libvrrpadm: libsocket libdladm libscf 664libvscan: libscf 665libfru: libfruutils 666scsi: libnvpair libfru 667mpapi: libpthread libdevinfo libsysevent libnvpair 668sun_fc: libdevinfo libsysevent libnvpair 669libsun_ima: libdevinfo libsysevent libnsl 670sun_sas: libdevinfo libsysevent libnvpair libkstat libdevid 671libgrubmgmt: libdevinfo libzfs libfstyp 672pylibbe: libbe libzfs 673pyzfs: libnvpair libzfs 674pysolaris: libsec libidmap 675libreparse: libnvpair 676libhotplug: libnvpair 677cfgadm_plugins: libhotplug 678libilb: libsocket 679$(INTEL_BUILD)libdiskmgt:libfdisk 680 681# 682# The reason this rule checks for the existence of the 683# Makefile is that some of the directories do not exist 684# in certain situations (e.g., exportable source builds, 685# OpenSolaris). 686# 687$(SUBDIRS): FRC 688 @if [ -f $@/Makefile ]; then \ 689 cd $@; pwd; $(MAKE) $(TARGET); \ 690 else \ 691 true; \ 692 fi 693 694$(SUBDIRS:%=%-nodepend): 695 @if [ -f $(@:%-nodepend=%)/Makefile ]; then \ 696 cd $(@:%-nodepend=%); pwd; $(MAKE) $(TARGET); \ 697 else \ 698 true; \ 699 fi 700 701FRC: 702