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 (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
  23 # Copyright 2015 RackTop Systems.
  24 # Copyright 2019, Joyent, Inc.
  25 #
  26 
  27 .KEEP_STATE:
  28 
  29 SRCS += fmd.c \
  30         fmd_api.c \
  31         fmd_alloc.c \
  32         fmd_asru.c \
  33         fmd_buf.c \
  34         fmd_builtin.c \
  35         fmd_case.c \
  36         fmd_ckpt.c \
  37         fmd_conf.c \
  38         fmd_ctl.c \
  39         fmd_dispq.c \
  40         fmd_dr.c \
  41         fmd_error.c \
  42         fmd_event.c \
  43         fmd_eventq.c \
  44         fmd_fmri.c \
  45         fmd_idspace.c \
  46         fmd_list.c \
  47         fmd_log.c \
  48         fmd_main.c \
  49         fmd_module.c \
  50         fmd_nv.c \
  51         fmd_proc.c \
  52         fmd_protocol.c \
  53         fmd_rpc.c \
  54         fmd_rpc_adm.c \
  55         fmd_rpc_api.c \
  56         fmd_rtld.c \
  57         fmd_scheme.c \
  58         fmd_self.c \
  59         fmd_serd.c \
  60         fmd_string.c \
  61         fmd_subr.c \
  62         fmd_svc_adm.c \
  63         fmd_svc_api.c \
  64         fmd_sysevent.c \
  65         fmd_thread.c \
  66         fmd_time.c \
  67         fmd_timerq.c \
  68         fmd_topo.c \
  69         fmd_trace.c \
  70         fmd_ustat.c \
  71         fmd_xdr_adm.c \
  72         fmd_xdr_api.c \
  73         fmd_xprt.c
  74 
  75 PROG = fmd
  76 MANIFEST = ../common/$(PROG).xml
  77 
  78 MAPFILE-DMOD = $(SRC)/cmd/mdb/common/modules/conf/mapfile-extern
  79 
  80 
  81 LOGADMFILE =    $(PROG).logadm.conf
  82 LOGADMDIR =     $(ROOT)/etc/logadm.d
  83 LOGADMENT =     $(LOGADMDIR)/$(LOGADMFILE)
  84 $(LOGADMENT) := FILEMODE = 444
  85 
  86 ROOTPDIR = $(ROOT)/usr/lib/fm/$(PROG)
  87 ROOTVDIR = $(ROOT)/var/fm/$(PROG)
  88 ROOTVSUB = $(ROOTVDIR)/ckpt $(ROOTVDIR)/rsrc $(ROOTVDIR)/xprt
  89 ROOTPROG = $(ROOTPDIR)/$(PROG)
  90 
  91 ROOTMANIFESTDIR = $(ROOTSVCSYSTEM)
  92 ROOTMANIFEST = $(ROOTMANIFESTDIR)/$(PROG).xml
  93 
  94 OBJS = $(SRCS:%.c=%.o)
  95 LINTFILES = $(SRCS:%.c=%.ln)
  96 
  97 CLEANFILES += ../common/fmd_rpc_api.h ../common/fmd_rpc_adm.h
  98 CLEANFILES += fmd_svc_adm.c fmd_svc_api.c fmd_xdr_adm.c fmd_xdr_api.c
  99 CLEANFILES += ../common/fmd_error.c
 100 
 101 DMOD = fmd.so
 102 ROOTDMOD = $(ROOT)/usr/lib/mdb/proc/$(DMOD)
 103 DMOD_SRCS = fmd_mdb.c
 104 DMOD_OBJS = $(DMOD_SRCS:%.c=%.o)
 105 DMOD_LINT = $(DMOD_SRCS:%.c=%.ln)
 106 
 107 HDRS = fmd_api.h fmd_fmri.h
 108 ROOTCDIR = $(ROOT)/etc/fm/$(PROG)
 109 ROOTHDIR = $(ROOT)/usr/include/fm
 110 ROOTHDRS = $(HDRS:%=$(ROOTHDIR)/%)
 111 
 112 $(ROOTHDRS) := FILEMODE = 0644
 113 $(ROOTVSUB) := DIRMODE = 0755
 114 $(ROOTMANIFEST) := FILEMODE = 0444
 115 
 116 $(NOT_RELEASE_BUILD)CPPFLAGS += -DDEBUG
 117 CPPFLAGS += -I. -I../common
 118 CPPFLAGS += -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT
 119 CFLAGS += $(CTF_FLAGS) $(CCVERBOSE) $(XSTRCONST)
 120 LINTFLAGS += -mu
 121 CERRWARN += -_gcc=-Wno-switch
 122 CERRWARN += -_gcc=-Wno-parentheses
 123 CERRWARN += -_gcc=-Wno-uninitialized
 124 CERRWARN += -_gcc=-Wno-clobbered
 125 $(RELEASE_BUILD)CERRWARN += -_gcc=-Wno-unused-but-set-variable
 126 CERRWARN += -_gcc=-Wno-unused-variable
 127 
 128 # not linted
 129 SMATCH=off
 130 
 131 $(PROG) := LDFLAGS += -R/usr/lib/fm
 132 $(PROG) := LDLIBS += -L$(ROOTLIB)/fm -ltopo -ldiagcode -lsysevent -lsmbios \
 133                 -luuid -lnvpair -lexacct -lnsl -lumem -ldevinfo -lfmd_msg
 134 
 135 $(DMOD) := CFLAGS += $(CC_PICFLAGS) -G $(XREGSFLAG)
 136 $(DMOD) := LDFLAGS += $(ZTEXT) $(ZDEFS) $(MAPFILE-DMOD:%=-M%)
 137 
 138 #
 139 # rpcgen(1) produces code that wants to be in the foreground if we're compiled
 140 # DEBUG, which isn't appropriate for our daemon.  Forcibly undefine this code.
 141 # It also produces various lint warnings; turn these off for these files only.
 142 # Unfortunately we also have to turn off IGNOR2 for pass2 lint as well.
 143 #
 144 fmd_svc_adm.o fmd_svc_api.o := CPPFLAGS += -UDEBUG -URPC_SVC_FG
 145 fmd_xdr_adm.o fmd_xdr_api.o := CPPFLAGS += -UDEBUG -URPC_SVC_FG
 146 
 147 fmd_svc_adm.ln fmd_svc_api.ln fmd_xdr_adm.ln fmd_xdr_api.ln := LINTFLAGS += \
 148   -xerroff=E_FUNC_ARG_UNUSED -xerroff=E_FUNC_VAR_UNUSED -xerroff=E_STATIC_UNUSED
 149 
 150 lint_prog := LINTFLAGS += -xerroff=E_FUNC_RET_ALWAYS_IGNOR2
 151 
 152 .NO_PARALLEL:
 153 .PARALLEL: $(OBJS) $(LINTFILES)
 154 
 155 all: $(PROG) $(DMOD) install_h
 156 
 157 $(LOGADMDIR):
 158         $(INS.dir)
 159 
 160 $(LOGADMDIR)/%.conf: ../common/%.conf
 161         $(INS.file)
 162 
 163 $(PROG): $(OBJS)
 164         $(LINK.c) $(OBJS) -o $@ $(LDLIBS)
 165         $(CTFMERGE) -L VERSION -o $@ $(OBJS)
 166         $(POST_PROCESS)
 167 
 168 $(DMOD): $(DMOD_OBJS)
 169         $(LINK.c) $(DMOD_OBJS) -o $@ $(LDLIBS) -lc
 170         $(POST_PROCESS)
 171 
 172 %.o: ../common/%.c
 173         $(COMPILE.c) $<
 174         $(CTFCONVERT_O)
 175 
 176 %.o: %.c
 177         $(COMPILE.c) $<
 178         $(CTFCONVERT_O)
 179 
 180 ../common/fmd_error.c: ../common/mkerror.sh ../common/fmd_error.h
 181         sh ../common/mkerror.sh < ../common/fmd_error.h > $@
 182 
 183 ../common/fmd_rpc_%.c: ../common/fmd_rpc_%.h
 184 
 185 ../common/fmd_rpc.c: ../common/fmd_rpc_adm.h ../common/fmd_rpc_api.h
 186 
 187 ../common/fmd_rpc_%.h: ../common/fmd_rpc_%.x
 188         $(RPCGEN) -CMN -h -o $@ $<
 189 
 190 fmd_svc_%.c: ../common/fmd_rpc_%.h
 191         $(RPCGEN) -CMN -m -o $@ `echo $< | sed 's/h$$/x/'`
 192 
 193 fmd_xdr_%.c: ../common/fmd_rpc_%.h
 194         $(RPCGEN) -CMN -c -o $@ `echo $< | sed 's/h$$/x/'`
 195 
 196 clean:
 197         $(RM) $(OBJS) $(DMOD_OBJS) $(LINTFILES) $(DMOD_LINT)
 198         $(RM) $(CLEANFILES)
 199 
 200 clobber: clean
 201         $(RM) $(PROG) $(DMOD)
 202 
 203 %.ln: ../common/%.c
 204         $(LINT.c) -c $<
 205 
 206 %.ln: %.c
 207         $(LINT.c) -c $<
 208 
 209 lint_prog: $(LINTFILES)
 210         $(LINT) $(LINTFLAGS) $(LINTFILES) $(LDLIBS)
 211 
 212 lint_dmod: $(DMOD_LINT)
 213         $(LINT) $(LINTFLAGS) $(DMOD_LINT) $(LDLIBS)
 214 
 215 lint: lint_prog lint_dmod
 216 
 217 $(ROOT)/etc/fm:
 218         $(INS.dir)
 219 
 220 $(ROOTCDIR): $(ROOT)/etc/fm
 221         $(INS.dir)
 222 
 223 $(ROOTHDIR):
 224         $(INS.dir)
 225 
 226 $(ROOTHDIR)/%.h: ../common/%.h
 227         $(INS.file)
 228 
 229 $(ROOTMANIFESTDIR)/%.xml: ../common/%.xml
 230         $(INS.file)
 231 
 232 $(ROOT)/var/%:
 233         $(INS.dir)
 234 
 235 $(ROOTVDIR): $(ROOT)/var/fm
 236         $(INS.dir)
 237 
 238 $(ROOTVSUB): $(ROOTVDIR)
 239         $(INS.dir)
 240 
 241 $(ROOT)/usr/lib/fm:
 242         $(INS.dir)
 243 
 244 $(ROOTPDIR): $(ROOT)/usr/lib/fm
 245         $(INS.dir)
 246 
 247 $(ROOTPROG): $(ROOTPDIR) $(PROG)
 248         $(RM) $@; $(INS) -s -m 0555 -f $(@D) $(PROG)
 249 
 250 $(ROOT)/usr/lib/mdb/proc: $(ROOT)/usr/lib/mdb
 251         $(INS.dir)
 252 
 253 $(ROOTDMOD): $(ROOT)/usr/lib/mdb/proc $(DMOD)
 254         $(RM) $@; $(INS) -s -m 0555 -f $(@D) $(DMOD)
 255 
 256 install_h: $(ROOTHDIR) $(ROOTHDRS)
 257 
 258 install: all install_h $(ROOTPROG) $(ROOTDMOD) $(LOGADMDIR) $(LOGADMENT) \
 259         $(ROOTCDIR) $(ROOTVDIR) $(ROOTVSUB) $(ROOTMANIFEST)
 260 
 261 check: $(CHKMANIFEST)