xref: /illumos-gate/usr/src/uts/Makefile (revision 57c40785)
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 2008 Sun Microsystems, Inc.  All rights reserved.
23# Use is subject to license terms.
24#
25# include global definitions
26include ../Makefile.master
27
28#
29# List of architectures to build as part of the standard build.
30#
31# Some of these architectures are built in parallel (see i386_PARALLEL and
32# sparc_PARALLEL). This requires building some parts first before parallel build
33# can start. Platform make files know what should be built as a prerequisite for
34# the parallel build to work. The i386_PREREQ and sparc_PREREQ variables tell
35# which platform directory to enter to start making prerequisite dependencies.
36#
37sparc_ARCHITECTURES = sun4v sun4u sparc
38
39i386_ARCHITECTURES = i86pc i86xpv intel
40
41#
42# For i386 all architectures can be compiled in parallel.
43#
44# intel/Makefile knows how to build prerequisites needed for parallel build.
45#
46i386_PREREQ = intel
47i386_PARALLEL = $(i386_ARCHITECTURES)
48
49#
50# For sparc all architectures can be compiled in parallel.
51#
52# sun4/Makefile knows how to build prerequisites needed for parallel build.
53# can start.
54#
55sparc_PREREQ = sun4
56sparc_PARALLEL = $(sparc_ARCHITECTURES)
57
58#
59# Platforms defined in $(MACH)_PARALLEL are built in parallel. DUMMY is placed
60# at the end in case $(MACH)_PARALLEL is empty to prevent everything going in
61# parallel.
62#
63.PARALLEL: $($(MACH)_PARALLEL) DUMMY
64
65#
66# For build prerequisites we use a special target which is constructed by adding
67# '.prereq' suffix to the $(MACH)_PREREQ.
68#
69PREREQ_TARGET = $($(MACH)_PREREQ:%=%.prereq)
70
71
72def		:=	TARGET= def
73all		:=	TARGET= all
74install		:=	TARGET= install
75install_h	:=	TARGET= install_h
76clean		:=	TARGET= clean
77clobber		:=	TARGET= clobber
78lint		:=	TARGET= lint
79clean.lint	:=	TARGET= clean.lint
80check		:=	TARGET= check
81modlist		:=	TARGET= modlist
82modlist		:=	NO_STATE= -K $$MODSTATE$$$$
83
84.KEEP_STATE:
85
86def all lint: all_h $(PMTMO_FILE) $($(MACH)_ARCHITECTURES)
87
88install: all_h install_dirs $(PMTMO_FILE) $($(MACH)_ARCHITECTURES)
89
90clean clobber: $($(MACH)_ARCHITECTURES)
91	@if [ '$(PATCH_BUILD)' != '#' ] ; then \
92		echo $(RM) $(PMTMO_FILE) ; \
93		$(RM) $(PMTMO_FILE) ; \
94	fi
95
96EXTRA_CLOBBER_TARGETS= common/avs/ns/rdc
97clobber: $(EXTRA_CLOBBER_TARGETS)
98
99
100clean.lint modlist: $($(MACH)_ARCHITECTURES)
101
102install_dirs:
103	@cd ..; pwd; $(MAKE) rootdirs
104	@pwd
105
106#
107# Rule to build prerequisites. The left part of the pattern will match
108# PREREQ_TARGET.
109#
110# The location of the Makefile is determined by strippinng '.prereq' suffix from
111# the target name. We add '.prereq' suffix to the target passed to the child
112# Makefile so that it can distinguish prerequisite build from the regular one.
113#
114#
115%.prereq:
116	@cd $(@:%.prereq=%); pwd; $(MAKE) $(NO_STATE) $(TARGET).prereq
117
118#
119# Rule to build architecture files. Build all required prerequisites and then
120# build the rest (potentially in parallel).
121#
122$($(MACH)_ARCHITECTURES): $(PREREQ_TARGET) FRC
123	@cd $@; pwd; $(MAKE) $(NO_STATE) $(TARGET)
124
125$(PMTMO_FILE) pmtmo_file: $(PATCH_MAKEUP_TABLE)
126	@if [ -z "$(PATCH_MAKEUP_TABLE)" ] ; then \
127		echo 'ERROR: $$(PATCH_MAKEUP_TABLE) not set' \
128		    'in environment' >&2 ; \
129		exit 1 ; \
130	fi
131	RELEASE="$(RELEASE)" MACH="$(MACH)" \
132	    $(CTFCVTPTBL) -o $(PMTMO_FILE) $(PATCH_MAKEUP_TABLE)
133
134#
135# The following is the list of directories which contain Makefiles with
136# targets to install header file. The machine independent headers are
137# installed by invoking the Makefile in the directory containing the
138# header files. Machine and architecture dependent headers are installed
139# by invoking the main makefile for that architecture/machine which,
140# in turn, is responsible for invoking the Makefiles which install headers.
141# It is done this way so as not to assume that all of the header files in
142# the architecture/machine dependent subdirectories are in completely
143# isomorphic locations.
144#
145COMMON_HDRDIRS= common/avs \
146		common/c2 \
147		common/des \
148		common/fs \
149		common/gssapi \
150		common/idmap \
151		common/inet \
152		common/inet/ipf/netinet \
153		common/inet/kssl \
154		common/inet/nca \
155		common/ipp \
156		common/net \
157		common/netinet \
158		common/nfs \
159		common/pcmcia/sys \
160		common/rpc \
161		common/rpcsvc \
162		common/sharefs \
163		common/smbsrv \
164		common/sys \
165		common/vm
166
167
168# These aren't the only headers in closed.  But the other directories
169# are simple enough that they can be driven from the src tree.
170$(CLOSED_BUILD)COMMON_HDRDIRS += $(CLOSED)/uts/common/sys
171
172sparc_HDRDIRS= sun/sys
173i386_HDRDIRS= i86pc/vm i86xpv/vm
174
175HDRDIRS= $(COMMON_HDRDIRS) $($(MACH)_HDRDIRS)
176install_h check: $(HDRDIRS) $($(MACH)_ARCHITECTURES)
177
178$(HDRDIRS): FRC
179	@cd $@; pwd; $(MAKE) $(TARGET)
180
181# ensures that headers made by rpcgen and others are available in uts source
182# for kernel builds to reference without building install_h
183#
184all_h: FRC
185	@cd common/sys; pwd; $(MAKE) $@
186	@cd common/rpc; pwd; $(MAKE) $@
187	@cd common/rpcsvc; pwd; $(MAKE) $@
188	@cd common/gssapi; pwd; $(MAKE) $@
189	@cd common/idmap; pwd; $(MAKE) $@
190
191ONC_FILES=	common/io/timod.c \
192		common/os/sig.c \
193		common/os/flock.c \
194		common/os/sysent.c \
195		common/os/swapgeneric.c \
196		common/syscall/fcntl.c
197
198# edit onc plus source files.
199ONC_PLUS:	$(ONC_FILES:%=%_onc_plus)
200
201#
202# Cross-reference customization: build a cross-reference over all of
203# the supported architectures.  Although there's no correct way to set
204# the include path (since we don't know what architecture is the one
205# the user will be interested in), it's historically been set to
206# mirror the $(XRDIRS) list, and that works kinda sorta okay.
207#
208# We need to manually prune usr/closed/uts/{i86xpv|sfmmu|i86pc} since
209# none of them exist.
210#
211SHARED_XRDIRS = $(sparc_ARCHITECTURES) $(i386_ARCHITECTURES) sun4 sfmmu	\
212	sun common
213CLOSED_XRDIRS = $(SHARED_XRDIRS:%=% ../../closed/uts/%)
214XRDIRS = $(SHARED_XRDIRS)
215CLOSED_XRDIRS_XEN = $(CLOSED_XRDIRS:../../closed/uts/i86xpv=)
216CLOSED_XRDIRS_1 = $(CLOSED_XRDIRS_XEN:../../closed/uts/i86pc=)
217$(CLOSED_BUILD)XRDIRS = $(CLOSED_XRDIRS_1:../../closed/uts/sfmmu=)
218
219XRINCDIRS = $(XRDIRS)
220
221cscope.out tags: FRC
222	$(XREF) -x $@
223
224FRC:
225