xref: /OK3568_Linux_fs/kernel/arch/s390/Makefile (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# s390/Makefile
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun# This file is included by the global makefile so that you can add your own
6*4882a593Smuzhiyun# architecture-specific flags and dependencies. Remember to do have actions
7*4882a593Smuzhiyun# for "archclean" and "archdep" for cleaning up and making dependencies for
8*4882a593Smuzhiyun# this architecture
9*4882a593Smuzhiyun#
10*4882a593Smuzhiyun# Copyright (C) 1994 by Linus Torvalds
11*4882a593Smuzhiyun#
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunLD_BFD		:= elf64-s390
14*4882a593SmuzhiyunKBUILD_LDFLAGS	:= -m elf64_s390
15*4882a593SmuzhiyunKBUILD_AFLAGS_MODULE += -fPIC
16*4882a593SmuzhiyunKBUILD_CFLAGS_MODULE += -fPIC
17*4882a593SmuzhiyunKBUILD_AFLAGS	+= -m64
18*4882a593SmuzhiyunKBUILD_CFLAGS	+= -m64
19*4882a593Smuzhiyunifeq ($(CONFIG_RELOCATABLE),y)
20*4882a593SmuzhiyunKBUILD_CFLAGS	+= -fPIE
21*4882a593SmuzhiyunLDFLAGS_vmlinux	:= -pie
22*4882a593Smuzhiyunendif
23*4882a593Smuzhiyunaflags_dwarf	:= -Wa,-gdwarf-2
24*4882a593SmuzhiyunKBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__
25*4882a593SmuzhiyunKBUILD_AFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),$(aflags_dwarf))
26*4882a593SmuzhiyunKBUILD_CFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -O2
27*4882a593SmuzhiyunKBUILD_CFLAGS_DECOMPRESSOR += -DDISABLE_BRANCH_PROFILING -D__NO_FORTIFY
28*4882a593SmuzhiyunKBUILD_CFLAGS_DECOMPRESSOR += -fno-delete-null-pointer-checks -msoft-float
29*4882a593SmuzhiyunKBUILD_CFLAGS_DECOMPRESSOR += -fno-asynchronous-unwind-tables
30*4882a593SmuzhiyunKBUILD_CFLAGS_DECOMPRESSOR += -ffreestanding
31*4882a593SmuzhiyunKBUILD_CFLAGS_DECOMPRESSOR += -fno-stack-protector
32*4882a593SmuzhiyunKBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, address-of-packed-member)
33*4882a593SmuzhiyunKBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
34*4882a593SmuzhiyunKBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
35*4882a593Smuzhiyun
36*4882a593Smuzhiyunifdef CONFIG_CC_IS_GCC
37*4882a593Smuzhiyun	ifeq ($(call cc-ifversion, -ge, 1200, y), y)
38*4882a593Smuzhiyun		ifeq ($(call cc-ifversion, -lt, 1300, y), y)
39*4882a593Smuzhiyun			KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds)
40*4882a593Smuzhiyun			KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, array-bounds)
41*4882a593Smuzhiyun		endif
42*4882a593Smuzhiyun	endif
43*4882a593Smuzhiyunendif
44*4882a593Smuzhiyun
45*4882a593SmuzhiyunUTS_MACHINE	:= s390x
46*4882a593SmuzhiyunSTACK_SIZE	:= $(if $(CONFIG_KASAN),65536,16384)
47*4882a593SmuzhiyunCHECKFLAGS	+= -D__s390__ -D__s390x__
48*4882a593Smuzhiyun
49*4882a593Smuzhiyunexport LD_BFD
50*4882a593Smuzhiyun
51*4882a593Smuzhiyunmflags-$(CONFIG_MARCH_Z900)   := -march=z900
52*4882a593Smuzhiyunmflags-$(CONFIG_MARCH_Z990)   := -march=z990
53*4882a593Smuzhiyunmflags-$(CONFIG_MARCH_Z9_109) := -march=z9-109
54*4882a593Smuzhiyunmflags-$(CONFIG_MARCH_Z10)    := -march=z10
55*4882a593Smuzhiyunmflags-$(CONFIG_MARCH_Z196)   := -march=z196
56*4882a593Smuzhiyunmflags-$(CONFIG_MARCH_ZEC12)  := -march=zEC12
57*4882a593Smuzhiyunmflags-$(CONFIG_MARCH_Z13)    := -march=z13
58*4882a593Smuzhiyunmflags-$(CONFIG_MARCH_Z14)    := -march=z14
59*4882a593Smuzhiyunmflags-$(CONFIG_MARCH_Z15)    := -march=z15
60*4882a593Smuzhiyun
61*4882a593Smuzhiyunexport CC_FLAGS_MARCH := $(mflags-y)
62*4882a593Smuzhiyun
63*4882a593Smuzhiyunaflags-y += $(mflags-y)
64*4882a593Smuzhiyuncflags-y += $(mflags-y)
65*4882a593Smuzhiyun
66*4882a593Smuzhiyuncflags-$(CONFIG_MARCH_Z900_TUNE)	+= -mtune=z900
67*4882a593Smuzhiyuncflags-$(CONFIG_MARCH_Z990_TUNE)	+= -mtune=z990
68*4882a593Smuzhiyuncflags-$(CONFIG_MARCH_Z9_109_TUNE)	+= -mtune=z9-109
69*4882a593Smuzhiyuncflags-$(CONFIG_MARCH_Z10_TUNE)		+= -mtune=z10
70*4882a593Smuzhiyuncflags-$(CONFIG_MARCH_Z196_TUNE)	+= -mtune=z196
71*4882a593Smuzhiyuncflags-$(CONFIG_MARCH_ZEC12_TUNE)	+= -mtune=zEC12
72*4882a593Smuzhiyuncflags-$(CONFIG_MARCH_Z13_TUNE)		+= -mtune=z13
73*4882a593Smuzhiyuncflags-$(CONFIG_MARCH_Z14_TUNE)		+= -mtune=z14
74*4882a593Smuzhiyuncflags-$(CONFIG_MARCH_Z15_TUNE)		+= -mtune=z15
75*4882a593Smuzhiyun
76*4882a593Smuzhiyuncflags-y += -Wa,-I$(srctree)/arch/$(ARCH)/include
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun#
79*4882a593Smuzhiyun# Prevent tail-call optimizations, to get clearer backtraces:
80*4882a593Smuzhiyun#
81*4882a593Smuzhiyuncflags-$(CONFIG_FRAME_POINTER) += -fno-optimize-sibling-calls
82*4882a593Smuzhiyun
83*4882a593Smuzhiyunifeq ($(call cc-option-yn,-mpacked-stack -mbackchain -msoft-float),y)
84*4882a593Smuzhiyuncflags-$(CONFIG_PACK_STACK)  += -mpacked-stack -D__PACK_STACK
85*4882a593Smuzhiyunaflags-$(CONFIG_PACK_STACK)  += -D__PACK_STACK
86*4882a593Smuzhiyunendif
87*4882a593Smuzhiyun
88*4882a593SmuzhiyunKBUILD_AFLAGS_DECOMPRESSOR += $(aflags-y)
89*4882a593SmuzhiyunKBUILD_CFLAGS_DECOMPRESSOR += $(cflags-y)
90*4882a593Smuzhiyun
91*4882a593Smuzhiyunifeq ($(call cc-option-yn,-mstack-size=8192 -mstack-guard=128),y)
92*4882a593Smuzhiyuncflags-$(CONFIG_CHECK_STACK) += -mstack-size=$(STACK_SIZE)
93*4882a593Smuzhiyunifneq ($(call cc-option-yn,-mstack-size=8192),y)
94*4882a593Smuzhiyuncflags-$(CONFIG_CHECK_STACK) += -mstack-guard=$(CONFIG_STACK_GUARD)
95*4882a593Smuzhiyunendif
96*4882a593Smuzhiyunendif
97*4882a593Smuzhiyun
98*4882a593Smuzhiyunifdef CONFIG_WARN_DYNAMIC_STACK
99*4882a593Smuzhiyun  ifeq ($(call cc-option-yn,-mwarn-dynamicstack),y)
100*4882a593Smuzhiyun    KBUILD_CFLAGS += -mwarn-dynamicstack
101*4882a593Smuzhiyun    KBUILD_CFLAGS_DECOMPRESSOR += -mwarn-dynamicstack
102*4882a593Smuzhiyun  endif
103*4882a593Smuzhiyunendif
104*4882a593Smuzhiyun
105*4882a593Smuzhiyunifdef CONFIG_EXPOLINE
106*4882a593Smuzhiyun  ifeq ($(call cc-option-yn,$(CC_FLAGS_MARCH) -mindirect-branch=thunk),y)
107*4882a593Smuzhiyun    CC_FLAGS_EXPOLINE := -mindirect-branch=thunk
108*4882a593Smuzhiyun    CC_FLAGS_EXPOLINE += -mfunction-return=thunk
109*4882a593Smuzhiyun    CC_FLAGS_EXPOLINE += -mindirect-branch-table
110*4882a593Smuzhiyun    export CC_FLAGS_EXPOLINE
111*4882a593Smuzhiyun    cflags-y += $(CC_FLAGS_EXPOLINE) -DCC_USING_EXPOLINE
112*4882a593Smuzhiyun    aflags-y += -DCC_USING_EXPOLINE
113*4882a593Smuzhiyun  endif
114*4882a593Smuzhiyunendif
115*4882a593Smuzhiyun
116*4882a593Smuzhiyunifdef CONFIG_FUNCTION_TRACER
117*4882a593Smuzhiyun  ifeq ($(call cc-option-yn,-mfentry -mnop-mcount),n)
118*4882a593Smuzhiyun    # make use of hotpatch feature if the compiler supports it
119*4882a593Smuzhiyun    cc_hotpatch	:= -mhotpatch=0,3
120*4882a593Smuzhiyun    ifeq ($(call cc-option-yn,$(cc_hotpatch)),y)
121*4882a593Smuzhiyun      CC_FLAGS_FTRACE := $(cc_hotpatch)
122*4882a593Smuzhiyun      KBUILD_AFLAGS	+= -DCC_USING_HOTPATCH
123*4882a593Smuzhiyun      KBUILD_CFLAGS	+= -DCC_USING_HOTPATCH
124*4882a593Smuzhiyun    endif
125*4882a593Smuzhiyun  endif
126*4882a593Smuzhiyunendif
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun# Test CFI features of binutils
129*4882a593Smuzhiyuncfi := $(call as-instr,.cfi_startproc\n.cfi_val_offset 15$(comma)-160\n.cfi_endproc,-DCONFIG_AS_CFI_VAL_OFFSET=1)
130*4882a593Smuzhiyun
131*4882a593SmuzhiyunKBUILD_CFLAGS	+= -mbackchain -msoft-float $(cflags-y)
132*4882a593SmuzhiyunKBUILD_CFLAGS	+= -pipe -Wno-sign-compare
133*4882a593SmuzhiyunKBUILD_CFLAGS	+= -fno-asynchronous-unwind-tables $(cfi)
134*4882a593SmuzhiyunKBUILD_AFLAGS	+= $(aflags-y) $(cfi)
135*4882a593Smuzhiyunexport KBUILD_AFLAGS_DECOMPRESSOR
136*4882a593Smuzhiyunexport KBUILD_CFLAGS_DECOMPRESSOR
137*4882a593Smuzhiyun
138*4882a593SmuzhiyunOBJCOPYFLAGS	:= -O binary
139*4882a593Smuzhiyun
140*4882a593Smuzhiyunhead-y		:= arch/s390/kernel/head64.o
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun# See arch/s390/Kbuild for content of core part of the kernel
143*4882a593Smuzhiyuncore-y		+= arch/s390/
144*4882a593Smuzhiyun
145*4882a593Smuzhiyunlibs-y		+= arch/s390/lib/
146*4882a593Smuzhiyundrivers-y	+= drivers/s390/
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun# must be linked after kernel
149*4882a593Smuzhiyundrivers-$(CONFIG_OPROFILE)	+= arch/s390/oprofile/
150*4882a593Smuzhiyun
151*4882a593Smuzhiyunboot		:= arch/s390/boot
152*4882a593Smuzhiyunsyscalls	:= arch/s390/kernel/syscalls
153*4882a593Smuzhiyuntools		:= arch/s390/tools
154*4882a593Smuzhiyun
155*4882a593Smuzhiyunall: bzImage
156*4882a593Smuzhiyun
157*4882a593Smuzhiyun#KBUILD_IMAGE is necessary for packaging targets like rpm-pkg, deb-pkg...
158*4882a593SmuzhiyunKBUILD_IMAGE	:= $(boot)/bzImage
159*4882a593Smuzhiyun
160*4882a593Smuzhiyuninstall:
161*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(boot) $@
162*4882a593Smuzhiyun
163*4882a593SmuzhiyunbzImage: vmlinux
164*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
165*4882a593Smuzhiyun
166*4882a593Smuzhiyunzfcpdump:
167*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
168*4882a593Smuzhiyun
169*4882a593Smuzhiyunvdso_install:
170*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso64 $@
171*4882a593Smuzhiyun
172*4882a593Smuzhiyunarchclean:
173*4882a593Smuzhiyun	$(Q)$(MAKE) $(clean)=$(boot)
174*4882a593Smuzhiyun	$(Q)$(MAKE) $(clean)=$(tools)
175*4882a593Smuzhiyun
176*4882a593Smuzhiyunarchheaders:
177*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(syscalls) uapi
178*4882a593Smuzhiyun
179*4882a593Smuzhiyunarchprepare:
180*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(syscalls) kapi
181*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(tools) kapi
182*4882a593Smuzhiyun
183*4882a593Smuzhiyun# Don't use tabs in echo arguments
184*4882a593Smuzhiyundefine archhelp
185*4882a593Smuzhiyun  echo	'* bzImage         - Kernel image for IPL ($(boot)/bzImage)'
186*4882a593Smuzhiyun  echo	'  install         - Install kernel using'
187*4882a593Smuzhiyun  echo	'                    (your) ~/bin/$(INSTALLKERNEL) or'
188*4882a593Smuzhiyun  echo	'                    (distribution) /sbin/$(INSTALLKERNEL) or'
189*4882a593Smuzhiyun  echo	'                    install to $$(INSTALL_PATH)'
190*4882a593Smuzhiyunendef
191