2013-01-18 17:42:20 +08:00
|
|
|
#
|
|
|
|
# Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License version 2 as
|
|
|
|
# published by the Free Software Foundation.
|
|
|
|
#
|
|
|
|
|
2013-03-21 14:52:06 +08:00
|
|
|
ifeq ($(CROSS_COMPILE),)
|
2016-03-11 15:17:58 +08:00
|
|
|
ifndef CONFIG_CPU_BIG_ENDIAN
|
2015-05-18 15:20:02 +08:00
|
|
|
CROSS_COMPILE := arc-linux-
|
2016-03-11 15:17:58 +08:00
|
|
|
else
|
|
|
|
CROSS_COMPILE := arceb-linux-
|
|
|
|
endif
|
2013-03-21 14:52:06 +08:00
|
|
|
endif
|
|
|
|
|
2014-12-12 12:57:50 +08:00
|
|
|
KBUILD_DEFCONFIG := nsim_700_defconfig
|
2013-01-18 17:42:20 +08:00
|
|
|
|
ARCv2: Support for ARCv2 ISA and HS38x cores
The notable features are:
- SMP configurations of upto 4 cores with coherency
- Optional L2 Cache and IO-Coherency
- Revised Interrupt Architecture (multiple priorites, reg banks,
auto stack switch, auto regfile save/restore)
- MMUv4 (PIPT dcache, Huge Pages)
- Instructions for
* 64bit load/store: LDD, STD
* Hardware assisted divide/remainder: DIV, REM
* Function prologue/epilogue: ENTER_S, LEAVE_S
* IRQ enable/disable: CLRI, SETI
* pop count: FFS, FLS
* SETcc, BMSKN, XBFU...
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
2013-05-13 21:00:41 +08:00
|
|
|
cflags-y += -fno-common -pipe -fno-builtin -D__linux__
|
2015-06-28 22:52:01 +08:00
|
|
|
cflags-$(CONFIG_ISA_ARCOMPACT) += -mA7
|
|
|
|
cflags-$(CONFIG_ISA_ARCV2) += -mcpu=archs
|
2013-01-18 17:42:20 +08:00
|
|
|
|
2016-02-26 00:34:38 +08:00
|
|
|
is_700 = $(shell $(CC) -dM -E - < /dev/null | grep -q "ARC700" && echo 1 || echo 0)
|
|
|
|
|
|
|
|
ifdef CONFIG_ISA_ARCOMPACT
|
|
|
|
ifeq ($(is_700), 0)
|
|
|
|
$(error Toolchain not configured for ARCompact builds)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef CONFIG_ISA_ARCV2
|
|
|
|
ifeq ($(is_700), 1)
|
|
|
|
$(error Toolchain not configured for ARCv2 builds)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2013-02-11 22:22:57 +08:00
|
|
|
ifdef CONFIG_ARC_CURR_IN_REG
|
|
|
|
# For a global register defintion, make sure it gets passed to every file
|
|
|
|
# We had a customer reported bug where some code built in kernel was NOT using
|
|
|
|
# any kernel headers, and missing the r25 global register
|
2013-06-01 15:25:42 +08:00
|
|
|
# Can't do unconditionally because of recursive include issues
|
2013-02-11 22:22:57 +08:00
|
|
|
# due to <linux/thread_info.h>
|
|
|
|
LINUXINCLUDE += -include ${src}/arch/arc/include/asm/current.h
|
|
|
|
endif
|
|
|
|
|
2013-05-25 16:33:25 +08:00
|
|
|
upto_gcc44 := $(call cc-ifversion, -le, 0404, y)
|
|
|
|
atleast_gcc44 := $(call cc-ifversion, -ge, 0404, y)
|
|
|
|
|
2013-01-18 17:42:20 +08:00
|
|
|
cflags-$(atleast_gcc44) += -fsection-anchors
|
|
|
|
|
2016-11-09 00:47:14 +08:00
|
|
|
cflags-$(CONFIG_ARC_HAS_LLSC) += -mlock
|
|
|
|
cflags-$(CONFIG_ARC_HAS_SWAPE) += -mswape
|
|
|
|
|
2015-07-17 02:45:38 +08:00
|
|
|
ifdef CONFIG_ISA_ARCV2
|
|
|
|
|
ARCv2: Support for ARCv2 ISA and HS38x cores
The notable features are:
- SMP configurations of upto 4 cores with coherency
- Optional L2 Cache and IO-Coherency
- Revised Interrupt Architecture (multiple priorites, reg banks,
auto stack switch, auto regfile save/restore)
- MMUv4 (PIPT dcache, Huge Pages)
- Instructions for
* 64bit load/store: LDD, STD
* Hardware assisted divide/remainder: DIV, REM
* Function prologue/epilogue: ENTER_S, LEAVE_S
* IRQ enable/disable: CLRI, SETI
* pop count: FFS, FLS
* SETcc, BMSKN, XBFU...
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
2013-05-13 21:00:41 +08:00
|
|
|
ifndef CONFIG_ARC_HAS_LL64
|
2015-07-17 02:45:38 +08:00
|
|
|
cflags-y += -mno-ll64
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifndef CONFIG_ARC_HAS_DIV_REM
|
|
|
|
cflags-y += -mno-div-rem
|
|
|
|
endif
|
|
|
|
|
ARCv2: Support for ARCv2 ISA and HS38x cores
The notable features are:
- SMP configurations of upto 4 cores with coherency
- Optional L2 Cache and IO-Coherency
- Revised Interrupt Architecture (multiple priorites, reg banks,
auto stack switch, auto regfile save/restore)
- MMUv4 (PIPT dcache, Huge Pages)
- Instructions for
* 64bit load/store: LDD, STD
* Hardware assisted divide/remainder: DIV, REM
* Function prologue/epilogue: ENTER_S, LEAVE_S
* IRQ enable/disable: CLRI, SETI
* pop count: FFS, FLS
* SETcc, BMSKN, XBFU...
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
2013-05-13 21:00:41 +08:00
|
|
|
endif
|
|
|
|
|
2016-09-17 08:23:26 +08:00
|
|
|
cfi := $(call as-instr,.cfi_startproc\n.cfi_endproc,-DARC_DW2_UNWIND_AS_CFI)
|
|
|
|
cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables $(cfi)
|
2013-06-24 23:52:06 +08:00
|
|
|
|
2013-01-18 17:42:20 +08:00
|
|
|
ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
|
|
|
# Generic build system uses -O2, we want -O3
|
2015-06-18 16:24:01 +08:00
|
|
|
# Note: No need to add to cflags-y as that happens anyways
|
Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"
Traditionally, we have always had warnings about uninitialized variables
enabled, as this is part of -Wall, and generally a good idea [1], but it
also always produced false positives, mainly because this is a variation
of the halting problem and provably impossible to get right in all cases
[2].
Various people have identified cases that are particularly bad for false
positives, and in commit e74fc973b6e5 ("Turn off -Wmaybe-uninitialized
when building with -Os"), I turned off the warning for any build that
was done with CC_OPTIMIZE_FOR_SIZE. This drastically reduced the number
of false positive warnings in the default build but unfortunately had
the side effect of turning the warning off completely in 'allmodconfig'
builds, which in turn led to a lot of warnings (both actual bugs, and
remaining false positives) to go in unnoticed.
With commit 877417e6ffb9 ("Kbuild: change CC_OPTIMIZE_FOR_SIZE
definition") enabled the warning again for allmodconfig builds in v4.7
and in v4.8-rc1, I had finally managed to address all warnings I get in
an ARM allmodconfig build and most other maybe-uninitialized warnings
for ARM randconfig builds.
However, commit 6e8d666e9253 ("Disable "maybe-uninitialized" warning
globally") was merged at the same time and disabled it completely for
all configurations, because of false-positive warnings on x86 that I had
not addressed until then. This caused a lot of actual bugs to get
merged into mainline, and I sent several dozen patches for these during
the v4.9 development cycle. Most of these are actual bugs, some are for
correct code that is safe because it is only called under external
constraints that make it impossible to run into the case that gcc sees,
and in a few cases gcc is just stupid and finds something that can
obviously never happen.
I have now done a few thousand randconfig builds on x86 and collected
all patches that I needed to address every single warning I got (I can
provide the combined patch for the other warnings if anyone is
interested), so I hope we can get the warning back and let people catch
the actual bugs earlier.
This reverts the change to disable the warning completely and for now
brings it back at the "make W=1" level, so we can get it merged into
mainline without introducing false positives. A follow-up patch enables
it on all levels unless some configuration option turns it off because
of false-positives.
Link: https://rusty.ozlabs.org/?p=232 [1]
Link: https://gcc.gnu.org/wiki/Better_Uninitialized_Warnings [2]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-11-11 00:44:44 +08:00
|
|
|
#
|
|
|
|
# Disable the false maybe-uninitialized warings gcc spits out at -O3
|
|
|
|
ARCH_CFLAGS += -O3 $(call cc-disable-warning,maybe-uninitialized,)
|
2013-01-18 17:42:20 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
# small data is default for elf32 tool-chain. If not usable, disable it
|
|
|
|
# This also allows repurposing GP as scratch reg to gcc reg allocator
|
|
|
|
disable_small_data := y
|
|
|
|
cflags-$(disable_small_data) += -mno-sdata -fcall-used-gp
|
|
|
|
|
|
|
|
cflags-$(CONFIG_CPU_BIG_ENDIAN) += -mbig-endian
|
|
|
|
ldflags-$(CONFIG_CPU_BIG_ENDIAN) += -EB
|
|
|
|
|
2013-05-25 16:33:25 +08:00
|
|
|
# STAR 9000518362: (fixed with binutils shipping with gcc 4.8)
|
2013-01-18 17:42:20 +08:00
|
|
|
# arc-linux-uclibc-ld (buildroot) or arceb-elf32-ld (EZChip) don't accept
|
2013-05-25 16:33:25 +08:00
|
|
|
# --build-id w/o "-marclinux". Default arc-elf32-ld is OK
|
|
|
|
ldflags-$(upto_gcc44) += -marclinux
|
2013-01-18 17:42:20 +08:00
|
|
|
|
2014-08-08 07:24:47 +08:00
|
|
|
LIBGCC := $(shell $(CC) $(cflags-y) --print-libgcc-file-name)
|
2013-01-18 17:42:20 +08:00
|
|
|
|
|
|
|
# Modules with short calls might break for calls into builtin-kernel
|
2015-12-21 15:08:01 +08:00
|
|
|
KBUILD_CFLAGS_MODULE += -mlong-calls -mno-millicode
|
2013-01-18 17:42:20 +08:00
|
|
|
|
|
|
|
# Finally dump eveything into kernel build system
|
|
|
|
KBUILD_CFLAGS += $(cflags-y)
|
|
|
|
KBUILD_AFLAGS += $(KBUILD_CFLAGS)
|
|
|
|
LDFLAGS += $(ldflags-y)
|
|
|
|
|
|
|
|
head-y := arch/arc/kernel/head.o
|
|
|
|
|
|
|
|
# See arch/arc/Kbuild for content of core part of the kernel
|
|
|
|
core-y += arch/arc/
|
|
|
|
|
2013-01-22 19:30:52 +08:00
|
|
|
# w/o this dtb won't embed into kernel binary
|
|
|
|
core-y += arch/arc/boot/dts/
|
|
|
|
|
2017-07-28 19:23:50 +08:00
|
|
|
core-y += arch/arc/plat-sim/
|
2015-02-20 21:42:18 +08:00
|
|
|
core-$(CONFIG_ARC_PLAT_TB10X) += arch/arc/plat-tb10x/
|
2014-01-27 21:51:34 +08:00
|
|
|
core-$(CONFIG_ARC_PLAT_AXS10X) += arch/arc/plat-axs10x/
|
2015-10-16 21:52:43 +08:00
|
|
|
core-$(CONFIG_ARC_PLAT_EZNPS) += arch/arc/plat-eznps/
|
2017-08-16 02:13:55 +08:00
|
|
|
core-$(CONFIG_ARC_SOC_HSDK) += arch/arc/plat-hsdk/
|
2015-10-16 21:52:43 +08:00
|
|
|
|
|
|
|
ifdef CONFIG_ARC_PLAT_EZNPS
|
|
|
|
KBUILD_CPPFLAGS += -I$(srctree)/arch/arc/plat-eznps/include
|
|
|
|
endif
|
2013-01-18 17:42:20 +08:00
|
|
|
|
2013-01-22 19:32:38 +08:00
|
|
|
drivers-$(CONFIG_OPROFILE) += arch/arc/oprofile/
|
|
|
|
|
2013-01-18 17:42:20 +08:00
|
|
|
libs-y += arch/arc/lib/ $(LIBGCC)
|
|
|
|
|
2013-03-22 22:18:01 +08:00
|
|
|
boot := arch/arc/boot
|
|
|
|
|
2016-05-21 19:45:35 +08:00
|
|
|
#default target for make without any arguments.
|
2016-11-23 05:34:31 +08:00
|
|
|
KBUILD_IMAGE := $(boot)/bootpImage
|
2013-01-18 17:42:20 +08:00
|
|
|
|
2016-11-23 05:34:31 +08:00
|
|
|
all: bootpImage
|
2013-01-18 17:42:20 +08:00
|
|
|
bootpImage: vmlinux
|
|
|
|
|
2013-03-23 00:34:27 +08:00
|
|
|
boot_targets += uImage uImage.bin uImage.gz
|
|
|
|
|
|
|
|
$(boot_targets): vmlinux
|
2013-01-18 17:42:20 +08:00
|
|
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
|
|
|
|
2013-01-22 19:30:52 +08:00
|
|
|
%.dtb %.dtb.S %.dtb.o: scripts
|
|
|
|
$(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@
|
|
|
|
|
|
|
|
dtbs: scripts
|
2015-10-08 23:10:53 +08:00
|
|
|
$(Q)$(MAKE) $(build)=$(boot)/dts
|
2013-01-22 19:30:52 +08:00
|
|
|
|
2013-01-18 17:42:20 +08:00
|
|
|
archclean:
|
|
|
|
$(Q)$(MAKE) $(clean)=$(boot)
|
|
|
|
|
|
|
|
# Hacks to enable final link due to absence of link-time branch relexation
|
|
|
|
# and gcc choosing optimal(shorter) branches at -O3
|
|
|
|
#
|
|
|
|
# vineetg Feb 2010: -mlong-calls switched off for overall kernel build
|
|
|
|
# However lib/decompress_inflate.o (.init.text) calls
|
|
|
|
# zlib_inflate_workspacesize (.text) causing relocation errors.
|
|
|
|
# Thus forcing all exten calls in this file to be long calls
|
|
|
|
export CFLAGS_decompress_inflate.o = -mmedium-calls
|
|
|
|
export CFLAGS_initramfs.o = -mmedium-calls
|
2013-01-18 17:42:23 +08:00
|
|
|
ifdef CONFIG_SMP
|
|
|
|
export CFLAGS_core.o = -mmedium-calls
|
|
|
|
endif
|