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