Blame view

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