Back to home page

OSCL-LXR

 
 

    


0001 # SPDX-License-Identifier: GPL-2.0
0002 #
0003 # s390/Makefile
0004 #
0005 # This file is included by the global makefile so that you can add your own
0006 # architecture-specific flags and dependencies.
0007 #
0008 # Copyright (C) 1994 by Linus Torvalds
0009 #
0010 
0011 LD_BFD          := elf64-s390
0012 KBUILD_LDFLAGS  := -m elf64_s390
0013 KBUILD_AFLAGS_MODULE += -fPIC
0014 KBUILD_CFLAGS_MODULE += -fPIC
0015 KBUILD_AFLAGS   += -m64
0016 KBUILD_CFLAGS   += -m64
0017 ifeq ($(CONFIG_RELOCATABLE),y)
0018 KBUILD_CFLAGS   += -fPIE
0019 LDFLAGS_vmlinux := -pie
0020 endif
0021 aflags_dwarf    := -Wa,-gdwarf-2
0022 KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__
0023 ifndef CONFIG_AS_IS_LLVM
0024 KBUILD_AFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),$(aflags_dwarf))
0025 endif
0026 KBUILD_CFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -O2 -mpacked-stack
0027 KBUILD_CFLAGS_DECOMPRESSOR += -DDISABLE_BRANCH_PROFILING -D__NO_FORTIFY
0028 KBUILD_CFLAGS_DECOMPRESSOR += -fno-delete-null-pointer-checks -msoft-float -mbackchain
0029 KBUILD_CFLAGS_DECOMPRESSOR += -fno-asynchronous-unwind-tables
0030 KBUILD_CFLAGS_DECOMPRESSOR += -ffreestanding
0031 KBUILD_CFLAGS_DECOMPRESSOR += -fno-stack-protector
0032 KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, address-of-packed-member)
0033 KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
0034 KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
0035 KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_CC_NO_ARRAY_BOUNDS),-Wno-array-bounds)
0036 
0037 UTS_MACHINE     := s390x
0038 STACK_SIZE      := $(if $(CONFIG_KASAN),65536,16384)
0039 CHECKFLAGS      += -D__s390__ -D__s390x__
0040 
0041 export LD_BFD
0042 
0043 mflags-$(CONFIG_MARCH_Z10)    := -march=z10
0044 mflags-$(CONFIG_MARCH_Z196)   := -march=z196
0045 mflags-$(CONFIG_MARCH_ZEC12)  := -march=zEC12
0046 mflags-$(CONFIG_MARCH_Z13)    := -march=z13
0047 mflags-$(CONFIG_MARCH_Z14)    := -march=z14
0048 mflags-$(CONFIG_MARCH_Z15)    := -march=z15
0049 mflags-$(CONFIG_MARCH_Z16)    := -march=z16
0050 
0051 export CC_FLAGS_MARCH := $(mflags-y)
0052 
0053 aflags-y += $(mflags-y)
0054 cflags-y += $(mflags-y)
0055 
0056 cflags-$(CONFIG_MARCH_Z10_TUNE)         += -mtune=z10
0057 cflags-$(CONFIG_MARCH_Z196_TUNE)        += -mtune=z196
0058 cflags-$(CONFIG_MARCH_ZEC12_TUNE)       += -mtune=zEC12
0059 cflags-$(CONFIG_MARCH_Z13_TUNE)         += -mtune=z13
0060 cflags-$(CONFIG_MARCH_Z14_TUNE)         += -mtune=z14
0061 cflags-$(CONFIG_MARCH_Z15_TUNE)         += -mtune=z15
0062 cflags-$(CONFIG_MARCH_Z16_TUNE)         += -mtune=z16
0063 
0064 cflags-y += -Wa,-I$(srctree)/arch/$(ARCH)/include
0065 
0066 #
0067 # Prevent tail-call optimizations, to get clearer backtraces:
0068 #
0069 cflags-$(CONFIG_FRAME_POINTER) += -fno-optimize-sibling-calls
0070 
0071 KBUILD_AFLAGS_DECOMPRESSOR += $(aflags-y)
0072 KBUILD_CFLAGS_DECOMPRESSOR += $(cflags-y)
0073 
0074 ifneq ($(call cc-option,-mstack-size=8192 -mstack-guard=128),)
0075   CC_FLAGS_CHECK_STACK := -mstack-size=$(STACK_SIZE)
0076   ifeq ($(call cc-option,-mstack-size=8192),)
0077     CC_FLAGS_CHECK_STACK += -mstack-guard=$(CONFIG_STACK_GUARD)
0078   endif
0079   export CC_FLAGS_CHECK_STACK
0080   cflags-$(CONFIG_CHECK_STACK) += $(CC_FLAGS_CHECK_STACK)
0081 endif
0082 
0083 ifdef CONFIG_EXPOLINE
0084   ifdef CONFIG_EXPOLINE_EXTERN
0085     KBUILD_LDFLAGS_MODULE += arch/s390/lib/expoline/expoline.o
0086     CC_FLAGS_EXPOLINE := -mindirect-branch=thunk-extern
0087     CC_FLAGS_EXPOLINE += -mfunction-return=thunk-extern
0088   else
0089     CC_FLAGS_EXPOLINE := -mindirect-branch=thunk
0090     CC_FLAGS_EXPOLINE += -mfunction-return=thunk
0091   endif
0092   CC_FLAGS_EXPOLINE += -mindirect-branch-table
0093   export CC_FLAGS_EXPOLINE
0094   cflags-y += $(CC_FLAGS_EXPOLINE) -DCC_USING_EXPOLINE
0095   aflags-y += -DCC_USING_EXPOLINE
0096 endif
0097 
0098 ifdef CONFIG_FUNCTION_TRACER
0099   ifeq ($(call cc-option,-mfentry -mnop-mcount),)
0100     # make use of hotpatch feature if the compiler supports it
0101     cc_hotpatch := -mhotpatch=0,3
0102     ifneq ($(call cc-option,$(cc_hotpatch)),)
0103       CC_FLAGS_FTRACE := $(cc_hotpatch)
0104       KBUILD_AFLAGS     += -DCC_USING_HOTPATCH
0105       KBUILD_CFLAGS     += -DCC_USING_HOTPATCH
0106     endif
0107   endif
0108 endif
0109 
0110 # Test CFI features of binutils
0111 cfi := $(call as-instr,.cfi_startproc\n.cfi_val_offset 15$(comma)-160\n.cfi_endproc,-DCONFIG_AS_CFI_VAL_OFFSET=1)
0112 
0113 KBUILD_CFLAGS   += -mpacked-stack -mbackchain -msoft-float $(cflags-y)
0114 KBUILD_CFLAGS   += -pipe -Wno-sign-compare
0115 KBUILD_CFLAGS   += -fno-asynchronous-unwind-tables $(cfi)
0116 KBUILD_AFLAGS   += $(aflags-y) $(cfi)
0117 export KBUILD_AFLAGS_DECOMPRESSOR
0118 export KBUILD_CFLAGS_DECOMPRESSOR
0119 
0120 OBJCOPYFLAGS    := -O binary
0121 
0122 head-y          := arch/s390/kernel/head64.o
0123 
0124 libs-y          += arch/s390/lib/
0125 drivers-y       += drivers/s390/
0126 
0127 boot            := arch/s390/boot
0128 syscalls        := arch/s390/kernel/syscalls
0129 tools           := arch/s390/tools
0130 
0131 all: bzImage
0132 
0133 #KBUILD_IMAGE is necessary for packaging targets like rpm-pkg, deb-pkg...
0134 KBUILD_IMAGE    := $(boot)/bzImage
0135 
0136 install:
0137         $(call cmd,install)
0138 
0139 bzImage: vmlinux
0140         $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
0141 
0142 zfcpdump:
0143         $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
0144 
0145 vdso_install:
0146         $(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso64 $@
0147 
0148 archheaders:
0149         $(Q)$(MAKE) $(build)=$(syscalls) uapi
0150 
0151 archprepare:
0152         $(Q)$(MAKE) $(build)=$(syscalls) kapi
0153         $(Q)$(MAKE) $(build)=$(tools) kapi
0154 ifeq ($(KBUILD_EXTMOD),)
0155 # We need to generate vdso-offsets.h before compiling certain files in kernel/.
0156 # In order to do that, we should use the archprepare target, but we can't since
0157 # asm-offsets.h is included in some files used to generate vdso-offsets.h, and
0158 # asm-offsets.h is built in prepare0, for which archprepare is a dependency.
0159 # Therefore we need to generate the header after prepare0 has been made, hence
0160 # this hack.
0161 prepare: vdso_prepare
0162 vdso_prepare: prepare0
0163         $(Q)$(MAKE) $(build)=arch/s390/kernel/vdso64 include/generated/vdso64-offsets.h
0164         $(if $(CONFIG_COMPAT),$(Q)$(MAKE) \
0165                 $(build)=arch/s390/kernel/vdso32 include/generated/vdso32-offsets.h)
0166 
0167 ifdef CONFIG_EXPOLINE_EXTERN
0168 modules_prepare: expoline_prepare
0169 expoline_prepare:
0170         $(Q)$(MAKE) $(build)=arch/s390/lib/expoline arch/s390/lib/expoline/expoline.o
0171 endif
0172 endif
0173 
0174 # Don't use tabs in echo arguments
0175 define archhelp
0176   echo  '* bzImage         - Kernel image for IPL ($(boot)/bzImage)'
0177   echo  '  install         - Install kernel using'
0178   echo  '                    (your) ~/bin/$(INSTALLKERNEL) or'
0179   echo  '                    (distribution) /sbin/$(INSTALLKERNEL) or'
0180   echo  '                    install to $$(INSTALL_PATH)'
0181 endef