Home | History | Annotate | Download | only in sun4u
      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 
     29 UTSBASE = ..
     30 
     31 include 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 #
     40 SPARC_LIB_DIR	 = $(UTSBASE)/sparc/lint-libs/$(OBJS_DIR)
     41 
     42 SPARC_LINTS	 =
     43 
     44 #
     45 #
     46 #
     47 LINT_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 
     53 def		:=	TARGET= def
     54 def.prereq	:=	TARGET= def
     55 all		:=	TARGET= all
     56 all.prereq	:=	TARGET= all
     57 install		:=	TARGET= install
     58 install.prereq	:=	TARGET= all
     59 install_h	:=	TARGET= install_h
     60 install_h.prere	:=	TARGET= install_h
     61 clean		:=	TARGET= clean
     62 clobber		:=	TARGET= clobber
     63 lint		:=	TARGET= lint
     64 lint.prereq	:=	TARGET= lint
     65 lintlib		:=	TARGET= lintlib
     66 modlintlib	:=	TARGET= modlintlib
     67 modlist		:=	TARGET= modlist
     68 modlist	modlist.sparc :=	NO_STATE= -K $$MODSTATE$$$$
     69 clean.lint	:=	TARGET= clean.lint
     70 check		:=	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 
     82 def 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.
     87 modlist: unix $(KMODS) $(CLOSED_KMODS) $(XMODS) $(CLOSED_XMODS) \
     88 	$(IMPLEMENTATIONS:.WAIT=) $(CLOSED_IMPLEMENTATIONS)
     89 
     90 # list the modules for Install -k sun4u.
     91 modlist.karch: modlist modlist.sparc
     92 
     93 modlist.sparc:
     94 	@cd $(SRC)/uts/sparc; pwd; $(MAKE) $(NO_STATE) modlist
     95 
     96 install: install_platforms genassym unix .WAIT $(KMODS) $(CLOSED_KMODS) \
     97 	$(XMODS) $(CLOSED_XMODS) $(IMPLEMENTATIONS) $(CLOSED_IMPLEMENTATIONS)
     98 
     99 lintlib:	unix
    100 
    101 modlintlib:	$(LINT_KMODS) $(CLOSED_LINT_KMODS)
    102 
    103 genassym 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 #
    113 PRIVS_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 #
    148 all.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 #
    155 install_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 #
    163 LINT_PREREQ = unix.lint genunix.lint
    164 lint.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 #
    179 lw8: serengeti
    180 
    181 quasar: darwin
    182 
    183 #
    184 # The genunix requires priv_const.c file to be generated first.
    185 #
    186 genunix: $(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 
    216 install_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 #
    245 PLATFORMS	= $(LINKED_PLATFORMS)
    246 
    247 $(USR_PLAT_DIRS): $(USR_PLAT_DIR)
    248 	$(INS.slink3)
    249 
    250 PLATFORMS	+= $(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 #
    258 install_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 #
    279 LINT_TARGET	= globallint
    280 
    281 globallint:
    282 	@pwd
    283 	@-$(ECHO) "\nSUN4U KERNEL: global crosschecks:"
    284 	@-$(LINT) $(LINTFLAGS) $(LINT_LIBS) 2>&1 | $(LGREP.2)
    285 
    286 lint:	lintlib .WAIT modlintlib .WAIT $(SPARC_LINTS) $(LINT_DEPS) \
    287 	$(IMPLEMENTATIONS) $(CLOSED_IMPLEMENTATIONS) $(CPU_KMODS)
    288 
    289 # EXPORT DELETE START
    290 
    291 EXPORT_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 
    300 include ../Makefile.targ
    301 
    302 #
    303 # Cross-reference customization: build a cross-reference over all of the
    304 # sun4u-related directories.
    305 #
    306 SHARED_XRDIRS	= ../sun4u ../sun4 ../sfmmu ../sparc ../sun ../common
    307 CLOSED_XRDIRS	= $(SHARED_XRDIRS:../%=../% ../../../closed/uts/%)
    308 XRDIRS		= $(SHARED_XRDIRS)
    309 $(CLOSED_BUILD)XRDIRS	= $(CLOSED_XRDIRS:../../../closed/uts/sfmmu=)
    310 
    311 XRPRUNE = i86pc
    312 
    313 cscope.out tags: FRC
    314 	$(XREF) -x $@
    315