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