xref: /titanic_52/usr/src/cmd/Makefile.cmd (revision a60fc142342386d0b786e65fba901234400d7020)
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 2007 Sun Microsystems, Inc.  All rights reserved.
23# Use is subject to license terms.
24#
25# ident	"%Z%%M%	%I%	%E% SMI"
26#
27# Definitions common to command source.
28#
29# include global definitions; SRC should be defined in the shell.
30# SRC is needed until RFE 1026993 is implemented.
31
32include $(SRC)/Makefile.master
33
34LN=		ln
35CP=		cp
36SH=		sh
37ECHO=		echo
38MKDIR=		mkdir
39TOUCH=		touch
40
41FILEMODE=	0555
42LIBFILEMODE=	0444
43XPG4=		$(XPG4PROG:%=%.xpg4)
44XPG6=		$(XPG6PROG:%=%.xpg6)
45
46KRB5DIR=	$(ROOT)/usr
47KRB5BIN=	$(KRB5DIR)/bin
48KRB5SBIN=	$(KRB5DIR)/sbin
49KRB5LIB=	$(KRB5DIR)/lib/krb5
50KRB5RUNPATH=	/usr/lib/krb5
51GSSRUNPATH=	/usr/lib/gss
52
53
54ROOTBIN=		$(ROOT)/usr/bin
55ROOTLIB=		$(ROOT)/usr/lib
56ROOTLIBSVCBIN=		$(ROOT)/lib/svc/bin
57ROOTLIBSVCMETHOD=	$(ROOT)/lib/svc/method
58
59ROOTSHLIB=	$(ROOT)/usr/share/lib
60ROOTSHLIBCCS=	$(ROOTSHLIB)/ccs
61ROOTSBIN=	$(ROOT)/sbin
62ROOTUSRSBIN=	$(ROOT)/usr/sbin
63ROOTETC=	$(ROOT)/etc
64ROOTCCSBIN=	$(ROOT)/usr/ccs/bin
65ROOTCCSBIN64=	$(ROOTCCSBIN)/$(MACH64)
66ROOTCCSBINLINKDIR=	$(ROOT)/../../bin
67ROOTCCSBINLINKDIR64=	$(ROOT)../../../bin/$(MACH)
68ROOTUSRKVM=	$(ROOT)/usr/kvm
69ROOTXPG4=	$(ROOT)/usr/xpg4
70ROOTXPG4BIN=	$(ROOT)/usr/xpg4/bin
71ROOTXPG4BIN32=	$(ROOTXPG4BIN)/$(MACH32)
72ROOTXPG4BIN64=	$(ROOTXPG4BIN)/$(MACH64)
73ROOTXPG6=	$(ROOT)/usr/xpg6
74ROOTXPG6BIN=	$(ROOT)/usr/xpg6/bin
75ROOTLOCALEDEF=	$(ROOT)/usr/lib/localedef
76ROOTCHARMAP=	$(ROOTLOCALEDEF)/charmap
77ROOTI18NEXT=	$(ROOTLOCALEDEF)/extensions
78ROOTI18NEXT64=	$(ROOTLOCALEDEF)/extensions/$(MACH64)
79ROOTBIN32=	$(ROOTBIN)/$(MACH32)
80ROOTBIN64=	$(ROOTBIN)/$(MACH64)
81ROOTCMDDIR64=	$(ROOTCMDDIR)/$(MACH64)
82ROOTLIB64=	$(ROOTLIB)/$(MACH64)
83ROOTUSRSBIN32=	$(ROOTUSRSBIN)/$(MACH32)
84ROOTUSRSBIN64=	$(ROOTUSRSBIN)/$(MACH64)
85ROOTMAN1=	$(ROOT)/usr/share/man/man1
86ROOTMAN1M=	$(ROOT)/usr/share/man/man1m
87ROOTMAN3=	$(ROOT)/usr/share/man/man3
88
89#
90
91# Like ROOTLIBDIR in $(SRC)/Makefile.lib, any lower-level Makefiles that
92# put their binaries in a non-standard location should reset this and use
93# $(ROOTCMD) in their `install' target. By default we set this to a bogus
94# value so that it will not conflict with any of the other values already
95# defined in this Makefile.
96#
97ROOTCMDDIR=	$(ROOT)/__nonexistent_directory__
98
99ROOTSHAUDIO=	$(ROOT)/usr/share/audio
100ROOTAUDIOSAMP=	$(ROOTSHAUDIO)/samples
101ROOTAUDIOSAMPAU=$(ROOTAUDIOSAMP)/au
102
103#
104# Begin /usr/sfw freeware rules for freeware that has "External"
105# taxonomy stability level.
106#
107ROOTSFW=	$(ROOT)/usr/sfw
108ROOTSFWBIN=	$(ROOT)/usr/sfw/bin
109ROOTSFWSBIN=	$(ROOT)/usr/sfw/sbin
110ROOTSFWSHARE=	$(ROOT)/usr/sfw/share
111ROOTSFWSHSRC=	$(ROOT)/usr/sfw/share/src
112ROOTSFWINFO=	$(ROOT)/usr/sfw/share/info
113ROOTSFWINCLUDE=	$(ROOT)/usr/sfw/include
114ROOTSFWLIB=	$(ROOT)/usr/sfw/lib
115ROOTLIBEXEC=	$(ROOT)/usr/sfw/libexec
116ROOTSFWMAN=	$(ROOT)/usr/sfw/share/man
117ROOTSFWMANN=	$(ROOT)/usr/sfw/share/mann
118ROOTSFWMAN1=	$(ROOT)/usr/sfw/share/man/man1
119ROOTSFWMAN1M=	$(ROOT)/usr/sfw/share/man/man1m
120ROOTSFWMAN3=	$(ROOT)/usr/sfw/share/man/man3
121ROOTSFWMAN5=	$(ROOT)/usr/sfw/share/man/man5
122ROOTSFWMAN7=	$(ROOT)/usr/sfw/share/man/man7
123#
124# End /usr/sfw freeware rules
125#
126
127ISAEXEC=	$(ROOT)/usr/lib/isaexec
128PLATEXEC=	$(ROOT)/usr/lib/platexec
129
130LDLIBS =	$(LDLIBS.cmd)
131
132LDFLAGS.cmd = \
133	$(ENVLDFLAGS1) $(ENVLDFLAGS2) $(ENVLDFLAGS3) \
134	$(MAPFILE.NES:%=-M%) $(MAPFILE.PGA:%=-M%) $(MAPFILE.NED:%=-M%)
135
136LDFLAGS =	$(LDFLAGS.cmd)
137
138LINTFLAGS=	-axsm
139LINTFLAGS64=	-axsm -Xarch=$(MACH64:sparcv9=v9)
140LINTOUT=	lint.out
141
142KRB5PROG=	$(PROG:%=$(KRB5BIN)/%)
143KRB5SBINPROG=	$(PROG:%=$(KRB5SBIN)/%)
144KRB5LIBPROG=	$(PROG:%=$(KRB5LIB)/%)
145
146ROOTPROG=	$(PROG:%=$(ROOTBIN)/%)
147ROOTCMD=	$(PROG:%=$(ROOTCMDDIR)/%)
148ROOTSHFILES=	$(SHFILES:%=$(ROOTBIN)/%)
149ROOTLIBPROG=	$(PROG:%=$(ROOTLIB)/%)
150ROOTLIBSHFILES= $(SHFILES:%=$(ROOTLIB)/%)
151ROOTSHLIBPROG=	$(PROG:%=$(ROOTSHLIB)/%)
152ROOTSBINPROG=	$(PROG:%=$(ROOTSBIN)/%)
153ROOTUSRSBINPROG=$(PROG:%=$(ROOTUSRSBIN)/%)
154ROOTETCPROG=	$(PROG:%=$(ROOTETC)/%)
155ROOTCCSBINPROG=	$(PROG:%=$(ROOTCCSBIN)/%)
156ROOTCCSBINPROG64=	  $(PROG:%=$(ROOTCCSBIN64)/%)
157ROOTCCSBINLINK=$(PROG:%=  $(ROOTCCSBINLINKDIR)/%)
158ROOTCCSBINLINK64=$(PROG:%=$(ROOTCCSBINLINKDIR64)/%)
159ROOTUSRKVMPROG=	$(PROG:%=$(ROOTUSRKVM)/%)
160ROOTXPG4PROG=	$(XPG4PROG:%=$(ROOTXPG4BIN)/%)
161ROOTXPG4PROG32=	$(XPG4PROG:%=$(ROOTXPG4BIN32)/%)
162ROOTXPG4PROG64=	$(XPG4PROG:%=$(ROOTXPG4BIN64)/%)
163ROOTXPG6PROG=	$(XPG6PROG:%=$(ROOTXPG6BIN)/%)
164ROOTLOCALEPROG=	$(PROG:%=$(ROOTLOCALEDEF)/%)
165ROOTPROG64=	$(PROG:%=$(ROOTBIN64)/%)
166ROOTPROG32=	$(PROG:%=$(ROOTBIN32)/%)
167ROOTCMD64=	$(PROG:%=$(ROOTCMDDIR64)/%)
168ROOTUSRSBINPROG32=	$(PROG:%=$(ROOTUSRSBIN32)/%)
169ROOTUSRSBINPROG64=	$(PROG:%=$(ROOTUSRSBIN64)/%)
170ROOTMAN1FILES=	$(MAN1FILES:%=$(ROOTMAN1)/%)
171$(ROOTMAN1FILES) := FILEMODE= 444
172$(ROOTMAN1FILES) := OWNER= root
173$(ROOTMAN1FILES) := GROUP= bin
174ROOTMAN1MFILES=	$(MAN1MFILES:%=$(ROOTMAN1M)/%)
175$(ROOTMAN1MFILES) := FILEMODE= 444
176$(ROOTMAN1MFILES) := OWNER= root
177$(ROOTMAN1MFILES) := GROUP= bin
178ROOTMAN3FILES=	$(MAN3FILES:%=$(ROOTMAN3)/%)
179$(ROOTMAN3FILES) := FILEMODE= 444
180$(ROOTMAN3FILES) := OWNER= root
181$(ROOTMAN3FILES) := GROUP= bin
182
183# Symlink rules for /usr/ccs/bin commands. Note, those commands under
184# the rule of the linker area, are controlled by a different set of
185# rules defined in $(SRC)/cmd/sgs/Makefile.var.
186
187INS.ccsbinlink= \
188	$(RM) $(ROOTCCSBINPROG); \
189	$(SYMLINK) ../../bin/$(PROG) $(ROOTCCSBINPROG)
190
191INS.ccsbinlink64= \
192	$(RM) $(ROOTCCSBINPROG64); \
193	$(SYMLINK) ../../../bin/$(MACH64)/$(PROG) $(ROOTCCSBINPROG64)
194
195ROOTETCDEFAULT=	$(ROOTETC)/default
196ROOTETCDEFAULTFILES=	$(DEFAULTFILES:%.dfl=$(ROOTETCDEFAULT)/%)
197$(ROOTETCDEFAULTFILES) :=	OWNER = root
198$(ROOTETCDEFAULTFILES) :=	GROUP = sys
199$(ROOTETCDEFAULTFILES) :=	FILEMODE = 0644
200
201#
202# Directories for smf(5) service manifests and profiles.
203#
204ROOTVARSVC=			$(ROOT)/var/svc
205
206ROOTVARSVCMANIFEST=		$(ROOTVARSVC)/manifest
207ROOTVARSVCPROFILE=		$(ROOTVARSVC)/profile
208
209ROOTSVCMILESTONE=		$(ROOTVARSVCMANIFEST)/milestone
210ROOTSVCDEVICE=			$(ROOTVARSVCMANIFEST)/device
211ROOTSVCSYSTEM=			$(ROOTVARSVCMANIFEST)/system
212ROOTSVCSYSTEMDEVICE=		$(ROOTSVCSYSTEM)/device
213ROOTSVCSYSTEMFILESYSTEM=	$(ROOTSVCSYSTEM)/filesystem
214ROOTSVCSYSTEMSECURITY=		$(ROOTSVCSYSTEM)/security
215ROOTSVCNETWORK=			$(ROOTVARSVCMANIFEST)/network
216ROOTSVCNETWORKLDAP=		$(ROOTSVCNETWORK)/ldap
217ROOTSVCNETWORKNFS=		$(ROOTSVCNETWORK)/nfs
218ROOTSVCNETWORKNIS=		$(ROOTSVCNETWORK)/nis
219ROOTSVCNETWORKROUTING=		$(ROOTSVCNETWORK)/routing
220ROOTSVCNETWORKRPC=		$(ROOTSVCNETWORK)/rpc
221ROOTSVCNETWORKSECURITY=		$(ROOTSVCNETWORK)/security
222ROOTSVCNETWORKSSL=		$(ROOTSVCNETWORK)/ssl
223ROOTSVCNETWORKIPSEC=		$(ROOTSVCNETWORK)/ipsec
224ROOTSVCNETWORKSHARES=		$(ROOTSVCNETWORK)/shares
225ROOTSVCPLATFORM=		$(ROOTVARSVCMANIFEST)/platform
226ROOTSVCPLATFORMSUN4U=		$(ROOTSVCPLATFORM)/sun4u
227ROOTSVCPLATFORMSUN4V=		$(ROOTSVCPLATFORM)/sun4v
228ROOTSVCAPPLICATION=		$(ROOTVARSVCMANIFEST)/application
229ROOTSVCAPPLICATIONMANAGEMENT=	$(ROOTSVCAPPLICATION)/management
230ROOTSVCAPPLICATIONSECURITY=	$(ROOTSVCAPPLICATION)/security
231ROOTSVCAPPLICATIONPRINT=	$(ROOTSVCAPPLICATION)/print
232
233#
234# Commands Makefiles delivering a manifest are expected to define MANIFEST.
235#
236# Like ROOTCMDDIR, any lower-level Makefiles that put their manifests in a
237# subdirectory of the manifest directories listed above should reset
238# ROOTMANIFESTDIR and use it in their `install' target. By default we set this
239# to a bogus value so that it will not conflict with any of the other values
240# already  defined in this Makefile.
241#
242# The manifest validation of the $SRC/cmd check target is also derived from a
243# valid MANIFEST setting.
244#
245ROOTMANIFESTDIR=	$(ROOTVARSVCMANIFEST)/__nonexistent_directory__
246ROOTMANIFEST=		$(MANIFEST:%=$(ROOTMANIFESTDIR)/%)
247CHKMANIFEST=		$(MANIFEST:%.xml=%.xmlchk)
248
249#
250# For installing "starter scripts" of services
251#
252
253ROOTSVCMETHOD=		$(SVCMETHOD:%=$(ROOTLIBSVCMETHOD)/%)
254
255ROOTSVCBINDIR=		$(ROOTLIBSVCBIN)/__nonexistent_directory__
256ROOTSVCBIN= 		$(SVCBIN:%=$(ROOTSVCBINDIR)/%)
257
258#
259
260# For programs that are installed in the root filesystem,
261# build $(ROOTFS_PROG) rather than $(PROG)
262$(ROOTFS_PROG) := LDFLAGS += -Wl,-I/lib/ld.so.1
263
264$(KRB5BIN)/%: %
265	$(INS.file)
266
267$(KRB5SBIN)/%: %
268	$(INS.file)
269
270$(KRB5LIB)/%: %
271	$(INS.file)
272
273$(ROOTBIN)/%: %
274	$(INS.file)
275
276$(ROOTLIB)/%: %
277	$(INS.file)
278
279$(ROOTBIN64)/%: %
280	$(INS.file)
281
282$(ROOTLIB64)/%: %
283	$(INS.file)
284
285$(ROOTBIN32)/%: %
286	$(INS.file)
287
288$(ROOTSHLIB)/%: %
289	$(INS.file)
290
291$(ROOTSBIN)/%: %
292	$(INS.file)
293
294$(ROOTUSRSBIN)/%: %
295	$(INS.file)
296
297$(ROOTUSRSBIN32)/%: %
298	$(INS.file)
299
300$(ROOTUSRSBIN64)/%: %
301	$(INS.file)
302
303$(ROOTETC)/%: %
304	$(INS.file)
305
306$(ROOTETCDEFAULT)/%:	%.dfl
307	$(INS.rename)
308
309$(ROOTUSRKVM)/%: %
310	$(INS.file)
311
312$(ROOTXPG4BIN)/%: %.xpg4
313	$(INS.rename)
314
315$(ROOTXPG4BIN32)/%: %.xpg4
316	$(INS.rename)
317
318$(ROOTXPG4BIN64)/%: %.xpg4
319	$(INS.rename)
320
321$(ROOTXPG6BIN)/%: %.xpg6
322	$(INS.rename)
323
324$(ROOTLOCALEDEF)/%: %
325	$(INS.file)
326
327$(ROOTCHARMAP)/%: %
328	$(INS.file)
329
330$(ROOTI18NEXT)/%: %
331	$(INS.file)
332
333$(ROOTI18NEXT64)/%: %
334	$(INS.file)
335
336$(ROOTLIBSVCMETHOD)/%: %
337	$(INS.file)
338
339$(ROOTLIBSVCBIN)/%: %
340	$(INS.file)
341
342$(ROOTSVCMILESTONE)/%: %
343	$(INS.file)
344
345$(ROOTSVCDEVICE)/%: %
346	$(INS.file)
347
348$(ROOTSVCSYSTEM)/%: %
349	$(INS.file)
350
351$(ROOTSVCSYSTEMDEVICE)/%: %
352	$(INS.file)
353
354$(ROOTSVCSYSTEMFILESYSTEM)/%: %
355	$(INS.file)
356
357$(ROOTSVCSYSTEMSECURITY)/%: %
358	$(INS.file)
359
360$(ROOTSVCNETWORK)/%: %
361	$(INS.file)
362
363$(ROOTSVCNETWORKLDAP)/%: %
364	$(INS.file)
365
366$(ROOTSVCNETWORKNFS)/%: %
367	$(INS.file)
368
369$(ROOTSVCNETWORKNIS)/%: %
370	$(INS.file)
371
372$(ROOTSVCNETWORKRPC)/%: %
373	$(INS.file)
374
375$(ROOTSVCNETWORKSECURITY)/%: %
376	$(INS.file)
377
378$(ROOTSVCNETWORKSSL)/%: %
379	$(INS.file)
380
381$(ROOTSVCNETWORKIPSEC)/%: %
382	$(INS.file)
383
384$(ROOTSVCNETWORKSHARES)/%: %
385	$(INS.file)
386
387$(ROOTSVCAPPLICATION)/%: %
388	$(INS.file)
389
390$(ROOTSVCAPPLICATIONMANAGEMENT)/%: %
391	$(INS.file)
392
393$(ROOTSVCAPPLICATIONSECURITY)/%: %
394	$(INS.file)
395
396$(ROOTSVCAPPLICATIONPRINT)/%: %
397	$(INS.file)
398
399$(ROOTSVCPLATFORM)/%: %
400	$(INS.file)
401
402$(ROOTSVCPLATFORMSUN4U)/%: %
403	$(INS.file)
404
405$(ROOTSVCPLATFORMSUN4V)/%: %
406	$(INS.file)
407
408# Install rule for gprof, yacc, and lex dependency files
409$(ROOTSHLIBCCS)/%: ../common/%
410	$(INS.file)
411
412$(ROOTCCSBINLINKDIR)/%: %
413	$(INS.ccsbinlink)
414
415$(ROOTCCSBINLINKDIR64)/%: %
416	$(INS.ccsbinlink64)
417
418$(ROOTMAN1)/%: %.sunman
419	$(INS.rename)
420
421$(ROOTMAN1M)/%: %.sunman
422	$(INS.rename)
423
424$(ROOTMAN3)/%: %.sunman
425	$(INS.rename)
426
427# build rule for statically linked programs with single source file.
428%.static: %.c
429	$(LINK.c) -o $@ $< $(LDLIBS)
430	$(POST_PROCESS)
431
432%.xpg4: %.c
433	$(LINK.c) -o $@ $< $(LDLIBS)
434	$(POST_PROCESS)
435
436%.xpg6: %.c
437	$(LINK.c) -o $@ $< $(LDLIBS)
438	$(POST_PROCESS)
439
440# Define the majority text domain in this directory.
441TEXT_DOMAIN= SUNW_OST_OSCMD
442
443CLOBBERFILES += $(XPG4) $(XPG6) $(DCFILE)
444
445# This flag is being added only for SCO (x86) compatibility
446i386_SPFLAG=    -D_iBCS2
447sparc_SPFLAG=
448
449iBCS2FLAG = $($(MACH)_SPFLAG)
450
451# This flag is for programs which should not build a 32-bit binary
452sparc_64ONLY= $(POUND_SIGN)
45364ONLY=	 $($(MACH)_64ONLY)
454