1 5084 johnlev # 2 5084 johnlev # CDDL HEADER START 3 5084 johnlev # 4 5084 johnlev # The contents of this file are subject to the terms of the 5 5084 johnlev # Common Development and Distribution License (the "License"). 6 5084 johnlev # You may not use this file except in compliance with the License. 7 5084 johnlev # 8 5084 johnlev # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 5084 johnlev # or http://www.opensolaris.org/os/licensing. 10 5084 johnlev # See the License for the specific language governing permissions 11 5084 johnlev # and limitations under the License. 12 5084 johnlev # 13 5084 johnlev # When distributing Covered Code, include this CDDL HEADER in each 14 5084 johnlev # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 5084 johnlev # If applicable, add the following below this CDDL HEADER, with the 16 5084 johnlev # fields enclosed by brackets "[]" replaced with your own identifying 17 5084 johnlev # information: Portions Copyright [yyyy] [name of copyright owner] 18 5084 johnlev # 19 5084 johnlev # CDDL HEADER END 20 5084 johnlev # 21 5084 johnlev 22 5084 johnlev # 23 5084 johnlev # uts/i86xpv/Makefile.i86xpv.shared 24 5084 johnlev # 25 10175 Stuart # Copyright 2009 Sun Microsystems, Inc. All rights reserved. 26 5084 johnlev # Use is subject to license terms. 27 5084 johnlev # 28 7532 Sean 29 5084 johnlev # 30 5084 johnlev # This makefile contains the common definitions for the i86xpv unix 31 5084 johnlev # and all i86xpv implementation architecture dependent modules. 32 5084 johnlev # 33 5084 johnlev 34 5084 johnlev # 35 5084 johnlev # Machine type (implementation architecture): 36 5084 johnlev # 37 5084 johnlev PLATFORM = i86xpv 38 5084 johnlev 39 5084 johnlev # 40 5084 johnlev # uname -m value 41 5084 johnlev # 42 5084 johnlev UNAME_M = i86pc 43 5084 johnlev 44 5084 johnlev # 45 5084 johnlev # Everybody needs to know how to build modstubs.o and to locate unix.o 46 5084 johnlev # 47 5084 johnlev UNIX_DIR = $(UTSBASE)/$(PLATFORM)/unix 48 5084 johnlev GENLIB_DIR = $(UTSBASE)/intel/genunix 49 5084 johnlev MODSTUBS_DIR = $(UNIX_DIR) 50 5084 johnlev DSF_DIR = $(UTSBASE)/$(PLATFORM)/genassym 51 5084 johnlev LINTS_DIR = $(OBJS_DIR) 52 5084 johnlev LINT_LIB_DIR = $(UTSBASE)/$(PLATFORM)/lint-libs/$(OBJS_DIR) 53 5084 johnlev GEN_LINT_LIB_DIR = $(UTSBASE)/intel/lint-libs/$(OBJS_DIR) 54 5084 johnlev 55 5084 johnlev DTRACESTUBS_O = $(OBJS_DIR)/dtracestubs.o 56 5084 johnlev DTRACESTUBS = $(OBJS_DIR)/libdtracestubs.so 57 5084 johnlev 58 5084 johnlev SYM_MOD = $(OBJS_DIR)/unix.sym 59 5084 johnlev 60 5084 johnlev UNIX_O = $(UNIX_DIR)/$(OBJS_DIR)/unix.o 61 5084 johnlev MODSTUBS_O = $(MODSTUBS_DIR)/$(OBJS_DIR)/modstubs.o 62 5084 johnlev GENLIB = $(GENLIB_DIR)/$(OBJS_DIR)/libgenunix.so 63 5084 johnlev LINT_LIB = $(LINT_LIB_DIR)/llib-lunix.ln 64 5084 johnlev DBOOT_LINT_LIB = $(LINT_LIB_DIR)/llib-ldboot.ln 65 5084 johnlev GEN_LINT_LIB = $(GEN_LINT_LIB_DIR)/llib-lgenunix.ln 66 10643 tim 67 10643 tim LINT32_DIRS = $(LINT32_BUILDS:%=$(UTSBASE)/$(PLATFORM)/lint-libs/%) 68 10643 tim LINT32_FILES = $(LINT32_DIRS:%=%/llib-l$(MODULE).ln) 69 5084 johnlev 70 5084 johnlev # 71 5084 johnlev # Include the makefiles which define build rule templates, the 72 5084 johnlev # collection of files per module, and a few specific flags. Note 73 5084 johnlev # that order is significant, just as with an include path. The 74 5084 johnlev # first build rule template which matches the files name will be 75 5084 johnlev # used. By including these in order from most machine dependent 76 5084 johnlev # to most machine independent, we allow a machine dependent file 77 5084 johnlev # to be used in preference over a machine independent version 78 5084 johnlev # (Such as a machine specific optimization, which preserves the 79 5084 johnlev # interfaces.) 80 5084 johnlev # 81 5084 johnlev include $(UTSTREE)/$(PLATFORM)/Makefile.files 82 5084 johnlev include $(UTSTREE)/intel/Makefile.files 83 5084 johnlev include $(UTSTREE)/common/Makefile.files 84 5084 johnlev 85 5084 johnlev # 86 5084 johnlev # Include machine independent rules. Note that this does not imply 87 5084 johnlev # that the resulting module from rules in Makefile.uts is machine 88 5084 johnlev # independent. Only that the build rules are machine independent. 89 5084 johnlev # 90 5084 johnlev include $(UTSBASE)/Makefile.uts 91 5084 johnlev 92 5084 johnlev # 93 5084 johnlev # Define supported builds 94 5084 johnlev # 95 5084 johnlev DEF_BUILDS = $(DEF_BUILDS64) $(DEF_BUILDS32) 96 5084 johnlev ALL_BUILDS = $(ALL_BUILDS64) $(ALL_BUILDS32) 97 5084 johnlev 98 5084 johnlev # 99 5084 johnlev # x86 or amd64 inline templates 100 5084 johnlev # 101 5084 johnlev INLINES_32 = $(UTSBASE)/intel/ia32/ml/ia32.il \ 102 5084 johnlev $(UTSBASE)/$(PLATFORM)/ml/ia32.il 103 5084 johnlev INLINES_64 = $(UTSBASE)/intel/amd64/ml/amd64.il \ 104 5084 johnlev $(UTSBASE)/$(PLATFORM)/ml/amd64.il 105 5084 johnlev INLINES += $(INLINES_$(CLASS)) 106 5084 johnlev 107 5084 johnlev # 108 5084 johnlev # kernel-specific optimizations; override default in Makefile.master 109 5084 johnlev # 110 5084 johnlev 111 5084 johnlev CFLAGS_XARCH_32 = $(i386_CFLAGS) 112 5084 johnlev CFLAGS_XARCH_64 = $(amd64_CFLAGS) 113 5084 johnlev CFLAGS_XARCH = $(CFLAGS_XARCH_$(CLASS)) 114 5084 johnlev 115 5084 johnlev COPTFLAG_32 = $(COPTFLAG) 116 5084 johnlev COPTFLAG_64 = $(COPTFLAG64) 117 5084 johnlev COPTIMIZE = $(COPTFLAG_$(CLASS)) 118 5084 johnlev 119 5084 johnlev CFLAGS = $(CFLAGS_XARCH) 120 5084 johnlev CFLAGS += $(COPTIMIZE) 121 5084 johnlev CFLAGS += $(INLINES) -D_ASM_INLINES 122 5084 johnlev CFLAGS += $(CCMODE) 123 5084 johnlev CFLAGS += $(SPACEFLAG) 124 5084 johnlev CFLAGS += $(CCUNBOUND) 125 5084 johnlev CFLAGS += $(CFLAGS_uts) 126 5084 johnlev 127 5084 johnlev ASFLAGS_XARCH_32 = $(i386_ASFLAGS) 128 5084 johnlev ASFLAGS_XARCH_64 = $(amd64_ASFLAGS) 129 5084 johnlev ASFLAGS_XARCH = $(ASFLAGS_XARCH_$(CLASS)) 130 5084 johnlev 131 5084 johnlev ASFLAGS += $(ASFLAGS_XARCH) 132 5084 johnlev 133 5084 johnlev AS_INC_PATH += -I$(DSF_DIR)/$(OBJS_DIR) 134 5084 johnlev 135 5084 johnlev # 136 5084 johnlev # The following must be defined for all implementations: 137 5084 johnlev # 138 5084 johnlev # MAPFILE: ld mapfile for the build of kernel/unix. 139 5084 johnlev # MODSTUBS: Module stubs source file. 140 5084 johnlev # GENASSYM_SRC: genassym.c 141 5084 johnlev 142 5084 johnlev MAPFILE = $(UTSBASE)/$(PLATFORM)/conf/Mapfile 143 5084 johnlev MODSTUBS = $(UTSBASE)/intel/ia32/ml/modstubs.s 144 5084 johnlev GENASSYM_SRC = $(UTSBASE)/i86pc/ml/genassym.c 145 5084 johnlev OFFSETS_SRC = $(UTSBASE)/i86pc/ml/offsets.in 146 5084 johnlev 147 5084 johnlev #PLATFORM_OFFSETS_32 = $(UTSBASE)/$(PLATFORM)/ml/mach_offsets.in 148 5084 johnlev PLATFORM_OFFSETS_32 = $(UTSBASE)/i86pc/ml/mach_offsets.in 149 5084 johnlev PLATFORM_OFFSETS_64 = $(UTSBASE)/intel/amd64/ml/mach_offsets.in 150 5084 johnlev PLATFORM_OFFSETS_SRC = $(PLATFORM_OFFSETS_$(CLASS)) 151 5084 johnlev KDI_OFFSETS_SRC = $(UTSBASE)/intel/kdi/kdi_offsets.in 152 5084 johnlev 153 5084 johnlev # 154 5084 johnlev # Define the actual specific platforms 155 5084 johnlev # 156 5084 johnlev MACHINE_DEFS = -D__$(PLATFORM) -D__xpv -D_MACHDEP 157 5084 johnlev 158 5084 johnlev # 159 5084 johnlev # Software workarounds for hardware "features" 160 5084 johnlev # 161 5084 johnlev 162 5084 johnlev include $(UTSBASE)/i86pc/Makefile.workarounds 163 5084 johnlev 164 5084 johnlev # 165 5084 johnlev # Debugging level 166 5084 johnlev # 167 5084 johnlev # Special knowledge of which special debugging options effect which 168 5084 johnlev # file is used to optimize the build if these flags are changed. 169 5084 johnlev # 170 5084 johnlev # XXX: The above could possibly be done for more flags and files, but 171 5084 johnlev # is left as an experiment to the interested reader. Be forewarned, 172 5084 johnlev # that excessive use could lead to maintenance difficulties. 173 5084 johnlev # 174 5084 johnlev DEBUG_DEFS_OBJ32 = 175 5084 johnlev DEBUG_DEFS_DBG32 = -DDEBUG 176 5084 johnlev DEBUG_DEFS_OBJ64 = 177 5084 johnlev DEBUG_DEFS_DBG64 = -DDEBUG 178 5084 johnlev DEBUG_DEFS = $(DEBUG_DEFS_$(BUILD_TYPE)) 179 5084 johnlev 180 5084 johnlev DEBUG_COND_OBJ32 :sh = echo \\043 181 5084 johnlev DEBUG_COND_DBG32 = 182 5084 johnlev DEBUG_COND_OBJ64 :sh = echo \\043 183 5084 johnlev DEBUG_COND_DBG64 = 184 5084 johnlev IF_DEBUG_OBJ = $(DEBUG_COND_$(BUILD_TYPE))$(OBJS_DIR)/ 185 5084 johnlev 186 5084 johnlev $(IF_DEBUG_OBJ)trap.o := DEBUG_DEFS += -DTRAPDEBUG -DTRAPTRACE 187 5084 johnlev $(IF_DEBUG_OBJ)syscall_asm.o := DEBUG_DEFS += -DSYSCALLTRACE -DTRAPTRACE 188 5084 johnlev $(IF_DEBUG_OBJ)syscall_asm_amd64.o := DEBUG_DEFS += -DSYSCALLTRACE -DTRAPTRACE 189 5084 johnlev $(IF_DEBUG_OBJ)fast_trap_asm.o := DEBUG_DEFS += -DTRAPTRACE 190 5084 johnlev $(IF_DEBUG_OBJ)interrupt.o := DEBUG_DEFS += -DTRAPTRACE 191 5084 johnlev $(IF_DEBUG_OBJ)intr.o := DEBUG_DEFS += -DTRAPTRACE 192 5084 johnlev $(IF_DEBUG_OBJ)locore.o := DEBUG_DEFS += -DTRAPTRACE 193 5084 johnlev $(IF_DEBUG_OBJ)mp_startup.o := DEBUG_DEFS += -DTRAPTRACE 194 5084 johnlev $(IF_DEBUG_OBJ)machdep.o := DEBUG_DEFS += -DTRAPTRACE 195 5084 johnlev $(IF_DEBUG_OBJ)exception.o := DEBUG_DEFS += -DTRAPTRACE 196 5084 johnlev $(IF_DEBUG_OBJ)x_call.o := DEBUG_DEFS += -DTRAPTRACE 197 5084 johnlev $(IF_DEBUG_OBJ)mp_call.o := DEBUG_DEFS += -DTRAPTRACE 198 5084 johnlev $(IF_DEBUG_OBJ)cbe.o := DEBUG_DEFS += -DTRAPTRACE 199 5084 johnlev $(IF_DEBUG_OBJ)hyperevent.o := DEBUG_DEFS += -DTRAPTRACE 200 5084 johnlev $(IF_DEBUG_OBJ)evtchn.o := DEBUG_DEFS += -DTRAPTRACE 201 5084 johnlev 202 5084 johnlev # 203 5084 johnlev # Collect the preprocessor definitions to be associated with *all* 204 5084 johnlev # files. 205 5084 johnlev # 206 5084 johnlev ALL_DEFS = $(MACHINE_DEFS) $(WORKAROUND_DEFS) $(DEBUG_DEFS) \ 207 5084 johnlev $(OPTION_DEFS) 208 5084 johnlev GENASSYM_DEFS = $(MACHINE_DEFS) $(OPTION_DEFS) \ 209 5084 johnlev -_gcc=-fno-eliminate-unused-debug-symbols \ 210 5084 johnlev -_gcc=-fno-eliminate-unused-debug-types 211 5084 johnlev 212 5084 johnlev # 213 5084 johnlev # ----- TRANSITIONAL SECTION -------------------------------------------------- 214 5084 johnlev # 215 5084 johnlev 216 5084 johnlev # 217 5084 johnlev # Not everything which *should* be a module is a module yet. The 218 5084 johnlev # following is a list of such objects which are currently part of 219 5084 johnlev # the base kernel but should soon become kmods. 220 5084 johnlev # 221 5084 johnlev # XXX: $(KMACCT_OBJS) is neither in the MT kernel nor was it ever 222 5084 johnlev # made into a module. If it is made MT safe before being made 223 5084 johnlev # into a module, it should be added to this list. It was in 224 5084 johnlev # this list pre ON-4.0. 225 5084 johnlev # 226 5084 johnlev # 227 5084 johnlev MACH_NOT_YET_KMODS = $(AUTOCONF_OBJS) 228 5084 johnlev 229 5084 johnlev # 230 5084 johnlev # ----- END OF TRANSITIONAL SECTION ------------------------------------------- 231 5084 johnlev # 232 5084 johnlev 233 5084 johnlev # 234 5084 johnlev # The kernels modules which are "implementation architecture" 235 5084 johnlev # specific for this machine are enumerated below. Note that most 236 5084 johnlev # of these modules must exist (in one form or another) for each 237 5084 johnlev # architecture. 238 5084 johnlev # 239 5084 johnlev # Machine Specific Driver Modules (/kernel/drv): 240 5084 johnlev # DRV_KMODS are built both 32-bit and 64-bit 241 5084 johnlev # DRV_KMODS_32 are built only 32-bit 242 5084 johnlev # DRV_KMODS_64 are built only 64-bit 243 5084 johnlev # 244 5084 johnlev 245 5084 johnlev DRV_KMODS += rootnex 246 6707 brutus DRV_KMODS += ioat 247 5084 johnlev DRV_KMODS += isa 248 5084 johnlev DRV_KMODS += pci 249 7292 marx DRV_KMODS += pit_beep 250 5084 johnlev DRV_KMODS += npe 251 5084 johnlev DRV_KMODS += pci-ide 252 5084 johnlev DRV_KMODS += xsvc 253 5084 johnlev DRV_KMODS += xenbus 254 5084 johnlev DRV_KMODS += xencons 255 5084 johnlev DRV_KMODS += xpvd 256 5084 johnlev DRV_KMODS += xnbe 257 5084 johnlev DRV_KMODS += xnbo 258 5084 johnlev DRV_KMODS += xnbu 259 5084 johnlev DRV_KMODS += xnf 260 5084 johnlev DRV_KMODS += xdb 261 5084 johnlev DRV_KMODS += xdf 262 5084 johnlev DRV_KMODS += privcmd 263 5084 johnlev DRV_KMODS += domcaps 264 5084 johnlev DRV_KMODS += evtchn 265 5084 johnlev DRV_KMODS += balloon 266 7756 Mark DRV_KMODS += xpvtap 267 10175 Stuart DRV_KMODS += xdt 268 5084 johnlev 269 5084 johnlev # 270 7532 Sean # CPU Modules 271 7532 Sean # 272 7532 Sean CPU_KMODS += generic_cpu 273 7532 Sean CPU_KMODS += amd_opteron 274 7532 Sean CPU_KMODS += genuineintel 275 7532 Sean CPU_KMODS += authenticamd 276 7532 Sean 277 7532 Sean # 278 5084 johnlev # Exec Class Modules (/kernel/exec): 279 5084 johnlev # 280 5084 johnlev EXEC_KMODS += 281 5084 johnlev 282 5084 johnlev # 283 5084 johnlev # Scheduling Class Modules (/kernel/sched): 284 5084 johnlev # 285 5084 johnlev SCHED_KMODS += 286 5084 johnlev 287 5084 johnlev # 288 5084 johnlev # File System Modules (/kernel/fs): 289 5084 johnlev # 290 5084 johnlev FS_KMODS += 291 5084 johnlev 292 5084 johnlev # 293 5084 johnlev # Streams Modules (/kernel/strmod): 294 5084 johnlev # 295 5084 johnlev STRMOD_KMODS += 296 5084 johnlev 297 5084 johnlev # 298 5084 johnlev # 'System' Modules (/kernel/sys): 299 5084 johnlev # 300 5084 johnlev SYS_KMODS += 301 5084 johnlev 302 5084 johnlev # 303 5084 johnlev # 'Misc' Modules (/kernel/misc): 304 5084 johnlev # 305 11196 Frank MISC_KMODS += xpv_autoconfig gfx_private xnb 306 5084 johnlev 307 5084 johnlev # 'Dacf' modules (/kernel/dacf) 308 5084 johnlev # 309 5084 johnlev DACF_KMODS += consconfig_dacf 310 5084 johnlev 311 5084 johnlev # 312 5084 johnlev # 'Mach' Modules (/kernel/mach): 313 5084 johnlev # 314 6356 mrj MACH_KMODS += xpv_psm xpv_uppc 315 5084 johnlev 316 5084 johnlev # 317 5084 johnlev # 'TOD' modules (/platform/.../kernel/tod): 318 5084 johnlev # 319 5084 johnlev TOD_KMODS += xpvtod 320