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
|
|
|
ifeq ($(ARCH),x86)
|
2012-12-21 01:51:55 +04:00
|
|
|
ifeq ($(shell uname -m),x86_64)
|
|
|
|
KBUILD_DEFCONFIG := x86_64_defconfig
|
|
|
|
else
|
2007-11-12 22:14:19 +03:00
|
|
|
KBUILD_DEFCONFIG := i386_defconfig
|
2012-12-21 01:51:55 +04:00
|
|
|
endif
|
2007-11-12 22:14:19 +03:00
|
|
|
else
|
|
|
|
KBUILD_DEFCONFIG := $(ARCH)_defconfig
|
|
|
|
endif
|
2007-10-25 22:31:19 +04:00
|
|
|
|
2014-01-08 15:21:20 +04:00
|
|
|
# How to compile the 16-bit code. Note we always compile for -march=i386;
|
|
|
|
# that way we can complain to the user if the CPU is insufficient.
|
2014-01-29 16:16:47 +04:00
|
|
|
#
|
|
|
|
# The -m16 option is supported by GCC >= 4.9 and clang >= 3.5. For
|
|
|
|
# older versions of GCC, we need to play evil and unreliable tricks to
|
|
|
|
# attempt to ensure that our asm(".code16gcc") is first in the asm
|
|
|
|
# output.
|
|
|
|
CODE16GCC_CFLAGS := -m32 -include $(srctree)/arch/x86/boot/code16gcc.h \
|
|
|
|
$(call cc-option, -fno-toplevel-reorder,\
|
|
|
|
$(call cc-option, -fno-unit-at-a-time))
|
|
|
|
M16_CFLAGS := $(call cc-option, -m16, $(CODE16GCC_CFLAGS))
|
|
|
|
|
|
|
|
REALMODE_CFLAGS := $(M16_CFLAGS) -g -Os -D__KERNEL__ \
|
|
|
|
-DDISABLE_BRANCH_PROFILING \
|
2014-01-08 15:21:20 +04:00
|
|
|
-Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
|
|
|
|
-fno-strict-aliasing -fomit-frame-pointer -fno-pic \
|
|
|
|
-mno-mmx -mno-sse \
|
|
|
|
$(call cc-option, -ffreestanding) \
|
|
|
|
$(call cc-option, -fno-stack-protector) \
|
|
|
|
$(call cc-option, -mpreferred-stack-boundary=2)
|
|
|
|
export REALMODE_CFLAGS
|
|
|
|
|
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
|
|
|
|
2013-07-08 20:15:17 +04:00
|
|
|
ifdef CONFIG_X86_NEED_RELOCS
|
|
|
|
LDFLAGS_vmlinux := --emit-relocs
|
|
|
|
endif
|
|
|
|
|
2007-11-12 22:14:19 +03:00
|
|
|
ifeq ($(CONFIG_X86_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
|
|
|
|
|
|
|
KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return
|
|
|
|
|
x86, build: Pass in additional -mno-mmx, -mno-sse options
In checkin
5551a34e5aea x86-64, build: Always pass in -mno-sse
we unconditionally added -mno-sse to the main build, to keep newer
compilers from generating SSE instructions from autovectorization.
However, this did not extend to the special environments
(arch/x86/boot, arch/x86/boot/compressed, and arch/x86/realmode/rm).
Add -mno-sse to the compiler command line for these environments, and
add -mno-mmx to all the environments as well, as we don't want a
compiler to generate MMX code either.
This patch also removes a $(cc-option) call for -m32, since we have
long since stopped supporting compilers too old for the -m32 option,
and in fact hardcode it in other places in the Makefiles.
Reported-by: Kevin B. Smith <kevin.b.smith@intel.com>
Cc: Sunil K. Pandey <sunil.k.pandey@intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Cc: H. J. Lu <hjl.tools@gmail.com>
Link: http://lkml.kernel.org/n/tip-j21wzqv790q834n7yc6g80j1@git.kernel.org
Cc: <stable@vger.kernel.org> # build fix only
2013-12-10 03:43:38 +04:00
|
|
|
# Don't autogenerate MMX or SSE instructions
|
|
|
|
KBUILD_CFLAGS += -mno-mmx -mno-sse
|
2013-11-21 01:31:49 +04:00
|
|
|
|
2012-08-10 22:49:06 +04:00
|
|
|
# Never want PIC in a 32-bit kernel, prevent breakage with GCC built
|
|
|
|
# with nonstandard options
|
|
|
|
KBUILD_CFLAGS += -fno-pic
|
|
|
|
|
2008-01-30 15:32:20 +03:00
|
|
|
# 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
|
|
|
else
|
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
|
|
|
|
|
2014-02-05 04:55:11 +04:00
|
|
|
# Don't autogenerate traditional x87, MMX or SSE instructions
|
|
|
|
KBUILD_CFLAGS += -mno-mmx -mno-sse -mno-80387 -mno-fp-ret-in-387
|
2013-11-21 01:31:49 +04:00
|
|
|
|
2012-05-30 01:31:23 +04:00
|
|
|
# Use -mpreferred-stack-boundary=3 if supported.
|
2013-11-21 01:31:49 +04:00
|
|
|
KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3)
|
2012-05-30 01:31:23 +04:00
|
|
|
|
2008-01-30 15:32:20 +03:00
|
|
|
# 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
|
|
|
endif
|
2008-01-30 15:32:20 +03:00
|
|
|
|
2013-12-19 23:35:58 +04:00
|
|
|
# Make sure compiler does not have buggy stack-protector support.
|
2009-02-09 16:17:39 +03:00
|
|
|
ifdef CONFIG_CC_STACKPROTECTOR
|
|
|
|
cc_has_sp := $(srctree)/scripts/gcc-x86_$(BITS)-has-stack-protector.sh
|
2013-12-19 23:35:58 +04:00
|
|
|
ifneq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC) $(KBUILD_CPPFLAGS) $(biarch)),y)
|
|
|
|
$(warning stack-protector enabled but compiler support broken)
|
2009-02-09 16:17:39 +03:00
|
|
|
endif
|
2008-01-30 15:32:20 +03:00
|
|
|
endif
|
|
|
|
|
2012-02-28 02:09:10 +04:00
|
|
|
ifdef CONFIG_X86_X32
|
|
|
|
x32_ld_ok := $(call try-run,\
|
|
|
|
/bin/echo -e '1: .quad 1b' | \
|
2012-10-02 18:42:36 +04:00
|
|
|
$(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" - && \
|
2012-02-28 02:09:10 +04:00
|
|
|
$(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
|
|
|
endif
|
|
|
|
export CONFIG_X86_X32_ABI
|
|
|
|
|
2008-04-04 02:51:41 +04:00
|
|
|
# Don't unroll struct assignments with kmemcheck enabled
|
|
|
|
ifeq ($(CONFIG_KMEMCHECK),y)
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-builtin-memcpy)
|
|
|
|
endif
|
|
|
|
|
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)
|
2014-02-27 12:47:02 +04:00
|
|
|
asinstr += $(call as-instr,crc32l %eax$(comma)%eax,-DCONFIG_AS_CRC32=1)
|
2012-05-22 07:54:04 +04:00
|
|
|
avx_instr := $(call as-instr,vxorps %ymm0$(comma)%ymm1$(comma)%ymm2,-DCONFIG_AS_AVX=1)
|
2012-11-09 01:47:44 +04:00
|
|
|
avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1)
|
2010-10-14 03:00:29 +04:00
|
|
|
|
2012-11-09 01:47:44 +04:00
|
|
|
KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr)
|
|
|
|
KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_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-10-15 23:16:56 +04:00
|
|
|
archscripts: scripts_basic
|
2012-05-08 22:22:24 +04:00
|
|
|
$(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
|
|
|
ifeq ($(CONFIG_X86_DECODER_SELFTEST),y)
|
|
|
|
$(Q)$(MAKE) $(build)=arch/x86/tools posttest
|
|
|
|
endif
|
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
|
|
|
|
2013-06-21 12:04:51 +04:00
|
|
|
PHONY += kvmconfig
|
2013-05-22 18:46:39 +04:00
|
|
|
kvmconfig:
|
|
|
|
$(if $(wildcard $(objtree)/.config),, $(error You need an existing .config for this target))
|
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m -O $(objtree) $(objtree)/.config arch/x86/configs/kvm_guest.config
|
|
|
|
$(Q)yes "" | $(MAKE) oldconfig
|
|
|
|
|
2008-01-30 15:32:20 +03:00
|
|
|
define archhelp
|
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'
|
2013-05-22 18:46:39 +04:00
|
|
|
echo ' kvmconfig - Enable additional options for guest kernel support'
|
2008-01-30 15:32:20 +03:00
|
|
|
endef
|