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