linux-yocto/arch/arc/Makefile
Masahiro Yamada ce697ccee1 kbuild: remove head-y syntax
Kbuild puts the objects listed in head-y at the head of vmlinux.
Conventionally, we do this for head*.S, which contains the kernel entry
point.

A counter approach is to control the section order by the linker script.
Actually, the code marked as __HEAD goes into the ".head.text" section,
which is placed before the normal ".text" section.

I do not know if both of them are needed. From the build system
perspective, head-y is not mandatory. If you can achieve the proper code
placement by the linker script only, it would be cleaner.

I collected the current head-y objects into head-object-list.txt. It is
a whitelist. My hope is it will be reduced in the long run.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Tested-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
2022-10-02 18:06:03 +09:00

3.2 KiB

SPDX-License-Identifier: GPL-2.0-only

Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)

KBUILD_DEFCONFIG := haps_hs_smp_defconfig

ifeq ($(CROSS_COMPILE),) CROSS_COMPILE := $(call cc-cross-prefix, arc-linux- arceb-linux-) endif

cflags-y += -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__

tune-mcpu-def-$(CONFIG_ISA_ARCOMPACT) := -mcpu=arc700 tune-mcpu-def-$(CONFIG_ISA_ARCV2) := -mcpu=hs38

ifeq ($(CONFIG_ARC_TUNE_MCPU),) cflags-y += $(tune-mcpu-def-y) else tune-mcpu := $(CONFIG_ARC_TUNE_MCPU) ifneq ($(call cc-option,$(tune-mcpu)),) cflags-y += $(tune-mcpu) else

The flag provided by 'CONFIG_ARC_TUNE_MCPU' option isn't known by this compiler

(probably the compiler is too old). Use ISA default mcpu flag instead as a safe option.

$(warning ** WARNING ** CONFIG_ARC_TUNE_MCPU flag '$(tune-mcpu)' is unknown, fallback to '$(tune-mcpu-def-y)') cflags-y += $(tune-mcpu-def-y) endif endif

ifdef CONFIG_ARC_CURR_IN_REG

For a global register definition, 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

Can't do unconditionally because of recursive include issues

due to <linux/thread_info.h>

LINUXINCLUDE += -include $(srctree)/arch/arc/include/asm/current.h endif

cflags-y += -fsection-anchors

cflags-$(CONFIG_ARC_HAS_LLSC) += -mlock cflags-$(CONFIG_ARC_HAS_SWAPE) += -mswape

ifdef CONFIG_ISA_ARCV2

ifdef CONFIG_ARC_USE_UNALIGNED_MEM_ACCESS cflags-y += -munaligned-access else cflags-y += -mno-unaligned-access endif

ifndef CONFIG_ARC_HAS_LL64 cflags-y += -mno-ll64 endif

ifndef CONFIG_ARC_HAS_DIV_REM cflags-y += -mno-div-rem endif

endif

cfi := $(call as-instr,.cfi_startproc\n.cfi_endproc,-DARC_DW2_UNWIND_AS_CFI) cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables $(cfi)

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

LIBGCC = $(shell $(CC) $(cflags-y) --print-libgcc-file-name)

Modules with short calls might break for calls into builtin-kernel

KBUILD_CFLAGS_MODULE += -mlong-calls -mno-millicode

Finally dump eveything into kernel build system

KBUILD_CFLAGS += $(cflags-y) KBUILD_AFLAGS += $(KBUILD_CFLAGS) KBUILD_LDFLAGS += $(ldflags-y)

w/o this dtb won't embed into kernel binary

core-y += arch/arc/boot/dts/

core-y += arch/arc/plat-sim/ core-$(CONFIG_ARC_PLAT_TB10X) += arch/arc/plat-tb10x/ core-$(CONFIG_ARC_PLAT_AXS10X) += arch/arc/plat-axs10x/ core-$(CONFIG_ARC_SOC_HSDK) += arch/arc/plat-hsdk/

libs-y += arch/arc/lib/ $(LIBGCC)

boot := arch/arc/boot

boot_targets := uImage.bin uImage.gz uImage.lzma

PHONY += $(boot_targets) $(boot_targets): vmlinux $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@

uimage-default-y := uImage.bin uimage-default-$(CONFIG_KERNEL_GZIP) := uImage.gz uimage-default-$(CONFIG_KERNEL_LZMA) := uImage.lzma

PHONY += uImage uImage: $(uimage-default-y) @ln -sf $< $(boot)/uImage @$(kecho) ' Image $(boot)/uImage is ready'

CLEAN_FILES += $(boot)/uImage