1# 2# This file is included by the global makefile so that you can add your own 3# architecture-specific flags and dependencies. 4# 5# Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 6# Licensed under the GPL 7# 8 9ARCH_DIR := arch/um 10OS := $(shell uname -s) 11# We require bash because the vmlinux link and loader script cpp use bash 12# features. 13SHELL := /bin/bash 14 15filechk_gen_header = $< 16 17core-y += $(ARCH_DIR)/kernel/ \ 18 $(ARCH_DIR)/drivers/ \ 19 $(ARCH_DIR)/os-$(OS)/ 20 21# These are cleaned up during mrproper. Please DO NOT fix it again, this is 22# the Correct Thing(tm) to do! 23ARCH_SYMLINKS = $(ARCH_DIR)/include/shared/uml-config.h 24 25MODE_INCLUDE += -I$(srctree)/$(ARCH_DIR)/include/shared/skas 26 27include $(srctree)/$(ARCH_DIR)/Makefile-skas 28 29ARCH_INCLUDE := -I$(srctree)/$(ARCH_DIR)/include/shared 30ARCH_INCLUDE += -I$(srctree)/$(ARCH_DIR)/sys-$(SUBARCH)/shared 31ifneq ($(KBUILD_SRC),) 32ARCH_INCLUDE += -I$(ARCH_DIR)/include/shared # for three generated files 33endif 34KBUILD_CPPFLAGS += -I$(srctree)/$(ARCH_DIR)/sys-$(SUBARCH) 35 36# -Dvmap=kernel_vmap prevents anything from referencing the libpcap.o symbol so 37# named - it's a common symbol in libpcap, so we get a binary which crashes. 38# 39# Same things for in6addr_loopback and mktime - found in libc. For these two we 40# only get link-time error, luckily. 41# 42# These apply to USER_CFLAGS to. 43 44KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ -DSUBARCH=\"$(SUBARCH)\" \ 45 $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \ 46 -Din6addr_loopback=kernel_in6addr_loopback \ 47 -Din6addr_any=kernel_in6addr_any 48 49KBUILD_AFLAGS += $(ARCH_INCLUDE) 50 51USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -D__KERNEL__,,\ 52 $(patsubst -I%,,$(KBUILD_CFLAGS)))) $(ARCH_INCLUDE) $(MODE_INCLUDE) \ 53 $(filter -I%,$(CFLAGS)) -D_FILE_OFFSET_BITS=64 54 55include $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH) 56 57#This will adjust *FLAGS accordingly to the platform. 58include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS) 59 60KBUILD_CPPFLAGS += -I$(srctree)/arch/$(HEADER_ARCH)/include 61 62# -Derrno=kernel_errno - This turns all kernel references to errno into 63# kernel_errno to separate them from the libc errno. This allows -fno-common 64# in KBUILD_CFLAGS. Otherwise, it would cause ld to complain about the two different 65# errnos. 66# These apply to kernelspace only. 67# 68# strip leading and trailing whitespace to make the USER_CFLAGS removal of these 69# defines more robust 70 71KERNEL_DEFINES = $(strip -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \ 72 -Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES)) 73KBUILD_CFLAGS += $(KERNEL_DEFINES) 74 75PHONY += linux 76 77all: linux 78 79linux: vmlinux 80 @echo ' LINK $@' 81 $(Q)ln -f $< $@ 82 83define archhelp 84 echo '* linux - Binary kernel image (./linux) - for backward' 85 echo ' compatibility only, this creates a hard link to the' 86 echo ' real kernel binary, the "vmlinux" binary you' 87 echo ' find in the kernel root.' 88endef 89 90ifneq ($(KBUILD_SRC),) 91$(shell mkdir -p $(ARCH_DIR) && ln -fsn $(srctree)/$(ARCH_DIR)/Kconfig.$(HEADER_ARCH) $(ARCH_DIR)/Kconfig.arch) 92else 93$(shell ln -fsn Kconfig.$(HEADER_ARCH) $(ARCH_DIR)/Kconfig.arch) 94endif 95 96archprepare: $(ARCH_SYMLINKS) $(ARCH_DIR)/include/shared/user_constants.h 97prepare: $(ARCH_DIR)/include/shared/kern_constants.h 98 99LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static 100LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib 101 102CFLAGS_NO_HARDENING := $(call cc-option, -fno-PIC,) $(call cc-option, -fno-pic,) \ 103 $(call cc-option, -fno-stack-protector,) \ 104 $(call cc-option, -fno-stack-protector-all,) 105 106CONFIG_KERNEL_STACK_ORDER ?= 2 107STACK_SIZE := $(shell echo $$[ 4096 * (1 << $(CONFIG_KERNEL_STACK_ORDER)) ] ) 108 109CPPFLAGS_vmlinux.lds = -U$(SUBARCH) -DSTART=$(START) -DELF_ARCH=$(ELF_ARCH) \ 110 -DELF_FORMAT="$(ELF_FORMAT)" -DKERNEL_STACK_SIZE=$(STACK_SIZE) 111 112# The wrappers will select whether using "malloc" or the kernel allocator. 113LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc 114 115LD_FLAGS_CMDLINE = $(foreach opt,$(LDFLAGS),-Wl,$(opt)) 116 117CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) $(LD_FLAGS_CMDLINE) 118define cmd_vmlinux__ 119 $(CC) $(CFLAGS_vmlinux) -o $@ \ 120 -Wl,-T,$(vmlinux-lds) $(vmlinux-init) \ 121 -Wl,--start-group $(vmlinux-main) -Wl,--end-group \ 122 -lutil \ 123 $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o \ 124 FORCE ,$^) ; rm -f linux 125endef 126 127# When cleaning we don't include .config, so we don't include 128# TT or skas makefiles and don't clean skas_ptregs.h. 129CLEAN_FILES += linux x.i gmon.out $(ARCH_DIR)/include/shared/uml-config.h \ 130 $(ARCH_DIR)/include/shared/user_constants.h \ 131 $(ARCH_DIR)/include/shared/kern_constants.h $(ARCH_DIR)/Kconfig.arch 132 133MRPROPER_FILES += $(ARCH_SYMLINKS) 134 135archclean: 136 @find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \ 137 -o -name '*.gcov' \) -type f -print | xargs rm -f 138 139$(objtree)/$(ARCH_DIR)/include/shared: 140 @echo ' MKDIR $@' 141 $(Q)mkdir -p $@ 142 143# Generated files 144define filechk_umlconfig 145 sed 's/ CONFIG/ UML_CONFIG/' 146endef 147 148$(ARCH_DIR)/include/shared/uml-config.h : include/linux/autoconf.h 149 $(call filechk,umlconfig) 150 151$(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s: FORCE 152 $(Q)$(MAKE) $(build)=$(ARCH_DIR)/sys-$(SUBARCH) $@ 153 154define filechk_gen-asm-offsets 155 (set -e; \ 156 echo "/*"; \ 157 echo " * DO NOT MODIFY."; \ 158 echo " *"; \ 159 echo " * This file was generated by arch/$(ARCH)/Makefile"; \ 160 echo " *"; \ 161 echo " */"; \ 162 echo ""; \ 163 sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \ 164 echo ""; ) 165endef 166 167$(ARCH_DIR)/include/shared/user_constants.h: $(ARCH_DIR)/sys-$(SUBARCH)/user-offsets.s 168 $(call filechk,gen-asm-offsets) 169 170$(ARCH_DIR)/include/shared/kern_constants.h: $(objtree)/$(ARCH_DIR)/include/shared 171 @echo ' SYMLINK $@' 172 $(Q)ln -sf ../../../../include/asm/asm-offsets.h $@ 173 174export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS HEADER_ARCH DEV_NULL_PATH 175