2007-10-25 21:42:04 +04:00
# Unified Makefile for i386 and x86_64
2007-10-25 22:31:19 +04:00
# select defconfig based on actual architecture
2007-11-12 22:14:19 +03:00
i f e q ( $( ARCH ) , x 8 6 )
KBUILD_DEFCONFIG := i386_defconfig
e l s e
KBUILD_DEFCONFIG := $( ARCH) _defconfig
e n d i f
2007-10-25 22:31:19 +04:00
2007-12-16 12:02:48 +03:00
core-$(CONFIG_KVM) += arch/x86/kvm/
2008-01-30 15:32:20 +03:00
# BITS is used as extension for files which are available in a 32 bit
# and a 64 bit version to simplify shared Makefiles.
# e.g.: obj-y += foo_$(BITS).o
export BITS
2007-10-25 21:42:04 +04:00
2007-11-12 22:14:19 +03:00
i f e q ( $( CONFIG_X 86_ 32) , y )
2008-01-30 15:32:20 +03:00
BITS := 32
2007-11-20 01:58:57 +03:00
UTS_MACHINE := i386
2008-01-30 15:32:23 +03:00
CHECKFLAGS += -D__i386__
2008-01-30 15:32:20 +03:00
2008-01-30 15:32:23 +03:00
biarch := $( call cc-option,-m32)
KBUILD_AFLAGS += $( biarch)
KBUILD_CFLAGS += $( biarch)
2008-01-30 15:32:20 +03:00
ifdef CONFIG_RELOCATABLE
LDFLAGS_vmlinux := --emit-relocs
endif
KBUILD_CFLAGS += -msoft-float -mregparm= 3 -freg-struct-return
# prevent gcc from keeping the stack 16 byte aligned
KBUILD_CFLAGS += $( call cc-option,-mpreferred-stack-boundary= 2)
# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
# a lot more stack due to the lack of sharing of stacklots:
KBUILD_CFLAGS += $( shell if [ $( call cc-version) -lt 0400 ] ; then \
echo $( call cc-option,-fno-unit-at-a-time) ; fi ; )
# CPU-specific tuning. Anything which can be shared with UML should go here.
include $( srctree) /arch/x86/Makefile_32.cpu
KBUILD_CFLAGS += $( cflags-y)
# temporary until string.h is fixed
KBUILD_CFLAGS += -ffreestanding
2007-10-25 21:42:04 +04:00
e l s e
2008-01-30 15:32:20 +03:00
BITS := 64
2007-11-20 01:58:57 +03:00
UTS_MACHINE := x86_64
2008-01-30 15:32:20 +03:00
CHECKFLAGS += -D__x86_64__ -m64
KBUILD_AFLAGS += -m64
KBUILD_CFLAGS += -m64
# FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu)
cflags-$( CONFIG_MK8) += $( call cc-option,-march= k8)
cflags-$( CONFIG_MPSC) += $( call cc-option,-march= nocona)
cflags-$( CONFIG_MCORE2) += \
$( call cc-option,-march= core2,$( call cc-option,-mtune= generic) )
cflags-$( CONFIG_GENERIC_CPU) += $( call cc-option,-mtune= generic)
KBUILD_CFLAGS += $( cflags-y)
KBUILD_CFLAGS += -mno-red-zone
KBUILD_CFLAGS += -mcmodel= kernel
# -funit-at-a-time shrinks the kernel .text considerably
# unfortunately it makes reading oopses harder.
KBUILD_CFLAGS += $( call cc-option,-funit-at-a-time)
# this works around some issues with generating unwind tables in older gccs
# newer gccs do it by default
KBUILD_CFLAGS += -maccumulate-outgoing-args
2009-02-09 16:17:39 +03:00
e n d i f
2008-01-30 15:32:20 +03:00
2009-02-09 16:17:39 +03:00
i f d e f C O N F I G _ C C _ S T A C K P R O T E C T O R
cc_has_sp := $( srctree) /scripts/gcc-x86_$( BITS) -has-stack-protector.sh
ifeq ( $( shell $( CONFIG_SHELL) $( cc_has_sp) $( CC) ) ,y)
stackp-y := -fstack-protector
stackp-$( CONFIG_CC_STACKPROTECTOR_ALL) += -fstack-protector-all
KBUILD_CFLAGS += $( stackp-y)
else
$( warning stack protector enabled but no compiler support)
endif
2008-01-30 15:32:20 +03:00
e n d i f
# Stackpointer is addressed different for 32 bit and 64 bit x86
sp-$(CONFIG_X86_32) := esp
sp-$(CONFIG_X86_64) := rsp
# do binutils support CFI?
cfi := $( call as-instr,.cfi_startproc\n .cfi_rel_offset $( sp-y) $( comma) 0\n .cfi_endproc,-DCONFIG_AS_CFI= 1)
# is .cfi_signal_frame supported too?
cfi-sigframe := $( call as-instr,.cfi_startproc\n .cfi_signal_frame\n .cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME= 1)
KBUILD_AFLAGS += $( cfi) $( cfi-sigframe)
KBUILD_CFLAGS += $( cfi) $( cfi-sigframe)
LDFLAGS := -m elf_$( UTS_MACHINE)
2008-01-30 15:32:21 +03:00
# Speed up the build
2008-01-30 15:32:20 +03:00
KBUILD_CFLAGS += -pipe
2008-01-30 15:32:21 +03:00
# Workaround for a gcc prelease that unfortunately was shipped in a suse release
KBUILD_CFLAGS += -Wno-sign-compare
#
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
# prevent gcc from generating any FP code by mistake
KBUILD_CFLAGS += $( call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
2008-01-30 15:32:20 +03:00
KBUILD_CFLAGS += $( mflags-y)
KBUILD_AFLAGS += $( mflags-y)
###
# Kernel objects
2008-02-23 11:58:20 +03:00
head-y := arch/x86/kernel/head_$( BITS) .o
head-y += arch/x86/kernel/head$( BITS) .o
2008-06-02 10:26:23 +04:00
head-y += arch/x86/kernel/head.o
2008-02-23 11:58:20 +03:00
head-y += arch/x86/kernel/init_task.o
2008-01-30 15:32:20 +03:00
libs-y += arch/x86/lib/
# Sub architecture files that needs linking first
core-y += $( fcore-y)
# Xen paravirtualization support
core-$(CONFIG_XEN) += arch/x86/xen/
# lguest paravirtualization support
core-$(CONFIG_LGUEST_GUEST) += arch/x86/lguest/
core-y += arch/x86/kernel/
core-y += arch/x86/mm/
core-y += arch/x86/crypto/
core-y += arch/x86/vdso/
core-$(CONFIG_IA32_EMULATION) += arch/x86/ia32/
# drivers-y are linked after core-y
drivers-$(CONFIG_MATH_EMULATION) += arch/x86/math-emu/
drivers-$(CONFIG_PCI) += arch/x86/pci/
# must be linked after kernel/
drivers-$(CONFIG_OPROFILE) += arch/x86/oprofile/
2008-02-10 01:24:09 +03:00
# suspend and hibernation support
2008-01-30 15:32:20 +03:00
drivers-$(CONFIG_PM) += arch/x86/power/
2008-02-10 01:24:09 +03:00
i f e q ( $( CONFIG_X 86_ 32) , y )
2008-01-30 15:32:20 +03:00
drivers-$(CONFIG_FB) += arch/x86/video/
2007-10-25 21:42:04 +04:00
e n d i f
2008-01-30 15:32:20 +03:00
####
# boot loader support. Several targets are kept for legacy purposes
boot := arch/x86/boot
PHONY += zImage bzImage compressed zlilo bzlilo \
zdisk bzdisk fdimage fdimage144 fdimage288 isoimage install
# Default kernel to build
all : bzImage
# KBUILD_IMAGE specify target image being built
KBUILD_IMAGE := $( boot) /bzImage
2008-04-22 19:29:26 +04:00
zImage zlilo zdisk : KBUILD_IMAGE := $( boot ) /zImage
2008-01-30 15:32:20 +03:00
zImage bzImage : vmlinux
$( Q) $( MAKE) $( build) = $( boot) $( KBUILD_IMAGE)
$( Q) mkdir -p $( objtree) /arch/$( UTS_MACHINE) /boot
2008-04-22 19:29:26 +04:00
$( Q) ln -fsn ../../x86/boot/bzImage $( objtree) /arch/$( UTS_MACHINE) /boot/$@
2008-01-30 15:32:20 +03:00
compressed : zImage
zlilo bzlilo : vmlinux
$( Q) $( MAKE) $( build) = $( boot) BOOTIMAGE = $( KBUILD_IMAGE) zlilo
zdisk bzdisk : vmlinux
$( Q) $( MAKE) $( build) = $( boot) BOOTIMAGE = $( KBUILD_IMAGE) zdisk
fdimage fdimage144 fdimage288 isoimage : vmlinux
$( Q) $( MAKE) $( build) = $( boot) BOOTIMAGE = $( KBUILD_IMAGE) $@
2008-02-16 14:36:10 +03:00
install :
2008-01-30 15:32:20 +03:00
$( Q) $( MAKE) $( build) = $( boot) BOOTIMAGE = $( KBUILD_IMAGE) install
PHONY += vdso_install
vdso_install :
$( Q) $( MAKE) $( build) = arch/x86/vdso $@
archclean :
$( Q) rm -rf $( objtree) /arch/i386
$( Q) rm -rf $( objtree) /arch/x86_64
$( Q) $( MAKE) $( clean) = $( boot)
d e f i n e a r c h h e l p
2008-01-30 15:32:49 +03:00
echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
echo ' install - Install kernel using'
echo ' (your) ~/bin/installkernel or'
echo ' (distribution) /sbin/installkernel or'
echo ' install to $$(INSTALL_PATH) and run lilo'
echo ' fdimage - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)'
echo ' fdimage144 - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)'
echo ' fdimage288 - Create 2.8MB boot floppy image (arch/x86/boot/fdimage)'
echo ' isoimage - Create a boot CD-ROM image (arch/x86/boot/image.iso)'
echo ' bzdisk/fdimage*/isoimage also accept:'
echo ' FDARGS="..." arguments for the booted kernel'
echo ' FDINITRD=file initrd for the booted kernel'
2008-01-30 15:32:20 +03:00
e n d e f
CLEAN_FILES += arch/x86/boot/fdimage \
arch/x86/boot/image.iso \
arch/x86/boot/mtools.conf