11da177e4SLinus Torvalds# 24f193362SPaul Smith# This file is included by the global makefile so that you can add your own 34f193362SPaul Smith# architecture-specific flags and dependencies. 44f193362SPaul Smith# 54c9e1385SJeff Dike# Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 61da177e4SLinus Torvalds# Licensed under the GPL 71da177e4SLinus Torvalds# 81da177e4SLinus Torvalds 9e40f04d0SRamkumar Ramachandra# select defconfig based on actual architecture 10e40f04d0SRamkumar Ramachandraifeq ($(SUBARCH),x86) 11e40f04d0SRamkumar Ramachandra ifeq ($(shell uname -m),x86_64) 12e40f04d0SRamkumar Ramachandra KBUILD_DEFCONFIG := x86_64_defconfig 13e40f04d0SRamkumar Ramachandra else 14e40f04d0SRamkumar Ramachandra KBUILD_DEFCONFIG := i386_defconfig 15e40f04d0SRamkumar Ramachandra endif 16e40f04d0SRamkumar Ramachandraelse 17e40f04d0SRamkumar Ramachandra KBUILD_DEFCONFIG := $(SUBARCH)_defconfig 18e40f04d0SRamkumar Ramachandraendif 19e40f04d0SRamkumar Ramachandra 201da177e4SLinus TorvaldsARCH_DIR := arch/um 211da177e4SLinus TorvaldsOS := $(shell uname -s) 221da177e4SLinus Torvalds# We require bash because the vmlinux link and loader script cpp use bash 231da177e4SLinus Torvalds# features. 241da177e4SLinus TorvaldsSHELL := /bin/bash 251da177e4SLinus Torvalds 261da177e4SLinus Torvaldsfilechk_gen_header = $< 271da177e4SLinus Torvalds 281da177e4SLinus Torvaldscore-y += $(ARCH_DIR)/kernel/ \ 291da177e4SLinus Torvalds $(ARCH_DIR)/drivers/ \ 301da177e4SLinus Torvalds $(ARCH_DIR)/os-$(OS)/ 311da177e4SLinus Torvalds 328569c914SAl ViroMODE_INCLUDE += -I$(srctree)/$(ARCH_DIR)/include/shared/skas 331da177e4SLinus Torvalds 347bbe7204SAl ViroHEADER_ARCH := $(SUBARCH) 357bbe7204SAl Viro 36fff6540cSRichard Weinbergerifneq ($(filter $(SUBARCH),x86 x86_64 i386),) 377bbe7204SAl Viro HEADER_ARCH := x86 387bbe7204SAl Viroendif 39fff6540cSRichard Weinberger 40fff6540cSRichard Weinbergerifdef CONFIG_64BIT 4112783aa0SRichard Weinberger KBUILD_CFLAGS += -mcmodel=large 427bbe7204SAl Viroendif 437bbe7204SAl Viro 445c48b108SAl ViroHOST_DIR := arch/$(HEADER_ARCH) 455c48b108SAl Viro 46a436bb7bSMasahiro Yamadainclude $(ARCH_DIR)/Makefile-skas 47a436bb7bSMasahiro Yamadainclude $(HOST_DIR)/Makefile.um 485c48b108SAl Viro 495c48b108SAl Virocore-y += $(HOST_DIR)/um/ 501da177e4SLinus Torvalds 5122409f9cSAl ViroSHARED_HEADERS := $(ARCH_DIR)/include/shared 5222409f9cSAl ViroARCH_INCLUDE := -I$(srctree)/$(SHARED_HEADERS) 535c48b108SAl ViroARCH_INCLUDE += -I$(srctree)/$(HOST_DIR)/um/shared 545c48b108SAl ViroKBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/um 551da177e4SLinus Torvalds 5698105d47SPaolo 'Blaisorblade' Giarrusso# -Dvmap=kernel_vmap prevents anything from referencing the libpcap.o symbol so 5798105d47SPaolo 'Blaisorblade' Giarrusso# named - it's a common symbol in libpcap, so we get a binary which crashes. 58fd748104SPaolo 'Blaisorblade' Giarrusso# 5998105d47SPaolo 'Blaisorblade' Giarrusso# Same things for in6addr_loopback and mktime - found in libc. For these two we 6098105d47SPaolo 'Blaisorblade' Giarrusso# only get link-time error, luckily. 6198105d47SPaolo 'Blaisorblade' Giarrusso# 6298105d47SPaolo 'Blaisorblade' Giarrusso# These apply to USER_CFLAGS to. 63ecc354a9SPaolo 'Blaisorblade' Giarrusso 64dc5be20aSAl ViroKBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ \ 65fd748104SPaolo 'Blaisorblade' Giarrusso $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \ 66818f6ef4SJeff Dike -Din6addr_loopback=kernel_in6addr_loopback \ 672c51a4bcSAl Viro -Din6addr_any=kernel_in6addr_any -Dstrrchr=kernel_strrchr 68fd748104SPaolo 'Blaisorblade' Giarrusso 69222d394dSSam RavnborgKBUILD_AFLAGS += $(ARCH_INCLUDE) 70ecc354a9SPaolo 'Blaisorblade' Giarrusso 71298e20baSRichard WeinbergerUSER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -I%,,$(KBUILD_CFLAGS))) \ 72298e20baSRichard Weinberger $(ARCH_INCLUDE) $(MODE_INCLUDE) $(filter -I%,$(CFLAGS)) \ 73*0b5aedfeSRichard Weinberger -D_FILE_OFFSET_BITS=64 -idirafter $(srctree)/include \ 74*0b5aedfeSRichard Weinberger -idirafter $(obj)/include -D__KERNEL__ -D__UM_HOST__ 75d45e44d4Sakpm@osdl.org 76d45e44d4Sakpm@osdl.org#This will adjust *FLAGS accordingly to the platform. 77a436bb7bSMasahiro Yamadainclude $(ARCH_DIR)/Makefile-os-$(OS) 78ecc354a9SPaolo 'Blaisorblade' Giarrusso 79c9b284b2SH. Peter AnvinKBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/include \ 80abbf1590SDavid Howells -I$(srctree)/$(HOST_DIR)/include/uapi \ 81abbf1590SDavid Howells -I$(HOST_DIR)/include/generated \ 82abbf1590SDavid Howells -I$(HOST_DIR)/include/generated/uapi 831de1502cSAl Viro 841da177e4SLinus Torvalds# -Derrno=kernel_errno - This turns all kernel references to errno into 851da177e4SLinus Torvalds# kernel_errno to separate them from the libc errno. This allows -fno-common 86a0f97e06SSam Ravnborg# in KBUILD_CFLAGS. Otherwise, it would cause ld to complain about the two different 871da177e4SLinus Torvalds# errnos. 8898105d47SPaolo 'Blaisorblade' Giarrusso# These apply to kernelspace only. 89f15cf515SJeff Dike# 90f15cf515SJeff Dike# strip leading and trailing whitespace to make the USER_CFLAGS removal of these 91f15cf515SJeff Dike# defines more robust 921da177e4SLinus Torvalds 93f15cf515SJeff DikeKERNEL_DEFINES = $(strip -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \ 94f15cf515SJeff Dike -Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES)) 95a0f97e06SSam RavnborgKBUILD_CFLAGS += $(KERNEL_DEFINES) 961da177e4SLinus Torvalds 974f193362SPaul SmithPHONY += linux 981da177e4SLinus Torvalds 991da177e4SLinus Torvaldsall: linux 1001da177e4SLinus Torvalds 1011da177e4SLinus Torvaldslinux: vmlinux 102a4b741e3SJeff Dike @echo ' LINK $@' 103cb8aa3d2SPaolo 'Blaisorblade' Giarrusso $(Q)ln -f $< $@ 1041da177e4SLinus Torvalds 1051da177e4SLinus Torvaldsdefine archhelp 1061da177e4SLinus Torvalds echo '* linux - Binary kernel image (./linux) - for backward' 1071da177e4SLinus Torvalds echo ' compatibility only, this creates a hard link to the' 1084b3f686dSMatt LaPlante echo ' real kernel binary, the "vmlinux" binary you' 1091da177e4SLinus Torvalds echo ' find in the kernel root.' 1101da177e4SLinus Torvaldsendef 1111da177e4SLinus Torvalds 1125c48b108SAl ViroKBUILD_KCONFIG := $(HOST_DIR)/um/Kconfig 1131da177e4SLinus Torvalds 114c9b284b2SH. Peter Anvinarchheaders: 115d4bc590fSMichal Marek $(Q)$(MAKE) KBUILD_SRC= ARCH=$(HEADER_ARCH) archheaders 116c9b284b2SH. Peter Anvin 1174de1c5f6SAl Viroarchprepare: include/generated/user_constants.h 1181da177e4SLinus Torvalds 1191da177e4SLinus TorvaldsLINK-$(CONFIG_LD_SCRIPT_STATIC) += -static 1201da177e4SLinus TorvaldsLINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib 1211da177e4SLinus Torvalds 122275e6e1eSPaolo 'Blaisorblade' GiarrussoCFLAGS_NO_HARDENING := $(call cc-option, -fno-PIC,) $(call cc-option, -fno-pic,) \ 123275e6e1eSPaolo 'Blaisorblade' Giarrusso $(call cc-option, -fno-stack-protector,) \ 124275e6e1eSPaolo 'Blaisorblade' Giarrusso $(call cc-option, -fno-stack-protector-all,) 125275e6e1eSPaolo 'Blaisorblade' Giarrusso 12651b563fcSSam Ravnborg# Options used by linker script 12751b563fcSSam Ravnborgexport LDS_START := $(START) 12851b563fcSSam Ravnborgexport LDS_ELF_ARCH := $(ELF_ARCH) 12951b563fcSSam Ravnborgexport LDS_ELF_FORMAT := $(ELF_FORMAT) 1301da177e4SLinus Torvalds 1311da177e4SLinus Torvalds# The wrappers will select whether using "malloc" or the kernel allocator. 1321da177e4SLinus TorvaldsLINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc 1331da177e4SLinus Torvalds 134260c0cb8SJeff DikeLD_FLAGS_CMDLINE = $(foreach opt,$(LDFLAGS),-Wl,$(opt)) 1350ba7fe03SJeff Dike 1361f2bfbd0SSam Ravnborg# Used by link-vmlinux.sh which has special support for um link 1371f2bfbd0SSam Ravnborgexport CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) $(LD_FLAGS_CMDLINE) 1381da177e4SLinus Torvalds 1391da177e4SLinus Torvalds# When cleaning we don't include .config, so we don't include 1401da177e4SLinus Torvalds# TT or skas makefiles and don't clean skas_ptregs.h. 1419e636452SAl ViroCLEAN_FILES += linux x.i gmon.out 1421da177e4SLinus Torvalds 1431da177e4SLinus Torvaldsarchclean: 1441da177e4SLinus Torvalds @find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \ 1451da177e4SLinus Torvalds -o -name '*.gcov' \) -type f -print | xargs rm -f 1461da177e4SLinus Torvalds 1471da177e4SLinus Torvalds# Generated files 1484ee189a9SJeff Dike 149392f4b7dSH. Peter Anvin$(HOST_DIR)/um/user-offsets.s: __headers FORCE 1505c48b108SAl Viro $(Q)$(MAKE) $(build)=$(HOST_DIR)/um $@ 1514ee189a9SJeff Dike 152f64a227bSSam Ravnborgdefine filechk_gen-asm-offsets 153f64a227bSSam Ravnborg (set -e; \ 154f64a227bSSam Ravnborg echo "/*"; \ 155f64a227bSSam Ravnborg echo " * DO NOT MODIFY."; \ 156f64a227bSSam Ravnborg echo " *"; \ 157f64a227bSSam Ravnborg echo " * This file was generated by arch/$(ARCH)/Makefile"; \ 158f64a227bSSam Ravnborg echo " *"; \ 159f64a227bSSam Ravnborg echo " */"; \ 160f64a227bSSam Ravnborg echo ""; \ 161f64a227bSSam Ravnborg sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \ 162ecba97d4SAl Viro echo ""; ) 163f64a227bSSam Ravnborgendef 164f64a227bSSam Ravnborg 1655c48b108SAl Viroinclude/generated/user_constants.h: $(HOST_DIR)/um/user-offsets.s 1668d0b9dc9SAl Viro $(call filechk,gen-asm-offsets) 1678d0b9dc9SAl Viro 1685c48b108SAl Viroexport SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS DEV_NULL_PATH 169