Home | History | Annotate | Download | only in unix
      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 #
     23 # Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     24 # Use is subject to license terms.
     25 #
     26 #	This makefile drives the production of unix (and unix.o).
     27 #
     28 #	i86pc implementation architecture dependent
     29 #
     30 
     31 #
     32 #	Path to the base of the uts directory tree (usually /usr/src/uts).
     33 #
     34 UTSBASE	= ../..
     35 
     36 #
     37 #	Define the module and object file sets.
     38 #
     39 UNIX		= unix
     40 DBOOT		= dboot
     41 MULTIBOOT	= multiboot
     42 
     43 OBJECTS		= $(SPECIAL_OBJS:%=$(OBJS_DIR)/%) \
     44 		  $(CORE_OBJS:%=$(OBJS_DIR)/%) \
     45 		  $(KRTLD_OBJS:%=$(OBJS_DIR)/%) \
     46 		  $(MACH_NOT_YET_KMODS:%=$(OBJS_DIR)/%)
     47 
     48 LINTS		= $(SPECIAL_OBJS:%.o=$(LINTS_DIR)/%.ln) \
     49 		  $(CORE_OBJS:%.o=$(LINTS_DIR)/%.ln) \
     50 		  $(KRTLD_OBJS:%.o=$(LINTS_DIR)/%.ln) \
     51 		  $(MACH_NOT_YET_KMODS:%.o=$(LINTS_DIR)/%.ln) \
     52 		  $(LINTS_DIR)/vers.ln \
     53 		  $(LINTS_DIR)/modstubs.ln
     54 
     55 ROOTMODULE	= $(ROOT_PSM_KERN_DIR)/$(UNIX)
     56 ROOT_MULTIBOOT	= $(ROOT_PSM_DIR)/$(MULTIBOOT)
     57 
     58 UNIX_BIN	= $(OBJS_DIR)/$(UNIX)
     59 
     60 LIBS		= $(GENLIB)
     61 
     62 GENUNIX		= genunix
     63 GENUNIX_DIR	= ../../intel/$(GENUNIX)
     64 
     65 LIBOPTS		= -L $(GENUNIX_DIR)/$(OBJS_DIR) -l $(GENUNIX)
     66 
     67 CTFEXTRAOBJS	= $(OBJS_DIR)/vers.o
     68 
     69 DBOOT_OBJS_DIR	= dboot/$(OBJS_DIR)
     70 DBOOT_OBJECTS	= $(DBOOT_OBJS:%=$(DBOOT_OBJS_DIR)/%)
     71 DBOOT_BIN	= $(DBOOT_OBJS_DIR)/$(DBOOT)
     72 DBOOT_O		= $(OBJS_DIR)/$(DBOOT).o
     73 DBOOT_S		= $(DBOOT_O:%.o=%.s)
     74 DBOOT_LINTS	= $(DBOOT_OBJS:%.o=$(DBOOT_OBJS_DIR)/%.ln)
     75 DBOOT_LINT	= $(i386_LINT)
     76 DBOOT_LINTTAGS	= -erroff=E_STATIC_UNUSED
     77 
     78 #
     79 #	Include common rules.
     80 #
     81 include $(UTSBASE)/i86pc/Makefile.i86pc
     82 
     83 #
     84 #	Define targets
     85 #
     86 ALL_TARGET	= $(UNIX_BIN) $(MULTIBOOT)
     87 LINT_TARGET	= $(LINT_LIB) $(DBOOT_LINT_LIB)
     88 INSTALL_TARGET	= $(UNIX_BIN) $(MULTIBOOT) $(ROOTMODULE) $(ROOT_MULTIBOOT)
     89 
     90 #
     91 #	This is UNIX_DIR. Use a short path.
     92 #
     93 UNIX_DIR	= .
     94 
     95 #
     96 #	Overrides
     97 #
     98 CLEANFILES	+=		\
     99 	$(UNIX_O) $(MODSTUBS_O)	\
    100 	$(OBJS_DIR)/vers.c $(OBJS_DIR)/vers.o \
    101 	$(DTRACESTUBS_O) $(DTRACESTUBS)
    102 
    103 CLEANFILES	+=		\
    104 	$(DBOOT_O) $(DBOOT_S)	\
    105 	$(DBOOT_OBJECTS)	\
    106 	$(OBJS_DIR)/bios_call_src.o \
    107 	$(OBJS_DIR)/bios_call_src \
    108 	$(OBJS_DIR)/bios_call.s \
    109 	$(DBOOT_BIN)
    110 
    111 CLEANFILES	+=		\
    112 	$(OBJS_DIR)/fb_swtch_src.o \
    113 	$(OBJS_DIR)/fb_swtch_src \
    114 	$(OBJS_DIR)/fb_swtch.s
    115 
    116 CLOBBERFILES	= $(CLEANFILES) $(UNIX_BIN) $(MULTIBOOT)
    117 CLEANLINTFILES	+= $(LINT_LIB) $(DBOOT_LINT_LIB) $(DBOOT_LINTS)
    118 
    119 # instr_size needs a special header
    120 $(OBJS_DIR)/instr_size.o :=	EXTRA_OPTIONS	= -I$(SRC)/common/dis/i386
    121 $(OBJS_DIR)/instr_size.ln :=	EXTRA_OPTIONS	= -I$(SRC)/common/dis/i386
    122 
    123 CFLAGS += -DDIS_MEM
    124 
    125 #
    126 # For now, disable these lint checks; maintainers should endeavor
    127 # to investigate and remove these for maximum lint coverage.
    128 # Please do not carry these forward to new Makefiles.
    129 #
    130 LINTTAGS	+= -erroff=E_BAD_PTR_CAST_ALIGN
    131 LINTTAGS	+= -erroff=E_SUSPICIOUS_COMPARISON
    132 LINTTAGS	+= -erroff=E_SUPPRESSION_DIRECTIVE_UNUSED
    133 LINTTAGS	+= -erroff=E_STATIC_UNUSED
    134 LINTTAGS	+= -erroff=E_PTRDIFF_OVERFLOW
    135 LINTTAGS	+= -erroff=E_ASSIGN_NARROW_CONV
    136 
    137 # Ensure that lint sees 'struct cpu' containing a fully declared
    138 # embedded 'struct machcpu'
    139 #
    140 LINTFLAGS	+= -D_MACHDEP -I../../i86pc
    141 
    142 #
    143 #	Default build targets.
    144 #
    145 .KEEP_STATE:
    146 
    147 def: $(DEF_DEPS)
    148 
    149 all: $(ALL_DEPS)
    150 
    151 clean: $(CLEAN_DEPS)
    152 
    153 clobber: $(CLOBBER_DEPS)
    154 
    155 lint: $(LINT_DEPS)
    156 
    157 clean.lint: $(CLEAN_LINT_DEPS)
    158 
    159 install: $(INSTALL_DEPS)
    160 
    161 MAPFILE_32 = $(MAPFILE)
    162 MAPFILE_64 = $(MAPFILE).amd64
    163 
    164 MAPFILE_NAME = $(MAPFILE_$(CLASS))
    165 
    166 $(UNIX_BIN):	$(UNIX_O) $(MODSTUBS_O) $(MAPFILE_NAME) \
    167 		$(GENLIB) $(DTRACESTUBS) $(DBOOT_O)
    168 	$(LD) -dy -b -o $@ -e dboot_image -znointerp -M $(MAPFILE_NAME) \
    169 	    $(UNIX_O) $(DBOOT_O) $(MODSTUBS_O) $(LIBOPTS) \
    170 	    $(DTRACESTUBS)
    171 	$(MBH_PATCH) $(UNIX_BIN)
    172 	$(CTFMERGE_UNIQUIFY_AGAINST_GENUNIX)
    173 	$(POST_PROCESS)
    174 
    175 $(UNIX_O):	$(OBJECTS) $(OBJS_DIR)/vers.o
    176 	$(LD) -r -o $@ $(OBJECTS) $(OBJS_DIR)/vers.o
    177 
    178 $(DBOOT_BIN):	$(DBOOT_OBJS_DIR) $(DBOOT_OBJECTS) dboot/Mapfile.dboot
    179 	$(LD) -dn -e _start -M dboot/Mapfile.dboot \
    180 		-o $(DBOOT_BIN) $(DBOOT_OBJECTS)
    181 
    182 $(DBOOT_O):	$(DBOOT_BIN)
    183 	@echo "	.data"					> $(DBOOT_S)
    184 	@echo "	.globl	dboot_image"			>> $(DBOOT_S)
    185 	@echo "dboot_image:"				>> $(DBOOT_S)
    186 	$(ELFEXTRACT) $(DBOOT_BIN)			>> $(DBOOT_S)
    187 	$(COMPILE.s) -o $(DBOOT_O) $(DBOOT_S)
    188 
    189 $(DBOOT_OBJS_DIR):
    190 	-@mkdir -p $@ 2> /dev/null
    191 
    192 #
    193 # dboot is built as an intermediate target in dboot.o, so just make
    194 # dboot.o the dependency here.
    195 #
    196 $(MULTIBOOT):	$(DBOOT_O)
    197 	$(CP)	$(DBOOT_BIN) $(MULTIBOOT)
    198 	$(POST_PROCESS)
    199 
    200 #
    201 #	Special rules for generating assym.h for inclusion in assembly files.
    202 #
    203 $(DSF_DIR)/$(OBJS_DIR)/assym.h $(DSF_DIR)/$(OBJS_DIR)/kdi_assym.h:	FRC
    204 	@cd $(DSF_DIR); $(MAKE) all.targ
    205 
    206 #
    207 #	The global lint target builds the kernel lint library (llib-lunix.ln)
    208 #	which is equivalent to a lint of /unix.o. Then all kernel modules for
    209 #	this architecture are linted against the kernel lint library.
    210 #
    211 #	Note:	lint errors in the kernel lint library will be repeated for
    212 #		each module. It is important that the kernel lint library
    213 #		be clean to keep the textual output to a reasonable level.
    214 #
    215 
    216 $(LINT_LIB):	$(LINT_LIB_DIR) $(LINTS)
    217 	@pwd
    218 	@-$(ECHO) "\n$(UNIX): (library construction):"
    219 	@$(LINT) -o$(UNIX) $(LINTFLAGS) $(LINTS)
    220 	@$(MV) $(@F) $@
    221 
    222 $(DBOOT_LINT_LIB):	$(LINT_LIB_DIR) $(DBOOT_LINTS)
    223 	@pwd
    224 	@-$(ECHO) "\n$(DBOOT): (library construction):"
    225 	@$(LINT) -o$(DBOOT) $(DBOOT_LINTFLAGS) $(DBOOT_LINTS)
    226 	@$(MV) $(@F) $@
    227 
    228 lintlib:	$(LINT_DEPS)
    229 
    230 #
    231 #	Include common targets.
    232 #
    233 include $(UTSBASE)/i86pc/Makefile.targ
    234