1 # SPDX-License-Identifier: GPL-2.0 << 2 # Unified Makefile for i386 and x86_64 << 3 << 4 # select defconfig based on actual architectur << 5 ifeq ($(ARCH),x86) << 6 ifeq ($(shell uname -m | sed -e 's/i.86/i386 << 7 KBUILD_DEFCONFIG := i386_defconfig << 8 else << 9 KBUILD_DEFCONFIG := x86_64_defconfig << 10 endif << 11 else << 12 KBUILD_DEFCONFIG := $(ARCH)_defconfig << 13 endif << 14 << 15 ifdef CONFIG_CC_IS_GCC << 16 RETPOLINE_CFLAGS := $(call cc-option,-m << 17 RETPOLINE_VDSO_CFLAGS := $(call cc-option,-m << 18 endif << 19 ifdef CONFIG_CC_IS_CLANG << 20 RETPOLINE_CFLAGS := -mretpoline-externa << 21 RETPOLINE_VDSO_CFLAGS := -mretpoline << 22 endif << 23 RETPOLINE_CFLAGS += $(call cc-option,-m << 24 << 25 ifdef CONFIG_MITIGATION_RETHUNK << 26 RETHUNK_CFLAGS := -mfunction-return=t << 27 RETHUNK_RUSTFLAGS := -Zfunction-return=t << 28 RETPOLINE_CFLAGS += $(RETHUNK_CFLAGS) << 29 RETPOLINE_RUSTFLAGS += $(RETHUNK_RUSTFLAGS << 30 endif << 31 << 32 export RETHUNK_CFLAGS << 33 export RETHUNK_RUSTFLAGS << 34 export RETPOLINE_CFLAGS << 35 export RETPOLINE_RUSTFLAGS << 36 export RETPOLINE_VDSO_CFLAGS << 37 << 38 # For gcc stack alignment is specified with -m << 39 # clang has the option -mstack-alignment for t << 40 ifneq ($(call cc-option, -mpreferred-stack-bou << 41 cc_stack_align4 := -mpreferred-stack-bou << 42 cc_stack_align8 := -mpreferred-stack-bou << 43 else ifneq ($(call cc-option, -mstack-alignmen << 44 cc_stack_align4 := -mstack-alignment=4 << 45 cc_stack_align8 := -mstack-alignment=8 << 46 endif << 47 << 48 # How to compile the 16-bit code. Note we alw << 49 # that way we can complain to the user if the << 50 REALMODE_CFLAGS := -std=gnu11 -m16 -g -Os -DDI << 51 -Wall -Wstrict-prototypes - << 52 -fno-strict-aliasing -fomit << 53 -mno-mmx -mno-sse $(call cc << 54 << 55 REALMODE_CFLAGS += -ffreestanding << 56 REALMODE_CFLAGS += -fno-stack-protector << 57 REALMODE_CFLAGS += -Wno-address-of-packed-memb << 58 REALMODE_CFLAGS += $(cc_stack_align4) << 59 REALMODE_CFLAGS += $(CLANG_FLAGS) << 60 ifdef CONFIG_CC_IS_CLANG << 61 REALMODE_CFLAGS += -Wno-gnu << 62 endif << 63 export REALMODE_CFLAGS << 64 << 65 # BITS is used as extension for files which ar << 66 # and a 64 bit version to simplify shared Make << 67 # e.g.: obj-y += foo_$(BITS).o << 68 export BITS << 69 << 70 # 1 # 71 # Prevent GCC from generating any FP code by m !! 2 # alpha/Makefile 72 # 3 # 73 # This must happen before we try the -mpreferr !! 4 # This file is subject to the terms and conditions of the GNU General Public >> 5 # License. See the file "COPYING" in the main directory of this archive >> 6 # for more details. 74 # 7 # 75 # https://gcc.gnu.org/bugzilla/show_bug.cgi !! 8 # Copyright (C) 1994 by Linus Torvalds 76 # 9 # 77 KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 - << 78 KBUILD_RUSTFLAGS += --target=$(objtree)/script << 79 KBUILD_RUSTFLAGS += -Ctarget-feature=-sse,-sse << 80 10 81 # !! 11 NM := $(NM) -B 82 # CFLAGS for compiling floating point code ins << 83 # << 84 CC_FLAGS_FPU := -msse -msse2 << 85 ifdef CONFIG_CC_IS_GCC << 86 # Stack alignment mismatch, proceed with cauti << 87 # GCC < 7.1 cannot compile code using `double` << 88 # (8B stack alignment). << 89 # See https://gcc.gnu.org/bugzilla/show_bug.cg << 90 # << 91 # The "-msse" in the first argument is there s << 92 # -mpreferred-stack-boundary=3 build error: << 93 # << 94 # -mpreferred-stack-boundary=3 is not between << 95 # << 96 # can be triggered. Otherwise gcc doesn't comp << 97 CC_FLAGS_FPU += -mhard-float << 98 CC_FLAGS_FPU += $(call cc-option,-msse -mprefe << 99 endif << 100 12 101 ifeq ($(CONFIG_X86_KERNEL_IBT),y) !! 13 LINKFLAGS = -static -T arch/alpha/vmlinux.lds -N #-relax 102 # !! 14 CFLAGS := $(CFLAGS) -pipe -mno-fp-regs -ffixed-8 103 # Kernel IBT has S_CET.NOTRACK_EN=0, as such t << 104 # NOTRACK prefixes. Current generation compile << 105 # for jump-tables, as such, disable jump-table << 106 # << 107 # (jump-tables are implicitly disabled by RETP << 108 # << 109 # https://gcc.gnu.org/bugzilla/show_bug.cgi? << 110 # << 111 KBUILD_CFLAGS += $(call cc-option,-fcf-protect << 112 KBUILD_RUSTFLAGS += -Zcf-protection=branch -Zn << 113 else << 114 KBUILD_CFLAGS += $(call cc-option,-fcf-protect << 115 endif << 116 15 117 ifeq ($(CONFIG_X86_32),y) !! 16 # Determine if we can use the BWX instructions with GAS. 118 BITS := 32 !! 17 old_gas := $(shell if $(AS) --version 2>&1 | grep 'version 2.7' > /dev/null; then echo y; else echo n; fi) 119 UTS_MACHINE := i386 << 120 CHECKFLAGS += -D__i386__ << 121 << 122 KBUILD_AFLAGS += -m32 << 123 KBUILD_CFLAGS += -m32 << 124 << 125 KBUILD_CFLAGS += -msoft-float -mregpar << 126 << 127 # Never want PIC in a 32-bit kernel, p << 128 # with nonstandard options << 129 KBUILD_CFLAGS += -fno-pic << 130 << 131 # Align the stack to the register widt << 132 # alignment of 16 bytes. This reduces << 133 # alignment instructions. << 134 KBUILD_CFLAGS += $(cc_stack_align4) << 135 << 136 # CPU-specific tuning. Anything which << 137 include $(srctree)/arch/x86/Makefile_3 << 138 KBUILD_CFLAGS += $(cflags-y) << 139 << 140 # temporary until string.h is fixed << 141 KBUILD_CFLAGS += -ffreestanding << 142 << 143 ifeq ($(CONFIG_STACKPROTECTOR),y) << 144 ifeq ($(CONFIG_SMP),y) << 145 KBUILD_CFLAGS += -msta << 146 else << 147 KBUILD_CFLAGS += -msta << 148 endif << 149 endif << 150 else << 151 BITS := 64 << 152 UTS_MACHINE := x86_64 << 153 CHECKFLAGS += -D__x86_64__ << 154 << 155 KBUILD_AFLAGS += -m64 << 156 KBUILD_CFLAGS += -m64 << 157 << 158 # Align jump targets to 1 byte, not th << 159 KBUILD_CFLAGS += $(call cc-option,-fal << 160 << 161 # Pack loops tightly as well: << 162 KBUILD_CFLAGS += $(call cc-option,-fal << 163 << 164 # Don't autogenerate traditional x87 i << 165 KBUILD_CFLAGS += -mno-80387 << 166 KBUILD_CFLAGS += $(call cc-option,-mno << 167 << 168 # By default gcc and clang use a stack << 169 # However the standard kernel entry on << 170 # 8-byte boundary. If the compiler isn << 171 # alignment it will generate extra ali << 172 # default alignment which keep the sta << 173 # Furthermore an alignment to the regi << 174 # and the number of alignment instruct << 175 KBUILD_CFLAGS += $(cc_stack_align8) << 176 << 177 # Use -mskip-rax-setup if supported. << 178 KBUILD_CFLAGS += $(call cc-option,-msk << 179 << 180 # FIXME - should be integrated in Make << 181 cflags-$(CONFIG_MK8) += -ma << 182 cflags-$(CONFIG_MPSC) += -ma << 183 cflags-$(CONFIG_MCORE2) += -ma << 184 cflags-$(CONFIG_MATOM) += -ma << 185 cflags-$(CONFIG_GENERIC_CPU) += -mt << 186 KBUILD_CFLAGS += $(cflags-y) << 187 << 188 rustflags-$(CONFIG_MK8) += -Ct << 189 rustflags-$(CONFIG_MPSC) += -Ct << 190 rustflags-$(CONFIG_MCORE2) += -Ct << 191 rustflags-$(CONFIG_MATOM) += -Ct << 192 rustflags-$(CONFIG_GENERIC_CPU) += -Zt << 193 KBUILD_RUSTFLAGS += $(rustflags-y) << 194 << 195 KBUILD_CFLAGS += -mno-red-zone << 196 KBUILD_CFLAGS += -mcmodel=kernel << 197 KBUILD_RUSTFLAGS += -Cno-redzone=y << 198 KBUILD_RUSTFLAGS += -Ccode-model=kerne << 199 endif << 200 18 201 # !! 19 # Determine if GCC understands the -mcpu= option. 202 # If the function graph tracer is used with mc !! 20 have_mcpu := $(shell if $(CC) -mcpu=ev5 -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi) 203 # '-maccumulate-outgoing-args' is needed to pr << 204 # (https://gcc.gnu.org/bugzilla/show_bug.cgi?i << 205 # << 206 ifdef CONFIG_FUNCTION_GRAPH_TRACER << 207 ifndef CONFIG_HAVE_FENTRY << 208 ACCUMULATE_OUTGOING_ARGS := 1 << 209 endif << 210 endif << 211 21 212 ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1) !! 22 have_mcpu_pca56 := $(shell if $(CC) -mcpu=pca56 -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi) 213 # This compiler flag is not supported << 214 KBUILD_CFLAGS += $(call cc-option,-mac << 215 endif << 216 23 217 # Workaround for a gcc prelease that unfortuna !! 24 have_mcpu_ev6 := $(shell if $(CC) -mcpu=ev6 -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi) 218 KBUILD_CFLAGS += -Wno-sign-compare << 219 # << 220 KBUILD_CFLAGS += -fno-asynchronous-unwind-tabl << 221 25 222 # Avoid indirect branches in kernel to deal wi !! 26 have_mcpu_ev67 := $(shell if $(CC) -mcpu=ev67 -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo y; else echo n; fi) 223 ifdef CONFIG_MITIGATION_RETPOLINE !! 27 224 KBUILD_CFLAGS += $(RETPOLINE_CFLAGS) !! 28 # Turn on the proper cpu optimizations. 225 KBUILD_RUSTFLAGS += $(RETPOLINE_RUSTFLAGS) !! 29 ifeq ($(have_mcpu),y) 226 # Additionally, avoid generating expensive i !! 30 # If GENERIC, make sure to turn off any instruction set extensions that 227 # are subject to retpolines for small number !! 31 # the host compiler might have on by default. Given that EV4 and EV5 228 # LLVM turns off jump table generation by de !! 32 # have the same instruction set, prefer EV5 because an EV5 schedule is 229 # retpoline builds, however, gcc does not fo !! 33 # more likely to keep an EV4 processor busy than vice-versa. 230 # only been fixed starting from gcc stable v !! 34 mcpu_done := n 231 # onwards, but not for older ones. See gcc b !! 35 ifeq ($(CONFIG_ALPHA_GENERIC),y) 232 ifndef CONFIG_CC_IS_CLANG !! 36 CFLAGS := $(CFLAGS) -mcpu=ev5 233 KBUILD_CFLAGS += -fno-jump-tables !! 37 mcpu_done := y >> 38 endif >> 39 ifeq ($(mcpu_done)$(CONFIG_ALPHA_SX164)$(have_mcpu_pca56),nyy) >> 40 CFLAGS := $(CFLAGS) -mcpu=pca56 >> 41 mcpu_done := y >> 42 endif >> 43 ifeq ($(mcpu_done)$(CONFIG_ALPHA_POLARIS)$(have_mcpu_pca56),nyy) >> 44 CFLAGS := $(CFLAGS) -mcpu=pca56 >> 45 mcpu_done := y >> 46 endif >> 47 ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV4),ny) >> 48 CFLAGS := $(CFLAGS) -mcpu=ev4 >> 49 mcpu_done := y >> 50 endif >> 51 ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV56),ny) >> 52 CFLAGS := $(CFLAGS) -mcpu=ev56 >> 53 mcpu_done := y >> 54 endif >> 55 ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV5),ny) >> 56 CFLAGS := $(CFLAGS) -mcpu=ev5 >> 57 mcpu_done := y >> 58 endif >> 59 ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV67)$(have_mcpu_ev67),nyy) >> 60 CFLAGS := $(CFLAGS) -mcpu=ev67 >> 61 mcpu_done := y >> 62 endif >> 63 ifeq ($(mcpu_done)$(CONFIG_ALPHA_EV6),ny) >> 64 ifeq ($(have_mcpu_ev6),y) >> 65 CFLAGS := $(CFLAGS) -mcpu=ev6 >> 66 else >> 67 ifeq ($(have_mcpu_pca56),y) >> 68 CFLAGS := $(CFLAGS) -mcpu=pca56 >> 69 else >> 70 CFLAGS := $(CFLAGS) -mcpu=ev56 >> 71 endif >> 72 endif >> 73 mcpu_done := y 234 endif 74 endif 235 endif 75 endif 236 76 237 ifdef CONFIG_MITIGATION_SLS !! 77 # For TSUNAMI, we must have the assembler not emulate our instructions. 238 KBUILD_CFLAGS += -mharden-sls=all !! 78 # The same is true for IRONGATE, POLARIS, PYXIS. 239 endif !! 79 # BWX is most important, but we don't really want any emulation ever. 240 80 241 ifdef CONFIG_CALL_PADDING !! 81 ifeq ($(old_gas),y) 242 PADDING_CFLAGS := -fpatchable-function-entry=$ !! 82 # How do we do #error in make? 243 KBUILD_CFLAGS += $(PADDING_CFLAGS) !! 83 CFLAGS := --error-please-upgrade-your-assembler 244 export PADDING_CFLAGS << 245 << 246 PADDING_RUSTFLAGS := -Zpatchable-function-entr << 247 KBUILD_RUSTFLAGS += $(PADDING_RUSTFLAGS) << 248 export PADDING_RUSTFLAGS << 249 endif 84 endif >> 85 CFLAGS := $(CFLAGS) -Wa,-mev6 250 86 251 KBUILD_LDFLAGS += -m elf_$(UTS_MACHINE) !! 87 HEAD := arch/alpha/kernel/head.o 252 88 253 ifdef CONFIG_X86_NEED_RELOCS !! 89 SUBDIRS := $(SUBDIRS) arch/alpha/kernel arch/alpha/mm arch/alpha/lib \ 254 LDFLAGS_vmlinux := --emit-relocs --discard-non !! 90 arch/alpha/math-emu 255 else !! 91 CORE_FILES := arch/alpha/kernel/kernel.o arch/alpha/mm/mm.o $(CORE_FILES) 256 LDFLAGS_vmlinux := << 257 endif << 258 92 259 # !! 93 ifeq ($(CONFIG_MATHEMU),y) 260 # The 64-bit kernel must be aligned to 2MB. P !! 94 CORE_FILES := $(CORE_FILES) arch/alpha/math-emu/math-emu.o 261 # the linker to force 2MB page size regardless << 262 # by the linker. << 263 # << 264 ifdef CONFIG_X86_64 << 265 LDFLAGS_vmlinux += -z max-page-size=0x200000 << 266 endif 95 endif 267 96 >> 97 LIBS := $(TOPDIR)/arch/alpha/lib/lib.a $(LIBS) $(TOPDIR)/arch/alpha/lib/lib.a 268 98 269 archscripts: scripts_basic !! 99 MAKEBOOT = $(MAKE) -C arch/alpha/boot 270 $(Q)$(MAKE) $(build)=arch/x86/tools re << 271 100 272 ### !! 101 rawboot: 273 # Syscall table generation !! 102 @$(MAKEBOOT) rawboot 274 103 275 archheaders: !! 104 # 276 $(Q)$(MAKE) $(build)=arch/x86/entry/sy !! 105 # My boot writes directly to a specific disk partition, I doubt most 277 !! 106 # people will want to do that without changes.. 278 ### !! 107 # 279 # Kernel objects !! 108 msb my-special-boot: 280 !! 109 @$(MAKEBOOT) msb 281 libs-y += arch/x86/lib/ << 282 << 283 # drivers-y are linked after core-y << 284 drivers-$(CONFIG_MATH_EMULATION) += arch/x86/m << 285 drivers-$(CONFIG_PCI) += arch/x86/p << 286 << 287 # suspend and hibernation support << 288 drivers-$(CONFIG_PM) += arch/x86/power/ << 289 << 290 drivers-$(CONFIG_VIDEO) += arch/x86/video/ << 291 << 292 #### << 293 # boot loader support. Several targets are kep << 294 << 295 boot := arch/x86/boot << 296 110 297 BOOT_TARGETS = bzdisk fdimage fdimage144 fdima !! 111 bootimage: >> 112 @$(MAKEBOOT) bootimage 298 113 299 PHONY += bzImage $(BOOT_TARGETS) !! 114 srmboot: >> 115 @$(MAKEBOOT) srmboot 300 116 301 # Default kernel to build !! 117 archclean: 302 all: bzImage !! 118 @$(MAKE) -C arch/alpha/kernel clean >> 119 @$(MAKEBOOT) clean >> 120 rm -f arch/alpha/vmlinux.lds 303 121 304 # KBUILD_IMAGE specify target image being buil !! 122 archmrproper: 305 KBUILD_IMAGE := $(boot)/bzImage << 306 123 307 bzImage: vmlinux !! 124 archdep: 308 ifeq ($(CONFIG_X86_DECODER_SELFTEST),y) !! 125 @$(MAKEBOOT) dep 309 $(Q)$(MAKE) $(build)=arch/x86/tools po << 310 endif << 311 $(Q)$(MAKE) $(build)=$(boot) $(KBUILD_ << 312 $(Q)mkdir -p $(objtree)/arch/$(UTS_MAC << 313 $(Q)ln -fsn ../../x86/boot/bzImage $(o << 314 << 315 $(BOOT_TARGETS): vmlinux << 316 $(Q)$(MAKE) $(build)=$(boot) $@ << 317 << 318 PHONY += install << 319 install: << 320 $(call cmd,install) << 321 << 322 vdso-install-$(CONFIG_X86_64) += arc << 323 vdso-install-$(CONFIG_X86_X32_ABI) += arc << 324 vdso-install-$(CONFIG_COMPAT_32) += arc << 325 << 326 archprepare: checkbin << 327 checkbin: << 328 ifdef CONFIG_MITIGATION_RETPOLINE << 329 ifeq ($(RETPOLINE_CFLAGS),) << 330 @echo "You are building kernel with no << 331 @echo "Please update your compiler." > << 332 @false << 333 endif << 334 endif << 335 126 336 ifdef CONFIG_UNWINDER_ORC !! 127 vmlinux: arch/alpha/vmlinux.lds 337 orc_hash_h := arch/$(SRCARCH)/include/generate << 338 orc_hash_sh := $(srctree)/scripts/orc_hash.sh << 339 targets += $(orc_hash_h) << 340 quiet_cmd_orc_hash = GEN $@ << 341 cmd_orc_hash = mkdir -p $(dir $@); \ << 342 $(CONFIG_SHELL) $(orc_has << 343 $(orc_hash_h): $(srctree)/arch/x86/include/asm << 344 $(call if_changed,orc_hash) << 345 archprepare: $(orc_hash_h) << 346 endif << 347 128 348 archclean: !! 129 arch/alpha/vmlinux.lds: arch/alpha/vmlinux.lds.in 349 $(Q)rm -rf $(objtree)/arch/i386 !! 130 $(CPP) $(CPPFLAGS) -xc -P arch/alpha/vmlinux.lds.in -o arch/alpha/vmlinux.lds 350 $(Q)rm -rf $(objtree)/arch/x86_64 << 351 131 352 define archhelp !! 132 bootpfile: 353 echo '* bzImage - Compressed k !! 133 @$(MAKEBOOT) bootpfile 354 echo ' install - Install kern << 355 echo ' (distributio << 356 echo ' $$(INSTALL_P << 357 echo '' << 358 echo ' fdimage - Create 1.4MB << 359 echo ' fdimage144 - Create 1.4MB << 360 echo ' fdimage288 - Create 2.8MB << 361 echo ' hdimage - Create a BIO << 362 echo ' isoimage - Create a boo << 363 echo ' bzdisk/fdima << 364 echo ' FDARGS="..." << 365 echo ' FDINITRD=fil << 366 134 367 endef !! 135 bootpzfile: >> 136 @$(MAKEBOOT) bootpzfile
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.