xref: /illumos-gate/usr/src/uts/i86pc/Makefile.i86pc (revision a6bde1a23b60f140c7ed78df979c2e22b1ed9b2c)
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# uts/i86pc/Makefile.i86pc
24#
25# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
26# Copyright (c) 2013 Andrew Stormont.  All rights reserved.
27#
28#
29#	This makefile contains the common definitions for the i86pc unix
30#	and all i86pc implementation architecture dependent modules.
31#
32
33#
34#	Machine type (implementation architecture):
35#
36PLATFORM	 = i86pc
37
38#
39#	uname -m value
40#
41UNAME_M		= $(PLATFORM)
42
43#
44# Definitions for the platform-specific /platform directories.
45#
46# IMPLEMENTATIONS is used to designate i86pc machines which have
47# platform specific modules.  All code specific to a given implementation
48# resides in the appropriately named subdirectory.   This requires
49# these platforms to have their own Makefiles to define ROOT_PLAT_DIRS,
50# USR_PLAT_DIRS, etc.
51#
52IMPLEMENTATIONS	= i86hvm
53
54#
55#	Everybody needs to know how to build modstubs.o and to locate unix.o
56#
57UNIX_DIR	 = $(UTSBASE)/$(PLATFORM)/unix
58GENLIB_DIR	 = $(UTSBASE)/intel/genunix
59MODSTUBS_DIR	 = $(UNIX_DIR)
60DSF_DIR		 = $(UTSBASE)/$(PLATFORM)/genassym
61LINTS_DIR	 = $(OBJS_DIR)
62LINT_LIB_DIR	 = $(UTSBASE)/$(PLATFORM)/lint-libs/$(OBJS_DIR)
63GEN_LINT_LIB_DIR = $(UTSBASE)/intel/lint-libs/$(OBJS_DIR)
64
65LINT32_DIRS	 = $(LINT32_BUILDS:%=$(UTSBASE)/$(PLATFORM)/lint-libs/%)
66LINT32_FILES	 = $(LINT32_DIRS:%=%/llib-l$(MODULE).ln)
67
68DTRACESTUBS_O	 = $(OBJS_DIR)/dtracestubs.o
69DTRACESTUBS	 = $(OBJS_DIR)/libdtracestubs.so
70
71SYM_MOD		= $(OBJS_DIR)/unix.sym
72
73UNIX_O		 = $(UNIX_DIR)/$(OBJS_DIR)/unix.o
74MODSTUBS_O	 = $(MODSTUBS_DIR)/$(OBJS_DIR)/modstubs.o
75GENLIB	 	 = $(GENLIB_DIR)/$(OBJS_DIR)/libgenunix.so
76LINT_LIB	 = $(LINT_LIB_DIR)/llib-lunix.ln
77DBOOT_LINT_LIB	 = $(LINT_LIB_DIR)/llib-ldboot.ln
78GEN_LINT_LIB	 = $(GEN_LINT_LIB_DIR)/llib-lgenunix.ln
79
80#
81#	Include the makefiles which define build rule templates, the
82#	collection of files per module, and a few specific flags. Note
83#	that order is significant, just as with an include path. The
84#	first build rule template which matches the files name will be
85#	used. By including these in order from most machine dependent
86#	to most machine independent, we allow a machine dependent file
87#	to be used in preference over a machine independent version
88#	(Such as a machine specific optimization, which preserves the
89#	interfaces.)
90#
91include $(UTSBASE)/$(PLATFORM)/Makefile.files
92include $(UTSBASE)/intel/Makefile.files
93include $(UTSBASE)/common/Makefile.files
94
95#
96#	Include machine independent rules. Note that this does not imply
97#	that the resulting module from rules in Makefile.uts is	machine
98#	independent. Only that the build rules are machine independent.
99#
100include $(UTSBASE)/Makefile.uts
101
102#
103#	Define supported builds
104#
105DEF_BUILDS		= $(DEF_BUILDS64) $(DEF_BUILDS32)
106ALL_BUILDS		= $(ALL_BUILDS64) $(ALL_BUILDS32)
107
108#
109#	x86 or amd64 inline templates
110#
111INLINES_32		= $(UTSBASE)/intel/ia32/ml/ia32.il \
112			  $(UTSBASE)/$(PLATFORM)/ml/ia32.il
113INLINES_64		= $(UTSBASE)/intel/amd64/ml/amd64.il \
114			  $(UTSBASE)/$(PLATFORM)/ml/amd64.il
115INLINES			+= $(INLINES_$(CLASS))
116
117#
118#	kernel-specific optimizations; override default in Makefile.master
119#
120
121CFLAGS_XARCH_32		= $(i386_CFLAGS)
122CFLAGS_XARCH_64		= $(amd64_CFLAGS)
123CFLAGS_XARCH		= $(CFLAGS_XARCH_$(CLASS))
124
125COPTFLAG_32		= $(COPTFLAG)
126COPTFLAG_64		= $(COPTFLAG64)
127COPTIMIZE		= $(COPTFLAG_$(CLASS))
128
129CFLAGS			= $(CFLAGS_XARCH)
130CFLAGS			+= $(COPTIMIZE)
131CFLAGS			+= $(INLINES) -D_ASM_INLINES
132CFLAGS			+= $(CCMODE)
133CFLAGS			+= $(SPACEFLAG)
134CFLAGS			+= $(CCUNBOUND)
135CFLAGS			+= $(CFLAGS_uts)
136CFLAGS			+= -xstrconst
137
138ASFLAGS_XARCH_32	= $(i386_ASFLAGS)
139ASFLAGS_XARCH_64	= $(amd64_ASFLAGS)
140ASFLAGS_XARCH		= $(ASFLAGS_XARCH_$(CLASS))
141
142ASFLAGS			+= $(ASFLAGS_XARCH)
143
144AS_INC_PATH		+= -I$(DSF_DIR)/$(OBJS_DIR)
145
146#
147#	The following must be defined for all implementations:
148#
149#	MAPFILE:	ld mapfile for the build of kernel/unix.
150#	MODSTUBS:	Module stubs source file.
151#	GENASSYM_SRC:	genassym.c
152#
153MAPFILE		 = $(UTSBASE)/$(PLATFORM)/conf/Mapfile
154MODSTUBS	 = $(UTSBASE)/intel/ia32/ml/modstubs.s
155GENASSYM_SRC	 = $(UTSBASE)/$(PLATFORM)/ml/genassym.c
156OFFSETS_SRC	 = $(UTSBASE)/$(PLATFORM)/ml/offsets.in
157PLATFORM_OFFSETS_32	= $(UTSBASE)/$(PLATFORM)/ml/mach_offsets.in
158PLATFORM_OFFSETS_64	= $(UTSBASE)/intel/amd64/ml/mach_offsets.in
159PLATFORM_OFFSETS_SRC	= $(PLATFORM_OFFSETS_$(CLASS))
160KDI_OFFSETS_SRC	 = $(UTSBASE)/intel/kdi/kdi_offsets.in
161
162#
163#	Define the actual specific platforms
164#
165MACHINE_DEFS	 = -D$(PLATFORM) -D_MACHDEP
166
167#
168#	Software workarounds for hardware "features"
169#
170
171include	$(UTSBASE)/$(PLATFORM)/Makefile.workarounds
172
173#
174#	Debugging level
175#
176#	Special knowledge of which special debugging options effect which
177#	file is used to optimize the build if these flags are changed.
178#
179#	XXX: The above could possibly be done for more flags and files, but
180#	     is left as an experiment to the interested reader. Be forewarned,
181#	     that excessive use could lead to maintenance difficulties.
182#
183DEBUG_DEFS_OBJ32	=
184DEBUG_DEFS_DBG32	= -DDEBUG
185DEBUG_DEFS_OBJ64	=
186DEBUG_DEFS_DBG64	= -DDEBUG
187DEBUG_DEFS		= $(DEBUG_DEFS_$(BUILD_TYPE))
188
189DEBUG_COND_OBJ32	= $(POUND_SIGN)
190DEBUG_COND_DBG32	=
191DEBUG_COND_OBJ64	= $(POUND_SIGN)
192DEBUG_COND_DBG64	=
193IF_DEBUG_OBJ		= $(DEBUG_COND_$(BUILD_TYPE))$(OBJS_DIR)/
194
195$(IF_DEBUG_OBJ)trap.o		:= DEBUG_DEFS += -DTRAPDEBUG -DTRAPTRACE
196$(IF_DEBUG_OBJ)syscall_asm.o	:= DEBUG_DEFS += -DSYSCALLTRACE -DTRAPTRACE
197$(IF_DEBUG_OBJ)syscall_asm_amd64.o := DEBUG_DEFS += -DSYSCALLTRACE -DTRAPTRACE
198$(IF_DEBUG_OBJ)fast_trap_asm.o	:= DEBUG_DEFS += -DTRAPTRACE
199$(IF_DEBUG_OBJ)interrupt.o	:= DEBUG_DEFS += -DTRAPTRACE
200$(IF_DEBUG_OBJ)intr.o		:= DEBUG_DEFS += -DTRAPTRACE
201$(IF_DEBUG_OBJ)locore.o		:= DEBUG_DEFS += -DTRAPTRACE
202$(IF_DEBUG_OBJ)mp_startup.o	:= DEBUG_DEFS += -DTRAPTRACE
203$(IF_DEBUG_OBJ)machdep.o	:= DEBUG_DEFS += -DTRAPTRACE
204$(IF_DEBUG_OBJ)exception.o	:= DEBUG_DEFS += -DTRAPTRACE
205$(IF_DEBUG_OBJ)x_call.o		:= DEBUG_DEFS += -DTRAPTRACE
206$(IF_DEBUG_OBJ)mp_call.o	:= DEBUG_DEFS += -DTRAPTRACE
207$(IF_DEBUG_OBJ)cbe.o		:= DEBUG_DEFS += -DTRAPTRACE
208
209#
210#	Collect the preprocessor definitions to be associated with *all*
211#	files.
212#
213ALL_DEFS	 = $(MACHINE_DEFS) $(WORKAROUND_DEFS) $(DEBUG_DEFS) \
214		   $(OPTION_DEFS)
215GENASSYM_DEFS	 = $(MACHINE_DEFS) $(OPTION_DEFS) \
216			-_gcc=-fno-eliminate-unused-debug-symbols \
217			-_gcc=-fno-eliminate-unused-debug-types
218
219#
220# ----- TRANSITIONAL SECTION --------------------------------------------------
221#
222
223#
224#	Not everything which *should* be a module is a module yet. The
225#	following is a list of such objects which are currently part of
226#	the base kernel but should soon become kmods.
227#
228#	XXX: $(KMACCT_OBJS) is neither in the MT kernel nor was it ever
229#	     made into a module. If it is made MT safe before being made
230#	     into a module, it should be added to this list. It was in
231#	     this list pre ON-4.0.
232#
233#
234MACH_NOT_YET_KMODS	= $(AUTOCONF_OBJS)
235
236#
237# ----- END OF TRANSITIONAL SECTION -------------------------------------------
238#
239
240#
241#	The kernels modules which are "implementation architecture"
242#	specific for this machine are enumerated below. Note that most
243#	of these modules must exist (in one form or another) for each
244#	architecture.
245#
246#	Machine Specific Driver Modules (/kernel/drv)
247#	DRV_KMODS are built both 32-bit and 64-bit
248#	DRV_KMODS_32 are built only 32-bit
249#	DRV_KMODS_64 are built only 64-bit
250#
251DRV_KMODS	+= rootnex
252DRV_KMODS	+= isa
253DRV_KMODS	+= pcplusmp
254DRV_KMODS	+= apix
255DRV_KMODS	+= cpc
256DRV_KMODS	+= pci
257DRV_KMODS	+= npe
258DRV_KMODS	+= pci-ide
259DRV_KMODS	+= xsvc
260DRV_KMODS	+= tzmon
261DRV_KMODS	+= acpi_drv
262DRV_KMODS	+= acpinex
263DRV_KMODS	+= amd_iommu
264DRV_KMODS	+= dr
265DRV_KMODS	+= ioat
266DRV_KMODS	+= fipe
267
268DRV_KMODS	+= cpudrv
269
270
271#
272# Platform Power Modules
273#
274DRV_KMODS	+= ppm acpippm
275
276#
277#	CPU Modules
278#
279CPU_KMODS	+= amd_opteron
280CPU_KMODS	+= generic_cpu
281CPU_KMODS	+= authenticamd
282CPU_KMODS	+= genuineintel
283
284#
285#	Exec Class Modules (/kernel/exec):
286#
287EXEC_KMODS	+=
288
289#
290#	Scheduling Class Modules (/kernel/sched):
291#
292SCHED_KMODS	+=
293
294#
295#	File System Modules (/kernel/fs):
296#
297FS_KMODS	+=
298
299#
300#	Streams Modules (/kernel/strmod):
301#
302STRMOD_KMODS	+=
303
304#
305#	'System' Modules (/kernel/sys):
306#
307SYS_KMODS	+=
308
309#
310#	'Misc' Modules (/kernel/misc):
311#
312MISC_KMODS	+= gfx_private pcie
313MISC_KMODS	+= acpidev
314MISC_KMODS	+= drmach_acpi
315
316#
317#	'Dacf' modules (/kernel/dacf)
318#
319DACF_KMODS	+= consconfig_dacf
320
321#
322#	'Mach' Modules (/kernel/mach):
323#
324MACH_KMODS     	+= uppc
325
326#
327#	CPR Misc Module.
328#
329MISC_KMODS	+= cpr
330