^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) # SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) # Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) KBUILD_DEFCONFIG := haps_hs_smp_defconfig
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) ifeq ($(CROSS_COMPILE),)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) CROSS_COMPILE := $(call cc-cross-prefix, arc-linux- arceb-linux-)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) cflags-y += -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) tune-mcpu-def-$(CONFIG_ISA_ARCOMPACT) := -mcpu=arc700
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) tune-mcpu-def-$(CONFIG_ISA_ARCV2) := -mcpu=hs38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) ifeq ($(CONFIG_ARC_TUNE_MCPU),"")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) cflags-y += $(tune-mcpu-def-y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) tune-mcpu := $(shell echo $(CONFIG_ARC_TUNE_MCPU))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) tune-mcpu-ok := $(call cc-option-yn, $(tune-mcpu))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) ifeq ($(tune-mcpu-ok),y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) cflags-y += $(tune-mcpu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) # The flag provided by 'CONFIG_ARC_TUNE_MCPU' option isn't known by this compiler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) # (probably the compiler is too old). Use ISA default mcpu flag instead as a safe option.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) $(warning ** WARNING ** CONFIG_ARC_TUNE_MCPU flag '$(tune-mcpu)' is unknown, fallback to '$(tune-mcpu-def-y)')
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) cflags-y += $(tune-mcpu-def-y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ifdef CONFIG_ARC_CURR_IN_REG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) # For a global register defintion, make sure it gets passed to every file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) # We had a customer reported bug where some code built in kernel was NOT using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) # any kernel headers, and missing the r25 global register
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) # Can't do unconditionally because of recursive include issues
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) # due to <linux/thread_info.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) LINUXINCLUDE += -include $(srctree)/arch/arc/include/asm/current.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) cflags-y += -fsection-anchors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) cflags-$(CONFIG_ARC_HAS_LLSC) += -mlock
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) cflags-$(CONFIG_ARC_HAS_SWAPE) += -mswape
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) ifdef CONFIG_ISA_ARCV2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ifdef CONFIG_ARC_USE_UNALIGNED_MEM_ACCESS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) cflags-y += -munaligned-access
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) cflags-y += -mno-unaligned-access
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) ifndef CONFIG_ARC_HAS_LL64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) cflags-y += -mno-ll64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) ifndef CONFIG_ARC_HAS_DIV_REM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) cflags-y += -mno-div-rem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) cfi := $(call as-instr,.cfi_startproc\n.cfi_endproc,-DARC_DW2_UNWIND_AS_CFI)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables $(cfi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) # small data is default for elf32 tool-chain. If not usable, disable it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) # This also allows repurposing GP as scratch reg to gcc reg allocator
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) disable_small_data := y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) cflags-$(disable_small_data) += -mno-sdata -fcall-used-gp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) cflags-$(CONFIG_CPU_BIG_ENDIAN) += -mbig-endian
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) ldflags-$(CONFIG_CPU_BIG_ENDIAN) += -EB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) LIBGCC = $(shell $(CC) $(cflags-y) --print-libgcc-file-name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) # Modules with short calls might break for calls into builtin-kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) KBUILD_CFLAGS_MODULE += -mlong-calls -mno-millicode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) # Finally dump eveything into kernel build system
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) KBUILD_CFLAGS += $(cflags-y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) KBUILD_AFLAGS += $(KBUILD_CFLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) KBUILD_LDFLAGS += $(ldflags-y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) head-y := arch/arc/kernel/head.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) # See arch/arc/Kbuild for content of core part of the kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) core-y += arch/arc/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) # w/o this dtb won't embed into kernel binary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) core-y += arch/arc/boot/dts/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) core-y += arch/arc/plat-sim/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) core-$(CONFIG_ARC_PLAT_TB10X) += arch/arc/plat-tb10x/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) core-$(CONFIG_ARC_PLAT_AXS10X) += arch/arc/plat-axs10x/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) core-$(CONFIG_ARC_SOC_HSDK) += arch/arc/plat-hsdk/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) drivers-$(CONFIG_OPROFILE) += arch/arc/oprofile/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) libs-y += arch/arc/lib/ $(LIBGCC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) boot := arch/arc/boot
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) boot_targets := uImage.bin uImage.gz uImage.lzma
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) PHONY += $(boot_targets)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) $(boot_targets): vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) uimage-default-y := uImage.bin
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) uimage-default-$(CONFIG_KERNEL_GZIP) := uImage.gz
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) uimage-default-$(CONFIG_KERNEL_LZMA) := uImage.lzma
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) PHONY += uImage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) uImage: $(uimage-default-y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) @ln -sf $< $(boot)/uImage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) @$(kecho) ' Image $(boot)/uImage is ready'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) CLEAN_FILES += $(boot)/uImage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) archclean:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) $(Q)$(MAKE) $(clean)=$(boot)