linux/arch/um/Makefile
<<
>>
Prefs
   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
   9# select defconfig based on actual architecture
  10ifeq ($(SUBARCH),x86)
  11  ifeq ($(shell uname -m),x86_64)
  12        KBUILD_DEFCONFIG := x86_64_defconfig
  13  else
  14        KBUILD_DEFCONFIG := i386_defconfig
  15  endif
  16else
  17        KBUILD_DEFCONFIG := $(SUBARCH)_defconfig
  18endif
  19
  20ARCH_DIR := arch/um
  21OS := $(shell uname -s)
  22# We require bash because the vmlinux link and loader script cpp use bash
  23# features.
  24SHELL := /bin/bash
  25
  26core-y                  += $(ARCH_DIR)/kernel/          \
  27                           $(ARCH_DIR)/drivers/         \
  28                           $(ARCH_DIR)/os-$(OS)/
  29
  30MODE_INCLUDE    += -I$(srctree)/$(ARCH_DIR)/include/shared/skas
  31
  32HEADER_ARCH     := $(SUBARCH)
  33
  34ifneq ($(filter $(SUBARCH),x86 x86_64 i386),)
  35        HEADER_ARCH := x86
  36endif
  37
  38ifdef CONFIG_64BIT
  39        KBUILD_CFLAGS += -mcmodel=large
  40endif
  41
  42HOST_DIR := arch/$(HEADER_ARCH)
  43
  44include $(ARCH_DIR)/Makefile-skas
  45include $(HOST_DIR)/Makefile.um
  46
  47core-y += $(HOST_DIR)/um/
  48
  49SHARED_HEADERS  := $(ARCH_DIR)/include/shared
  50ARCH_INCLUDE    := -I$(srctree)/$(SHARED_HEADERS)
  51ARCH_INCLUDE    += -I$(srctree)/$(HOST_DIR)/um/shared
  52KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/um
  53
  54# -Dvmap=kernel_vmap prevents anything from referencing the libpcap.o symbol so
  55# named - it's a common symbol in libpcap, so we get a binary which crashes.
  56#
  57# Same things for in6addr_loopback and mktime - found in libc. For these two we
  58# only get link-time error, luckily.
  59#
  60# -Dlongjmp=kernel_longjmp prevents anything from referencing the libpthread.a
  61# embedded copy of longjmp, same thing for setjmp.
  62#
  63# These apply to USER_CFLAGS to.
  64
  65KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ \
  66        $(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap      \
  67        -Dlongjmp=kernel_longjmp -Dsetjmp=kernel_setjmp \
  68        -Din6addr_loopback=kernel_in6addr_loopback \
  69        -Din6addr_any=kernel_in6addr_any -Dstrrchr=kernel_strrchr
  70
  71KBUILD_AFLAGS += $(ARCH_INCLUDE)
  72
  73USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -I%,,$(KBUILD_CFLAGS))) \
  74                $(ARCH_INCLUDE) $(MODE_INCLUDE) $(filter -I%,$(CFLAGS)) \
  75                -D_FILE_OFFSET_BITS=64 -idirafter $(srctree)/include \
  76                -idirafter $(objtree)/include -D__KERNEL__ -D__UM_HOST__
  77
  78#This will adjust *FLAGS accordingly to the platform.
  79include $(ARCH_DIR)/Makefile-os-$(OS)
  80
  81KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/include \
  82                   -I$(srctree)/$(HOST_DIR)/include/uapi \
  83                   -I$(objtree)/$(HOST_DIR)/include/generated \
  84                   -I$(objtree)/$(HOST_DIR)/include/generated/uapi
  85
  86# -Derrno=kernel_errno - This turns all kernel references to errno into
  87# kernel_errno to separate them from the libc errno.  This allows -fno-common
  88# in KBUILD_CFLAGS.  Otherwise, it would cause ld to complain about the two different
  89# errnos.
  90# These apply to kernelspace only.
  91#
  92# strip leading and trailing whitespace to make the USER_CFLAGS removal of these
  93# defines more robust
  94
  95KERNEL_DEFINES = $(strip -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \
  96                         -Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES))
  97KBUILD_CFLAGS += $(KERNEL_DEFINES)
  98
  99PHONY += linux
 100
 101all: linux
 102
 103linux: vmlinux
 104        @echo '  LINK $@'
 105        $(Q)ln -f $< $@
 106
 107define archhelp
 108  echo '* linux         - Binary kernel image (./linux) - for backward'
 109  echo '                   compatibility only, this creates a hard link to the'
 110  echo '                   real kernel binary, the "vmlinux" binary you'
 111  echo '                   find in the kernel root.'
 112endef
 113
 114archheaders:
 115        $(Q)$(MAKE) -f $(srctree)/Makefile ARCH=$(HEADER_ARCH) asm-generic archheaders
 116
 117archprepare:
 118        $(Q)$(MAKE) $(build)=$(HOST_DIR)/um include/generated/user_constants.h
 119
 120LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
 121LINK-$(CONFIG_LD_SCRIPT_DYN) += $(call cc-option, -no-pie)
 122LINK-$(CONFIG_LD_SCRIPT_DYN_RPATH) += -Wl,-rpath,/lib
 123
 124CFLAGS_NO_HARDENING := $(call cc-option, -fno-PIC,) $(call cc-option, -fno-pic,) \
 125        -fno-stack-protector $(call cc-option, -fno-stack-protector-all)
 126
 127# Options used by linker script
 128export LDS_START      := $(START)
 129export LDS_ELF_ARCH   := $(ELF_ARCH)
 130export LDS_ELF_FORMAT := $(ELF_FORMAT)
 131
 132# The wrappers will select whether using "malloc" or the kernel allocator.
 133LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc
 134
 135LD_FLAGS_CMDLINE = $(foreach opt,$(KBUILD_LDFLAGS),-Wl,$(opt))
 136
 137# Used by link-vmlinux.sh which has special support for um link
 138export CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) $(LD_FLAGS_CMDLINE)
 139
 140# When cleaning we don't include .config, so we don't include
 141# TT or skas makefiles and don't clean skas_ptregs.h.
 142CLEAN_FILES += linux x.i gmon.out
 143MRPROPER_FILES += arch/$(SUBARCH)/include/generated
 144
 145archclean:
 146        @find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
 147                -o -name '*.gcov' \) -type f -print | xargs rm -f
 148
 149export HEADER_ARCH SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS DEV_NULL_PATH
 150