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
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:
2009-07-23 22:56:27 +04:00
KBUILD_CFLAGS += $( call cc-ifversion, -lt, 0400, \
$( call cc-option,-fno-unit-at-a-time) )
2008-01-30 15:32:20 +03:00
# 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) )
2009-08-22 01:06:23 +04:00
cflags-$( CONFIG_MATOM) += $( call cc-option,-march= atom) \
$( call cc-option,-mtune= atom,$( call cc-option,-mtune= generic) )
2008-01-30 15:32:20 +03:00
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
2010-09-13 14:13:19 +04:00
ifeq ( $( shell $( CONFIG_SHELL) $( cc_has_sp) $( CC) $( KBUILD_CPPFLAGS) $( biarch) ) ,y)
2009-02-09 16:17:39 +03:00
stackp-y := -fstack-protector
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
2012-02-28 02:09:10 +04:00
i f d e f C O N F I G _ X 8 6 _ X 3 2
x32_ld_ok := $( call try-run,\
/bin/echo -e '1: .quad 1b' | \
$( CC) $( KBUILD_AFLAGS) -c -xassembler -o " $$ TMP " - && \
$( OBJCOPY) -O elf32-x86-64 " $$ TMP " " $$ TMPO " && \
$( LD) -m elf32_x86_64 " $$ TMPO " -o " $$ TMP " ,y,n)
2012-02-28 13:35:06 +04:00
ifeq ( $( x32_ld_ok) ,y)
CONFIG_X86_X32_ABI := y
KBUILD_AFLAGS += -DCONFIG_X86_X32_ABI
KBUILD_CFLAGS += -DCONFIG_X86_X32_ABI
else
$( warning CONFIG_X86_X32 enabled but no binutils support)
endif
2012-02-28 02:09:10 +04:00
e n d i f
export CONFIG_X86_X32_ABI
2008-04-04 02:51:41 +04:00
# Don't unroll struct assignments with kmemcheck enabled
i f e q ( $( CONFIG_KMEMCHECK ) , y )
KBUILD_CFLAGS += $( call cc-option,-fno-builtin-memcpy)
e n d i f
2008-01-30 15:32:20 +03:00
# 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)
2010-05-14 08:43:03 +04:00
cfi-sections := $( call as-instr,.cfi_sections .debug_frame,-DCONFIG_AS_CFI_SECTIONS= 1)
2010-10-14 03:00:29 +04:00
# does binutils support specific instructions?
asinstr := $( call as-instr,fxsaveq ( %rax) ,-DCONFIG_AS_FXSAVEQ= 1)
2012-05-22 07:54:04 +04:00
avx_instr := $( call as-instr,vxorps %ymm0$( comma) %ymm1$( comma) %ymm2,-DCONFIG_AS_AVX= 1)
2010-10-14 03:00:29 +04:00
2012-05-22 07:54:04 +04:00
KBUILD_AFLAGS += $( cfi) $( cfi-sigframe) $( cfi-sections) $( asinstr) $( avx_instr)
KBUILD_CFLAGS += $( cfi) $( cfi-sigframe) $( cfi-sections) $( asinstr) $( avx_instr)
2008-01-30 15:32:20 +03:00
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,)
2012-03-28 22:51:17 +04:00
KBUILD_CFLAGS += $( call cc-option,-mno-avx,)
2008-01-30 15:32:20 +03:00
KBUILD_CFLAGS += $( mflags-y)
KBUILD_AFLAGS += $( mflags-y)
2012-05-08 22:22:24 +04:00
archscripts :
$( Q) $( MAKE) $( build) = arch/x86/tools relocs
2011-11-12 04:07:41 +04:00
###
# Syscall table generation
archheaders :
$( Q) $( MAKE) $( build) = arch/x86/syscalls all
2008-01-30 15:32:20 +03:00
###
# 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-01-30 15:32:20 +03:00
libs-y += arch/x86/lib/
2009-04-15 23:34:55 +04:00
# See arch/x86/Kbuild for content of core part of the kernel
core-y += arch/x86/
2008-01-30 15:32:20 +03:00
# 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
2008-01-30 15:32:20 +03:00
drivers-$(CONFIG_FB) += arch/x86/video/
####
# boot loader support. Several targets are kept for legacy purposes
boot := arch/x86/boot
2009-04-17 21:46:37 +04:00
BOOT_TARGETS = bzlilo bzdisk fdimage fdimage144 fdimage288 isoimage
2009-03-12 22:50:33 +03:00
PHONY += bzImage $( BOOT_TARGETS)
2008-01-30 15:32:20 +03:00
# Default kernel to build
all : bzImage
# KBUILD_IMAGE specify target image being built
2009-03-12 22:50:33 +03:00
KBUILD_IMAGE := $( boot) /bzImage
2008-01-30 15:32:20 +03:00
2009-03-12 22:50:33 +03:00
bzImage : vmlinux
2009-08-14 00:34:21 +04:00
i f e q ( $( CONFIG_X 86_DECODER_SELFTEST ) , y )
$( Q) $( MAKE) $( build) = arch/x86/tools posttest
e n d i f
2008-01-30 15:32:20 +03:00
$( 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
2009-03-12 22:50:33 +03:00
$(BOOT_TARGETS) : vmlinux
$( Q) $( MAKE) $( build) = $( boot) $@
2008-01-30 15:32:20 +03:00
2009-04-17 21:46:37 +04:00
PHONY += install
install :
$( Q) $( MAKE) $( build) = $( boot) $@
2008-01-30 15:32:20 +03:00
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)
2012-05-21 21:51:24 +04:00
$( Q) $( MAKE) $( clean) = arch/x86/tools
2008-01-30 15:32:20 +03:00
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'
2009-07-20 23:37:11 +04:00
echo ' (your) ~/bin/$(INSTALLKERNEL) or'
echo ' (distribution) /sbin/$(INSTALLKERNEL) or'
2008-01-30 15:32:49 +03:00
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