# # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # uts/i86xpv/Makefile.i86xpv # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # Copyright (c) 2013 Andrew Stormont. All rights reserved. # Copyright 2019 Joyent, Inc. # # # This makefile contains the common definitions for the i86xpv unix # and all i86xpv implementation architecture dependent modules. # # # Machine type (implementation architecture): # PLATFORM = i86xpv # # uname -m value # UNAME_M = i86pc # # Everybody needs to know how to build modstubs.o and to locate unix.o # UNIX_DIR = $(UTSBASE)/$(PLATFORM)/unix GENLIB_DIR = $(UTSBASE)/intel/genunix MODSTUBS_DIR = $(UNIX_DIR) DSF_DIR = $(UTSBASE)/$(PLATFORM)/genassym DTRACESTUBS_O = $(OBJS_DIR)/dtracestubs.o DTRACESTUBS = $(OBJS_DIR)/libdtracestubs.so SYM_MOD = $(OBJS_DIR)/unix.sym UNIX_O = $(UNIX_DIR)/$(OBJS_DIR)/unix.o MODSTUBS_O = $(MODSTUBS_DIR)/$(OBJS_DIR)/modstubs.o GENLIB = $(GENLIB_DIR)/$(OBJS_DIR)/libgenunix.so # # Include the makefiles which define build rule templates, the # collection of files per module, and a few specific flags. Note # that order is significant, just as with an include path. The # first build rule template which matches the files name will be # used. By including these in order from most machine dependent # to most machine independent, we allow a machine dependent file # to be used in preference over a machine independent version # (Such as a machine specific optimization, which preserves the # interfaces.) # include $(UTSBASE)/$(PLATFORM)/Makefile.files include $(UTSBASE)/intel/Makefile.files include $(UTSBASE)/common/Makefile.files # # Include machine independent rules. Note that this does not imply # that the resulting module from rules in Makefile.uts is machine # independent. Only that the build rules are machine independent. # include $(UTSBASE)/Makefile.uts # # Define supported builds # DEF_BUILDS = $(DEF_BUILDS64) ALL_BUILDS = $(ALL_BUILDS64) # # kernel-specific optimizations; override default in Makefile.master # CFLAGS_XARCH_32 = $(i386_CFLAGS) CFLAGS_XARCH_64 = $(amd64_CFLAGS) CFLAGS_XARCH = $(CFLAGS_XARCH_$(CLASS)) COPTFLAG_32 = $(COPTFLAG) COPTFLAG_64 = $(COPTFLAG64) COPTIMIZE = $(COPTFLAG_$(CLASS)) CFLAGS = $(CFLAGS_XARCH) CFLAGS += $(COPTIMIZE) CFLAGS += -D_ASM_INLINES CFLAGS += $(CCMODE) CFLAGS += $(SPACEFLAG) CFLAGS += $(CCUNBOUND) CFLAGS += $(CFLAGS_uts) ASFLAGS_XARCH_32 = $(i386_ASFLAGS) ASFLAGS_XARCH_64 = $(amd64_ASFLAGS) ASFLAGS_XARCH = $(ASFLAGS_XARCH_$(CLASS)) ASFLAGS += $(ASFLAGS_XARCH) AS_INC_PATH += -I$(DSF_DIR)/$(OBJS_DIR) # # The following must be defined for all implementations: # # UNIX_MAPFILE: ld mapfile for the build of kernel/unix. # MODSTUBS: Module stubs source file. # GENASSYM_SRC: genassym.c UNIX_MAPFILE = $(UTSBASE)/$(PLATFORM)/conf/Mapfile MODSTUBS = $(UTSBASE)/intel/ia32/ml/modstubs.s GENASSYM_SRC = $(UTSBASE)/i86pc/ml/genassym.c OFFSETS_SRC = $(UTSBASE)/i86pc/ml/offsets.in PLATFORM_OFFSETS_SRC = $(UTSBASE)/intel/amd64/ml/mach_offsets.in KDI_OFFSETS_SRC = $(UTSBASE)/intel/kdi/kdi_offsets.in # # Define the actual specific platforms # MACHINE_DEFS = -D__$(PLATFORM) -D__xpv -D_MACHDEP # # Software workarounds for hardware "features" # include $(UTSBASE)/i86pc/Makefile.workarounds # # Debugging level # # Special knowledge of which special debugging options effect which # file is used to optimize the build if these flags are changed. # # XXX: The above could possibly be done for more flags and files, but # is left as an experiment to the interested reader. Be forewarned, # that excessive use could lead to maintenance difficulties. # DEBUG_DEFS_OBJ32 = DEBUG_DEFS_DBG32 = -DDEBUG DEBUG_DEFS_OBJ64 = DEBUG_DEFS_DBG64 = -DDEBUG DEBUG_DEFS = $(DEBUG_DEFS_$(BUILD_TYPE)) DEBUG_COND_OBJ32 = $(POUND_SIGN) DEBUG_COND_DBG32 = DEBUG_COND_OBJ64 = $(POUND_SIGN) DEBUG_COND_DBG64 = IF_DEBUG_OBJ = $(DEBUG_COND_$(BUILD_TYPE))$(OBJS_DIR)/ $(IF_DEBUG_OBJ)trap.o := DEBUG_DEFS += -DTRAPDEBUG -DTRAPTRACE $(IF_DEBUG_OBJ)syscall_asm_amd64.o := DEBUG_DEFS += -DSYSCALLTRACE -DTRAPTRACE $(IF_DEBUG_OBJ)fast_trap_asm.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)interrupt.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)intr.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)locore.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)mp_startup.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)machdep.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)exception.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)x_call.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)mp_call.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)cbe.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)hyperevent.o := DEBUG_DEFS += -DTRAPTRACE $(IF_DEBUG_OBJ)evtchn.o := DEBUG_DEFS += -DTRAPTRACE # # Collect the preprocessor definitions to be associated with *all* # files. # ALL_DEFS = $(MACHINE_DEFS) $(WORKAROUND_DEFS) $(DEBUG_DEFS) \ $(OPTION_DEFS) GENASSYM_DEFS = $(MACHINE_DEFS) $(OPTION_DEFS) \ -_gcc=-fno-eliminate-unused-debug-symbols \ -_gcc=-fno-eliminate-unused-debug-types # # ----- TRANSITIONAL SECTION -------------------------------------------------- # # # Not everything which *should* be a module is a module yet. The # following is a list of such objects which are currently part of # the base kernel but should soon become kmods. # # XXX: $(KMACCT_OBJS) is neither in the MT kernel nor was it ever # made into a module. If it is made MT safe before being made # into a module, it should be added to this list. It was in # this list pre ON-4.0. # # MACH_NOT_YET_KMODS = $(AUTOCONF_OBJS) # # ----- END OF TRANSITIONAL SECTION ------------------------------------------- # # # The kernels modules which are "implementation architecture" # specific for this machine are enumerated below. Note that most # of these modules must exist (in one form or another) for each # architecture. # # Machine Specific Driver Modules (/kernel/drv): # DRV_KMODS are built both 32-bit and 64-bit # DRV_KMODS_32 are built only 32-bit # DRV_KMODS_64 are built only 64-bit # DRV_KMODS += rootnex DRV_KMODS += ioat DRV_KMODS += isa DRV_KMODS += pci DRV_KMODS += pit_beep DRV_KMODS += npe DRV_KMODS += pci-ide DRV_KMODS += xsvc DRV_KMODS += xenbus DRV_KMODS += xencons DRV_KMODS += xpvd DRV_KMODS += xnbe DRV_KMODS += xnbo DRV_KMODS += xnbu DRV_KMODS += xnf DRV_KMODS += xdb DRV_KMODS += xdf DRV_KMODS += privcmd DRV_KMODS += domcaps DRV_KMODS += evtchn DRV_KMODS += balloon DRV_KMODS += xpvtap DRV_KMODS += xdt # # CPU Modules # CPU_KMODS += generic_cpu CPU_KMODS += amd_opteron CPU_KMODS += genuineintel CPU_KMODS += authenticamd # # Exec Class Modules (/kernel/exec): # EXEC_KMODS += # # Scheduling Class Modules (/kernel/sched): # SCHED_KMODS += # # File System Modules (/kernel/fs): # FS_KMODS += # # Streams Modules (/kernel/strmod): # STRMOD_KMODS += # # 'System' Modules (/kernel/sys): # SYS_KMODS += # # 'Misc' Modules (/kernel/misc): # MISC_KMODS += xpv_autoconfig gfx_private xnb # 'Dacf' modules (/kernel/dacf) # DACF_KMODS += consconfig_dacf # # 'Mach' Modules (/kernel/mach): # MACH_KMODS += xpv_psm xpv_uppc # # 'TOD' modules (/platform/.../kernel/tod): # TOD_KMODS += xpvtod