2N/A#
2N/A# CDDL HEADER START
2N/A#
2N/A# The contents of this file are subject to the terms of the
2N/A# Common Development and Distribution License (the "License").
2N/A# You may not use this file except in compliance with the License.
2N/A#
2N/A# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2N/A# or http://www.opensolaris.org/os/licensing.
2N/A# See the License for the specific language governing permissions
2N/A# and limitations under the License.
2N/A#
2N/A# When distributing Covered Code, include this CDDL HEADER in each
2N/A# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2N/A# If applicable, add the following below this CDDL HEADER, with the
2N/A# fields enclosed by brackets "[]" replaced with your own identifying
2N/A# information: Portions Copyright [yyyy] [name of copyright owner]
2N/A#
2N/A# CDDL HEADER END
2N/A#
2N/A
2N/A# Copyright (c) 1989, 2012, Oracle and/or its affiliates. All rights reserved.
2N/A
2N/Ainclude ../Makefile.master
2N/A
2N/A# Note that libcurses installs commands along with its library.
2N/A# This is a minor bug which probably should be fixed.
2N/A# Note also that a few extra libraries are kept in cmd source.
2N/A#
2N/A# Certain libraries are linked with, hence depend on, other libraries.
2N/A#
2N/A# We have historically used .WAIT to express dependencies, with the
2N/A# undesirable effect of reducing the amount of parallelism achieved,
2N/A# and lengthening the time it takes to build the libraries. To minimize
2N/A# this, we would also express makefile dependencies between the objects
2N/A# that would otherwise have had .WAIT barriers between them. This approach
2N/A# was limiting:
2N/A#
2N/A# - The make rules are complex, change over time, and errors are not
2N/A# automatically detectable. As such, the rules at any given time are
2N/A# likely to be at best a close approximation to the real situation.
2N/A#
2N/A# - Requiring a build order means that objects cannot have a mutual
2N/A# dependency on each other, even in cases where the runtime linker
2N/A# would have no issue with them.
2N/A#
2N/A# - There is still serialization in the builds, though less than there
2N/A# would be otherwise.
2N/A#
2N/A# We therefore now use stub shared objects, which can be built very quickly,
2N/A# and which eliminate the need for ordering. Before starting to build the
2N/A# real objects, we create an alternative proto root containing stub versions
2N/A# of the shared objects built by this consolidation. Then, we proceed to build
2N/A# most of the real objects in the workspace in parallel, using the stub
2N/A# objects at link-time.
2N/A#
2N/A.PARALLEL:
2N/A
2N/A#
2N/A# The $(CLOSED_BUILD) additions to SUBDIRS & MSGSUBDIRS are unfortunate,
2N/A# but required due to the "dependencies" of using .WAIT to barrier the
2N/A# parallel dmake builds. once 4631488 has been fixed, they can be
2N/A# consolidated into one $(CLOSED_BUILD)SUBDIRS += (all closed libs) as
2N/A# shown in HDRSUBDIRS
2N/A#
2N/ASUBDIRS= \
2N/A common \
2N/A ../cmd/sgs
2N/A
2N/A$(CLOSED_BUILD)SUBDIRS += \
2N/A $(CLOSED)/lib/libc_i18n
2N/A
2N/ASUBDIRS += \
2N/A libc \
2N/A c_synonyms \
2N/A libmd \
2N/A libmd5 \
2N/A libmp \
2N/A libnsl \
2N/A libsecdb \
2N/A librpcsvc \
2N/A libsocket \
2N/A libsctp \
2N/A libsip \
2N/A libcommputil \
2N/A libresolv \
2N/A libresolv2 \
2N/A libw \
2N/A libintl \
2N/A libaio \
2N/A libcmd \
2N/A librt \
2N/A libadm \
2N/A libctf \
2N/A libdtrace \
2N/A libdtrace_jni \
2N/A libcurses \
2N/A libfuse \
2N/A libgen \
2N/A libgss \
2N/A libpam \
2N/A libuuid \
2N/A libthread \
2N/A libpthread \
2N/A libslp \
2N/A libbsdmalloc \
2N/A libdoor \
2N/A libdevinfo \
2N/A libdladm \
2N/A libdlpi \
2N/A libeti \
2N/A libcrypt \
2N/A libdns_sd \
2N/A libefi \
2N/A libbootmgmt \
2N/A libfstyp \
2N/A libwanboot \
2N/A libwanbootutil \
2N/A libcryptoutil \
2N/A libinetutil \
2N/A libipadm \
2N/A libipmp \
2N/A libiscsit \
2N/A libkmf \
2N/A libsoftcrypto
2N/A$(CLOSED_BUILD)SUBDIRS += \
2N/A $(CLOSED)/lib/libkmsagent
2N/ASUBDIRS += \
2N/A libkstat \
2N/A libkvm \
2N/A liblm \
2N/A libmalloc \
2N/A libmapmalloc \
2N/A libmtmalloc \
2N/A libnetcfg \
2N/A libnls \
2N/A libnwam \
2N/A libsmbios \
2N/A libumem \
2N/A libnvpair \
2N/A libexacct \
2N/A libplot \
2N/A libldap4 \
2N/A libsasl \
2N/A libldap5 \
2N/A libsldap \
2N/A libbsm \
2N/A libdevalloc \
2N/A libsys \
2N/A libsysevent \
2N/A libnisdb \
2N/A libpool \
2N/A libproc \
2N/A libproject \
2N/A libsendfile \
2N/A nametoaddr \
2N/A ncad_addr \
2N/A hbaapi \
2N/A smhba \
2N/A sun_fc \
2N/A sun_sas \
2N/A gss_mechs/mech_krb5 \
2N/A libkrb5 \
2N/A krb5 \
2N/A libndr \
2N/A libntsvcs \
2N/A libsmb \
2N/A libsmbfs \
2N/A libsmbns \
2N/A libsmbrp \
2N/A libfcoe \
2N/A libsrpt \
2N/A libstmf \
2N/A libstmfproxy \
2N/A libnsctl \
2N/A libunistat \
2N/A libdscfg \
2N/A librdc \
2N/A libinstzones \
2N/A libpkg \
2N/A libiov \
2N/A libuvfs
2N/A
2N/ASUBDIRS += \
2N/A passwdutil \
2N/A pam_modules \
2N/A crypt_modules \
2N/A libadt_jni \
2N/A abi \
2N/A auditd_plugins \
2N/A libvolmgt \
2N/A libdevice \
2N/A libdevid \
2N/A libdhcpsvc \
2N/A libc_db \
2N/A libndmp \
2N/A libsec \
2N/A libdhcpagent \
2N/A libdhcpdu \
2N/A libdhcputil \
2N/A libxnet \
2N/A libipsecutil
2N/A$(CLOSED_BUILD)SUBDIRS += \
2N/A $(CLOSED)/lib/libike
2N/ASUBDIRS += \
2N/A nsswitch \
2N/A print \
2N/A libuutil \
2N/A libscf \
2N/A libinetsvc \
2N/A librestart \
2N/A libsched \
2N/A libelfsign \
2N/A pkcs11 \
2N/A libpctx \
2N/A libcpc \
2N/A watchmalloc \
2N/A extendedFILE \
2N/A madv \
2N/A mpss \
2N/A libdisasm \
2N/A libwrap \
2N/A libxcurses \
2N/A libxcurses2 \
2N/A libbrand \
2N/A libzonecfg \
2N/A libzoneinfo \
2N/A libzonestat \
2N/A libadr \
2N/A libradproto \
2N/A rad \
2N/A libtsnet \
2N/A libtsol \
2N/A gss_mechs/mech_spnego \
2N/A gss_mechs/mech_dummy \
2N/A gss_mechs/mech_dh \
2N/A rpcsec_gss \
2N/A libraidcfg \
2N/A librcm \
2N/A libcfgadm \
2N/A libpicl \
2N/A libpicltree \
2N/A raidcfg_plugins \
2N/A cfgadm_plugins \
2N/A libmail \
2N/A lvm \
2N/A libsmedia \
2N/A libipp \
2N/A libdiskmgt \
2N/A liblgrp \
2N/A liblldp \
2N/A libecp \
2N/A libvdp \
2N/A libfsmgt \
2N/A fm \
2N/A libavl \
2N/A libcmdutils \
2N/A libcontract \
2N/A ../cmd/sendmail/libmilter \
2N/A sasl_plugins \
2N/A udapl \
2N/A libzpool \
2N/A libzfs \
2N/A pybootmgmt \
2N/A libbe \
2N/A pylibbe \
2N/A libzfs_jni \
2N/A pyzfs \
2N/A pysolaris \
2N/A libmapid \
2N/A brand \
2N/A policykit \
2N/A hal \
2N/A libshare \
2N/A libshare_plugins \
2N/A libsqlite \
2N/A libidmap \
2N/A libadutils \
2N/A libipmi \
2N/A libexacct/demo \
2N/A libvrrpadm \
2N/A libvscan \
2N/A libilb \
2N/A scsi \
2N/A libima \
2N/A libsun_ima \
2N/A mpapi \
2N/A librstp \
2N/A libreparse \
2N/A libhotplug \
2N/A libfruutils \
2N/A libfru \
2N/A libshadowfs \
2N/A libshadowtest \
2N/A libsuri \
2N/A libfedfs \
2N/A libpower \
2N/A libxprop \
2N/A $($(MACH)_SUBDIRS)
2N/A
2N/Ai386_SUBDIRS= \
2N/A libntfs \
2N/A libparted \
2N/A libfdisk \
2N/A libuefi_rt
2N/A
2N/Asparc_SUBDIRS= \
2N/A efcode \
2N/A libds \
2N/A libdscp \
2N/A libprtdiag \
2N/A libprtdiag_psr \
2N/A libpri \
2N/A storage \
2N/A libpcp \
2N/A libtsalarm \
2N/A libv12n
2N/A
2N/AFM_sparc_DEPLIBS= libpri
2N/A
2N/Afm: \
2N/A libexacct \
2N/A libipmi \
2N/A libzfs \
2N/A scsi \
2N/A $(FM_$(MACH)_DEPLIBS)
2N/A
2N/ADCSUBDIRS = \
2N/A lvm
2N/A
2N/AMSGSUBDIRS= \
2N/A abi \
2N/A auditd_plugins \
2N/A brand \
2N/A cfgadm_plugins \
2N/A ../cmd/sgs \
2N/A gss_mechs/mech_dh \
2N/A gss_mechs/mech_krb5 \
2N/A krb5 \
2N/A libbsm \
2N/A libc \
2N/A libcfgadm \
2N/A libcontract \
2N/A libcurses \
2N/A libdhcpsvc \
2N/A libdhcputil \
2N/A libfuse \
2N/A libipsecutil \
2N/A libdiskmgt \
2N/A libdladm \
2N/A libgss \
2N/A libidmap \
2N/A libipmp \
2N/A libilb \
2N/A libinetutil \
2N/A libinstzones \
2N/A libipadm \
2N/A libnetcfg \
2N/A libnsl \
2N/A libnwam \
2N/A libpam \
2N/A libpicl \
2N/A libpool \
2N/A libpkg \
2N/A libscf \
2N/A libsasl \
2N/A libldap5 \
2N/A libsecdb \
2N/A libshadowfs \
2N/A libshare \
2N/A libshare_plugins \
2N/A libsldap \
2N/A libslp \
2N/A libsmbfs \
2N/A libsmedia \
2N/A libtsol \
2N/A libuutil \
2N/A libvrrpadm \
2N/A libvscan \
2N/A libwanboot \
2N/A libwanbootutil \
2N/A libzfs \
2N/A libzonecfg \
2N/A libadr \
2N/A libradproto \
2N/A rad \
2N/A lvm \
2N/A madv \
2N/A mpss \
2N/A pam_modules \
2N/A pyzfs \
2N/A pysolaris \
2N/A rpcsec_gss \
2N/A libreparse \
2N/A libsuri
2N/AMSGSUBDIRS += \
2N/A $($(MACH)_MSGSUBDIRS)
2N/A
2N/Asparc_MSGSUBDIRS= \
2N/A libprtdiag \
2N/A libprtdiag_psr
2N/A
2N/Ai386_MSGSUBDIRS= libfdisk
2N/A
2N/AHDRSUBDIRS= \
2N/A auditd_plugins \
2N/A libbe \
2N/A libbootmgmt \
2N/A libbrand \
2N/A libbsm \
2N/A libc \
2N/A libcmdutils \
2N/A libcommputil \
2N/A libcontract \
2N/A libcpc \
2N/A libctf \
2N/A libcurses \
2N/A libcryptoutil \
2N/A libdevalloc \
2N/A libdevice \
2N/A libdevid \
2N/A libdevinfo \
2N/A libdiskmgt \
2N/A libdladm \
2N/A libdlpi \
2N/A libdhcpagent \
2N/A libdhcpsvc \
2N/A libdhcputil \
2N/A libdisasm \
2N/A libdns_sd \
2N/A libdscfg \
2N/A libdtrace \
2N/A libdtrace_jni \
2N/A libelfsign \
2N/A libeti \
2N/A libfru \
2N/A libfuse \
2N/A libfstyp \
2N/A libgen \
2N/A libhotplug \
2N/A libipadm \
2N/A libipsecutil \
2N/A libinetsvc \
2N/A libinetutil \
2N/A libinstzones \
2N/A libipmi \
2N/A libipmp \
2N/A libipp \
2N/A libiscsit \
2N/A libkmf \
2N/A libkstat \
2N/A libkvm \
2N/A liblldp \
2N/A libecp \
2N/A libvdp \
2N/A libmail \
2N/A libmd \
2N/A libmtmalloc \
2N/A libnetcfg \
2N/A libndmp \
2N/A libnvpair \
2N/A libnsctl \
2N/A libnsl \
2N/A libnwam \
2N/A libpam \
2N/A libpctx \
2N/A libpicl \
2N/A libpicltree \
2N/A libplot \
2N/A libpool \
2N/A libpower \
2N/A libproc \
2N/A libraidcfg \
2N/A librcm \
2N/A librdc \
2N/A libscf \
2N/A libsip \
2N/A libsmbios \
2N/A libsoftcrypto \
2N/A librestart \
2N/A librpcsvc \
2N/A librstp \
2N/A libsasl \
2N/A libsec \
2N/A libslp \
2N/A libsmedia \
2N/A libsocket \
2N/A libsqlite \
2N/A libfcoe \
2N/A libsrpt \
2N/A libstmf \
2N/A libstmfproxy \
2N/A libsysevent \
2N/A libtsnet \
2N/A libtsol \
2N/A libvrrpadm \
2N/A libvolmgt \
2N/A libumem \
2N/A libunistat \
2N/A libuutil \
2N/A libuvfs \
2N/A libwanboot \
2N/A libwanbootutil \
2N/A libwrap \
2N/A libxcurses2 \
2N/A libxprop \
2N/A libzfs \
2N/A libzfs_jni \
2N/A libzoneinfo \
2N/A libzonestat \
2N/A libadr \
2N/A libradproto \
2N/A rad \
2N/A hal \
2N/A policykit \
2N/A pkcs11 \
2N/A passwdutil \
2N/A ../cmd/sendmail/libmilter \
2N/A fm \
2N/A udapl \
2N/A libmapid \
2N/A libkrb5 \
2N/A libndr \
2N/A libntsvcs \
2N/A libsmb \
2N/A libsmbfs \
2N/A libsmbns \
2N/A libsmbrp \
2N/A libshare \
2N/A libidmap \
2N/A libvscan \
2N/A libilb \
2N/A scsi \
2N/A hbaapi \
2N/A smhba \
2N/A libima \
2N/A libsun_ima \
2N/A libsuri \
2N/A mpapi \
2N/A libreparse \
2N/A libiov \
2N/A libshadowfs \
2N/A libshadowtest \
2N/A $($(MACH)_HDRSUBDIRS)
2N/A
2N/A$(CLOSED_BUILD)HDRSUBDIRS += \
2N/A $(CLOSED)/lib/libc_i18n \
2N/A $(CLOSED)/lib/libike
2N/A
2N/Ai386_HDRSUBDIRS= \
2N/A libparted \
2N/A libfdisk \
2N/A libuefi_rt
2N/A
2N/Asparc_HDRSUBDIRS= \
2N/A libds \
2N/A libdscp \
2N/A libpri \
2N/A libv12n \
2N/A storage
2N/A
2N/Aall := TARGET= all
2N/Acheck := TARGET= check
2N/Aclean := TARGET= clean
2N/Aclobber := TARGET= clobber
2N/Ainstall := TARGET= install
2N/Ainstall_h := TARGET= install_h
2N/Astub := TARGET= stub
2N/Astubinstall := TARGET= stubinstall
2N/Alint := TARGET= lint
2N/A_dc := TARGET= _dc
2N/A_msg := TARGET= _msg
2N/A
2N/A.KEEP_STATE:
2N/A
2N/Aall clean clobber install lint stub stubinstall: $(SUBDIRS)
2N/A
2N/Ainstall_h check: $(HDRSUBDIRS)
2N/A
2N/A_msg: $(MSGSUBDIRS) .WAIT _dc
2N/A
2N/A_dc: $(DCSUBDIRS)
2N/A
2N/A#
2N/A# Library interdependencies are called out explicitly here. Due to the
2N/A# use of stub objects, this should only be necessary when an object
2N/A# depends on something other than a shared object, such as compiled
2N/A# objects from usr/closed.
2N/A#
2N/A
2N/A#
2N/A# libc and libike depend on closed bits
2N/A#
2N/A$(CLOSED_BUILD)libc: $(CLOSED)/lib/libc_i18n
2N/A$(CLOSED_BUILD)libike: libipsecutil libxnet libcryptoutil
2N/A$(CLOSED_BUILD)libkmsagent: libsoftcrypto libpam
2N/A
2N/A#
2N/A# The runtime linker (../cmd/sgs/rtld) requires system call traps and
2N/A# a few utility functions from libc_pic.a.
2N/A#
2N/A../cmd/sgs: libc
2N/A
2N/A#
2N/A# libscf/native requires libuutil/native to be built first
2N/A#
2N/Alibscf: libuutil
2N/A
2N/A
2N/A#
2N/A# The reason this rule checks for the existence of the
2N/A# Makefile is that some of the directories do not exist
2N/A# in certain situations (e.g., exportable source builds,
2N/A# OpenSolaris).
2N/A#
2N/A$(SUBDIRS): FRC
2N/A @if [ -f $@/Makefile ]; then \
2N/A cd $@; pwd; $(MAKE) $(TARGET); \
2N/A else \
2N/A true; \
2N/A fi
2N/A
2N/AFRC: