linux/arch/s390/Makefile
<<
>>
Prefs
   1# SPDX-License-Identifier: GPL-2.0
   2#
   3# s390/Makefile
   4#
   5# This file is included by the global makefile so that you can add your own
   6# architecture-specific flags and dependencies. Remember to do have actions
   7# for "archclean" and "archdep" for cleaning up and making dependencies for
   8# this architecture
   9#
  10# Copyright (C) 1994 by Linus Torvalds
  11#
  12
  13LD_BFD          := elf64-s390
  14KBUILD_LDFLAGS  := -m elf64_s390
  15KBUILD_AFLAGS_MODULE += -fPIC
  16KBUILD_CFLAGS_MODULE += -fPIC
  17KBUILD_AFLAGS   += -m64
  18KBUILD_CFLAGS   += -m64
  19ifeq ($(CONFIG_RELOCATABLE),y)
  20KBUILD_CFLAGS   += -fPIE
  21LDFLAGS_vmlinux := -pie
  22endif
  23aflags_dwarf    := -Wa,-gdwarf-2
  24KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__
  25KBUILD_AFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),$(aflags_dwarf))
  26KBUILD_CFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -O2
  27KBUILD_CFLAGS_DECOMPRESSOR += -DDISABLE_BRANCH_PROFILING -D__NO_FORTIFY
  28KBUILD_CFLAGS_DECOMPRESSOR += -fno-delete-null-pointer-checks -msoft-float -mbackchain
  29KBUILD_CFLAGS_DECOMPRESSOR += -fno-asynchronous-unwind-tables
  30KBUILD_CFLAGS_DECOMPRESSOR += -ffreestanding
  31KBUILD_CFLAGS_DECOMPRESSOR += -fno-stack-protector
  32KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, address-of-packed-member)
  33KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
  34KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
  35UTS_MACHINE     := s390x
  36STACK_SIZE      := $(if $(CONFIG_KASAN),65536,16384)
  37CHECKFLAGS      += -D__s390__ -D__s390x__
  38
  39export LD_BFD
  40
  41mflags-$(CONFIG_MARCH_Z900)   := -march=z900
  42mflags-$(CONFIG_MARCH_Z990)   := -march=z990
  43mflags-$(CONFIG_MARCH_Z9_109) := -march=z9-109
  44mflags-$(CONFIG_MARCH_Z10)    := -march=z10
  45mflags-$(CONFIG_MARCH_Z196)   := -march=z196
  46mflags-$(CONFIG_MARCH_ZEC12)  := -march=zEC12
  47mflags-$(CONFIG_MARCH_Z13)    := -march=z13
  48mflags-$(CONFIG_MARCH_Z14)    := -march=z14
  49mflags-$(CONFIG_MARCH_Z15)    := -march=z15
  50
  51export CC_FLAGS_MARCH := $(mflags-y)
  52
  53aflags-y += $(mflags-y)
  54cflags-y += $(mflags-y)
  55
  56cflags-$(CONFIG_MARCH_Z900_TUNE)        += -mtune=z900
  57cflags-$(CONFIG_MARCH_Z990_TUNE)        += -mtune=z990
  58cflags-$(CONFIG_MARCH_Z9_109_TUNE)      += -mtune=z9-109
  59cflags-$(CONFIG_MARCH_Z10_TUNE)         += -mtune=z10
  60cflags-$(CONFIG_MARCH_Z196_TUNE)        += -mtune=z196
  61cflags-$(CONFIG_MARCH_ZEC12_TUNE)       += -mtune=zEC12
  62cflags-$(CONFIG_MARCH_Z13_TUNE)         += -mtune=z13
  63cflags-$(CONFIG_MARCH_Z14_TUNE)         += -mtune=z14
  64cflags-$(CONFIG_MARCH_Z15_TUNE)         += -mtune=z15
  65
  66cflags-y += -Wa,-I$(srctree)/arch/$(ARCH)/include
  67
  68#
  69# Prevent tail-call optimizations, to get clearer backtraces:
  70#
  71cflags-$(CONFIG_FRAME_POINTER) += -fno-optimize-sibling-calls
  72
  73ifeq ($(call cc-option-yn,-mpacked-stack -mbackchain -msoft-float),y)
  74cflags-$(CONFIG_PACK_STACK)  += -mpacked-stack -D__PACK_STACK
  75aflags-$(CONFIG_PACK_STACK)  += -D__PACK_STACK
  76endif
  77
  78KBUILD_AFLAGS_DECOMPRESSOR += $(aflags-y)
  79KBUILD_CFLAGS_DECOMPRESSOR += $(cflags-y)
  80
  81ifeq ($(call cc-option-yn,-mstack-size=8192 -mstack-guard=128),y)
  82cflags-$(CONFIG_CHECK_STACK) += -mstack-size=$(STACK_SIZE)
  83ifneq ($(call cc-option-yn,-mstack-size=8192),y)
  84cflags-$(CONFIG_CHECK_STACK) += -mstack-guard=$(CONFIG_STACK_GUARD)
  85endif
  86endif
  87
  88ifdef CONFIG_WARN_DYNAMIC_STACK
  89  ifeq ($(call cc-option-yn,-mwarn-dynamicstack),y)
  90    KBUILD_CFLAGS += -mwarn-dynamicstack
  91    KBUILD_CFLAGS_DECOMPRESSOR += -mwarn-dynamicstack
  92  endif
  93endif
  94
  95ifdef CONFIG_EXPOLINE
  96  ifeq ($(call cc-option-yn,$(CC_FLAGS_MARCH) -mindirect-branch=thunk),y)
  97    CC_FLAGS_EXPOLINE := -mindirect-branch=thunk
  98    CC_FLAGS_EXPOLINE += -mfunction-return=thunk
  99    CC_FLAGS_EXPOLINE += -mindirect-branch-table
 100    export CC_FLAGS_EXPOLINE
 101    cflags-y += $(CC_FLAGS_EXPOLINE) -DCC_USING_EXPOLINE
 102    aflags-y += -DCC_USING_EXPOLINE
 103  endif
 104endif
 105
 106ifdef CONFIG_FUNCTION_TRACER
 107  ifeq ($(call cc-option-yn,-mfentry -mnop-mcount),n)
 108    # make use of hotpatch feature if the compiler supports it
 109    cc_hotpatch := -mhotpatch=0,3
 110    ifeq ($(call cc-option-yn,$(cc_hotpatch)),y)
 111      CC_FLAGS_FTRACE := $(cc_hotpatch)
 112      KBUILD_AFLAGS     += -DCC_USING_HOTPATCH
 113      KBUILD_CFLAGS     += -DCC_USING_HOTPATCH
 114    endif
 115  endif
 116endif
 117
 118# Test CFI features of binutils
 119cfi := $(call as-instr,.cfi_startproc\n.cfi_val_offset 15$(comma)-160\n.cfi_endproc,-DCONFIG_AS_CFI_VAL_OFFSET=1)
 120
 121KBUILD_CFLAGS   += -mbackchain -msoft-float $(cflags-y)
 122KBUILD_CFLAGS   += -pipe -Wno-sign-compare
 123KBUILD_CFLAGS   += -fno-asynchronous-unwind-tables $(cfi)
 124KBUILD_AFLAGS   += $(aflags-y) $(cfi)
 125export KBUILD_AFLAGS_DECOMPRESSOR
 126export KBUILD_CFLAGS_DECOMPRESSOR
 127
 128OBJCOPYFLAGS    := -O binary
 129
 130head-y          := arch/s390/kernel/head64.o
 131
 132libs-y          += arch/s390/lib/
 133drivers-y       += drivers/s390/
 134
 135boot            := arch/s390/boot
 136syscalls        := arch/s390/kernel/syscalls
 137tools           := arch/s390/tools
 138
 139all: bzImage
 140
 141#KBUILD_IMAGE is necessary for packaging targets like rpm-pkg, deb-pkg...
 142KBUILD_IMAGE    := $(boot)/bzImage
 143
 144install:
 145        $(Q)$(MAKE) $(build)=$(boot) $@
 146
 147bzImage: vmlinux
 148        $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 149
 150zfcpdump:
 151        $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 152
 153vdso_install:
 154        $(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso64 $@
 155
 156archclean:
 157        $(Q)$(MAKE) $(clean)=$(boot)
 158        $(Q)$(MAKE) $(clean)=$(tools)
 159
 160archheaders:
 161        $(Q)$(MAKE) $(build)=$(syscalls) uapi
 162
 163archprepare:
 164        $(Q)$(MAKE) $(build)=$(syscalls) kapi
 165        $(Q)$(MAKE) $(build)=$(tools) kapi
 166ifeq ($(KBUILD_EXTMOD),)
 167# We need to generate vdso-offsets.h before compiling certain files in kernel/.
 168# In order to do that, we should use the archprepare target, but we can't since
 169# asm-offsets.h is included in some files used to generate vdso-offsets.h, and
 170# asm-offsets.h is built in prepare0, for which archprepare is a dependency.
 171# Therefore we need to generate the header after prepare0 has been made, hence
 172# this hack.
 173prepare: vdso_prepare
 174vdso_prepare: prepare0
 175        $(Q)$(MAKE) $(build)=arch/s390/kernel/vdso64 include/generated/vdso64-offsets.h
 176        $(if $(CONFIG_COMPAT),$(Q)$(MAKE) \
 177                $(build)=arch/s390/kernel/vdso32 include/generated/vdso32-offsets.h)
 178endif
 179
 180# Don't use tabs in echo arguments
 181define archhelp
 182  echo  '* bzImage         - Kernel image for IPL ($(boot)/bzImage)'
 183  echo  '  install         - Install kernel using'
 184  echo  '                    (your) ~/bin/$(INSTALLKERNEL) or'
 185  echo  '                    (distribution) /sbin/$(INSTALLKERNEL) or'
 186  echo  '                    install to $$(INSTALL_PATH)'
 187endef
 188