xref: /illumos-gate/usr/src/uts/Makefile (revision 9b3a7842afc878cdac338a9748b33a075cd4ca49)
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
96clean.lint modlist: $($(MACH)_ARCHITECTURES)
97
98install_dirs:
99	@cd ..; pwd; $(MAKE) rootdirs
100	@pwd
101
102#
103# Rule to build prerequisites. The left part of the pattern will match
104# PREREQ_TARGET.
105#
106# The location of the Makefile is determined by strippinng '.prereq' suffix from
107# the target name. We add '.prereq' suffix to the target passed to the child
108# Makefile so that it can distinguish prerequisite build from the regular one.
109#
110#
111%.prereq:
112	@cd $(@:%.prereq=%); pwd; $(MAKE) $(NO_STATE) $(TARGET).prereq
113
114#
115# Rule to build architecture files. Build all required prerequisites and then
116# build the rest (potentially in parallel).
117#
118$($(MACH)_ARCHITECTURES): $(PREREQ_TARGET) FRC
119	@cd $@; pwd; $(MAKE) $(NO_STATE) $(TARGET)
120
121$(PMTMO_FILE) pmtmo_file: $(PATCH_MAKEUP_TABLE)
122	@if [ -z "$(PATCH_MAKEUP_TABLE)" ] ; then \
123		echo 'ERROR: $$(PATCH_MAKEUP_TABLE) not set' \
124		    'in environment' >&2 ; \
125		exit 1 ; \
126	fi
127	RELEASE="$(RELEASE)" MACH="$(MACH)" \
128	    $(CTFCVTPTBL) -o $(PMTMO_FILE) $(PATCH_MAKEUP_TABLE)
129
130#
131# The following is the list of directories which contain Makefiles with
132# targets to install header file. The machine independent headers are
133# installed by invoking the Makefile in the directory containing the
134# header files. Machine and architecture dependent headers are installed
135# by invoking the main makefile for that architecture/machine which,
136# in turn, is responsible for invoking the Makefiles which install headers.
137# It is done this way so as not to assume that all of the header files in
138# the architecture/machine dependent subdirectories are in completely
139# isomorphic locations.
140#
141COMMON_HDRDIRS= common/des common/fs common/gssapi common/inet common/net \
142	common/netinet common/nfs common/rpc common/sys common/vm \
143	common/c2 common/pcmcia/sys common/rpcsvc common/inet/kssl \
144	common/inet/nca common/inet/ipf/netinet common/ipp common/idmap \
145	common/sharefs common/smbsrv
146
147# These aren't the only headers in closed.  But the other directories
148# are simple enough that they can be driven from the src tree.
149$(CLOSED_BUILD)COMMON_HDRDIRS += $(CLOSED)/uts/common/sys
150
151sparc_HDRDIRS= sun/sys
152i386_HDRDIRS= i86pc/vm i86xpv/vm
153
154HDRDIRS= $(COMMON_HDRDIRS) $($(MACH)_HDRDIRS)
155install_h check: $(HDRDIRS) $($(MACH)_ARCHITECTURES)
156
157$(HDRDIRS): FRC
158	@cd $@; pwd; $(MAKE) $(TARGET)
159
160# ensures that headers made by rpcgen and others are available in uts source
161# for kernel builds to reference without building install_h
162#
163all_h: FRC
164	@cd common/sys; pwd; $(MAKE) $@
165	@cd common/rpc; pwd; $(MAKE) $@
166	@cd common/rpcsvc; pwd; $(MAKE) $@
167	@cd common/gssapi; pwd; $(MAKE) $@
168	@cd common/idmap; pwd; $(MAKE) $@
169
170ONC_FILES=	common/io/timod.c \
171		common/os/sig.c \
172		common/os/flock.c \
173		common/os/sysent.c \
174		common/os/swapgeneric.c \
175		common/syscall/fcntl.c
176
177# edit onc plus source files.
178ONC_PLUS:	$(ONC_FILES:%=%_onc_plus)
179
180#
181# Cross-reference customization: build a cross-reference over all of
182# the supported architectures.  Although there's no correct way to set
183# the include path (since we don't know what architecture is the one
184# the user will be interested in), it's historically been set to
185# mirror the $(XRDIRS) list, and that works kinda sorta okay.
186#
187# We need to manually prune usr/closed/uts/{i86xpv|sfmmu|i86pc} since
188# none of them exist.
189#
190SHARED_XRDIRS = $(sparc_ARCHITECTURES) $(i386_ARCHITECTURES) sun4 sfmmu	\
191	sun common
192CLOSED_XRDIRS = $(SHARED_XRDIRS:%=% ../../closed/uts/%)
193XRDIRS = $(SHARED_XRDIRS)
194CLOSED_XRDIRS_XEN = $(CLOSED_XRDIRS:../../closed/uts/i86xpv=)
195CLOSED_XRDIRS_1 = $(CLOSED_XRDIRS_XEN:../../closed/uts/i86pc=)
196$(CLOSED_BUILD)XRDIRS = $(CLOSED_XRDIRS_1:../../closed/uts/sfmmu=)
197
198XRINCDIRS = $(XRDIRS)
199
200cscope.out tags: FRC
201	$(XREF) -x $@
202
203FRC:
204