mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 08:44:21 +08:00
abbf1590de
Partition the header include path flags into two sets, one for kernelspace builds and one for userspace builds. Add the following directories to build after the ordinary include directories so that #include will pick up the UAPI header directly if the kernel header has been moved there. The userspace set (represented by the USERINCLUDE make variable) contains: -I $(srctree)/arch/$(hdr-arch)/include/uapi -I arch/$(hdr-arch)/include/generated/uapi -I $(srctree)/include/uapi -I include/generated/uapi -include $(srctree)/include/linux/kconfig.h and the kernelspace set (represented by the LINUXINCLUDE make variable) contains: -I $(srctree)/arch/$(hdr-arch)/include -I arch/$(hdr-arch)/include/generated -I $(srctree)/include -I include --- if not building in the source tree plus everything in the USERINCLUDE set. Then use USERINCLUDE in building the x86 boot code. Signed-off-by: David Howells <dhowells@redhat.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Acked-by: Dave Jones <davej@redhat.com>
159 lines
4.8 KiB
Makefile
159 lines
4.8 KiB
Makefile
#
|
|
# 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
|
|
#
|
|
|
|
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)
|
|
|
|
# Additional ARCH settings for x86
|
|
ifeq ($(SUBARCH),i386)
|
|
HEADER_ARCH := x86
|
|
endif
|
|
ifeq ($(SUBARCH),x86_64)
|
|
HEADER_ARCH := x86
|
|
KBUILD_CFLAGS += -mcmodel=large
|
|
endif
|
|
|
|
HOST_DIR := arch/$(HEADER_ARCH)
|
|
|
|
include $(srctree)/$(ARCH_DIR)/Makefile-skas
|
|
include $(srctree)/$(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.
|
|
#
|
|
# These apply to USER_CFLAGS to.
|
|
|
|
KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ \
|
|
$(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \
|
|
-Din6addr_loopback=kernel_in6addr_loopback \
|
|
-Din6addr_any=kernel_in6addr_any -Dstrrchr=kernel_strrchr
|
|
|
|
KBUILD_AFLAGS += $(ARCH_INCLUDE)
|
|
|
|
USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -D__KERNEL__,,\
|
|
$(patsubst -I%,,$(KBUILD_CFLAGS)))) $(ARCH_INCLUDE) $(MODE_INCLUDE) \
|
|
$(filter -I%,$(CFLAGS)) -D_FILE_OFFSET_BITS=64 -idirafter include
|
|
|
|
#This will adjust *FLAGS accordingly to the platform.
|
|
include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS)
|
|
|
|
KBUILD_CPPFLAGS += -I$(srctree)/$(HOST_DIR)/include \
|
|
-I$(srctree)/$(HOST_DIR)/include/uapi \
|
|
-I$(HOST_DIR)/include/generated \
|
|
-I$(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) -C '$(srctree)' KBUILD_SRC= \
|
|
ARCH=$(HEADER_ARCH) O='$(objtree)' archheaders
|
|
|
|
archprepare: include/generated/user_constants.h
|
|
|
|
LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
|
|
LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib
|
|
|
|
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
|