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 2009 Sun Microsystems, Inc.  All rights reserved.
23# Use is subject to license terms.
24#
25#	This makefile drives the production of all implementation architecture
26#	dependent modules for the sun4u architecture.
27#
28
29UTSBASE = ..
30
31include Makefile.sun4u
32
33#
34#	The following are SPARC specific (rather than sun4u) specific modules
35#	which are required for the sun4u kernel to completely lint. They are
36#	not involved in the build in any other way. In order to minimize
37#	build time, it is assumed that they are up to date. But since sun4u
38#	is really a separate architecture we cannot use the v7 sparc modules.
39#
40SPARC_LIB_DIR	 = $(UTSBASE)/sparc/lint-libs/$(OBJS_DIR)
41
42SPARC_LINTS	 =
43
44#
45#
46#
47LINT_LIBS	 = $(LINT_LIB) \
48		   $(LINT_KMODS:%=$(LINT_LIB_DIR)/llib-l%.ln) \
49		   $(CLOSED_LINT_KMODS:%=$(LINT_LIB_DIR)/llib-l%.ln) \
50		   $(SPARC_LINTS:%=$(SPARC_LIB_DIR)/llib-l%.ln)
51
52
53def		:=	TARGET= def
54def.prereq	:=	TARGET= def
55all		:=	TARGET= all
56all.prereq	:=	TARGET= all
57install		:=	TARGET= install
58install.prereq	:=	TARGET= all
59install_h	:=	TARGET= install_h
60install_h.prere	:=	TARGET= install_h
61clean		:=	TARGET= clean
62clobber		:=	TARGET= clobber
63lint		:=	TARGET= lint
64lint.prereq	:=	TARGET= lint
65lintlib		:=	TARGET= lintlib
66modlintlib	:=	TARGET= modlintlib
67modlist		:=	TARGET= modlist
68modlist	modlist.sparc :=	NO_STATE= -K $$MODSTATE$$$$
69clean.lint	:=	TARGET= clean.lint
70check		:=	TARGET= check
71
72.KEEP_STATE:
73
74.PARALLEL:	$(PARALLEL_KMODS) $(CLOSED_KMODS) $(XMODS) $(CLOSED_XMODS) \
75		$(IMPLEMENTATIONS) $(CLOSED_IMPLEMENTATIONS) \
76		modlist modlist.sparc
77
78# Override for CPU_KMODS... they cannot be built
79# in parallel
80.NO_PARALLEL:	$(CPU_KMODS)
81
82def all clean clobber clean.lint: genassym unix .WAIT \
83	$(KMODS) $(CLOSED_KMODS) $(XMODS) $(CLOSED_XMODS) \
84	$(IMPLEMENTATIONS) $(CLOSED_IMPLEMENTATIONS)
85
86# list the modules under sun4u.
87modlist: unix $(KMODS) $(CLOSED_KMODS) $(XMODS) $(CLOSED_XMODS) \
88	$(IMPLEMENTATIONS:.WAIT=) $(CLOSED_IMPLEMENTATIONS)
89
90# list the modules for Install -k sun4u.
91modlist.karch: modlist modlist.sparc
92
93modlist.sparc:
94	@cd $(SRC)/uts/sparc; pwd; $(MAKE) $(NO_STATE) modlist
95
96install: install_platforms genassym unix .WAIT $(KMODS) $(CLOSED_KMODS) \
97	$(XMODS) $(CLOSED_XMODS) $(IMPLEMENTATIONS) $(CLOSED_IMPLEMENTATIONS)
98
99lintlib:	unix
100
101modlintlib:	$(LINT_KMODS) $(CLOSED_LINT_KMODS)
102
103genassym unix $(KMODS):	FRC
104	@cd $@; pwd; $(MAKE) $(NO_STATE) $(TARGET)
105
106#
107# Privilege constants
108#
109# NOTE: The rules for generating priv_const.c file are shared between all
110# processor architectures and should be kept in sync. If they are changed in
111# this file make sure that x86 rules are updated as well.
112#
113PRIVS_C = $(UTSBASE)/common/os/priv_const.c
114
115$(PRIVS_C): $(PRIVS_AWK) $(PRIVS_DEF)
116	$(NAWK) -f $(PRIVS_AWK) < $(PRIVS_DEF) cfile=$@
117
118
119#
120# Prerequisites
121#
122# The uts/Makefile defines build parallelism for sun4 platforms such that sparc,
123# sun4u and sun4v are all built in parallel. Also this Makefile specifies that
124# all IMPLEMENTATIONS sun4u sub-platforms are built in parallel. This requires
125# building certain parts before the parallel build can start. The uts/Makefile
126# appends the '.prereq' string to the original target and executes this Makefile
127# to build any prerequisites needed before the full parallel build can start.
128# After that make continues with normal targets.
129#
130# Any build prerequisites for sun4 and IMPLEMENTATIONS builds should be
131# described here.
132#
133# genassym is used to build dtrace and genunix, so it should be built first.
134#
135# priv_const.c is required to build genunix.
136#
137# genunix is used by everyone to ctfmerge with. Genunix is merged with sparc/ip
138#   so as a side effect this dependency builds sparc/ip as part of the
139#   prerequisites.
140#
141# unix is not required by itself but several sun4u platforms require
142#   sun4u/platmod to be present. The easiest way to achieve this is to build
143#   sun4u/unix first since sun4u/unix Makefile builds sun4u/platform correctly.
144#   This causes full sun4u/unix to be built before all sun4u platforms and
145#   before uts/sun4v and uts/sparc, but it acceptable since it is not spending
146#   too much time building sun4u/unix.
147#
148all.prereq def.prereq install.prereq: genassym genunix unix
149
150#
151# Various sun4u platforms expect proto/root_sparc/platform/sun4u/include to be
152# present. This is handled by running make install_h in sun4u/unix directory
153# first.
154#
155install_h.prereq: FRC
156	@cd sys; pwd; $(MAKE) $(TARGET)
157
158#
159# sun4u/unix and sun4u/genunix should be linted first since sparc does global
160# cross-check with these lint libraries. The sun4u/unix and sun4u/genunix can be
161# linted in parallel.
162#
163LINT_PREREQ = unix.lint genunix.lint
164lint.prereq: $(LINT_PREREQ)
165
166.PARALLEL:  $(LINT_PREREQ)
167
168$(LINT_PREREQ):
169	@cd $(@:%.lint=%); pwd; $(MAKE) $(TARGET)
170
171#
172# Nothing to do with any other prerequisites
173#
174%.prereq:
175
176#
177# Platform inter-dependencies
178#
179lw8: serengeti
180
181quasar: darwin
182
183#
184# The genunix requires priv_const.c file to be generated first.
185#
186genunix: $(PRIVS_C)
187
188#
189# Rules
190#
191
192$(IMPLEMENTATIONS):	FRC
193	@cd $@; pwd; THISIMPL=$@ $(MAKE) $(NO_STATE) $(TARGET)
194
195$(CLOSED_IMPLEMENTATIONS):	FRC
196	cd $(CLOSED)/uts/sun4u/$@; pwd; \
197	    THISIMPL=$@ $(MAKE) $(NO_STATE) $(TARGET); \
198
199$(XMODS):	FRC
200	@if [ -f $@/Makefile  ]; then \
201		cd $@; pwd; $(MAKE) $(NO_STATE) $(TARGET); \
202	else \
203		true; \
204	fi
205
206$(CLOSED_XMODS):	FRC
207	@if [ -f $(CLOSED)/uts/sun4u/$@/Makefile ]; then \
208		cd $(CLOSED)/uts/sun4u/$@; pwd; $(MAKE) $(NO_STATE) $(TARGET); \
209	else \
210		true; \
211	fi
212
213$(CLOSED_KMODS):	FRC
214	cd $(CLOSED)/uts/sun4u/$@; pwd; $(MAKE) $(NO_STATE) $(TARGET)
215
216install_h check: install_platforms $(IMPLEMENTATIONS) \
217	$(CLOSED_IMPLEMENTATIONS) FRC
218	@cd sys; pwd; $(MAKE) $(TARGET)
219	@cd vm; pwd; $(MAKE) $(TARGET)
220
221#
222# Rules for the /platforms directories.  This is hardwired here because
223# the first stage of the project (KBI) only implements the userland
224# changes, but the only reasonable place to record the aliases is
225# here in kernel land.
226#
227$(ROOT_PLAT_DIRS): $(ROOT_PLAT_DIR)
228	-$(INS.dir)
229
230#
231# create directories in /usr/platform/ for the implementations that are
232# defined in $(IMPLEMENTED_PLATFORM)
233#       (eg. SUNW,Ultra-1)
234#
235# Foreach $(IMPLEMENTED_PLATFORM) there can be a list of $(LINKED_PLATFORMS)
236# that are linked to it.
237#
238$(USR_PLAT_DIR)/$(IMPLEMENTED_PLATFORM):	$(USR_PLAT_DIR)
239	-$(INS.dir)
240
241#
242# create the links in /usr/platform/ foreach $(LINKED_PLATFORMS)
243# to it's corresponding $(IMPLEMENTED_PLATFORM).
244#
245PLATFORMS	= $(LINKED_PLATFORMS)
246
247$(USR_PLAT_DIRS): $(USR_PLAT_DIR)
248	$(INS.slink3)
249
250PLATFORMS	+= $(IMPLEMENTED_PLATFORM)
251
252#
253# Make the /platforms directories.  This is hardwired here because
254# the first stage of the project (KBI) only implements the userland
255# changes, but the only reasonable place to record the aliases is
256# here in kernel land.
257#
258install_platforms:	$(ROOT_PSM_DIR) $(USR_PSM_DIR) \
259			$(ROOT_PLAT_DIRS) $(USR_PLAT_DIRS) \
260			$(USR_DESKTOP_DIR) $(USR_DESKTOP_INC_DIR) \
261			$(USR_DESKTOP_SBIN_DIR) $(USR_DESKTOP_LIB_DIR)
262
263#
264# rules for making include, sbin, lib dirs/links in
265# /usr/platform/$(PLATFORM)/ for desktop platforms
266#
267$(USR_DESKTOP_INC_DIR):		$(USR_DESKTOP_DIR)
268	$(INS.slink4)
269
270$(USR_DESKTOP_SBIN_DIR):	$(USR_DESKTOP_DIR)
271	$(INS.slink5)
272
273$(USR_DESKTOP_LIB_DIR):		$(USR_DESKTOP_DIR)
274	-$(INS.dir)
275
276#
277#	Full kernel lint target.
278#
279LINT_TARGET	= globallint
280
281globallint:
282	@pwd
283	@-$(ECHO) "\nSUN4U KERNEL: global crosschecks:"
284	@-$(LINT) $(LINTFLAGS) $(LINT_LIBS) 2>&1 | $(LGREP.2)
285
286lint:	lintlib .WAIT modlintlib .WAIT $(SPARC_LINTS) $(LINT_DEPS) \
287	$(IMPLEMENTATIONS) $(CLOSED_IMPLEMENTATIONS) $(CPU_KMODS)
288
289# EXPORT DELETE START
290
291EXPORT_SRC:
292	$(RM) Makefile+
293	sed -e "/^# EXPORT DELETE START/,/^# EXPORT DELETE END/d" \
294	    < Makefile > Makefile+
295	$(MV) Makefile+ Makefile
296	$(CHMOD) 444 Makefile
297
298# EXPORT DELETE END
299
300include ../Makefile.targ
301
302#
303# Cross-reference customization: build a cross-reference over all of the
304# sun4u-related directories.
305#
306SHARED_XRDIRS	= ../sun4u ../sun4 ../sfmmu ../sparc ../sun ../common
307CLOSED_XRDIRS	= $(SHARED_XRDIRS:../%=../% ../../../closed/uts/%)
308XRDIRS		= $(SHARED_XRDIRS)
309$(CLOSED_BUILD)XRDIRS	= $(CLOSED_XRDIRS:../../../closed/uts/sfmmu=)
310
311XRPRUNE = i86pc
312
313cscope.out tags: FRC
314	$(XREF) -x $@
315